【问题标题】:Optimal ant colony location algorithm最优蚁群定位算法
【发布时间】:2015-04-07 09:24:50
【问题描述】:

假设有一个网格,其中包含两面墙(封闭的单元格)以及放置在网格上任何位置的食物。

现在假设我们正在尝试确定将蚁群放置在此网格上的最佳位置,这样蚂蚁必须行进最短的距离(在任何方向往返蚁群的起点)以获得最大距离食物量。

到目前为止,我想出的最佳方法如下:

for each square on the grid
    use a shortest path algorithm to find the distance to/from each food source from this square
    sum these distances to find a number and put the number in that square
select the square with the smallest number

这种方法是否可行?有没有更有效的解决方案?

【问题讨论】:

  • 优化将是跟踪最短距离,并停止计算任何超过的sum of shortest paths
  • 不清楚您要在这里优化什么功能。食物颗粒大小都一样吗?假设在 (0,0) 处有一个颗粒,在 (4,0) 处有另一个。将菌落放在 (0,0) 处(在一个颗粒顶部,距离另一个颗粒 4 个单位)更好,还是将菌落放在 (2,0) 处(两个颗粒之间)更好?如果您将颗粒视为 foodValue/distance,则第一个更好。如果您将颗粒视为 foodValue - 距离,则颗粒之间的所有位置都一样好。一只蚂蚁可以一次将整个颗粒带回蚁群吗?
  • @robmayoff 我认为“这样蚂蚁必须走的距离最短”很清楚——OP 试图最小化一个特定点与所有包含食物的细胞之间的距离总和。跨度>
  • 真的不明显。如果你想优化某些东西,你真的需要一个数学表达式来处理。

标签: algorithm shortest-path path-finding


【解决方案1】:

一些基于蛮力方法的优化:

  • 跟踪最短距离,停止计算任何超过的sum of shortest paths

  • 如果曼哈顿距离 (delta(x) + delta(y)) 比记录的短路距离长,则停止计算

  • 结合曼哈顿距离优化:从棋盘的中心或食物包的中心开始,由内而外地锻炼自己。最佳位置更有可能在中间的某个地方

  • 将您的搜索域缩小到食品包之间的区域(即来自[1,1] to [6,7],而不是[0,0] to [7,7]

  • Nikunj的优化

此外,如果您的板真的很大,optimisation solver 可能能够减少计算次数。但是,您的问题似乎是一个非凸问题,并且许多求解者在解决这些问题时遇到了问题。

【讨论】:

    【解决方案2】:

    是的,您的算法有效,但您可以针对 [食物包数量]

    distances = new int[ROWS][COLS];
    
    for each food-packet on the grid
        use a shortest path algorithm to find the distance to/from each square from this food-packet
        accumulate the distances for each square in the 'distances' array
    

    最后,距离数组将包含蚁群捕获网格上所有食物包所需的工作量。将蚁群放在数值最小的方块上。

    但请注意,这种方法的渐近复杂度与您在问题中给出的算法相同。


    P.S taoufiq 在 cmets 中对您的算法进行了另一个明显的优化。 IE。停止计算任何超过目前找到的最短距离的最短路径总和。

    希望这是有用的。

    【讨论】:

    • 谢谢!我实现了这个算法(在 Lee 算法的基础上寻找最短路径)并且它有效。
    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多