优化二维数组中的数量分布

时间:2017-09-18 04:31:50

标签: c# python optimization cplex quadratic-programming

我遇到的问题是给出了2-d数组的每一行和每列的总和,我们必须在数组的每个单元格中分配数量。 将会有一些单元格被锁定,您无法使用它们进行分发。此外,行/列的总量可以是十进制值。

所以例如, 我们有一个4 * 3的二维阵列

 A   B   C
 D   E   F
 G   H   I
 J   K   L 

其中每行的总和为10,20,30,35,每列的总和为35,30,30。

E,I和K被锁定,因此等式变为

 E = I = K = 0

 A + B + C = 10 
 D + F = 20 
 G + H = 30
 J + L = 35

 A + D + G + H = 30
 B + H = 30 and 
 C + F + L = 30 

我尝试使用Python scipy和IBM CPLEX(C#)测试线性f(x)= Min(x)和二次解算器f(x)= Min(x ^ 2)。

线性求解器不会优化分布。

二次求解器有助于该方法,但它不适用于大小超过10 * 10的数组。 Solver因不可行状态而失败。

我应该使用哪些方法/库来解决这个问题,因为总计可以有十进制值,矩阵的大小可以达到100 * 10000?

1 个答案:

答案 0 :(得分:0)

如果将方程式组织为

 A + B + C                        = 10
 A         + D     + G + H        = 30
     B                 + H        = 30
         C     + F            + L = 30
             D + F                = 20
                     G + H        = 30
                            J + L = 35

你可以看到这是system of linear equations Ax = b with

    1,1,1,0,0,0,0,0,0           10
    1,0,0,1,1,1,0,0,0           30
    0,1,0,0,0,1,0,0,0           30
A = 0,0,1,0,0,0,1,1,0   and b = 30
    0,0,0,1,0,0,1,0,0           20
    0,0,0,0,1,1,0,0,0           30
    0,0,0,0,0,0,0,1,1           35

先前在Stack Overflow上讨论了解决此类系统的问题: