# 小蛇学python（2）两百行代码实现旅游中国34座大城市最短路径

python3.6+pycharm+Anaconda3.6外加了一个basemap包是我的编程环境。

```    def __init__(self, aLifeCount=100, ):
self.initCitys()
self.lifeCount = aLifeCount
self.ga = GA(aCrossRate=0.7,
aMutationRage=0.02,
aLifeCount=self.lifeCount,
aGeneLenght=len(self.citys),
aMatchFun=self.matchFun())
self.bestcityorder = []```

```    def distance(self, order):
distance = 0.0
for i in range(-1, len(self.citys) - 1):
index1, index2 = order[i], order[i + 1]
city1, city2 = self.citys[index1], self.citys[index2]
distance += math.sqrt((city1[0] - city2[0]) ** 2 + (city1[1] - city2[1]) ** 2)
return distance```

```    def run(self, n=0):
while n > 0:
self.ga.next()
distance = self.distance(self.ga.best.gene)
print(self.ga.best.gene)
print(("%d : %f") % (self.ga.generation-1, distance))
n -= 1```

``` def mappath(self):
citylon1 = []
citylat1 = []
citylon2 = []
citylat2 = []

for i in self.bestcityorder:
temp = i[0]
i[0] = i[1]
i[1] = temp
# create new figure, axes instances.
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])

# setup mercator map projection.
m = Basemap(llcrnrlon=73.33, llcrnrlat=14.01, urcrnrlon=138.16, urcrnrlat=54.123, resolution='i',
projection='merc', lat_0=42.5, lon_0=120)
# nylat, nylon are lat/lon of New York
for i in self.bestcityorder:
citylon1.append(i[0])
citylat1.append(i[1])
for i in range(len(self.bestcityorder)):
if i == len(self.bestcityorder)-1:
citylon2.append(self.bestcityorder[0][0])
citylat2.append(self.bestcityorder[0][1])
else:
citylon2.append(self.bestcityorder[i + 1][0])
citylat2.append(self.bestcityorder[i + 1][1])

x, y = m(citylon1, citylat1)
m.scatter(x, y, marker='D', color='m')

# draw great circle route between NY and London
for i in range(len(self.bestcityorder)):
lon1 = citylon1[i]
lat1 = citylat1[i]
lon2 = citylon2[i]
lat2 = citylat2[i]
m.drawgreatcircle(lon1, lat1, lon2, lat2, linewidth=2, color='r')
m.drawcoastlines()
#m.fillcontinents()
m.drawcountries()
# draw parallels
m.drawparallels(np.arange(10, 90, 20), labels=[1, 1, 0, 1])
# draw meridians
m.drawmeridians(np.arange(-180, 180, 30), labels=[1, 1, 0, 1])
ax.set_title('Great Circle the shortest path')
plt.show()```

0 条评论

• ### 毕业设计:基于CNN的图像分类算法

近年来人工智能越来越火，好像本科毕设不搞人工智能都很丢人似的。但是普通本科生对于这个领域的了解显然很少，基本也就是做做数据搜集、数据标注、工程实现、调调参的工作...

• ### 小蛇学python（12）分析《今生今世》人物关系图谱

《今生今世》是渣男胡兰成所写的一部自传体小说。今天我们就来分析一下在他所写的自传中的人物关系图谱，分析一下胡兰成到底和多少女人有关系。

• ### 小蛇学python（20）魔法函数

init负责类内成员的初始化，当类初始化实例的时候，会将传入的值赋给类内成员，与c++中的构造函数十分相似。

• ### python自学成才之路 类详细用法

python是一门面向对象编程的语言，python的类和java中的类思想上有很多一样的地方，比如python类也是通过class修饰，里面也有成员属性，成员方...

• ### Python GUI项目实战（一）登录窗体的设计与实现

前面我们学习了Python GUI 图型化界面Tkinter的基础知识，为了检测我们的学习成果，学以致用。我们从今天开始做一个综合Tkinter案例--基于Tk...

• ### ReactiveCocoa,最受欢迎的iOS函数响应式编程库(2.5版),没有之一!

简介 项目主页: ReactiveCocoa 实例下载: https://github.com/ios122/ios122 简评: 最受欢迎,最有价值的iOS响...

• ### Loxodon.Framework.XLua

Loxodon.Framework.XLua 是一个XLua的开源的MVVM框架，它做为Unity3D的MVVM框架Loxodon.Framework的插件来使...

• ### Django实现验证码

Django实现验证码 背景知识 1. 验证码的作用 防恶意破解密码：防止，使用程序或机器人恶意去试密码．为了提高用户的体验，用户输入错误以后，才会要求输入验证...

• ### python GUI库图形界面开发之PyQt5拖放控件实例详解

在GUI中，拖放指的是点击一个对象，并将其拖动到另一个对象上的动作。比如百度云PC客户端支持的拖放文件以快速移动文件：