Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 更新蚂蚁信息素问题_Algorithm_Optimization - Fatal编程技术网

Algorithm 更新蚂蚁信息素问题

Algorithm 更新蚂蚁信息素问题,algorithm,optimization,Algorithm,Optimization,我用一只蚂蚁开发了我的蚁群算法,所以它可以找到起点和目标点之间的最短路径 但答案的重复性很差。我在红皮书中提到,使用一只蚂蚁的算法的结果是不好的,所以我尝试添加更多的蚂蚁。现在我的主要问题是我应该如何更新这些轨迹?所有蚂蚁都应该找到目标,然后更新传递的边吗?或者每一只找到目标的蚂蚁,算法都应该立即更新轨迹 蚁群优化是一种速度优化,当您需要重复性时,可以使用k2或k3 opt算法优化结果。当您想要更快的速度时,请寻找动态解决方案。我可以从gebweb推荐OptimapJavaScript。它还有一

我用一只蚂蚁开发了我的蚁群算法,所以它可以找到起点和目标点之间的最短路径


但答案的重复性很差。我在红皮书中提到,使用一只蚂蚁的算法的结果是不好的,所以我尝试添加更多的蚂蚁。现在我的主要问题是我应该如何更新这些轨迹?所有蚂蚁都应该找到目标,然后更新传递的边吗?或者每一只找到目标的蚂蚁,算法都应该立即更新轨迹

蚁群优化是一种速度优化,当您需要重复性时,可以使用k2或k3 opt算法优化结果。当您想要更快的速度时,请寻找动态解决方案。我可以从gebweb推荐OptimapJavaScript。它还有一个蚁群优化器和k2和k3 opt算法,以及tsp问题或开放tsp问题的动态解决方案。还有一个前端可用的网页。

在构建完整路径后,为什么要更新信息素:

构建路径时,在每次迭代中都会添加一个可用顶点,该顶点是尚未添加到路径的顶点。只有在构建完整路径之后,才能确定路径的值,在某些情况下,某些看起来非常有希望的部分路径可能会导致“陷阱”(在路径构建的后续阶段,您必须添加很长的边),并最终导致非常糟糕的结果

更重要的是,我建议你只有在整整一代蚂蚁构建完他们的完整路径后才能更新信息素

为什么??因为您使用的是概率模型,并且正在构建的路径受到两个参数的影响:信息素和“启发式”参数(即边的长度)。启动算法时,所有边都具有相同的信息素级别,蚂蚁以“贪婪”的方式行事,这意味着它们倾向于选择较短的可用边(这些边可能在以后的迭代中被丢弃,因为它们会导致糟糕的结果)。如果每只蚂蚁都能及时更新信息素,那么你就有更大的机会达到早期停滞并找到局部最小值,而且你也不会给蚂蚁一个很好的机会去探索更广阔的搜索空间并变得更聪明。保存每次迭代中所有蚂蚁的列表,让所有蚂蚁构造一条路径,然后让每个蚂蚁存放信息素(这样你也可以应用“排名”方法,这意味着沉积的信息素的数量将由蚂蚁在迭代中的排名决定,而不是解的值,这有时有助于区分接近最优的解)

这也是为什么不应该在每次迭代中只使用一个ant的原因。因为你会得到类似的结果。我建议您将“计算能力”更平均地划分为每代蚂蚁的数量和每代蚂蚁的数量(例如,一次迭代中100只蚂蚁,100次迭代)


我相信如果你运用这个逻辑,你会得到预期的结果。

+1:仅供参考。很酷的东西!谢谢亲爱的罗恩,我将测试这个方法,我希望它能给我好的结果。