Hamilton圈求单个旅行商问题(TSP)

Hamilton圈求单个旅行商问题(TSP)

利用Hamilton圈可以求解一个旅行商从起点城市出发,遍历其它城市之后的回到起点城市的问题。当然,通过修改代码,可以将问题转变问求从起点城市出发,回到其它终点城市的问题。本文代码主要来自于《数学建模算法与应用》,想要了解更多可以购买该书籍。

下面是主要的代码:

function[circle,long]=modifycircle(a,L,b)
for k=1:L
    flag=0;%退出标志%
    for m=1:L-2%m为算法中的i
        for n=m+2:L
            if a(b(m),b(n))+a(b(m+1),b(n+1))<a(b(m),b(m+1))+a(b(n),b(n+1))
                b(m+1:n)=b(n:-1:m+1);
                flag=flag+1
            end
        end
    end
    if flag ==0
        long=0
        for i=1:L
            long=long+a(b(i),b(i+1));
        end
        circle=b;
        return
    end
end
%该部分主要是hamilton圈的子函数
clear all
ZB=load('经纬度.txt');
ZB1=ZB;
ZB=ZB*pi/180;
a=length(ZB);
dis=zeros(a);
for i=1:a-1
    for j=i+1:a
            dis(i,j)=6370*acos(cos(ZB(i,1)-ZB(j,1))*cos(ZB(i,2))*cos(ZB(j,2))+sin(ZB(i,2))*sin(ZB(j,2)));    
    end
end
dis=dis+dis';L=size(dis,1);
c=[1,2:30,1];
[circle,long]=modifycircle(dis,L,c);%调用修改圈的子函数%
%修改圈%
%%%%%%%%%打点%%%%%%%%%%%%
% x=ZB1(:,1);
% y=ZB1(:,2);
% axis([min(x)-1 max(x)+1 min(y)-1 max(y)+1]);
% plot(x,y,'b*')
% text(x(1),y(1),'*','color','k')
% axis([min(x) max(x) min(y) max(y)])
 xx=ZB1(circle,1);yy=ZB1(circle,2);
  plot(xx,yy,'-*')
for i=1:size(ZB1,1) %用这个循环
    text(ZB1(i,1),ZB1(i,2),['',num2str(i-1)]);
end
text(ZB1(circle(1),1),ZB1(circle(1),2),'起点')
xlabel('传感器经度');
ylabel('传感器纬度');
title('最优路径示意图')
%给出经纬度信息,将利用公式求解各个点之间的距离,然后调用上面的子函数。

得到如图所示的最优路径
最后的图形如上。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值