我用一只蚂蚁开发了我的蚁群算法,因此它可以找到起点和目标点之间的最短路径。
但答案的可重复性很差。我已经在Dorigo书中写了一篇关于算法的结果,其中一只蚂蚁是坏的,所以我试图添加更多的蚂蚁。现在我的主要问题是我应该如何更新路径?所有蚂蚁应该找到目标,然后更新传递的边缘吗?或者每个找到目标的蚂蚁,算法应该立即更新踪迹?
答案 0 :(得分:1)
为什么在构建完整路径后应更新信息素:
在构建路径时,在每次迭代中添加一个可用顶点,这是一个尚未添加到路径的顶点。只有在构造完整路径之后才会确定路径的值,并且在某些情况下,某些看似非常有希望的部分路径可能会导致您进入“陷阱”(当您需要在以后添加非常长的边缘时)路径构建的阶段),最终导致非常糟糕的结果。
更重要的是,我建议你只有在整整一代蚂蚁构建完整路径后才更新信息素。
为什么呢?因为您正在使用概率模型,并且正在构造的路径受到2个参数的影响:信息素和“启发式”参数(边缘的长度)。当你启动算法时,所有边缘都具有相同的信息素水平,并且蚂蚁以“贪婪”的方式行动,这意味着它们倾向于选择较短的可用边缘(在以后的迭代中可能会丢弃的边缘,因为它们会导致不良结果)。如果每只蚂蚁在完成后立即更新信息素,你就有更大的机会达到早期停滞并找到当地的最低限度,并且你没有给蚂蚁一个很好的机会探索更广泛的搜索空间并变得更聪明。保存每次迭代中所有蚂蚁的列表,让它们全部构建一条路径,然后让它们每个都存放信息素(这样你也可以应用“排名”方法,这意味着沉积的信息素的数量将由迭代中蚂蚁的等级,而不是解决方案值,有时有助于区分接近最优的解决方案。)
这也是你不应该在每次迭代中只使用一个蚂蚁的原因。因为你会得到类似的结果。我建议你在每代中的蚂蚁数量和世代数(例如迭代中100蚂蚁,100次迭代)之间更均匀地划分你的“计算能力”。
我相信如果你应用这个逻辑,你将得到预期的结果。
答案 1 :(得分:0)
当需要重复性时,蚁群优化可以优化速度,您可以使用k2或k3-opt算法优化结果。当您想要更快的速度寻找动态解决方案时。我可以从gebweb推荐optimap javascript。它还有一个蚁群优化器和k2和k3-opt算法以及tsp问题或open tsp问题的动态解决方案。还有一个可以提供前端的网页。