蚁群算法(一)——理论篇

蚁群算法是通过模拟自然界中蚂蚁集体寻径行为而提出来的一种基于种群的启发式随机搜索算法,它是一种用来寻找优化路径的概率型算法,具有分布计算、信息正反馈和启发式搜索的特征,本质上是进化算法中的一种启发式全局优化算法。

本篇文章只讲理论,无代码,少量公式,适合基础入门。

1 算法理论

蚂蚁在寻找食物的过程中,会在路径上释放出一种特殊的信息素,其它蚂蚁能够感知这种信息素的存在和强度,蚁群通过信息素来完成信息交流。

初始阶段,环境中没有信息素,蚂蚁随机行动寻找食物,找到食物就返回并在路径上释放信息素,信息素会随时间挥发,较短的路径往返的用时较少,路径上遗留的信息素则较强,下次出发就会有更多的蚂蚁沿着信息素较强的路径出发,更多的蚂蚁会遗留更多信息素,以此形成一种正反馈,最终找到一条最佳路径。

举个例子,假如2只蚂蚁m1m2同时从A出发前往B处寻找食物,m1ACBm2ADBADB的长度是ACB2倍,8个单位时间m1到达Bm2只走了1/22条路径上的信息素分布如图1(此时假设信息素不挥发),又经过8个单位时间,信息素分布如图2,路径ACB上的信息素是路径ADB上的2倍。

1  8个单位时间信息素分布

2  16个单位时间信息素分布

2 算法流程

步骤1 将m只蚂蚁随机放在n座城市

步骤2 让m只蚂蚁基于信息素量t和启发式信息(距离的倒数)独立选择下一座城市,选择基于概率P,走完所有城市

Pij为在时刻t第k只蚂蚁从城市i出发选择访问城市j的概率,其中,j是备选城市集J中的元素,t可以理解为迭代次数,Tij为城市i到城市j路径上的信息素,nij为城市i到城市j之间距离的倒数,a、b为实常数。

步骤3 基于上次m只蚂蚁的路径信息和遗留信息素更新所有路径上的信息素

Tij(t+1)为t+1时刻更新后城市i到城市j路径上遗留的信息素,由2部分组成,上一时刻信息素蒸发后遗留和本次周游新遗留的信息素,关于新遗留的信息素计算式子中X的取值不同,可分为3个模型,依次为ant-cycle、ant-quantity、ant-density,实验证明ant-cycle模型(X=Lk,X为第k只蚂蚁本次周游所走过的路径和)效果最好。

步骤4 重复步骤2、3、4直到满足终止条件

步骤5 输出最终结果

 

3 算法改进

3.1 精英蚂蚁系统

精英蚂蚁系统为第1次改进,主要是对式子(2)进行了改进,主要思想为在全局最优路径上人工释放额外的信息素,以增强正反馈效果。

其中,e为调整参数Lbs为已知最优路径。

3.2 最大最小蚂蚁系统

为克服系统可能出现的停止现象,采取3中策略:

一是每次循环后,只有1只蚂蚁进行信息素更新。

二是限制每个解元素上的信息素轨迹量的值域范围[Tmin Tmax]。

三是将信息素初始化为Tmax。

3.3 基于排序的一群算法

类似精英蚂蚁系统对式子(2)进行改进,主要策略为对当前循环中每只蚂蚁路径长度排序,短的靠前,只有排名前w-1位的蚂蚁和精英蚂蚁才允许在路径上释放信息素。

其中,w为系数,r为排名。

3.4 自适应蚁群算法

结合基本蚂蚁系统和最大最小蚂蚁系统,克服慢收敛,但也避免了早熟。主要策略

一是每次循环结束求出最优解并保留。

二是对式子(2)中的p进行改进。

随迭代次数增加,自适应改变p值。p初值为1,当算法求得最优值没有明显改进时,降低p为式子(6),以减小信息素挥发,增大全局搜索能力。

4 仿真实例

见下篇。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是制作蚁群算法GUI的步骤: 1. 打开MATLAB软件,点击“APPS”选项卡,找到“GUIDE”并打开它。 2. 在GUIDE窗口中,选择“Blank GUI(默认)”并单击“OK”按钮。 3. 在GUI窗口中添加必要的控件和元素,例如:按钮、文本框、图像等等。可以参考以下示例: - 添加一个“开始”按钮,用于启动蚁群算法。 - 添加一个文本框,用于输入和显示蚁群算法的参数,例如:蚂蚁数量、迭代次数、信息素挥发系数等等。 - 添加一个图像框,用于显示蚁群算法的结果。 4. 在回调函数中编写蚁群算法的代码,并将结果显示在图像框中。可以参考以下示例: ```matlab % --- Executes on button press in start_button. function start_button_Callback(hObject, eventdata, handles) % hObject handle to start_button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % get the parameters from the text box ant_num = str2double(get(handles.ant_num_edit, 'String')); iter_num = str2double(get(handles.iter_num_edit, 'String')); evap_rate = str2double(get(handles.evap_rate_edit, 'String')); % run the ant colony algorithm result = ant_colony_algorithm(ant_num, iter_num, evap_rate); % display the result in the image box axes(handles.result_axes); imshow(result); ``` 5. 最后保存GUI界面并进行测试。 以上就是制作蚁群算法GUI的步骤。需要注意的是,蚁群算法是一种优化算法,需要根据具体问题进行调参,以达到最佳效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NPC_0001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值