Matlab 最佳路径问题 初学者求代码
x = [1.94 7.77 0.26 4.68 7.21 0.5 2.22 7.16 3.3 9.95 8.02 6.46]
y = [1.6 2.74 1.14 0.91 1.96 6.05 1.88 7.73 5.76 2.64 8.18 0.24]
分别按顺序对应12个坐标的x,y轴参数
需求如下:
将所有坐标编号,比如 1(1.94, 1.6), 2(7.77,2.74)
利用matlab循环语句确认每个点最近的两个或三个坐标的编号,输出最近点的编号
找到最佳路径,输出总路程长度和最佳路径的编号顺序,最后画出最佳路径图
https://zhidao.baidu.com/question/150679077.html
tic
clear
clc
figure(1)
x = [1.94 7.77 0.26 4.68 7.21 0.5 2.22 7.16 3.3 9.95 8.02 6.46];
y = [1.6 2.74 1.14 0.91 1.96 6.05 1.88 7.73 5.76 2.64 8.18 0.24];
x1=x(:);
y1=y(:);
data=[x1 y1];%将数据化为12行2列
[px py]=size(data);
d=zeros(12);
for i=1:px-1
for j=i+1:px
d(i,j)=sqrt((data(i,1)^2-data(j,1)^2)+(data(i,2)^2-data(j,2)^2));%两点之间距离计算公式
end
end
d=d+d';
L=12;
w=100;
judge=1;
for k=1:w
while judge>0
judge=0;
route=randperm(12);
for i=1:L-3
for j=i+2:L-1
%i->i+1---->j->j+1 --------> i->j---->i+1->j+1
if d(route(i),route(j))+d(route(j),route(j+1))>d(route(i),route(j))+d(route(i+1),route(j+1))
judge=1;
route(i:j)=route(j:-1:i);
end
end
end
end
%%计算距离
temp=zeros(1,px);
for j=1:px-1
temp(j)=temp(j)+d(route(1,j),route(1,j+1));
end
[good situation]=sort(temp);
end
path=situation
long=sum(good)
xx=data(path,1);
yy=data(path,2);
plot(xx,yy,'-o');
toc