一、概念以及原理介绍(理解原理与公式)
- 除冰车辆蚁群算法步骤
(1)初始化各控制参数,确定待服务飞机的位置,将镰蚁放在除冰中心;
(2)将所有路径上的信息素挥发出来,每个蚂蚁按概率移动,确定allowed表;
(3)设待服务机位i,按概率选择公式选择下一个待服务机位j,若j机位所需除冰液qSW,则进行下一步,否则j回到allowed表,转到步骤6;
(4)计算j,并将i加入禁忌表,同时计算i,j之间的路径长度和除冰成本;
(5)局部信息素更新。当每个蚂蚁经过某路径后,用局部信息素更新公式对该路径的信息素进行更新释放;
(6)判断蚂蚁的禁忌表长度是否小于待除冰飞机数量,若是转到步骤3,否则转到步骤7
(7)对最优路径进行n次2-opt变换,将结果与变换前作比较,取小的作最优路径,并更
(8)用全局信息素更新公式对最优和最差路径进行信息素更新并释放;
(9)根据公式对自适应参数Q,p, 40,进行相应调整;
(10)判断当前循环次数是否等于所设置的最大循环次数,若是结束循环,若不是,清空禁忌表,重复上述步骤。
核心思想:
蚁群觅食过程中,每只蚂蚁在所走过的路径上均会释放出一种信息素,该信息素随时间的推移逐渐挥发。因此,每条路径上的信息素同时存在正负反馈两种机制。正反馈:蚂蚁每次经过该路径均会释放信息素使得该路径上的信息素浓度增加;负反馈:每条路径上的信息素随时间推移会逐渐挥发。由此,我们可以判断,在起点与终点之间,当相同数量的蚂蚁初始同时经过两条不同的路径时,路径上初始信息素的浓度是相同的;不过,当路径越短时,信息素挥发时间也越短,残留信息素浓度也将越高。随后的蚂蚁将根据路径上残留信息素浓度的大小对路径进行选择
— 浓度越高,选择概率越大。最终导致信息素浓度越高的路径上蚂蚁的选择数目越多,而更多的蚂蚁也将同时导致该路径上残留信息素浓度越高(即高者越高,低者越低)。因此,在理想情况下,整个蚁群将逐渐向信息素浓度最高的路径(即最短路径)进行转移。
迭代公式参考:
第二个公式是:信息素更新公式
用python编写代码实现以下
源码文件:test_01.py
这里需要用到两个库:一个用于科学计算、矩阵、数组计算的库numpy,一个是绘图库matplotlib,具体设计看源码有注释
coordinates = np.array([[565.0, 575.0], [25.0, 185.0], [345.0, 750.0], [945.0, 685.0], [845.0, 655.0],
[880.0, 660.0], [25.0, 230.0], [525.0, 1000.0], [580.0, 1175.0], [650.0, 1130.0],
[1605.0, 620.0], [1220.0, 580.0], [1465.0, 200.0], [1530.0, 5.0], [845.0, 680.0],
[725.0, 370.0], [145.0, 665.0], [415.0, 635.0], [510.0, 875.0], [560.0, 365.0],
[300.0, 465.0], [520.0, 585.0], [480.0, 415.0], [835.0, 625.0], [975.0, 580.0],
[1215.0, 245.0], [1320.0, 315.0], [1250.0, 400.0], [660.0, 180.0], [410.0, 250.0],
[420.0, 555.0], [575.0, 665.0], [1150.0, 1160.0], [700.0, 580.0], [685.0, 595.0],
[685.