matlab求最佳哈密顿圈遇到错误求最佳哈密顿圈遇到错误程序如下%用矩阵翻转方法来实现二边逐次修**过程,求最佳哈密尔顿圈(H圈)clcclearload('zd.mat');D=ZD;%floyd算法求得的每对地点之间最短路
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/27 05:07:55
matlab求最佳哈密顿圈遇到错误求最佳哈密顿圈遇到错误程序如下%用矩阵翻转方法来实现二边逐次修**过程,求最佳哈密尔顿圈(H圈)clcclearload('zd.mat');D=ZD;%floyd算法求得的每对地点之间最短路
matlab求最佳哈密顿圈遇到错误
求最佳哈密顿圈遇到错误
程序如下
%用矩阵翻转方法来实现二边逐次修**过程,求最佳哈密尔顿圈(H圈)
clc
clear
load('zd.mat');
D=ZD;%floyd算法求得的每对地点之间最短路径矩阵
u=[13,14,16,17,18,21,23,24,26,27,31,32,34,36,38,39,40,42,43,45,49,];%21个送货点
a2=size(u);
for q=1:1000 %随机搜索1000个初始H圈
a1=[1:a2(2)];
b=a1(randperm(length(a1)));
x=b(1:a2(2));
for p=1:a2(2)
u1(p)=u(x(p)); %my u1为随机得到的21点的顺序
end
u2=[51];%定义点O/51为起始点
for i=1:21
u2(i+1)=u1(i); %my 加入起点
end
for i=1:22
for j=1:22
e(i,j)=D(u2(i),u2(j));
end
end
E=zeros(25,25); %列出该初始H圈加点序边框的距离矩阵
for i=1:23;
E(1,i)=i-1;
E(25,i)=i-1;
end
E(1,24)=1;E(25,24)=1;
for i=1:22
for j=1:22
E(i+1,j+1)=e(i,j);
end
end
for i=2:23
E(24,i)=e(1,i-1);
end
for i=2:23
E(i,24)=e(i-1,1);
end
[a,b,s]=h(E);%调用求最佳H圈的h函数.
[a,b,s]=h(b); %把得出的结果矩阵再次调用这个函数,即为近似最佳H圈.
for i=1:23
l(i)=u2(a(1,i+1));%列出送货员送货路线
end
L(q,:)=l;
S(q)=s;%送货员走的总路线长度矩阵
end
调用的函数文件如下
% 求最佳H圈M文件
function[a,b,s]=h(e)%e为按照初始H圈点的顺序组成的含点序边框的距离矩阵
n=size(e);%求出距离矩阵的维数.
for i=2:n-2;%有一个顺序的外框,所以循环从2开始到n - 2.
for j=i+1:n-2;
if e(i,j)+e(i+1,j+1) h at 18
a;
Error in ==> qzh at 44
[a,b,s]=h(b); %把得出的结果矩阵再次调用这个函数,即为近似最佳H圈.
数据文件ZD.mat没法上传,若需要我可以发给你.
matlab求最佳哈密顿圈遇到错误求最佳哈密顿圈遇到错误程序如下%用矩阵翻转方法来实现二边逐次修**过程,求最佳哈密尔顿圈(H圈)clcclearload('zd.mat');D=ZD;%floyd算法求得的每对地点之间最短路
计算机性能问题,有些计算机是可以实现1000个循环的,有些是200次左右