我正在建造一个机器人模拟器,我有n个机器人需要去n个不同的位置。所有机器人同时开始移动。当机器人到达指定位置时,它会停止移动。所有机器人到达其位置所需的总时间由给定机器人到达其指定位置所需的最长长度决定。我想通过巧妙地为机器人分配目的地来最小化这个最长的长度。
显然这个问题是"Linear bottleneck assignment problem"。
我找不到任何代码来解决这个问题。任何人都有任何伪代码或实际代码(任何语言都很好,Ruby / Java首选)来有效地解决这个问题吗?
答案 0 :(得分:2)
阈值算法是解决线性瓶颈分配问题的标准算法之一。快速搜索没有出现我可以在这里轻松复制和粘贴的伪代码,但是由Rainer Burkard,Mauro Dell'Amico和Silvano Martello在分配问题的第175页给出了伪代码。以下是relevant page的Google图书链接。几页之后,他们给出了另一种利用二元性的算法,但我对那个并不熟悉。
答案 1 :(得分:0)
LBAP(线性瓶颈分配)只是与您的案例相关的分配和路径路由问题的整个系列中的一个特定子类。
在决定实施n个机器人的 MinMax 路由算法时,您有很多选择。 这就是我要做的事情:我从 Dijkstra的最短路径算法的最简单实现开始。
wikipedia page for Dijkstra有一个很好的可视化示例,但它们的伪代码看起来比它需要的更令人生畏。它甚至链接到robot motion planning但是从您的问题看起来您正在寻找要实现的路径算法。
[根据OP的澄清重新更新。 MINMAX] 强>
Dijkstra仍然有效,但您还需要一些额外的步骤。 这是基本策略:
For each robot r = 1 to n
calculate the shortest time-path for r from source of r to sink of r - (suggest starting with Dijkstra's) [if you are assuming constant speeds, then distance and length become equivalent]
Next r
MinMax架构:
t_max
"slack"
- t_max
减去time_r
slack
内路由,那么您就完成了。否则,将t_max更新为最长(重新路由)的路径。以下是您应该能够使用的Dijkstra代码的一些示例。 (网络搜索将产生更多。)
附加说明:
希望有所帮助。