我遇到的问题是给出了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?
答案 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上讨论了解决此类系统的问题: