tsp算法源代码(tsa算法)
admin 发布:2022-12-19 19:50 150
今天给各位分享tsp算法源代码的知识,其中也会对tsa算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
matlab 模拟退火算法求解TSP问题源代码
我这有飞机巡航的代码,本质上和旅行商问题一样,代码如下(非原创):
function mySim()
disp('模拟退火求巡航路径');
data=xlsread('飞机巡航数据.xlsx','sheet1','C4:J28');
x=data(:,1:2:8);x=x(:);
y=data(:,2:2:8);y=y(:);
si=[x y]; d1=[70,40];
si=[d1;si;d1];
sj=si;
sj=sj*pi/180; %经纬度化为弧度制
d=zeros(102); %距离矩阵d
for i=1:101
for j=i+1:102
temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2));
d(i,j)=6370*acos(temp);
end
end
d=d+d'; %生成距离矩阵
S0=[]; %用于存放最优路径
Sum=inf; %用于存放最优解
rand('state',sum(clock)); %设随机种子
for j=1:1000
S=[1 1+randperm(100),102]; %randperm(n)用于随机生成1到n的一个排列
temp=0;
for i=1:101
temp=temp+d(S(i),S(i+1));
end
if tempSum
S0=S;Sum=temp;
end
end
e=0.1^30;L=20000;at=0.999;T=1;
%退火过程
for k=1:L
%产生新解
c=2+floor(100*rand(1,2)); %floor向下取整,rand(m,n)生成m*n阶(0,1)随机矩阵
c=sort(c); %顺序排列
c1=c(1);c2=c(2);
%计算代价函数值
df=d(S0(c1-1),S0(c2))+d(S0(c1),S0(c2+1))-d(S0(c1-1),S0(c1))-d(S0(c2),S0(c2+1));
%接受准则
if df0
S0=[S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102)];
Sum=Sum+df;
elseif exp(-df/T)rand(1)
S0=[S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102)];
Sum=Sum+df;
end
T=T*at;
if Te
break;
end
end
% 输出巡航路径及路径长度
S0,Sum
%巡航时间
v=xlsread('飞机巡航数据.xlsx','sheet1','A2');
time=Sum/v(1,1)
%画出路径图
r=size(sj,1);
for i=1:r-1;
plot([si(S0(i),1) si(S0(i+1),1)],[si(S0(i),2) si(S0(i+1),2)],'*');
line([si(S0(i),1) si(S0(i+1),1)],[si(S0(i),2) si(S0(i+1),2)]);
hold on
end
急求tsp问题算法的源代码(c++)
将k=0,lb,x[1:n]=0存入PT
while(PT不为空)
{ 从PT中取出lb值最小元素
k=k+1;
for(i=1; i=n; i++)
{ x[k]=i;
if(c[i][x[k-1]+∞)
{ die=0;计算 lb ;
for(j=1; jk; j++)
if (x[j]=x[k]) {die=1; break; }
if(die=0 and lbup) 将k,lb,x[1:n]存入PT
}
}
if(k=n) { lb=c[x[1]][x[2]]+…+c[x[n-1]][x[n]]+c[x[1]][x[n]]
if (lb 是PT中最小值) 输出解,结束
else{ up=lb;删除 PT中lb=up元素 }
}
}
哈哈,楼上对了
哪位大神有蜂群算法求解tsp问题的代码啊?(c语言)
您好,有,来了:
#include "stdio.h"
#include "math.h"
void main()
{
long x[21]={0},y[21]={0},d[191]={0},e[191]={0},g[41]={0},s[42]={0};
int i,j,h=1,k,l,o,m,n=0,p,q=3,r=0;
int flag;
double a[21]={0},b[21][21]={0},c[21][21]={0},f[191]={0};
char ch;
printf(" C-W算法求解TSP问题 \n\n\n");
printf("请输入坐标(20个以内),坐标之间用空格隔开,按回车键结束输入:\n");
re:scanf("%d,%d",x[h],y[h]);
ch=getchar();
if(ch!='\n')
{ h++;
goto re;
}
for(i=1;ih+1;i++)
a[i]=sqrt(x[i]*x[i]+y[i]*y[i]);
for(i=1;ih;i++)
{
for(j=i+1;jh+1;j++)
{ n++;
b[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
c[i][j]=a[i]+a[j]-b[i][j];
d[n]=i;
e[n]=j;
f[n]=c[i][j];
}
}
for(i=1;in;i++)
{ flag=0;
for(j=1;jn+1-i;j++)
if(f[j]f[j+1])
{ k=f[j];f[j]=f[j+1];f[j+1]=k;
l=d[j];d[j]=d[j+1];d[j+1]=l;
o=e[j];e[j]=e[j+1];e[j+1]=o;
flag=1;
}
if(flag==0)
break;
}
printf("\n");
printf("节约值排序:\n");
for(i=n;i0;i--)
{ if(f[i]!=0)
printf("%lf(%ld,%ld)--(%ld,%ld)\n",f[i],x[d[i]],y[d[i]],x[e[i]],y[e[i]]);
}
g[1]=d[n];
g[2]=e[n];
for(m=1;mh;m++)
{
for(j=n-1;j0;j--)
{ p=0;
for(i=1;i41;i++)
{
if(d[j]==g[i])
p=p+1;
if(e[j]==g[i])
p=p+1;
}
if(p==1)
{ g[q]=d[j];
g[q+1]=e[j];
}
if(p==1)
break;
}
q=q+2;
}
printf("\n选出连接点:\n");
for(i=1;i41;i=i+2)
{ if(g[i]!=0)
{
printf("(%ld,%ld)--(%ld,%ld)\n",x[g[i]],y[g[i]],x[g[i+1]],y[g[i+1]]);
r=r+2;
}
}
s[21]=g[1];
s[22]=g[2];
for(i=3;ir;i=i+2)
for(j=1;j42;j++)
{
if(g[i]==s[j])
{
if(s[j-1]==0)
s[j-1]=g[i+1];
else
s[j+1]=g[i+1];
break;
}
if(g[i+1]==s[j])
{
if(s[j-1]==0)
s[j-1]=g[i];
else
s[j+1]=g[i];
break;
}
}
printf("\n旅行商路线:\n");
printf("(0,0)--");
for(i=1;i42;i++)
{
if(s[i]!=0)
printf("(%ld,%ld)--",x[s[i]],y[s[i]]);
}
printf("(0,0)");
getch();
}
求一份基于matlab的TSP问题源代码
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
tsp算法源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于tsa算法、tsp算法源代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
- 上一篇:网站即将上线代码(上线了网站)
- 下一篇:添加网页插件代码(网站插件代码)
相关推荐
- 04-29恐龙快打源代码(java恐龙快打)[20240429更新]
- 04-29微信小程序源代码下载(微信小程序代码下载)[20240429更新]
- 04-29web课程设计源代码(网页设计与制作课程代码)[20240429更新]
- 04-29asp.net个人主页源代码(ASPNET网站开发)[20240429更新]
- 04-29thinkphpapp源代码(thinkphp源码安装教程)[20240429更新]
- 04-29包含wget源代码分析的词条[20240429更新]
- 04-29jsp收费系统源代码的简单介绍[20240429更新]
- 04-29在线网页源代码(在线网页源代码查看器)[20240429更新]
- 04-29手机浏览器显示源代码(手机浏览器怎么看源代码)[20240429更新]
- 04-28安卓小游戏代码项目下载(java简单手机小游戏源代码)[20240428更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接