Problema de TSP de vendedor ambulante basado en un algoritmo de recocido simulado [Matlab Issue 136] [Path Planning 21]

1. Introducción

     模拟退火算法是一个有效的求解最优解的算法。模拟退火算法因模仿自然界退火现象而得,利用了物理中固体物质的退火过程与一般优化问题的相似性从某一初始温度开始,伴随温度的不断下降,结合概率突跳特性在解空间中随机寻找全局最优解。

Inserte la descripción de la imagen aquí
El problema del viajante, el problema del TSP (Problema del viajante), también se traduce como el problema del viajante y el problema del vendedor, y es uno de los problemas famosos en el campo de las matemáticas. Suponiendo que un comerciante ambulante quiera visitar n ciudades, debe elegir el camino que quiere tomar. La restricción del camino es que cada ciudad solo se puede visitar una vez, y al final debe regresar a la ciudad original. El objetivo de la selección de ruta es que la distancia de ruta requerida sea el valor más pequeño entre todas las rutas.
Hasta ahora, ninguno de estos problemas ha encontrado un algoritmo eficaz. Tiendo a aceptar la conjetura de que los problemas NP-completos (NP-Complet o NPC) y los problemas NP-difíciles (NP-Hard o NPH) no tienen algoritmos efectivos. Creo que los ejemplos a gran escala de tales problemas no pueden ser resueltos por algoritmos precisos y deben buscarse para tales problemas Algoritmo de aproximación efectivo.
Las áreas de aplicación de TSP "Problema del vendedor ambulante" incluyen: cómo planificar el tráfico por carretera más razonable y eficiente para reducir la congestión; cómo planificar mejor la logística para reducir los costos operativos; cómo configurar mejor los nodos en el entorno de Internet para permitir una mejor información fluir y así sucesivamente.

En segundo lugar, el código fuente

2.1 swap.m

function [ newpath , position ] = swap( oldpath , number )
% 对 oldpath 进 行 互 换 操 作
% number 为 产 生 的 新 路 径 的 个 数
% position 为 对 应 newpath 互 换 的 位 置
m = length( oldpath ) ; % 城 市 的 个 数
newpath = zeros( number , m ) ;
position = sort( randi( m , number , 2 ) , 2 ); % 随 机 产 生 交 换 的 位 置
for i = 1 : number
newpath( i , : ) = oldpath ;
% 交 换 路 径 中 选 中 的 城 市
newpath( i , position( i , 1 ) ) = oldpath( position( i , 2 ) ) ;
newpath( i , position( i , 2 ) ) = oldpath( position( i , 1 ) ) ;
end

2.2 pathfare.m

function [ objval ] = pathfare( fare , path )
% 计 算 路 径 path 的 代 价 objval
% path 为 1 到 n 的 排 列 ,代 表 城 市 的 访 问 顺 序 ;
% fare 为 代 价 矩 阵 , 且 为 方 阵 。
[ m , n ] = size( path ) ;
objval = zeros( 1 , m ) ;
for i = 1 : m
for j = 2 : n
objval( i ) = objval( i ) + fare( path( i , j - 1 ) , path( i , j ) ) ;
end
objval( i ) = objval( i ) + fare( path( i , n ) , path( i , 1 ) ) ;
end

2.3 distancia.m

function [ fare ] = distance( coord )
% 根 据 各 城 市 的 距 离 坐 标 求 相 互 之 间 的 距 离
% fare 为 各 城 市 的 距 离 , coord 为 各 城 市 的 坐 标
[ v , m ] = size( coord ) ; % m 为 城 市 的 个 数
fare = zeros( m ) ;
for i = 1 : m % 外 层 为 行
for j = i : m % 内 层 为 列
fare( i , j ) = ( sum( ( coord( : , i ) - coord( : , j ) ) .^ 2 ) ) ^ 0.5 ;
fare( j , i ) = fare( i , j ) ; % 距 离 矩 阵 对 称
end
end

2.4 myplot.m

function [ ] = myplot( path , coord , pathfar )
% 做 出 路 径 的 图 形
% path 为 要 做 图 的 路 径 ,coord 为 各 个 城 市 的 坐 标
% pathfar 为 路 径 path 对 应 的 费 用
len = length( path ) ;
clf ;
hold on ;
title( [ '近似最短路径如下,路程为' , num2str( pathfar ) ] ) ;
plot( coord( 1 , : ) , coord( 2 , : ) , 'ok');
pause( 0.1 ) ;
for ii = 2 : len
plot( coord( 1 , path( [ ii - 1 , ii ] ) ) , coord( 2 , path( [ ii - 1 , ii ] ) ) , '-b');
x = sum( coord( 1 , path( [ ii - 1 , ii ] ) ) ) / 2 ;
y = sum( coord( 2 , path( [ ii - 1 , ii ] ) ) ) / 2 ;
text( x , y , [ '(' , num2str( ii - 1 ) , ')' ] ) ;
pause( 0.4 ) ;
end
plot( coord( 1 , path( [ 1 , len ] ) ) , coord( 2 , path( [ 1 , len ] ) ) , '-b' ) ;
x = sum( coord( 1 , path( [ 1 , len ] ) ) ) / 2 ;
y = sum( coord( 2 , path( [ 1 , len ] ) ) ) / 2 ;
text( x , y , [ '(' , num2str( len ) , ')' ] ) ;
pause( 0.4 ) ;
hold off ;

Tres, efecto de operación

3.1 Prueba uno
3.1.1 Datos

[ 0.6683 0.6195 0.4    0.2439 0.1707 0.2293 0.5171 0.8732 0.6878 0.8488 ; ...
  0.2536 0.2634 0.4439 0.1463 0.2293 0.761  0.9414 0.6536 0.5219 0.3609 ] ;

3.1.2 Efecto

run(‘D:\0COCO\Sys\Documents\MATLAB\tsp\main.m’)
请输入城市的坐标
Coord=[ 0.6683 0.6195 0.4 0.2439 0.1707 0.2293 0.5171 0.8732 0.6878 0.8488 ;0.2536 0.2634 0.4439 0.1463 0.2293 0.761 0.9414 0.6536 0.5219 0.3609 ] ;
近似最优路径为:7 8 10 9 3 5 4 1 2 6
近似最优路径路程 pathfare= 3.1617

Inserte la descripción de la imagen aquí
3.2 Prueba dos
3.2.1 Datos

[ 66.83 61.95 40    24.39 17.07 22.93 51.71 87.32 68.78 84.88 50 40 25 ; 
  25.36 26.34 44.39 14.63 22.93 76.1  94.14 65.36 52.19 36.09 30 20 26] ;

3.2.2 Efecto

run(‘D:\0COCO\Sys\Documents\MATLAB\tsp\main.m’)
请输入城市的坐标
Coord=[ 66.83 61.95 40 24.39 17.07 22.93 51.71 87.32 68.78 84.88 50 40 25 ;
25.36 26.34 44.39 14.63 22.93 76.1 94.14 65.36 52.19 36.09 30 20 26] ;
近似最优路径为:1 11 13 4 5 6 7 8 10 9 3 12 2
近似最优路径路程 pathfare= 332.6469

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]
Vendedor ambulante TSP Basado en problemas sobre algoritmo genético [Matlab Issue 135] [Path Planning 20]

Supongo que te gusta

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