tsp算法代码(tsa算法)
admin 发布:2022-12-19 06:26 128
今天给各位分享tsp算法代码的知识,其中也会对tsa算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、求一份基于matlab的TSP问题源代码
- 2、谁能帮我编个贪心算法求解TSP问题的C++源代码
- 3、遗传算法tsp 城市100个 种群个数应该是多少
- 4、matlab 模拟退火算法求解TSP问题源代码
- 5、求一个TSP的matlab程序
求一份基于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问题的C++源代码
AC代码,132kb,0ms 记得给分哦~~ #include #include using namespace std; int a[12],n,k,visit[12]; __int64 sum=0; void dfs(int num,int x,int j) { if(num==k) { sum+=x; return; } for(int i=1;ij) { visit[i]=1; if(!x) dfs(num+1,a[i],i...
遗传算法tsp 城市100个 种群个数应该是多少
C语言实现遗传算法解决TSP问题,带完整代码,应用最基础的遗传算法思想。带实验报告,并在实验报告中与模拟退火算法进行对比。
//以下是cpp文件完整代码:
#include
#include
#include
#include
#include
#include
using namespace std;
const int N = 30;//城市个数
const int MAXN = 50;//最大城市个数
const int population = 100;//种群个体数
const int MAXpopulation = 100;//最大种群个数 const double mutation_rate = 0.4;//变异率
const double crossover_rate = 0.65;//交配率
const int iter = 200;//迭代次数
//城市结构体
struct city
{
//char id;
int x, y;
};
//路径结构体
struct path
{
city cities[MAXN];
double length;
};
double D[MAXN][MAXN];//存储城市之间的长度 city bcity[MAXN];//存储最优路径的各个城市 path bpath[MAXpopulation];//存储种群所有个体
double fitness[MAXpopulation];//存储种群个体的适应度
//产生x-y的随机整数
int randInt(int x, int y)
{
return rand()%(y-x+1)+x;
}
double randDouble()
{
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的matlab程序
蚂蚁算法实现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
tsp算法代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于tsa算法、tsp算法代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 04-29乐视视频分享代码(乐看视频app源码)[20240429更新]
- 04-29java象棋人机对战代码(象棋 人机对战)[20240429更新]
- 04-29安卓实现直播的代码(安卓电视直播源码)[20240429更新]
- 04-29notepad代码折叠(notepad++跳转到定义)[20240429更新]
- 04-29html5简单播放代码(html5版播放器)[20240429更新]
- 04-29vb6代码滚动(vb垂直滚动条代码)[20240429更新]
- 04-29web课程设计源代码(网页设计与制作课程代码)[20240429更新]
- 04-29在哪输入代码可以出来表情(输入法表情代码)[20240429更新]
- 04-29进销存软件代码(进销存软件是什么软件)[20240429更新]
- 04-29评论发布代码(评论框代码)[20240429更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接