精华内容
下载资源
问答
  • TSP matlab

    千次阅读 2018-10-03 12:40:36
    问题:工作指派问题可以描述如下:n 个工作将要指派给 n 个工人分别完成,工人 i 完成工作 j 的时间为 dij...matlab代码如下: function main() %TSP问题的模拟退火算法malab程序 %wangs编写 d=rand(100,100); [~,n]...

    问题:工作指派问题可以描述如下:n 个工作将要指派给 n 个工人分别完成,工人 i 完成工作 j 的时间为 dij,问如何安排可使总的工作时间达到最
    小?请设计一种 SA 算法来解决上述指派问题。
    假设 n=100,要求随机产生 dij;
    matlab代码如下:
    function main()
    %TSP问题的模拟退火算法malab程序
    %wangs编写
    d=rand(100,100);
    [~,n]=size(d);
    t0=100; %t0初始温度=100K
    t=t0;
    tf=1; %tf最终温度=100K
    x=1:n; %领域初始解表示第i个人做i个事
    xbest=x; %领域最优解
    c=1;
    fmin=fun(d,x);%将初始可行解下的目标函数设为当前最优目标值
    while t>tf
    for k=1:5000; %内循环停止准则5000次
    y=xbest;
    t=y©;
    y©=y(c+1); %两个交换
    y(c+1)=t; %xbest中两个元素进行交换
    x=y;
    c=c+1; %可行解2-opt顺序交换。
    if c>99 %说明c=99时,状态表达为x=[2 3…99 1],
    c=1;
    end %c>99强制新一轮顺序交换,以保证所有元素被交换到
    fx=fun(d,x); %计算新解的函数值。
    fb=fx-fmin;
    if fb<=0
    xbest=x;
    fmin=fx; %无条件跳转,取最优值与最优解。
    elseif fb>0
    p=exp(-fb/t);
    if p>rand
    xbest=x;
    fmin=fx; %有条件跳转,取最优值与最优解。
    elseif p<=rand
    x=x; %不处理
    end
    end
    end
    t=0.98*t; %模拟退火操作
    end
    fmin
    xbest
    function fmin=fun(d,x)
    fmin=0;
    n=length(x);
    for i=1:n
    fmin=fmin+d(i,x(i)); %计算第i个人做x(i)任务时总时间。
    end

    展开全文
  • tsp MATLAB程序

    2010-04-25 00:51:26
    tsp MATLAB程序有效解决TSP问题看看吧各位
  • tsp matlab,TSP matlab

    2021-04-21 14:16:03
    问题:工作指派问题可以描述如下:n 个工作将要指派给 n 个工人分别完成,工人 i 完成工作 j 的时间为 ...matlab代码如下:function main()%TSP问题的模拟退火算法malab程序%wangs编写d=rand(100,100);[~,n]=size(d)...

    问题:工作指派问题可以描述如下:n 个工作将要指派给 n 个工人分别完成,工人 i 完成工作 j 的时间为 dij,问如何安排可使总的工作时间达到最

    小?请设计一种 SA 算法来解决上述指派问题。

    假设 n=100,要求随机产生 dij;

    matlab代码如下:

    function main()

    %TSP问题的模拟退火算法malab程序

    %wangs编写

    d=rand(100,100);

    [~,n]=size(d);

    t0=100; %t0初始温度=100K

    t=t0;

    tf=1; %tf最终温度=100K

    x=1:n; %领域初始解表示第i个人做i个事

    xbest=x; %领域最优解

    c=1;

    fmin=fun(d,x);%将初始可行解下的目标函数设为当前最优目标值

    while t>tf

    for k=1:5000; %内循环停止准则5000次

    y=xbest;

    t=y©;

    y©=y(c+1); %两个交换

    y(c+1)=t; %xbest中两个元素进行交换

    x=y;

    c=c+1; %可行解2-opt顺序交换。

    if c>99 %说明c=99时,状态表达为x=[2 3…99 1],

    c=1;

    end %c>99强制新一轮顺序交换,以保证所有元素被交换到

    fx=fun(d,x); %计算新解的函数值。

    fb=fx-fmin;

    if fb<=0

    xbest=x;

    fmin=fx; %无条件跳转,取最优值与最优解。

    elseif fb>0

    p=exp(-fb/t);

    if p>rand

    xbest=x;

    fmin=fx; %有条件跳转,取最优值与最优解。

    elseif p<=rand

    x=x; %不处理

    end

    end

    end

    t=0.98*t; %模拟退火操作

    end

    fmin

    xbest

    function fmin=fun(d,x)

    fmin=0;

    n=length(x);

    for i=1:n

    fmin=fmin+d(i,x(i)); %计算第i个人做x(i)任务时总时间。

    end

    展开全文
  • 基于matlabTSP问题。可以直接放在work里运行
  • 蚁群算法求解TSP matlab

    2021-04-01 15:02:44
    蚁群算法求解TSP clear; clc; close all; Ant_Num=50; Alpha=1; %信息素权重 Beta=5; %启发式因子权重 Rho=0.1; %信息素消失系数 G=200; %迭代次数 Q=100;%信息素增加强度系数 City_Num=20; %城市数量 border=100; %...

    蚁群算法求解TSP

    clear; clc; close all;
    Ant_Num=50;
    Alpha=1; %信息素权重
    Beta=5; %启发式因子权重
    Rho=0.1; %信息素消失系数
    G=200; %迭代次数
    Q=100;%信息素增加强度系数
    City_Num=20; %城市数量
    border=100; %城市边界
    City=[rand(City_Num,1)*border,rand(City_Num,1)*border]; %随机城市坐标
    % City=[9.442061706065957e+01     5.554527461175734e+01
    %      7.033585927645424e+01     8.210485000479132e+01
    %      8.513885160801584e+01     2.875386430880210e+01
    %      7.639317665257967e+01     9.899454527886692e+01
    %      4.124371269556116e+01     3.075543952877445e+01
    %      5.845739036088576e+01     6.394249385784040e+01
    %      2.047038459263265e+01     3.416955672791446e+01
    %      9.556319529767441e+01     5.075386755815181e+01
    %      6.864343351256032e+01     9.524654717191730e+01
    %      9.348728571015130e+01     4.280562205659413e+01
    %      3.436836073417421e+01     7.104795575132123e+01
    %      9.817321649623470e+01     2.501489907029606e+01
    %      7.820931971241255e+01     7.332155697803887e+01
    %      8.988323696914080e+01     4.302811953719409e+01
    %      3.575739586131570e+01     9.099463432988888e+01
    %      8.563041161898965e+00     4.548622350697822e+01
    %      6.563114202893138e+01     2.278268090861504e+01
    %      9.477447526974635e+01     9.126965924351660e+01
    %      4.261772603974462e+01     2.400688433476272e+01
    %      4.447512148263895e+01     6.468043451289284e+01];
    %   %%
     
    D=zeros(City_Num);
    for i=1:City_Num
        for j=1:City_Num
            if i~=j
            D(i,j)=sqrt((City(i,1)-City(j,1))^2+(City(i,2)-City(j,2))^2);
            else
             D(i,j)=eps;   
        end
        end
    end
    
    Eta=1./D;                   %启发因子,即越长走的可能性越小
    Tau=ones(City_Num); %信息素矩阵
    Tabu=zeros(Ant_Num,City_Num); %记录路径
    gen=1;                                            %迭代次数
    Best_Record=zeros(G,City_Num);  %每代最优路径
    Length_Record=inf.*ones(G,1);      %每代最短距离
    
    figure(1);
    
    while gen<=G
        Randpos=[];
        for i=1:(ceil(Ant_Num/City_Num))  %每个城市平均放多少蚂蚁
            Randpos=[Randpos,randperm(City_Num)];  %每一堆蚂蚁随机放到城市
        end
        Tabu(:,1)=Randpos(1,1:Ant_Num)';
        
        for j=2:City_Num
            for i=1:Ant_Num
                visited=Tabu(i,1:(j-1)); %当前蚂蚁已经访问过的城市
                J=zeros(1,(City_Num-j+1)); %未访问过的城市
                P=J;
                Jc=1;
                for k=1:City_Num
                    if length(find(visited==k))==0 %将没有访问过的城市加入
                        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
                Pcum=cumsum(P/sum(P));%赌轮盘操作
                select=find(Pcum>=rand);%当前蚂蚁选择的下一个城市
                to_visit=J(select(1));
                Tabu(i,j)=to_visit;
            end
        end
        if gen>=2
            Tabu(1,:)=Best_Record(gen-1,:); %留下上一轮的最短路径
        end
        
        L=zeros(Ant_Num,1); %根据路径计算每只蚂蚁的走过距离
        for i=1:Ant_Num
            R=Tabu(i,:);
            for j=1:(City_Num-1)
                L(i)=L(i)+D(R(j),R(j+1));
            end
                L(i)=L(i)+D(R(1),R(City_Num));
        end
        
        Length_Record(gen)=min(L);    %最短路径的距离
        pos=find(L==min(L));
        Best_Record(gen,:)=Tabu(pos(1),:);%最短路径
        
        Delta_Tau=zeros(City_Num);  %以下更新信息素增量
        for i=1:Ant_Num
            for j=1:City_Num-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,City_Num),Tabu(i,1))= Delta_Tau(Tabu(i,City_Num),Tabu(i,1))+Q/L(i);
        end
        Tau=(1-Rho).*Tau+Delta_Tau;        %信息素更新
        
        Tabu=zeros(Ant_Num,City_Num);  %路径清空
        
        %以下为画图部分
        for i=1:City_Num-1
            plot([City(Best_Record(gen,i),1),City(Best_Record(gen,i+1),1)],...
                [City(Best_Record(gen,i),2),City(Best_Record(gen,i+1),2)],'bo-');
            hold on;
        end
        plot([City(Best_Record(gen,1),1),City(Best_Record(gen,City_Num),1)],...
                [City(Best_Record(gen,1),2),City(Best_Record(gen,City_Num),2)],'ro-');
         title(['优化最短距离:',num2str(Length_Record(gen))]);
         hold off;
         pause(0.005);
         gen=gen+1;
         
    end
    
    Pos=find(Length_Record==min(Length_Record));
    Shortest_Route=Best_Record(Pos(1),:);
    Shortest_Length=min(Length_Record);
    figure(2);
    plot(Length_Record);
    xlabel('迭代次数');
    
        
        
    
    展开全文
  • SA_TSP matlab 程序

    2009-08-25 16:33:36
    该程序在matlab下采用模拟退火算法求解货郎担问题的最优解
  • 包含数据,可直接运行的matlab源代码。包含数据,可直接运行的matlab源代码。
  • tabu search for TSP matlab

    2009-03-25 21:55:32
    a tabu search algorithm wrote by Zhaokai
  • TSP问题蚁群算法通用MATLAB源程序蚁群算法是当前研究十分火热的一种智能算法,下面的蚁群算法程序专门用于求解TSP问题,此程序由GreenSim团队于2006年初完成,最初公开发表于研学论坛。function [R_best,L_best,L_...

    TSP问题蚁群算法通用MATLAB源程序

    蚁群算法是当前研究十分火热的一种智能算法,下面的蚁群算法程序专门用于求解TSP问题,此程序由GreenSim团队于2006年初完成,最初公开发表于研学论坛。

    function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)

    %%=========================================================================

    %  ACATSP.m

    %  Ant Colony Algorithm for Traveling Salesman Problem

    %  GreenSim团队原创作品,转载请注明

    %  GreenSim团队长期从事算法设计、代写程序等业务

    %  欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim

    %%-------------------------------------------------------------------------

    %%  主要符号说明

    %%  C        n个城市的坐标,n×2的矩阵

    %%  NC_max   最大迭代次数

    %%  m        蚂蚁个数

    %%  Alpha    表征信息素重要程度的参数

    %%  Beta     表征启发式因子重要程度的参数

    %%  Rho      信息素蒸发系数

    %%  Q        信息素增加强度系数

    %%  R_best   各代最佳路线

    %%  L_best   各代最佳路线的长度

    %%=========================================================================

    %%第一步:变量初始化

    n=size(*,1);%*表示问题的规模(城市个数)

    *=zeros(n,n);%D表示完全图的赋权邻接矩阵

    for i=1:n

    for j=1:n

    if i~=j

    D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;

    else

    D(i,j)=eps;

    end

    D(j,i)=D(i,j);

    end

    end

    Eta=1./D;%Eta为启发因子,这里设为距离的倒数

    Tau=ones(n,n);%Tau为信息素矩阵

    Tabu=zeros(m,n);%存储并记录路径的生成

    NC=1;%迭代计数器

    R_best=zeros(NC_max,n);%各代最佳路线

    L_best=inf.*ones(NC_max,1);%各代最佳路线的长度

    L_ave=zeros(NC_max,1);%各代路线的平均长度

    while NC<=NC_max%停止条件之一:达到最大迭代次数

    %%第二步:将m只蚂蚁放到n个城市上

    Randpos=[];

    for i=1:(ceil(m/n))

    Randpos=[Randpos,randperm(n)];

    end

    Tabu(:,1)=(Randpos(1,1:m))';

    %%第三步: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 length(find(visited==k))==0

    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);

    en*

    *=*/(sum(P));

    %按概率原则选取下一个城市

    Pcum=cumsum(P);

    Select=find(Pcum>=rand);

    to_visit=J(Select(1));

    Tabu(i,j)=to_visit;

    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),:);

    L_ave(NC)=mean(L);

    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));

    subplot(1,2,1)

    DrawRoute(C,Shortest_Route)

    subplot(1,2,2)

    plot(L_best)

    hold on

    plot(L_ave)

    function DrawRoute(C,R)

    %%====================================================================

    %%  DrawRoute.m

    %%  画路线图的子函数

    %%--------------------------------------------------------------------

    %%  C    Coordinate        节点坐标,由一个N×2的矩阵存储

    %%  R    Route             路线

    %%====================================================================

    N=length(R);

    scatter(C(:,1),C(:,2));

    hold on

    plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)])

    hold on

    for ii=2:N

    plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)])

    hold on

    end

    展开全文
  • 本程序求解常见的组合优化问题TSP问题,如果仅仅是用一个程序去求解一个优化问题,显然这样的工作意义并不大。主要是因为求解的好坏往往是很难评价的,另外尤其对于遗传算法来说,遗传算法交叉变异方法不同,交叉率...
  • 分别把前四个函数存成m文件,再运行最后一个。swap.mfunction [ newpath , position ] = swap( oldpath , number )% 对 oldpath 进 行 互 换 操 作% number 为 产 生 的 新 路 径 的 个 数% position 为 对 应 ...
  • Matlab的GA程序 遗传算法求TSPfor i=1:ngpool,cost(i)=sum(diag(distance(gpool(i,:)',rshift(gpool(i,:))')));end% record current best solution[costmin,idx]=min(cost);tourmin=gpool(idx,:);%==============%...
  • 本章涉及知识点1、生物神经元的结构2、Hopfield神经网络结构3、神经动力学4、CHNN的网络结构5、一般性CHNN模型的状态方程推导6、一般性CHNN模型的能量方程定义7、CHNN模型下TSP的置换矩阵设计8、CHNN模型下TSP的能量...
  • 简单蚁群算法求解TSP的源程序(原创)蚁群算法是新兴的仿生算法,最初是由意大利学者Dorigo M于1991年首次提出,由于具有较强的鲁棒性,优良的分布式计算机制和易于与其它方法结合等优点,成为人工智能领域的一个研究...
  • matlab 人工鱼群求解TSP

    2020-01-28 01:50:17
    matlab 人工鱼群求解TSP matlab 人工鱼群求解TSP matlab 人工鱼群求解TSP matlab 人工鱼群求解TSP
  • 蚁群算法tspmatlab

    2020-10-17 13:51:16
    蚁群算法tspmatlab代码,供大家学习。蚁群算法tspmatlab代码,供大家学习。蚁群算法tspmatlab代码,供大家学习。蚁群算法tspmatlab代码,供大家学习。
  • 34tsp_matlab

    2016-12-14 20:55:26
    4tsp_matlab,高效解决中国34城市(以经纬度为近似坐标)问题,可以解决更多城市相关问题。
  • TSP问题MATLAB实现

    2017-02-25 12:54:20
    使用MATLAB中的yalmip工具箱,调用cplex求解TSP问题
  • MATLAB源码集锦-蚁群算法求解TSP问题matlab代码
  • tsp问题MATLAB原程序

    2018-02-01 10:59:56
    tsp问题MATLAB原程序,运行结果可行,可供初学者学习,一个不错的学习资源
  • TSP问题matlab代码.rar

    2020-03-18 13:57:00
    TSP问题matlab代码,TSP问题为组合优化问题,又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且...
  • 遗传算法解TSP问题MATLAB代码;30城市的Benchmark问题
  • 本资源采用matlab编码,采用经典NSGAII解决TSP问题
  • 遗传算法解决TSP问题MATLAB实现(详细)

    万次阅读 多人点赞 2019-02-01 15:49:05
    TSP问题也称为货郎担问题,是一个古老的问题。最早可以追溯到1759年Euler提出的骑士旅行的问题。1948年,由美国兰德公司推动,TSP成为近代组合优化领域的典型难题。 TSP是一个具有广泛的应用背景和重要理论价值的...
  • sa求解tsp问题MATLAB代码,可运行
  • TSP问题 matlab实现

    热门讨论 2011-05-06 14:05:16
    采用遗传算法,使用matlab,有城市位置标示,及运行中城市关系。
  • matlab_tsp

    2014-12-16 16:45:20
    利用遗传算法解决tsp问题,基于MATLAB
  • 基于免疫算法的TSP问题MATLAB源程序,各点坐标可修改输入。可以成功运行
  • 遗传算法求解TSP(旅行商)问题 MATLAB代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 961
精华内容 384
关键字:

tspmatlab

matlab 订阅