我一个世界jw 我一个世界jw
关注数: 63 粉丝数: 241 发帖数: 3,156 关注贴吧数: 16
新人求助。很急,matlab程序运行问题 本人因为要做毕业设计用到matlab软件,找到了源代码,初始数据也有,就是运行不成功。。请各位大神帮助下。。真心求助! 源代码和初始数据不知道怎么结合起来(是向我写的这样就可以么?)。还有请帮忙看下源代码有没有什么语句问题。。。最好您能帮我运行成功。。先谢过了。。 我运行后就出现如图问题:[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q) m=31;Alpha=0.5;Beta=5;Rho=0.1;NC_max=100;Q=50; C = [1.8,9.8;2.0,5.0;2.1,9.5;2.5,8.5;3.0,3.5;6.6,4.2;8.0,4.7;8.5,8.5;9.2,6.0]; n=length(C); %n 为市个数 for i=1:n %坐标矩阵转换为距离矩阵 for j=1:n D(i,j)=sqrt((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2); end end for i=1:n %Eta为启发因子,这里设为距离的倒数 for j=1:n %原文作者少考虑的当D=0是MATLAB提示出错 if i~=j Eta(i,j)=1./D(i,j); end end end for i=1:n Eta(i,i)=0; end Tau=ones(n,n); %Tau为信息素矩阵 Tabu=zeros(m,n); %存储并记录路径的生成 NC=1; %迭代计数器 R_best=zeros(NC_max,n); %各代最佳路线 L_best=inf.*ones(NC_max,1); %各代最佳路线的长度 L_ave=zeros(NC_max,1); %各代路线的平均长度 while NC<=NC_max %停止条件之一:达到最大迭代次数 %%第二步:将m只蚂蚁放到n个城市上 Randpos=[]; for i=1:(ceil(m/n)) Randpos=[Randpos,randperm(n)]; end Tabu(:,1)=(Randpos(1,1:m))'; %%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游 for j=2:n for i=1:m visited=Tabu(i,1:(j-1)); %已访问的城市 J=zeros(1,(n-j+1)); %待访问的城市 P=J; %待访问城市的选择概率分布 Jc=1; for k=1:n if length(find(visited==k))==0 J(Jc)=k; Jc=Jc+1; end end %下面计算待选城市的概率分布 for k=1:length(J) P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta); end P=P/(sum(P)); %按概率原则选取下一个城市 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 %%第四步:记录本次迭代最佳路线 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; %%第五步:更新信息素 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; %%第六步:禁忌表清零 Tabu=zeros(m,n); end %%第七步:输出结果 Pos=find(L_best==min(L_best)); Shortest_Route=R_best(Pos(1),:); Shortest_Length=L_best(Pos(1)); DrawRoute(C,Shortest_Route) %调用函数绘图
1 下一页