文章目录
思路大纲
- 构建一个完全图
tsp_map
,包含了TSP问题中的城市与道路。 - 给定超参数
ant_count
和iter_num
,分别为蚂蚁数目和迭代次数。 - 对于每次迭代,对每只人工蚂蚁进行模拟,蚂蚁可能的行动方式有两种:
- 为防止困于局部最优值,根据随机概率
random_choose
选定一个随机城市作为下一步要去的目标; - 或者,根据信息素和启发式信息选择一个城市作为下一步要去的目标; d i j d_{ij} dij为城市间距离、 τ i j \tau_{ij} τij为城市 i i i与城市 j j j间的信息素、 p i j k p_{ij}^{k} pijk为选择从城市 i i i到城市 j j j的概率:
p i j k = τ i j × d i j − 1 ∑ k Δ τ i j k × d i j − 1 p_{ij}^{k}=\frac{\tau_{ij}\times d_{ij}^{-1}}{\sum_k{\Delta\tau_{ij}^{k}\times d_{ij}^{-1}}} pijk=∑kΔτijk×dij−1τij×dij−1
τ i j × d i j − 1 \tau_{ij}\times d_{ij}^{-1} τij×dij−1也可以分别加上超参数 α \alpha α和 β \beta β作为权重控制比例项。
- 记录下一步目标城市为 j j j,当前蚂蚁所在城市为 i i i;计算 Δ τ i j k \Delta\tau_{ij}^k Δτijk矩阵(下文代码中的
delta[i][j][k]
),其意义为蚂蚁 k k k从 i i i城市到 j j j城市爬行时分泌的信息素的增量(pheromone
)。( Q Q Q为单次爬行蚂蚁所能分泌的信息素):
Δ τ i j k = Q d i j \Delta\tau_{ij}^k = \frac{Q}{d_{ij}} Δτijk=<