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

tsp算法代码(tsa算法)

admin 发布:2022-12-19 06:26 128


今天给各位分享tsp算法代码的知识,其中也会对tsa算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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

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


取消回复欢迎 发表评论:

分享到

温馨提示

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

联系我们反馈

立即下载