我用一只蚂蚁开发了我的蚁群算法,这样它就可以找到起点和终点之间的最短路径。
但答案的重复性很差。我在Dorigo一本书中读到了一个蚂蚁算法的结果是不好的,所以我试图添加更多的蚂蚁现在我的主要问题是我应该如何更新轨迹?所有蚂蚁都应该找到目标然后更新通过的边吗?或者每一个找到目标的蚂蚁,算法都应该立即更新轨迹?
最佳答案
为什么要在构建完整路径后更新信息素:
构造路径时,在每次迭代中都要添加一个可用顶点,该顶点是尚未添加到路径中的顶点路径的值只有在构建完完整路径后才能确定,在某些情况下,一些看起来很有前途的部分路径可能会导致出现“陷阱”(在路径构建的后期,您将不得不添加非常长的边),并最终导致非常糟糕的结果。
更重要的是,我建议你只有在整代蚂蚁构建了它们的完整路径之后才能更新信息素。
为什么?因为您使用的是概率模型,而正在构建的路径受两个参数的影响:信息素和“启发式”参数(即边的长度)。当你开始算法时,所有的边缘都有相同的信息素水平,蚂蚁以“贪婪”的方式行动,这意味着它们倾向于选择较短的可用边缘(边缘可能在以后的迭代中被丢弃,因为它们会导致不好的结果)。如果每只蚂蚁都能在信息素完成后及时更新它,你就有更大的机会达到早期停滞并找到局部最小值,而且你也不会给蚂蚁一个很好的机会去探索更广阔的搜索空间并变得更聪明保存每次迭代中所有蚂蚁的列表,让所有蚂蚁构造一条路径,然后让每个蚂蚁存储信息素(这样你也可以应用“排序”方法,这意味着存储信息素的数量将由迭代中蚂蚁的排名决定,而不是解的值,这有时有助于区分接近最优的解决方案)。
这也是为什么在每次迭代中不应该只使用一个ant的原因。你也会得到类似的结果。我建议你把你的“计算能力”更平均地划分为每一代蚂蚁的数量和每一代蚂蚁的数量(例如,一次迭代100只蚂蚁,100次迭代)。
我相信如果你运用这个逻辑,你会得到预期的结果。