2017-09-18 6 views
-1

2次元配列の各行と各列の合計が与えられ、配列の各セルにその量を分配する必要があるという問題があります。 ロックされるセルがいくつかあり、それらを配布用に使用することはできません。また、行/列の合計量は小数値でも構いません。したがって、例えば2次元配列の量の最適化

、 我々は、4 * 4 2次元アレイの各列の和が10,20,30,35と、各列の和である

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

は35,30,30であるました。

式私は直線F(X)= MIN(X^2)を用いて、F(X)= MIN(x)と二次ソルバーを試みた

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 

なるようにE、I及びKがロックされていますPython scipyとIBM CPLEX(C#)があります。

リニアソルバーは分布を最適化しません。

二次ソルバーはこのアプローチに役立ちますが、サイズが10 * 10を超えるアレイでは機能しません。ソルバーは実行不可能な状態で失敗しました。

合計に10進数の値があり、行列のサイズが100 * 10000になる場合、この問題を解決するために私はどのようなアプローチをとるべきですか?

+1

あなたはどのようなアプローチを試みましたか?何が効いていないのですか?おそらく、小数の2次元配列を持ち、合計をループで得るでしょう。どのような配布をする必要がありますか? –

+1

これと何が関係しているのですか? –

+0

私は自分の質問を更新しました。 @RufusL CPLEX二次ソルバを使って解決しようとしましたが、10 * 10の行列の後で失敗します。 –

答えて

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 

として方程式を整理する場合は、これは以前にスタックオーバーフローで議論されたようなシステムを解く

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 

system of linear equations Ax = bのです見ることができます:

+0

R * C未知数のR + C方程式があります。 – MBo

+0

はい、この場合、パラメータr1、r2に対して、r2 + r1-10、F =(-r2)-r1 + 30、G = r2、H = 30-r2、J = 35-r2、L = r2} – jq170727

+0

ありがとう@ jq170727、線形方程式は分布を最適化しません。 –