2017-02-07 64 views
2

私はすでにGauss-Jordan消去を使用して行エシロン行列に縮小された線形方程式系を持っています。 n変数Xn(ここでXnはN0(=正の整数)にあります)を持つ私のシステムは複数の解を持ち、私は魔法使いの解を見つけたいと考えていますすべてのXnの和は最小ですです。最小限の変数の追加制約がある線形方程式の合計

どうすればいいですかプログラムによって?例えば

線型方程式のこのシステムで考えてみましょう。私は取得したい最小限のソリューションの

x1 +    + x5 + x6 = 2 
    x2   + x5  = 1  
      x3   + x6 = 1 
       x4 + x5 + x6 = 1 

1は次のようになります。

x3 = x4 = x5 = 0 
x1 = x2 = x6 = 1 

もう一つは

x2 = x4 = x6 = 0 
    x1 = x3 = x5 = 1 

だろう。しかし私はしたくないです

x1 = 2 
x2 = x3 = x4 = 1 
x5 = x6 = 0 

このシステムの解決策でもありますが、x1 + x2 + x3 + x4 + x5 + x6 = 5(2番目の最初の解決策では3にすぎません)のような基準では最小限ではありません。

(溶液1および2の両方が最小限である、ここでのように、)複数の最小限の溶液の場合には

、私は以来限り、それは最小限のもの

+0

変数は非負である必要がありますか?異なる合計を持つ解が存在するため、達成可能な合計は以下に限定されないことになります。 –

+0

はい、変数は非負です。それらは正の整数{0,1,2、...}のセットに属します –

+1

インスタンスにはいくつの変数がありますか?いくつの方程式がありますか? – sascha

答えて

0

の一つであるとして返され、最小限のソリューションを気にしません変数はすべて非負であり、この問題は本質的に整数プログラミングと同じです。既製の整数型プログラムソルバーを使用し、

minimize x1 + x2 + x3 + x4 + x5 + x6 
subject to 
x1    + x5 + x6 = 2 
    x2   + x5  = 1 
      x3   + x6 = 1 
       x4 + x5 + x6 = 1 
integers 
x1, x2, x3, x4, x5, x6 >= 0 

(正確な構文はツールによって異なります)を使用してください。

+0

私は外部ツールを使いたくありません。私はこのソルバーを自分でプログラムする必要があります(プログラミングしているゲームに統合するために)。それは私の質問の目標でした... –

+2

@ThomasBernard:多くの言語のための線形プログラミングパッケージがあります:あなたはあなたのゲームに1つを統合することができます。本当に自分でプログラムしたいのであれば、[simplex method or simplex algorithm](https://en.wikipedia.org/wiki/Simplex_algorithm)を検索して実装してください。 –

+0

@RoryDaultonシンプレクスは十分ではなく、シンプレックスはそこでの最も面白いプログラミングタスクの1つです(パフォーマンスが重要な場合、彼のインスタンスのサイズはわかりません)。 – sascha

関連する問題