[Problema de TSP] Solución del problema de TSP basado en el algoritmo de luciérnaga [Matlab Issue 141] [Path Planning 24]

1. Antecedentes

Definición del problema: Problema del viajante ambulante
Dado un conjunto de n ciudades y la distancia directa entre ellas, encuentre un viaje cerrado de modo que cada ciudad pase una vez y la distancia total de viaje sea la más corta.
El problema de TSP, también conocido como el problema de la carga del vendedor, es un problema antiguo. Se remonta a la cuestión del viaje de los caballeros planteada por Euler en 1759. En 1948, promovido por la American RAND Corporation, TSP se convirtió en un problema típico en el campo de la optimización de la cartera moderna.
TSP es un problema de optimización combinatoria con una amplia experiencia en aplicaciones y un valor teórico importante. En los últimos años, se han introducido continuamente muchos algoritmos más efectivos para resolver este problema, como el método de red neuronal de Hopfield, el método de recocido simulado y el método de algoritmo genético.
El espacio de búsqueda de TSP aumenta a medida que aumenta el número de ciudades n, y el número de combinaciones de todas las rutas de viaje es (n-1)! / 2. Para encontrar la solución óptima en un espacio de búsqueda tan grande, existen muchas dificultades de cálculo para los métodos convencionales y las herramientas de cálculo existentes. Es una idea natural resolver el problema de TSP con la ayuda de la capacidad de búsqueda del algoritmo genético.

2. Resumen

El algoritmo Firefly es un algoritmo heurístico inspirado en el comportamiento parpadeante de las luciérnagas. El propósito principal del destello de luciérnagas es actuar como un sistema de señales para atraer a otras luciérnagas.
La hipótesis es: las
luciérnagas son neutrales al género, por lo que una luciérnaga atraerá a todas las demás; la atracción es proporcional a su brillo. Para dos luciérnagas cualesquiera, las luciérnagas menos brillantes se atraen y, por lo tanto, se mueven hacia la más brillante. Sin embargo, una, el brillo disminuye a medida que aumenta su distancia; si no hay luciérnaga más brillante que una luciérnaga dada, se moverá al azar. El brillo debe estar relacionado con la función objetivo. El algoritmo Firefly es un algoritmo de optimización heurístico inspirado en la naturaleza.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Tres, código fuente

clear;
clc;
close all;
X=[16.47,96.10
    16.47,94.44
    20.09,92.54
    22.39,93.37
    25.23,97.24
    22.00,96.05
    20.47,97.02
    17.20,96.29
    16.30,97.38
    14.05,98.12
    16.53,97.38
    21.52,95.59
    19.41,97.13
    20.09,92.55];
R=11;
MAXGEN=200;
NIND=100;
D=Distanse(X);
N=size(D,1);
%%初始化种群
Chrom=InitPop(NIND,N);
%%在二维图上画出所有坐标点
figure
plot(X(:,1),X(:,2),'o');
%%画出随机解的路线图
DrawPath(Chrom(1,:),X);
pause(0.0001)
%%输出随机解的路线和总距离
disp('初始种群中的一个随机解:')
OutputPath(Chrom(1,:));
Rlength=PathLength(D,Chrom(1,:));
disp(['总距离:',num2str(Rlength)]);
disp('-------------------------------------------------------------------------------------------------')
%%优化
gen=0;
figure;
hold on;box on
xlim([0,MAXGEN])
title('优化过程')
xlabel('代数')
ylabel('最优值')
ObjV=PathLength(D,Chrom);                           %计算路线长度title('优化过程')xlable('代数')ylable('最优值')
preObjV=min(ObjV);
while gen<MAXGEN
    %%计算适应度
    ObjV=PathLength(D,Chrom);                        %计算路线长度
    %fprintf('%d    %1.10f\n',gen,min(ObjV))
    line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001)
    preObjV=min(ObjV);
    FitnV=Fitness(ObjV);
    for i=1:NIND
        K=0;
        subject=zeros(NIND,N);
        for j=1:i-1
            dij=ristanse(Chrom(i,:),Chrom(j,:));
            if dij<=R
                K=K+1;
                subject(K,:)=Chrom(j,:);
            end
        end
        for j=i+1:NIND
            dij=ristanse(Chrom(i,:),Chrom(j,:));
             if dij<=R
                K=K+1;
                subject(K,:)=Chrom(j,:);
             end
        end
        if K==0
        subject1=zeros(1,N);
        else subject1=zeros(K,N);
        end
 
        end
        end
    end
     gen=gen+1;
end
%%画出最优解的路线图
ObjV=PathLength(D,Chrom);
[minObjV,minInd]=min(ObjV);
DrawPath(Chrom(minInd(1),:),X)
%%输出最优解的路线和总距离
disp('最优解')
p=OutputPath(Chrom(minInd(1),:));
disp(['总距离:',num2str(ObjV(minInd(1)))]);
disp('-------------------------------------------------------------------')

Cuatro, efecto de operación

Inserte la descripción de la imagen aquí
Nota: agregue QQ1564658423 para completar el código o la escritura.
Revisión anterior >>>>>>
[Matlab 015] [Planificación de ruta 1] Planificación de ruta de UAV 3D basada en el código fuente de
Matlab de enjambre de partículas [Matlab 017] [Planificación de ruta 2] Uso de algoritmos genéticos para preparar la apertura de múltiples centros logísticos -Estilo problema de enrutamiento de vehículos Programa Matlab
[Matlab 018] [Planificación de ruta 3] Planificación de ruta de cuadrícula de robot basada en enjambres de partículas
[Matlab 019] [Planificación de ruta 4] Algoritmo de colonia de hormigas para resolver la ruta más corta matlab
[Matlab 020] [Planificación de ruta 5] Matlab algoritmo inmune para el problema de ubicación del centro logístico
[Matlab 021] [Planificación de ruta 6] Planificación de ruta tridimensional de drones basada en colonia de abejas artificiales
[Matlab 027] [Planificación de ruta 7] Basado en mapa de cuadrícula-algoritmo genético Planificación de ruta óptima de robot
[Matlab Período 034] [Planificación de ruta 8] Programación de ataques multi-UAV
basada en colonias de hormigas basada en algoritmo genético de mapa de cuadrícula para planificación de ruta óptima de robot [Período Matlab 022] [Planificación de ruta 9]
Solución de algoritmo genético y modelado cooperativo de asignación de objetivos multi-UAV considerando el orden de asignación [Matlab 110] [Planificación de ruta 10]
Algoritmo de colonia de hormigas para el problema de vrp multicéntrico matlab [Matlab 111] [Planificación de ruta 11]
Basado en el algoritmo de colonia de hormigas Resolviendo el problema de VRP multicéntrico con ventanas de tiempo matlab [Matlab 112] [Planificación de ruta 12]
Basado en el algoritmo de colonia de hormigas para resolver problemas de VRP multicéntricos con ventana de tiempo matlab [Matlab 113] [Planificación de ruta 13]
Multicéntrico basado en algoritmo genético Solución VRP matlab 【Matlab 114】 【Planificación de ruta 14】
Recocido simulado para resolver el problema de VRP matlab [Matlab 115] [Planificación de ruta 15]
Planificación de ruta de cuadrícula basada en estrellas [Matlab 116] [Planificación de ruta 16]
Planificación de ruta de mapa de cuadrícula de enjambre de partículas de optimización bidireccional con factores cruzados [Matlab 117] [ Planificación de ruta 17]
[TSP] Algoritmo de colonia de hormigas para resolver problemas de TSP matlab con GUI [Matlab 118] [Planificación de ruta 18]
Basado en el algoritmo de colonia de hormigas mapa de cuadrícula planificación de ruta matlab [Matlab 119] [Planificación de ruta 19]
Problema de TSP del viajante de comercio basado en algoritmo genético [Matlab 135] [Planificación de ruta 20]
Problema de TSP del viajante de comercio basado en algoritmo de recocido simulado [Matlab 136] [Planificación de ruta 21]
Planificación de ruta de automóvil inteligente basada en algoritmo de colonia de hormigas [Matlab Issue 137] [Planificación de ruta 22 ]
Copa Huawei: uso óptimo de vehículos aéreos no tripulados en el socorro en casos de emergencia y desastres [Matlab Issue 138] [Path Planning 23]

Supongo que te gusta

Origin blog.csdn.net/TIQCmatlab/article/details/112799340
Recomendado
Clasificación