资源简介
蚁群算法中TSP问题的一个用python解决的小DEMO
代码片段和文件信息
import numpy as np
import matplotlib.pyplot as plt
coordinates = np.array([[565.0575.0][25.0185.0][345.0750.0][945.0685.0][845.0655.0]
[880.0660.0][25.0230.0][525.01000.0][580.01175.0][650.01130.0]
[1605.0620.0][1220.0580.0][1465.0200.0][1530.0 5.0][845.0680.0]
[725.0370.0][145.0665.0][415.0635.0][510.0875.0][560.0365.0]
[300.0465.0][520.0585.0][480.0415.0][835.0625.0][975.0580.0]
[1215.0245.0][1320.0315.0][1250.0400.0][660.0180.0][410.0250.0]
[420.0555.0][575.0665.0][1150.01160.0][700.0580.0][685.0595.0]
[685.0610.0][770.0610.0][795.0645.0][720.0635.0][760.0650.0]
[475.0960.0][95.0260.0][875.0920.0][700.0500.0][555.0815.0]
[830.0485.0][1170.0 65.0][830.0610.0][605.0625.0][595.0360.0]
[1340.0725.0][1740.0245.0]])
def getdistmat(coordinates):
num = coordinates.shape[0]
distmat = np.zeros((5252))
for i in range(num):
for j in range(inum):
distmat[i][j] = distmat[j][i]=np.linalg.norm(coordinates[i]-coordinates[j])
return distmat
distmat = getdistmat(coordinates)
numant = 40 #蚂蚁个数
numcity = coordinates.shape[0] #城市个数
alpha = 1 #信息素重要程度因子
beta = 5 #启发函数重要程度因子
rho = 0.1 #信息素的挥发速度
Q = 1
iter = 0
itermax = 250
etatable = 1.0/(distmat+np.diag([1e10]*numcity)) #启发函数矩阵,表示蚂蚁从城市i转移到矩阵j的期望程度
pheromonetable = np.ones((numcitynumcity)) # 信息素矩阵
pathtable = np.zeros((numantnumcity)).astype(int) #路径记录表
distmat = getdistmat(coordinates) #城市的距离矩阵
lengthaver = np.zeros(itermax) #各代路径的平均长度
lengthbest = np.zeros(itermax) #各代及其之前遇到的最佳路径长度
pathbest = np.zeros((itermaxnumcity)) # 各代及其之前遇到的最佳路径长度
while iter < itermax:
# 随机产生各个蚂蚁的起点城市
if numant <= numcity:#城市数比蚂蚁数多
pathtable[:0] = np.random.permutation(range(0numcity))[:numant]
else: #蚂蚁数比城市数多,需要补足
pathtable[:numcity0] = np.random.permutation(range(0numcity))[:]
pathtable[numcity:0] = np.random.permutation(range(0numcity))[:numant-numcity]
length = np.zeros(numant) #计算各个蚂蚁的路径距离
for i in range(numant):
visiting = pathtable[i0] # 当前所在的城市
#visited = set() #已访问过的城市,防止重复
#visited.add(visiting) #增加元素
unvisited = set(range(numcity))#未访问的城市
unvisited.remove(visiting) #删除元素
for j in range(1numcity):#循环numcity-1次,访问剩余的numcity-1个城市
#每次用轮盘法选择下一个要访问的城市
listunvisited = list(unvisited)
probtrans
- 上一篇:58同城爬虫程序
- 下一篇:Kruskal算法python实现
相关资源
- Kruskal算法python实现
- 最小二乘法python代码,不用库函数
- sm3 python encode
- openopc for python 3.x
- 张正友相机标定Python代码
- Python调用QQ微信截图
- python图像裁剪
- 海明校验 python源代码 海明码
- mod_wsgi.so
- Python 强大的图论和网络研究工具 ne
- python从入门到精通视频60集全
- wheel 安装包
- Python程序设计与算法基础教程源代码
- python数据处理csv->图表
- 微博评论Python代码实现
- Python最小距离法
- 五子棋AI python实现
- requests 中文文档
- 手机Python图形界面教程
- Birch python实现
- 用Python脚本对栅格图层进行批量resa
- Python学习路线Python课程大纲Python视频
- 自适应共振理论ART2(Adaptive Resonance
- 基于opencv绘制图片的三维空间显示图
- 抓取CSDN博客文章的简单爬虫python源码
- 囚徒困境的演化博弈实现Python
- 数据处理程序
- 利用python实现基于SVM的文本分类
- python新浪微博爬虫,爬取微博和用户
- DoS攻击Python源码
评论
共有 条评论