시뮬레이션 된 어닐링 알고리즘에 기반한 출장 세일즈맨 TSP 문제 [Matlab Issue 136] [경로 계획 21]

1. 소개

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

여기에 사진 설명 삽입
여행하는 세일즈맨 문제인 TSP 문제 (Travelling Salesman Problem)도 여행하는 세일즈맨 문제와 세일즈맨 문제로 번역되어 수학 분야에서 유명한 문제 중 하나입니다. 여행하는 상인이 n 개 도시를 방문하고 싶다고 가정하면 가고 싶은 길을 선택해야한다. 경로의 제한은 각 도시는 한 번만 방문 할 수 있고 결국 원래 도시로 돌아 가야한다는 것이다. 경로 선택 목표는 필요한 경로 거리가 모든 경로 중에서 가장 작은 값이라는 것입니다.
지금까지 이러한 문제 중 어느 것도 효과적인 알고리즘을 찾지 못했습니다. 나는 NP- 완전 문제 (NP-Complet 또는 NPC)와 NP-hard 문제 (NP-Hard 또는 NPH)가 효과적인 알고리즘을 가지고 있지 않다는 추측을 받아들이는 경향이 있습니다. 정확한 알고리즘과 이러한 문제에 대해 찾아야합니다. 효과적인 근사 알고리즘.
TSP "Traveling Salesman Problem"의 응용 분야에는 혼잡을 줄이기 위해 가장 합리적이고 효율적인 도로 교통을 계획하는 방법, 운영 비용을 줄이기위한 물류 계획을 개선하는 방법, 더 나은 정보를 얻기 위해 인터넷 환경에서 노드를 더 잘 설정하는 방법이 포함됩니다. 흐름 등.

둘째, 소스 코드

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 거리 .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 ;

세, 작동 효과

3.1 테스트
3.1.1 데이터

[ 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 효과

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

여기에 사진 설명 삽입
3.2 테스트 2
3.2.1 데이터

[ 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 효과

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

여기에 사진 설명 삽입
참고 : 전체 코드 또는 작성을 위해 QQ1564658423을 추가하십시오.
과거 리뷰 >>>>>>
[Matlab 015] [경로 계획 1] 입자 떼 matlab 소스 코드를 기반으로 한 3D UAV 경로 계획
[Matlab 017] [경로 계획 2] 유전 알고리즘을 사용하여 다중 물류 센터 개소 준비 -Style 차량 경로 문제 Matlab 프로그램
[Matlab 018] [경로 계획 3] 입자 떼를 기반으로 한 로봇 그리드 경로 계획
[Matlab 019] [경로 계획 4] 최단 경로를 해결하기위한 Ant 식민지 알고리즘 matlab
[Matlab 020] [경로 계획 5] Matlab 물류 센터 위치 문제에 대한 면역 알고리즘
[Matlab 021] [경로 계획 6] 인공 벌집 락 기반 드론의 3 차원 경로 계획
[Matlab 027] [경로 계획 7] 그리드 맵 유전 알고리즘 기반 로봇 최적 경로 계획
[Matlab 034 기간] [경로 계획 8]
로봇 최적 경로 계획을위한 그리드 맵 유전 알고리즘 기반 개미 식민지 기반 다중 UAV 공격 스케줄링 [Matlab 022 기간] [경로 계획 9]
다중 UAV 협력 표적 할당 모델링 및 유전 알고리즘 솔루션 할당 순서 고려 [Matlab 110] [경로 계획 10]
다중 센터 vrp 문제 matlab을위한 Ant colony 알고리즘 [Matlab 111] [경로 계획 11]
ant colony 알고리즘 기반 time windows matlab으로 다기관 VRP 문제 해결 [Matlab 112] [경로 계획 12]
개미 집락 알고리즘 기반으로 시간 창을 이용한 다기관 VRP 문제 해결 matlab [Matlab 113] [경로 계획 13]
유전 알고리즘 기반의 다기관 VRP 솔루션 matlab 【Matlab 114】 【경로 계획 14】
VRP 문제를 해결하기위한 시뮬레이션 어닐링 matlab [Matlab 115] [경로 계획 15]
별 기반 그리드 경로 계획 [Matlab 116] [경로 계획 16]
교차 요인을 사용한 양방향 최적화 입자 군집 그리드 맵 경로 계획 [Matlab 117] [ 경로 계획 17]
[TSP] TSP 문제 해결을위한 개미 식민지 알고리즘 GUI로 MATLAB [Matlab 118] [경로 계획 18]
개미 식민지 알고리즘 기반 그리드 맵 경로 계획 MATLAB [Matlab 119] [경로 계획 19]
여행하는 세일즈맨 TSP 문제 기반 유전 알고리즘에 관한 연구 [Matlab Issue 135] [경로 계획 20]

추천

출처blog.csdn.net/TIQCmatlab/article/details/112857129