问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一个TSP的matlab程序

发布网友 发布时间:2022-05-23 06:19

我来回答

1个回答

热心网友 时间:2023-10-15 11:35

蚂蚁算法实现tsp。其中city是n行2列的矩阵,表示n个城市的经纬度,iter_max是最大循环次数,其余是蚂蚁算法的参数。

function [Shortest_Route,Shortest_Length]=anttsp(city,iter_max,m,Alpha,Beta,Rho,Q)
n=size(city,1);
d=zeros(n,n);
d=squareform(pdist(city));
Eta=1./d;
Tau=ones(n,n);
Tabu=zeros(m,n);
nC=1;
R_best=zeros(iter_max,n);
L_best=inf.*ones(iter_max,1);

while nC<=iter_max
route=[];
for i=1:ceil(m/n)
route=[route,randperm(n)];
end
Tabu(:,1)=(route(1,1: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 isempty(find(visited==k, 1))
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);
if isempty(Select)%是不是一定能保证Select不为空
Tabu(i,j)=round(1+(n-1)*rand);
else
next_visit=J(Select(1));
Tabu(i,j)=next_visit;
end
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),:);
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));
end追问有没有基于遗传算法的TPS的matlab程序,坐标手动输入

追答你可以理解原理后,自己写一个,之前用遗传算法计算过函数最小值,可以参考下,换其他函数可以修改fun里面的表达式。

function [x fx]=fun_SuiJiSuanFa(N,genLenth,Pc,Pm,generation)
%[x fx]=fun_SuiJiSuanFa(6,4,0.7,0.001,100)
%f 表示函数
%N表示染色体种群大小
%genLenth表示染色体长度
%Pc表示交叉概率
%Pm表示突变概率
%downbound
%upbound
%generation循环代数
%进制编码,此处编写为二进制
num=2;
initdata=randi([0 num-1],N,genLenth);
%二进制编码的权值
weight=(num).^(genLenth-1:-1:0);
weights=repmat(weight,N,1);
%保存每代的最好值和平均值,
meanally=zeros(1,generation);
maxally=zeros(1,generation);

Nowx=zeros(generation,genLenth);
for k=1:generation
    %解码后的整数
    allx=sum(initdata.*weights,2);
    %染色体的适应性
    ally=f(allx);
    %平均值,最大值
    meanally(k)=mean(ally);
    maxally(k)=max(ally);
    %找下标,确定是哪条染色体
    index=find(ally==maxally(k));
    Nowx(k,:)=initdata(index(1),:);
    %最大值没有提高就取上次的
    if(k>=2&&maxally(k)<maxally(k-1))
        maxally(k)=maxally(k-1);
        Nowx(k,:)=Nowx(k-1,:);
    end
    %染色体的适应性比率
    ratio=ally./sum(ally);
    %交叉,变异
    %??交叉几个,从第几个开始。
    %此处只交叉1个(总共才6个),随机给一个。
    sumRatio=cumsum(ratio);
    data=zeros(N,genLenth);

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小米摄像头离线人在外地怎么办 win11如何固定电脑桌面图标 QQ三国的当代杰出少年是怎么得的? 三国人物风云榜的作者简介 三国人物风云榜作者简介 三国人物风云榜目录 三国人物风云榜内容提要 w10电脑不动黑屏w10系统开机黑屏只有鼠标箭头怎么回事 ...FRAMEWORK中的Action, Control, Resource, Model到底是什么关系... windframework特点 Oracle 表分区 多少 partition 才适合 杏仁和海棠果的区别 partition by oracle 现在还用吗,那些情况下有用呢,能举例吗? 车队个人内心感想? TTSPad Manager这个哪里可以下载到啊~?` oracle表的partition名乱码 过年了,女友回老家了。给我留下了作业(每天写一篇日记) 求一篇一个人即将离开打工的城市,回家过年的日志 如何用风行播放器下载电影? 用风行播放器能把电影下载到硬盘吗?怎样下载?跪拜! 移动4g卡怎么换nano sim卡 用PS制作水印制作完成后保存什么文件,才使水印背景是透明的呢?跪求高手详细一点 谢谢! 请问用ps添加水印如何将水印颜色调成透明色?谢谢 自定义QQ图像怎么删除 杭州下沙现在哪里可以摆地摊啊 有夜市之类的吗?朋友们帮帮忙吧 来杭州不久不是很熟悉 谢谢啦 QQ空间自定义模块怎么删除啊? QQ空间的自定义模块怎么删除 杭州哪里可以摆地摊,下沙哪里可以摆地摊? 固定电话怎么拦截网络改号电话 国华集团(深圳)有限公司怎么样? tsp_codec是什么软件。 oracle 中partition PART的应用 tsp退火法 这个程序没有main函数啊 怎么解决?? 香蕉的胎座类型 benettsp是什么牌子的巧克力 3dmax2010注册不了 序列号:667—98989898 申请号:Q6F2 TTSP 56PW 5D5A Q9VG A87G 47DQ 5Z9Z 1oracle 得到date类型字段的时分秒,结果依然是date类型 2:partition(分区名称),这个‘分区名称’ 求一份基于matlab的TSP问题源代码 如何在跑跑中漂移? 果实杏是由什么结构发育来的 果实杏是由什么结构发育来的? 跑跑怎么漂移??? 金黄的杏是果实属于什么器官? 我是联通的卡能接打电话和收短信就是不能发短信怎么回事 中国联通卡有话费有流量能接打电话怎么不能收发短信和上网啊 刚买的联通卡为什么可以打电话不可以发短信? 我是联通3G卡和手机。能打电话,能上网。但是短信发不出去,这是什么问题? 为什么联通手机只能打电话不能发信息 新办的联通卡能打电话,为何不能发送短信啊? 联通手机卡能打电话却发不了短信是怎么回事?