蚁群算法
蚁群算法是一种经典的传统人工智能算法,早在上个世纪90年代就提出了。网络中已经有很多教材与教程,这里不再复述。
推荐《人工智能导论》(第四版),王万良编著,其6.7章节将蚁群算法讲的非常简单清楚。
网上也有很多matlab版本,java版本的蚁群算法模板。
笔者周日为了练习编码能力,完成了python版本的蚁群算法。文末附上github开源代码网址,项目中有测试样例与实验数据。
参数
self.Maximum = np.inf # 设定最大值
self.readCitMapfromTxt()
self.citymap = np.array(np.full((self.mapSize,self.mapSize),self.Maximum)) # citymap[i][j] 表示 城市i,j的距离
self.visionDistsnce = np.array(np.full((self.mapSize, self.mapSize),0)) # 能见度 是 距离的倒数
self.antNumber = 50 # 蚁群规模
self.initialInfomationRemain = 100 # 初始化的信息素
self.informationMap = np.array(np.full((self.mapSize, self.mapSize), self.initialInfomationRemain))
self.alpha = 1 # a值,a越大,说明该蚂蚁更倾向于走其他蚂蚁走过的路径
self.beta = 5 # b值,b越大,说明该蚂蚁更倾向于局部信息作出判断,达成局部最优解
self.rho = 0.9 # Rho值,信息素残留常数
self.heuristicRate = 1 # 启发式的比例
self.infomationFadeOutRate = 1 - self.rho # 信息素挥发率,越大,之前搜索过的路径再被搜索的概率也大,
# 越小,提高随机性与全局搜索能力,但是算法收敛程度降低
self.Q = 100 # Q值,为一圈下来,一只蚂蚁能释放出的信息素的数量
self.iterateNumber = 30 # 设计迭代次数
self.antLoopDistance = [0 for i in range(self.antNumber)] # 蚂蚁跑完一圈后的路程
self.minDistance = 1e9 # 最短路径的长度
self.minDistanceTrace = [] # 存最短路径的序列
self.ant = [] # 记录蚂蚁的轨迹
初始化蚂蚁
随机放置蚂蚁
# 初始化蚂蚁的位置
def setAnt(self):
for i in range(self.antNumber):
startCity = random.randint(0,self.mapSize-1) # 闭区间
self.ant.append