基本蚁群算法

参考:https://blog.csdn.net/liuxin0108/article/details/115936358



蚁群算法实际上是正反馈原理和启发式算法相结合的一种算法。在选择路径时,蚂蚁不仅利用了路径上的信息素,而且用到了城市间距离的倒数作为启发式因子。实验结果表明,ant-cycle 模型比 ant-quantity 和 ant-density 模型有更好的性能。这是因为 ant-cycle 模型利用全局信息更新路径上的信息素量,而 ant-quantity 和 ant-density 模型使用局部信息。

基本流程

(1)参数初始化

(2)循环次数 Nc=Nc+1
(3)蚂蚁的禁忌表索引号 k = 1。

(4)蚂蚁数目 k = k + 1。

(5)蚂蚁个体根据状态转移概率公式(1)计算的概率选择元素 j 并前进,j∈Jk(i)j∈Jk(i)。

(6)修改禁忌表指针,即选择好之后将蚂蚁移动到新的元素,并把该元素移动到该蚂蚁个体的禁忌表中。

(7)若集合 C 中元素未遍历完,即 k < m,则跳转到第(4)步;否则执行第(8)步。

(8)记录本次最佳路线。

(9)根据式(2)和式(3)更新每条路径上的信息量。

(10)若满足结束条件,即如果循环次数 Nc≥GNc≥G ,则循环结束并输出程序优化结果;否则清空禁忌表并跳转到第(2)步。

蚁群算法的运算流程如下图所示:

关键参数说明

在蚁群算法中,不仅信息素和启发函数乘积以及蚂蚁之间的合作行为会严重影响到算法的收敛性,蚁群算法的参数也是影响其求解性能和效率的关键因素。信息素启发式因子 α、期望启发因子 β、信息素蒸发系数 ρ、信息素强度 Q、蚂蚁数目 m 等都是非常重要的参数,其选取方法和选取原则直接影响到蚁群算法的全局收敛性和求解效率。

信息素启发式因子 α

信息素启发式因子 α 代表信息量对是否选择当前路径的影响程度,即反映蚂蚁在运动过程中所积累的信息量在指导蚁群搜索中的相对重要程度。α 的大小反映了蚁群在路径搜索中随机性因素作用的强度,其值越大,蚂蚁在选择以前走过的路径的可能性就越大,搜索的随机性就会减弱;而当启发式因子 α 的值过小时,则易使蚁群的搜索过早陷于局部最优。根据经验,信息素启发式因子 α 取值范围一般为 [1,4] 时,蚁群算法的综合求解性能较好。

期望启发因子 β

期望启发因子 β 表示在搜索时路径上的信息素在指导蚂蚁选择路径时的向导性,它的大小反映了蚁群在搜索最优路径的过程中的先验性和确定性因素的作用强度。期望启发因子 β 的值越大,蚂蚁在某个局部点上选择局部最短路径的可能性就越大,虽然这个时候算法的收敛速度得以加快,但蚁群搜索最优路径的随机性减弱,而此时搜索易于陷入局部最优解。根据经验,期望启发因子 β 取值范围一般为 [3,5] 时,蚁群算法的综合求解性能较好。

实际上,信息素启发式因子 α 和期望启发因子 β 是一对关联性很强的参数:蚁群算法的全局寻优性能,首先要求蚁群的搜索过程必须要有很强的随机性;而蚁群算法的快速收敛性能,又要求蚁群的搜索过程必须要有较高的确定性。因此,两者对蚁群算法性能的影响和作用是相互配合、密切相关的,算法要获得最优解,就必须在这二者之间选取一个平衡点,只有正确选定它们之间的搭配关系,才能避免在搜索过程中出现过早停滞或陷入局部最优等情况的发生。

信息素蒸发系数 ρ

蚁群算法中的人工蚂蚁是具有记忆功能的,随着时间的推移,以前留下的信息素将会逐渐消逝,蚁群算法与其他各种仿生进化算法一样,也存在着收敛速度 慢、容易陷入局部最优解等缺陷,而信息素蒸发系数 ρ 大小的选择将直接影响到整个蚁群算法的收敛速度和全局搜索性能。在蚁群算法的抽象模型中,ρ 表示信息素蒸发系数,1 - ρ 则表示信息素持久性系数。因此,ρ 的取值范围应该是 0~1 之间的一个数,表示信息素的蒸发程度,它实际上反映了蚂蚁群体中个体之间相互影响的强弱。ρ 过小时,则表示以前搜索过的路径被再次选择的可能性过大,会影响到算法的随机性能和全局搜索能力;ρ 过大时,说明路径上的信息素挥发的相对变多,虽然可以提高算法的随机搜索性能和全局搜索能力,但过多无用搜索操作势必会降低算法的收敛速度

蚂蚁数目 m

蚁群算法是一种随机搜索算法,与其他模拟进化算法一样,通过多个候选解组成的群体进化过程来寻求最优解,在该过程中不仅需要每个个体的自适应能力,更需要群体之间的相互协作能力。蚁群在搜索过程中之所以表现出复杂有序的行为,是因为个体之间的信息交流与相互协作起着至关重要的作用。

对于旅行商问题,单个蚂蚁在一次循环中所经过的路径,表现为问题可行解集中的一个解,m 只蚂蚁在一次循环中所经过的路径,则表现为问题解集中的一个子集。显然,子集增大(即蚂蚁数量增多),可以提高蚁群算法的全局搜索能力以及算法的稳定性;但蚂蚁数目增大后,会使大量的曾被搜索过的解(路径)上的信息素的变化趋于平均,信息正反馈的作用不明显,虽然搜索的随机性得到了加强,但收敛速度减慢;反之,子集较小(蚂蚁数量少),特别是当要处理的问题规模比较大时,会使那些从来未被搜索到的解(路径)上的信息素减小到接近于 0,搜索的随机性减弱,虽然收敛速度加快了,但会使算法的全局性能降低,算法的稳定性差,容易出现过早停滞现象。m 一般取 10~50。

信息素强度 Q 对算法性能的影响

在蚁群算法中,各个参数的作用实际上是紧密联系的,其中对算法性能起着主要作用的是信息启发式因子 α、期望启发式因子 β 和信息素挥发因子 ρ 这三个参数,总信息量 Q 对算法性能的影响有赖于上述三个参数的选取,以及算法模型的选取。例如,在 ant-cycle 模型和 ant-quantity 模型中,总信息量 Q 所起的作用显然是有很大差异的,即随着问题规模的不同,其影响程度也将不同。相关人员研究结果表明:总信息量 Q 对 ant-cycle 模型蚁群算法的性能没有明显的影响。因此,在算法参数的选择上,参数 Q 不必作特别的考虑,可以任意选取。

最大进化代数 G

最大进化代数 G 是表示蚁群算法运行结束条件的一个参数,表示蚁群算法运行到指定的进化代数之后就停止运行,并将当前群体中的最佳个体作为所求问题的最优解输出。一般 G 取 100~500。

Python代码实现

scikit-opt库直接调用

这里作为demo,随机生成距离矩阵. 实战中从真实数据源中读取。

import numpy as np
from scipy import spatial
import matplotlib.pyplot as pltnum_points = 50points_coordinate = np.random.rand(num_points, 2)  # generate coordinate of points
distance_matrix = spatial.distance.cdist(points_coordinate, points_coordinate, metric='euclidean')
def cal_total_distance(routine):'''The objective function. input routine, return total distance.cal_total_distance(np.arange(num_points))'''num_points, = routine.shapereturn sum([distance_matrix[routine[i % num_points], routine[(i + 1) %   num_points]] for i in range(num_points)])from sko.ACA import ACA_TSPaca = ACA_TSP(func=cal_total_distance, n_dim=num_points,size_pop=50, max_iter=200,distance_matrix=distance_matrix)best_points, best_distance = aca.run()
print(best_points)
print(best_distance)
fig, ax = plt.subplots(1, 2)
best_points_ = np.concatenate([best_points, [best_points[0]]])
best_points_coordinate = points_coordinate[best_points_, :]
ax[0].plot(best_points_coordinate[:, 0], best_points_coordinate[:, 1], 'o-r')
ax[1].plot(aca.generation_best_Y)
plt.show()

[ 0 28 1 21 42 20 3 25 48 4 43 44 9 36 30 19 5 15 39 13 6 47 2 10
29 8 35 40 12 23 33 49 26 31 46 17 16 41 22 34 37 24 27 11 18 7 38 14
45 32]
5.579572075708274

蚁群算法Python实现相关推荐

  1. 蚂蚁算法python_蚁群算法python编程实现

    前言 这篇文章主要介绍了Python编程实现蚁群算法详解,涉及蚂蚁算法的简介,主要原理及公式,以及Python中的实现代码,具有一定参考价值,需要的朋友可以了解下. 蚁群算法简介 蚁群算法(ant c ...

  2. 蚁群算法 python

    这次寒假 在培训数学建模美赛呀 还要学hcip 真的太忙 这次我们的选题是ICM E 不知道各位有没有和我的选题一样的 那么我发布一个蚁群算法吧 import random import copy i ...

  3. 蚁群算法(详解)python

    only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays ...

  4. 蚁群算法 python_Python蚁群算法实现

    时间:2018-12-12 概述:蚁群算法 Python蚁群算法实现,使用工具:Pycharm ,Python版本为3.6.3,作者:李劭明.使用蚁群算法得到各个城市间的距离,下面来看详细的代码: i ...

  5. python闭环最短路径_深度学习经典算法 | 蚁群算法解析

    蚁群算法基本思想 蚁群算法的基本原理来源于自然界中蚂蚁觅食的最短路径问题.根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发 ...

  6. 蚁群算法讲解python

    简介 蚁群算法(Ant Clony Optimization, ACO)作为一个启发式群智能算法,它是由一群无智能或有轻微智能的个体通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性 ...

  7. Python实现VRP常见求解算法——蚁群算法(ACO)

    基于python语言,实现经典蚁群算法(ACO)对车辆路径规划问题(CVRP)进行求解. 目录 优质资源 1. 适用场景 2. 求解效果 3. 问题分析 4. 数据格式 5. 分步实现 6. 完整代码 ...

  8. 【进阶四】Python实现(MD)HVRP常见求解算法——蚁群算法(ACO)

    蚁群算法+Split 求解异构车辆路径规划问题 目录 信息传递 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 信息传递 python实现6种智能 ...

  9. 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题) 蚁群算法解决旅行商问题(最优路径问题) 节约里程算法

  10. 【进阶一】Python实现MDCVRP常见求解算法——蚁群算法(ACO)

    基于python语言,实现蚁群算法(ACO)对多车场车辆路径规划问题(MDCVRP)进行求解. 目录 往期优质资源 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6. ...

最新文章

  1. 在python3.x下使用如下代码: import cPickle as pk 报错
  2. limesurvey php5.2,limesurvey(配置心得)
  3. python redis pipeline使用方法_python使用pipeline批量读写redis的方法
  4. 使用@Autowired注解警告Field injection is not recommended
  5. ORA-28000: the account is locked
  6. 【摘转留用】35前要考虑的
  7. 我是如何查找RFC官方资料的
  8. APP 上传之后出现invalid binary 问题解决汇总
  9. Git for Windows之分支管理、分支合并、解决分支冲突
  10. 长尾关键词生成工具-长尾关键词生成软件免费-关键词组合工具
  11. navicat导入sql语句
  12. 丝般顺滑!全新垃圾回收器 ZGC 初体验 | 龙蜥技术
  13. html 表格横向排列,excel表格数据如何实现横向排列-Excel表格怎样把多列横向数据按照顺序改为纵向排列......
  14. 大数据工具和数据库区别和关联
  15. Win7/R2 原生VHD 启动
  16. 如何高效的使用mac
  17. 基恩士KV-N60主站,KV-N14从站,松下触摸屏
  18. 使用WordPress插件搭建一个商城(一)(小白推荐)
  19. NC | 中科院蔡磊组揭示跨界合成菌群增强番茄对镰刀枯萎病抗病能力
  20. 红米note+开机+android,红米note清除数据进入方法 红米note三清教程

热门文章

  1. BT5中安装VMWare Tool的相关命令
  2. MetaTrader5平台 Python
  3. slack 聊天机器人_无法筹集资金的Slack机器人
  4. Selenium和Firefox对应版本及注意事项
  5. 世嘉MD游戏开发【十二】:伪3D地面,Pseudo-3D
  6. 【无标题】2022施工员-设备方向-岗位技能(施工员)考试题模拟考试题库及模拟考试
  7. speedoffice如何根据身份证号码提取出性别
  8. 统计学专业词汇英文翻译中英对照总结汇总(贾俊平 统计学 第七版 )
  9. 产品经理——工作规范指南
  10. 超全GitLab保姆级使用教程