我有多个起点(蓝色圆圈)和多个终点(绿色方块),如下图所示:
我想找到最有效的原点-目的地组合,以使总距离最小。
唯一想到的是某种背包问题,但是我真的不知道如何进行,因为这里的物品没有恒定的“重量”(距离)。
答案 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求解器。