二维阵列中数量的优化分配

2024-10-01 07:37:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,一个二维数组的每一行和每一列的总和是给定的,我们必须在数组的每个单元格中分配数量。 有些单元格将被锁定,您无法使用它们进行分发。另外,行/列的总量可以是十进制值。你知道吗

比如说, 我们有一个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 

我使用pythonscipy和ibmcplex(C#)尝试了线性f(x)=Min(x)和二次解算器f(x)=Min(x^2)。你知道吗

线性解算器不会优化分布。你知道吗

二次解算器有助于这种方法,但它不适用于数组的大小大于10*10。解算器失败,状态不可行。你知道吗

如果总数可以有十进制值,矩阵的大小可以达到100*10000,我应该使用什么方法/库来解决这个问题?你知道吗


Tags: and方法数量状态线性矩阵数组min
1条回答
网友
1楼 · 发布于 2024-10-01 07:37:07

如果你把方程组织成

 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 equationsAx=b

    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

解决此类系统的方法已在前面的堆栈溢出中讨论过:

相关问题 更多 >