跪求用dijkstra算法解决TSP多旅行商问题的MATLAB程序! 关于TSP求最佳路径问题的Matlab程序

\u591a\u65c5\u884c\u5546\u95ee\u9898matlab\u7a0b\u5e8f

[code]function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)
%%=========================================================================
%% ACATSP.m
%% Ant Colony Algorithm for Traveling Salesman Problem
%% ChengAihua,PLA Information Engineering University,ZhengZhou,China
%% Email:[email protected]
%% All rights reserved
%%-------------------------------------------------------------------------
%% \u4e3b\u8981\u7b26\u53f7\u8bf4\u660e
%% C n\u4e2a\u57ce\u5e02\u7684\u5750\u6807\uff0cn\u00d72\u7684\u77e9\u9635
%% NC_max \u6700\u5927\u8fed\u4ee3\u6b21\u6570
%% m \u8682\u8681\u4e2a\u6570
%% Alpha \u8868\u5f81\u4fe1\u606f\u7d20\u91cd\u8981\u7a0b\u5ea6\u7684\u53c2\u6570
%% Beta \u8868\u5f81\u542f\u53d1\u5f0f\u56e0\u5b50\u91cd\u8981\u7a0b\u5ea6\u7684\u53c2\u6570
%% Rho \u4fe1\u606f\u7d20\u84b8\u53d1\u7cfb\u6570
%% Q \u4fe1\u606f\u7d20\u589e\u52a0\u5f3a\u5ea6\u7cfb\u6570
%% R_best \u5404\u4ee3\u6700\u4f73\u8def\u7ebf
%% L_best \u5404\u4ee3\u6700\u4f73\u8def\u7ebf\u7684\u957f\u5ea6
%%=========================================================================

%%\u7b2c\u4e00\u6b65\uff1a\u53d8\u91cf\u521d\u59cb\u5316
n=size(C,1);%n\u8868\u793a\u95ee\u9898\u7684\u89c4\u6a21\uff08\u57ce\u5e02\u4e2a\u6570\uff09
D=zeros(n,n);%D\u8868\u793a\u5b8c\u5168\u56fe\u7684\u8d4b\u6743\u90bb\u63a5\u77e9\u9635
for i=1:n
for j=1:n
if i~=j
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
else
D(i,j)=eps;
end
D(j,i)=D(i,j);
end
end
Eta=1./D;%Eta\u4e3a\u542f\u53d1\u56e0\u5b50\uff0c\u8fd9\u91cc\u8bbe\u4e3a\u8ddd\u79bb\u7684\u5012\u6570
Tau=ones(n,n);%Tau\u4e3a\u4fe1\u606f\u7d20\u77e9\u9635
Tabu=zeros(m,n);%\u5b58\u50a8\u5e76\u8bb0\u5f55\u8def\u5f84\u7684\u751f\u6210
NC=1;%\u8fed\u4ee3\u8ba1\u6570\u5668
R_best=zeros(NC_max,n);%\u5404\u4ee3\u6700\u4f73\u8def\u7ebf
L_best=inf.*ones(NC_max,1);%\u5404\u4ee3\u6700\u4f73\u8def\u7ebf\u7684\u957f\u5ea6
L_ave=zeros(NC_max,1);%\u5404\u4ee3\u8def\u7ebf\u7684\u5e73\u5747\u957f\u5ea6

while NC<=NC_max%\u505c\u6b62\u6761\u4ef6\u4e4b\u4e00\uff1a\u8fbe\u5230\u6700\u5927\u8fed\u4ee3\u6b21\u6570
%%\u7b2c\u4e8c\u6b65\uff1a\u5c06m\u53ea\u8682\u8681\u653e\u5230n\u4e2a\u57ce\u5e02\u4e0a
Randpos=[];
for i=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))';

%%\u7b2c\u4e09\u6b65\uff1am\u53ea\u8682\u8681\u6309\u6982\u7387\u51fd\u6570\u9009\u62e9\u4e0b\u4e00\u5ea7\u57ce\u5e02\uff0c\u5b8c\u6210\u5404\u81ea\u7684\u5468\u6e38
for j=2:n
for i=1:m
visited=Tabu(i,1:(j-1));%\u5df2\u8bbf\u95ee\u7684\u57ce\u5e02
J=zeros(1,(n-j+1));%\u5f85\u8bbf\u95ee\u7684\u57ce\u5e02
P=J;%\u5f85\u8bbf\u95ee\u57ce\u5e02\u7684\u9009\u62e9\u6982\u7387\u5206\u5e03
Jc=1;
for k=1:n
if length(find(visited==k))==0
J(Jc)=k;
Jc=Jc+1;
end
end
%\u4e0b\u9762\u8ba1\u7b97\u5f85\u9009\u57ce\u5e02\u7684\u6982\u7387\u5206\u5e03
for k=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
%\u6309\u6982\u7387\u539f\u5219\u9009\u53d6\u4e0b\u4e00\u4e2a\u57ce\u5e02
Pcum=cumsum(P);
Select=find(Pcum>=rand);
to_visit=J(Select(1));
Tabu(i,j)=to_visit;
end
end
if NC>=2
Tabu(1,:)=R_best(NC-1,:);
end

%%\u7b2c\u56db\u6b65\uff1a\u8bb0\u5f55\u672c\u6b21\u8fed\u4ee3\u6700\u4f73\u8def\u7ebf
L=zeros(m,1);
for i=1:m
R=Tabu(i,:);
for j=1:(n-1)
L(i)=L(i)+D(R(j),R(j+1));
end
L(i)=L(i)+D(R(1),R(n));
end
L_best(NC)=min(L);
pos=find(L==L_best(NC));
R_best(NC,:)=Tabu(pos(1),:);
L_ave(NC)=mean(L);
NC=NC+1

%%\u7b2c\u4e94\u6b65\uff1a\u66f4\u65b0\u4fe1\u606f\u7d20
Delta_Tau=zeros(n,n);
for i=1:m
for j=1:(n-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho).*Tau+Delta_Tau;

%%\u7b2c\u516d\u6b65\uff1a\u7981\u5fcc\u8868\u6e05\u96f6
Tabu=zeros(m,n);
end

%%\u7b2c\u4e03\u6b65\uff1a\u8f93\u51fa\u7ed3\u679c
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos(1),:)
Shortest_Length=L_best(Pos(1))
subplot(1,2,1)
DrawRoute(C,Shortest_Route)
subplot(1,2,2)
plot(L_best)
hold on
plot(L_ave)

function DrawRoute(C,R)
%%=========================================================================
%% DrawRoute.m
%% \u753b\u8def\u7ebf\u56fe\u7684\u5b50\u51fd\u6570
%%-------------------------------------------------------------------------
%% C Coordinate \u8282\u70b9\u5750\u6807\uff0c\u7531\u4e00\u4e2aN\u00d72\u7684\u77e9\u9635\u5b58\u50a8
%% R Route \u8def\u7ebf
%%=========================================================================

N=length(R);
scatter(C(:,1),C(:,2));
hold on
plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)])
hold on
for ii=2:N
plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)])
hold on
end

\u8bbe\u7f6e\u521d\u59cb\u53c2\u6570\u5982\u4e0b\uff1a
m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;
31\u57ce\u5e02\u5750\u6807\u4e3a\uff1a
1304 2312
3639 1315
4177 2244
3712 1399
3488 1535
3326 1556
3238 1229
4196 1004
4312 790
4386 570
3007 1970
2562 1756
2788 1491
2381 1676
1332 695
3715 1678
3918 2179
4061 2370
3780 2212
3676 2578
4029 2838
4263 2931
3429 1908
3507 2367
3394 2643
3439 3201
2935 3240
3140 3550
2545 2357
2778 2826
2370 2975[/code]

\u8fd0\u884c\u540e\u5f97\u523015602\u7684\u5de1\u6e38\u8def\u5f84\uff0c\u8def\u7ebf\u56fe\u548c\u6536\u655b\u66f2\u7ebf\u5982\u4e0b\uff1a

\u6211\u89c9\u5f97\u4f60 i=1;\u8fd9\u6837\u5e76\u6ca1\u6709\u8df3\u51fa\u5faa\u73af\u3002i=1\u540e\u52a0\u4e2anext\u8bd5\u8bd5\u770b

dijkstra算法是用来求任意两点间的最短路径。他求出的路径并不是欧拉回路,不满足TSP的要求

觉得这个问题似乎不能这样解决

TSP问题不能用dijkstra解决.这是一个NP难问题,不存在多项式算法.

  • 姹傛渶鐭矾寰勭殑dijkstra绠楁硶
    绛旓細Dijkstra绠楁硶涓鑸殑琛ㄨ堪閫氬父鏈変袱绉嶆柟寮,涓绉嶇敤姘镐箙鍜屼复鏃舵爣鍙锋柟寮,涓绉嶆槸鐢∣PEN,CLOSE琛ㄧ殑鏂瑰紡,杩欓噷鍧閲囩敤姘镐箙鍜屼复鏃舵爣鍙风殑鏂瑰紡銆傛敞鎰忚绠楁硶瑕佹眰鍥句腑涓嶅瓨鍦ㄨ礋鏉冭竟銆 灏員涓《鐐规寜閫掑鐨勬搴忓姞鍏ュ埌S涓,淇濊瘉:浠庢簮鐐筕0鍒癝涓叾浠栧悇椤剁偣鐨勯暱搴﹂兘涓嶅ぇ浜庝粠V0鍒癟涓换浣曢《鐐圭殑鏈鐭矾寰勯暱搴︺傛瘡涓《鐐瑰搴斾竴涓窛绂诲笺 S...
  • 鐢―ijkstra绠楁硶姹傚浘涓粠椤剁偣a鍒板叾浠栧悇椤剁偣闂寸殑鏈鐭矾寰,骞跺啓鍑烘墽琛岀畻 ...
    绛旓細杩厠鏂姞锛Dijkstra锛夌畻娉(鏈鐭矾寰勭畻娉)鏄敱鑽峰叞璁$畻鏈虹瀛﹀鑹惧吂鏍悸疯开绉戞柉褰诲彂鐜扮殑銆绠楁硶瑙e喅鐨勬槸鏈夊悜鍥句腑浠绘剰涓や釜椤剁偣涔嬮棿鐨勬渶鐭矾寰勯棶棰樸備妇渚嬫潵璇达紝濡傛灉鍥句腑鐨勯《鐐硅〃绀哄煄甯傦紝鑰岃竟涓婄殑鏉冮噸琛ㄧず钁楀煄甯傞棿寮杞﹁缁忕殑璺濈銆 杩鏂交绠楁硶鍙互鐢ㄦ潵鎵惧埌涓や釜鍩庡競涔嬮棿鐨勬渶鐭矾寰勩傝开绉戞柉褰荤畻娉曠殑杈撳叆鍖呭惈浜嗕竴...
  • 鏈鐭矾寰绠楁硶(Dijkstra)
    绛旓細Dijkstra锛 杩鏂壒鎷 锛夌畻娉曟槸鐢ㄦ潵瑙e喅鍗曟簮鏈鐭矾寰勭殑绠楁硶锛岃姹傝矾寰勬潈鍊奸潪璐熸暟銆傝绠楁硶鍒╃敤浜嗘繁搴︿紭鍏堟悳绱㈠拰璐績鐨勭畻娉曘備笅闈㈡槸涓涓湁鏉冨浘锛屾眰浠嶢鍒板悇涓妭鐐圭殑鏈鐭矾寰勩傜1姝ワ細浠嶢鐐瑰嚭鍙戯紝鍒ゆ柇姣忎釜鐐瑰埌A鐐圭殑璺緞锛堝鏋滆鐐逛笉鑳界洿杩濧鐐瑰垯璺濈鍊间负鏃犵┓澶э紝濡傛灉璇ョ偣鑳藉拰A鐩磋繛鍒欐槸褰撳墠鐨勬潈鍊硷級锛岃...
  • Dijkstra绠楁硶姹傚崟婧愭渶鐭矾
    绛旓細绗竴琛屽寘鍚暣鏁 n 鍜 m 銆傛帴涓嬫潵 m 琛屾瘡琛屽寘鍚笁涓暣鏁 x , y , z 锛岃〃绀哄瓨鍦ㄤ竴鏉′粠鐐 x 鍒扮偣 y 鐨勬湁鍚戣竟锛岃竟闀夸负 z 銆姹傝В浠庣偣1鍒扮偣n 鐨勬渶鐭矾寰勩傚爢浼樺寲鐗堣鐢ㄩ偦鎺ヨ〃锛堥摼寮忓墠鍚戞槦锛夎繘琛屽瓨鍥撅紝濡傛灉鏄瀵嗗浘鎺ㄨ崘鐢ㄩ偦鎺ョ煩闃靛瓨鍥剧敤鏈寸礌鍋氭硶銆傚爢浼樺寲鐗堝湪绠楁硶绔炶禌涓瘮杈...
  • 涓閬撴暟瀛﹂dijkstra绠楁硶 璺眰绛旀鍟,!鎬!
    绛旓細绗竴姝 v2 v3 v4 v5 v6 3锛坴1) 5(v1) 鈭(v1) 鈭(v1) 鈭(v1)v2鐨3鏈灏 鑰冭檻浠巚2 璧 锛寁3鐨勮窛绂=min锛5,3+1锛=4 v3鐨勮窛绂绘敼涓4锛屾潵婧愪负v2 绫讳技鍙緱绗簩姝 v2* v3 v4 v5 v6 3锛坴1) 4(v2) 5(v2) 5(v2) ...
  • 鐢╠ijkstra绠楁硶璁$畻婧愮偣鍒颁釜缁撶偣鐨勬渶鐭矾寰...璋㈣阿浜茬埍鐨勬湅鍙媬 璇︾粏...
    绛旓細Dijkstra绠楁硶鐨勫叿浣撴楠わ細Dijkstra绠楁硶鍙堢О涓哄崟婧愭渶鐭矾寰勶紝鎵璋撳崟婧愭槸鍦ㄤ竴涓湁鍚戝浘涓紝浠庝竴涓《鐐瑰嚭鍙戯紝姹傝椤剁偣鑷虫墍鏈夊彲鍒拌揪椤剁偣鐨勬渶鐭矾寰勯棶棰樸傝G=锛圴锛孍锛夋槸涓涓湁鍚戝浘锛孷琛ㄧず椤剁偣锛孍琛ㄧず杈广傚畠鐨勬瘡涓鏉¤竟锛坕锛宩锛夊睘浜嶦锛岄兘鏈変竴涓潪璐熸潈W锛圛,j锛夛紝鍦℅涓寚瀹氫竴涓粨鐐箆0锛岃姹傛妸浠巚0...
  • dijkstra绠楁硶鏈夊摢浜?
    绛旓細杩澃鏂壒鎷夌畻娉鐢ㄦ潵瑙e喅浠庨《鐐箆0鍑哄彂鍒板叾浣欓《鐐圭殑鏈鐭矾寰勶紝璇ョ畻娉曟寜鐓ф渶鐭矾寰勯暱搴﹂掑鐨勯『搴忎骇鐢熸墍浠ユ渶鐭矾寰勩傚浜庡浘G=锛圴锛孍锛夛紝灏嗗浘涓殑椤剁偣鍒嗘垚涓ょ粍锛氱涓缁凷锛氬凡姹傚嚭鐨勬渶鐭矾寰勭殑缁堢偣闆嗗悎锛堝紑濮嬩负{v0}锛夈傜浜岀粍V-S锛氬皻鏈眰鍑烘渶鐭矾寰勭殑缁堢偣闆嗗悎锛堝紑濮嬩负V-{v0}鐨勫叏閮ㄧ粨鐐癸級銆傜畻娉曞皢鎸...
  • 鍙欒堪姹傝В鏈鐭矾鐨dijkstra绠楁硶鍩烘湰杩囩▼
    绛旓細鍙欒堪姹傝В鏈鐭矾鐨dijkstra绠楁硶鍩烘湰杩囩▼濡備笅锛欴ijkstra(杩澃鏂壒鎷)绠楁硶鏄吀鍨嬬殑鍗曟簮鏈鐭矾寰勭畻娉曪紝鐢ㄤ簬璁$畻涓涓妭鐐瑰埌鍏朵粬鎵鏈夎妭鐐圭殑鏈鐭矾寰勩備富瑕佺壒鐐规槸浠ヨ捣濮嬬偣涓轰腑蹇冨悜澶栧眰灞傛墿灞曪紝鐩村埌鎵╁睍鍒扮粓鐐逛负姝傛敞鎰忚绠楁硶瑕佹眰鍥句腑涓嶅瓨鍦ㄨ礋鏉冭竟銆傝G=(V,E)鏄竴涓甫鏉冩湁鍚戝浘锛屾妸鍥句腑椤剁偣闆嗗悎V鍒嗘垚涓ょ粍锛岀涓...
  • 鍥鹃亶鍘嗙畻娉曚箣鏈鐭矾寰Dijkstra绠楁硶
    绛旓細Dijkstra绠楁硶锛岀炕璇戜綔鎴村厠鏂壒鎷夌畻娉曟垨杩澃鏂壒鎷夌畻娉锛屼簬1956骞寸敱鑽峰叞璁$畻鏈虹瀛﹀鑹惧吂璧皵.鎴村厠鏂壒鎷夋彁鍑猴紝鐢ㄤ簬瑙e喅璧嬫潈鏈夊悜鍥剧殑 鍗曟簮鏈鐭矾寰勯棶棰 銆傛墍璋撳崟婧愭渶鐭矾寰勯棶棰樻槸鎸囩‘瀹氳捣鐐癸紝瀵绘壘璇ヨ妭鐐瑰埌鍥句腑浠绘剰鑺傜偣鐨勬渶鐭矾寰勶紝绠楁硶鍙敤浜庡鎵句袱涓煄甯備腑鐨勬渶鐭矾寰勬垨鏄В鍐宠憲鍚嶇殑鏃呰鍟嗛棶棰樸傞棶棰樻弿杩 锛...
  • 鐢╠ijkstra绠楁硶瑙e喅鏈鐭矾寰勯棶棰榗璇█浠g爜瀹炵幇鏃舵庢牱灏嗘瘡涓涓矾寰勭殑椤 ...
    绛旓細finally,the program will output the lowest distance to the destination node, the pre-node and show the best path./ 锛僫 nclude<stdio.h> 锛僫 nclude <stdlib.h> //Dijkstra绠楁硶瀹炵幇鍑芥暟 void Dijkstra(int n,int v,int dist[],int prev[],int **cost){ int i;int j;int maxint ...
  • 扩展阅读:dijkstra算法详细步骤 ... dijkstra经典例题及答案 ... dijkstra算法例题 图论 ... dijkstra最短路径图解 ... 大二dijkstra算法例题 ... dijkstra算法简单理解 ... 用dijkstra标号法求图 ... dijkstra算法答题过程 ... 用dijkstra算法求某一顶点 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网