求一份基于matlab的TSP问题源代码 150

向诸位大神求一份可以直接运行起来的,基于matlab的TSP问题源代码。不要有bug的那种。最好有说明文档。不让我留邮箱,请上传到知道谢谢!是关于遗传算法的,谢谢了!可以... 向诸位大神求一份可以直接运行起来的,基于matlab的TSP问题源代码。
不要有bug的那种。
最好有说明文档。
不让我留邮箱,请上传到知道谢谢!
是关于遗传算法的,谢谢了!可以追赏!
展开
 我来答
百度网友db4b04636
2015-04-19 · TA获得超过2914个赞
知道小有建树答主
回答量:834
采纳率:92%
帮助的人:335万
展开全部
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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式