当前位置:首页 > 代码 > 正文

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站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/21492.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载