我有一个矩阵。约束是每列只选择一个元素。然后仅使用所选元素计算行总和。目标是最大化行和的最小值。 例如:
矩阵
1 2 3 4 - > 4
2 2 2 2 - > 2 + 2 = 4
3 1 1 3 - > 3
因此,每列所选元素的行和的最小值为min(4,4,3)= 3
如何实现这一目标?除了暴力之外,我无法弄明白,这意味着要经历所有列排列和它们的行总和。看起来这么简单的任务应该有一种更有效的方法吗?
答案 0 :(得分:1)
通过从3-partition减少来解决这个问题非常困难(准备好几个由3分区输入组成的重复行,每个所需分区一个)。在最坏的情况下,混合整数编程(MIP)求解器可能并不比蛮力好,但它很容易值得一试。假设矩阵a
具有m
行和n
列。在以下整数程序中,当且仅当选择行x(i,j)
和列1
处的元素a(i,j)
时,0-1变量i
为j
。
maximize z
subject to
for all i in [1, m], -z + sum for j in [1, n] of a(i,j) x(i,j) >= 0
for all j in [1, n], sum for i in [1, m] of x(i,j) = 1 (or is it <= 1?)
for all i in [1, m], for all j in [1, n], x(i,j) in {0, 1}