TSP-SA_TSP

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

Supongo que te gusta

Origin www.cnblogs.com/free-1122/p/12722388.html
Recomendado
Clasificación