clc;
claro;
cierra todo;
%%
tic
T0 = 1000;% temperatura inicial
Tendencia = 1e-20;% temperatura final
L = 500;% Número de iteraciones a cada temperatura (longitud de la cadena)
q = 0.9;% tasa de enfriamiento
%% Cargar datos
carga matlab1;
X = A;
%%
D = Distanse (X);% Calcular matriz de distancia
N = tamaño (D, 1);% el número de ciudades
%% solución inicial
S1 = randperm (N);% genera aleatoriamente una ruta inicial
%% Dibuja un diagrama de ruta de soluciones aleatorias
DrawPath (S1, X)
pausa (0.0001)
%% salida ruta de solución aleatoria y distancia total
disp ('Un valor aleatorio en la población inicial:')
OutputPath (S1);
Longitud = PathLength (D, S1);
disp (['Distancia total:', num2str (Rlength)]);
%% Calcular el número de iteraciones Tiempo
Tiempo = ceil (double (solve (['1000 * (0.9) ^ x =', num2str (Tend)])));
cuenta = 0;% cuenta de iteraciones
Obj = ceros (Tiempo, 1);% inicialización de matriz de valor objetivo
track = ceros (Tiempo, N);% de inicialización de matriz de ruta óptima por generación
%% iteración
mientras T0> tiende
cuenta = cuenta + 1;% de iteraciones de actualización
temp = ceros (L, N + 1);
para k = 1: L
%% genera una nueva solución
S2 = Nueva Respuesta (S1);
La regla %% Metropolis determina si se aceptan nuevas soluciones
[S1, R] = Metrópolis (S1, S2, D, T0);% Algoritmo de muestreo de metrópolis
temp (k, :) = [S1 R];% registra la siguiente ruta y su distancia
final
%% Registre la ruta óptima para cada iteración
[d0, index] = min (temp (:, end));% Encuentra la ruta óptima a la temperatura actual
si cuenta == 1 || d0 <Obj (cuenta-1)
Obj (cuenta) = d0;% Si la distancia óptima a la temperatura actual es menor que la distancia anterior, registre la distancia actual
más
Obj (cuenta) = Obj (cuenta-1);% Si la distancia óptima a la temperatura actual es mayor que la distancia anterior, registre la última distancia
final
track (count, :) = temp (index, 1: end-1);% registra la ruta óptima de la temperatura actual
T0 = q * T0;% de enfriamiento
fprintf (1, '% d \ n', cuenta)% de salida número de iteración actual
final
Diagrama de iteración del proceso de optimización %%
figura
trama (1: cuenta, Obj)
xlabel ('Número de iteraciones')
ylabel ('distancia')
título ('Proceso de optimización')
%% Mapa de ruta de solución óptima
DrawPath (pista (final, :), X)
%% Ruta y distancia total para obtener la solución óptima
disp ('Solución óptima:')
S = pista (final, :);
p = Ruta de salida (S);
disp (['Distancia total:', num2str (PathLength (D, S))]);
disp (----------------------------------------------- -------------- ')
M = ceros (N, 3);
% X (S (2),:, :)
para i = 1: N
M (i,:,:) = X (S (i),:, :);
final
C = [M (:,:, :); M (1,:, :)]
scatter3 (X (:, 1), X (:, 2), X (:, 3), 'k', 'ancho de línea', 3)
Espere
plot3 (C (:, 1), C (:, 2), C (:, 3), 'r', 'ancho de línea', 2)
talón