?? tsp.m
字號(hào):
%初始化t,a,d
clear
t=0;
a=50;
d=1;
%五個(gè)城市之間的距離矩陣
dxy=[0,7,6,10,13;
7,0,7,10,10;
6,7,0,5,9;
10,10,5,0,6;
13,10,9,6,0];
%當(dāng)i==j,r(i,j)==1,否則,r(i,j)為0
r=[1,0,0,0,0;
0,1,0,0,0;
0,0,1,0,0;
0,0,0,1,0;
0,0,0,0,1];
%計(jì)算偏置矩陣I及權(quán)重矩陣T
I=2*a*ones(5);
dtu=zeros(5);
for x=1:1:5
for i=1:1:5
for y=1:1:5
for j=1:1:5
im=mod(i,5);
T(x,i,y,j)=-a*r(x,y)-a*r(i,j)-d*dxy(x,y)*r(j,im+1);
end
end
end
end
%設(shè)置初始值u
u0=0.02;
u=0.2*rand(5,5)-0.1;
E=0;
EB=0;
ee=1;
sumv=0;
%當(dāng)系統(tǒng)達(dá)到平衡(相鄰兩次的能量函數(shù)差值ee為0),
%最短路徑矩陣中每行只有一個(gè)1(即:sumx==ones(1,5)),
%每列只有一個(gè)1(即:sumy==ones(1,5)),
%所有元素加起來(lái)共等于5(即:sumv==5)時(shí),輸出相應(yīng)的最短路徑矩陣
while (ee~=0) | (sumv~=5) | (sumx~=ones(1,5)) | (sumy~=ones(1,5))
e1=0;
e2=0;
e3=0;
e11=zeros(1,5);
e22=zeros(1,5);
e111=0;
e222=0;
v=(1+tanh(u/u0))/2;%計(jì)算最短路徑矩陣v
for x=1:1:5
for i=1:1:5
eu=0;
for y=1:1:5
for j=1:1:5
eu=eu+T(x,i,y,j)*v(y,j);
end
end
dtu(x,i)=eu+I(x,i);%產(chǎn)生Δu
end
end
u=u+dtu*0.5;%重新計(jì)算u值
%計(jì)算能量函數(shù)的值
for x=1:1:5
for i=1:1:5
e1=e1+v(x,i);
end
e11(x)=(e1-1).^2;
end
for i=1:1:5
for x=1:1:5
e2=e2+v(x,i);
end
e22(i)=(e2-1).^2;
end
for x=1:1:5
for y=1:1:5
for i=1:1:5
im=mod(i,5);
e3=e3+dxy(x,y)*v(x,i)*v(y,im+1);
end
end
end
for x=1:1:5
e111=e111+e11(x);
e222=e222+e22(x);
end
E=a/2*(e111+e222)+d/2*e3;%計(jì)算能量函數(shù)的值
ee=abs(E-EB);%相鄰兩次的能量函數(shù)差值
sumv=0;
sumy=zeros(1,5);
sumx=zeros(1,5);
for x=1:1:5
for y=1:1:5
sumy(y)=sumy(y)+v(y,x);%最短路徑矩陣v每列元素的和
sumx(x)=sumx(x)+v(x,y);%最短路徑矩陣v每行元素的和
sumv=sumv+v(x,y);%最短路徑矩陣v所有元素的和
end
end
EB=E;
end
line=[1 2 3 4 5]*v %輸出最短路徑
minline=0;
for i=1:1:5
j=mod(i,5)+1;
minline=minline+dxy(line(i),line(j));
end
minline %輸出最短路徑的值
%顯示并畫(huà)出最短路徑
x=0.2:0.2:1;
y=[0.5 0.7 0.3 0.9 0.2];%假設(shè)有五個(gè)點(diǎn)
y1=y+0.05;
wx=[x(line(1)) x(line(2)) x(line(3)) x(line(4)) x(line(5)) x(line(1))];
wy=[y(line(1)) y(line(2)) y(line(3)) y(line(4)) y(line(5)) y(line(1))];
plot(wx,wy,'--or','LineWidth',2, 'MarkerSize',10);
text(x(1),y1(1),['1']);
text(x(2),y1(2),['2']);
text(x(3),y1(3),['3']);
text(x(4),y1(4),['4']);
text(x(5),y1(5),['5']);
title('TSP問(wèn)題的最短路徑','FontSize',18);
text(0.3,0.9,['最短距離為',num2str(minline)],'FontSize',18);
text(0.1,0.1,['最短路徑的訪問(wèn)順序?yàn)?#039;,num2str(line)],'FontSize',18);
axis ([0 1.1 0 1]);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -