具有多个起点的最短路径的算法

时间:2019-07-10 17:29:31

标签: algorithm knapsack-problem

我有多个起点(蓝色圆圈)和多个终点(绿色方块),如下图所示: enter image description here

  • 我知道每个起点和终点之间的距离。
  • 每个起点只能有一定数量的目的地。

我想找到最有效的原点-目的地组合,以使总距离最小。

唯一想到的是某种背包问题,但是我真的不知道如何进行,因为这里的物品没有恒定的“重量”(距离)。

1 个答案:

答案 0 :(得分:3)

假设您有一个距离矩阵W,其中W[i][j]是起点i与终点j之间的距离,则可以将问题表示为二进制整数程序,其中如果将目的地b[i][j]分配给起点j,则i为1,否则为0。如果我们填满容量

min sum_{i,j} w[i][j]*b[i][j]
subject to
sum_j b[i][j]=capacity[i] for all i (1)
sum_i b[i][j]<=1 for all j(2)

约束(1)说,每个原点都被装满了。约束(2)表示没有将目的地分配给超过1个起点。 如果有足够的容量容纳所有目的地,那就解决

min sum_{i,j} w[i][j]*b[i][j]
subject to
sum_j b[i][j]<=capacity[i] for all i 
sum_i b[i][j]=1 for all j 

我认为第二种说法是Multiple knapsack problem的版本。

因此,您可以做的是检查第二种说法是否有可行的解决方案,如果没有, 解决第一个。您可以使用MIPS求解器。