穷举法求解TSP问题(python实现)

TSP问题:假设有六个城市,一销售商从其中的某一城市出发,不重复地走完其余5个城市并回到原出发点,在所有可能的路径中求出路径长度最短的一条。六个城市坐标为:城市1(87,7)、城市2(91,38)、城市3(83,46)、城市4(71,44)、城市5(64,60)、城市6(68,58)。
 

import math
import itertools
import numpy as np
import matplotlib.pyplot as plt
#输入城市坐标,用字典存储
city={'x':[87,91,83,71,64,68],'y':[7,38,46,44,60,58]}
#计算城市之间的距离矩阵
n=len(city['x']) # 城市个数
#print(city['x'])
# print(n)
x=city['x']
y=city['y']
#print(x[0])
a=np.zeros((n,n))
for i in range(n):
    for j in range(n):
        a[i,j] = math.sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2))
#print(a[0,1])
#生成6个城市的全排列
v=list(itertools.permutations([1,2,3,4,5,6],n))
#print(v[1][0])
m=len(v)
dis=[]
#print(m)
for i in range(m):
    sum=0
    for j in range(n-1):
        sum=sum+a[v[i][j]-1,v[i][j+1]-1]
    sum=sum+a[v[i][j+1]-1,v[i][0]-1]
    dis.append(sum)
print('最小的是:',min(dis))
best=min(dis)
#print(best)
c=dis.index(min(dis))
print('最短路径:',v[c])
#绘图
#p1=[68,83,91,87,71,64]
#p2=[58,46,38,7,44,60]
p1=[]
p2=[]
for i in v[c]:
    p1.append(x[i-1])
    p2.append(y[i-1])
for i in range(n):
    plt.plot( p1,p2, color='r')
    plt.scatter( p1[i], p2[i], color='b' )
plt.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值