2016-10-26 11 views
3

のシステムを解きます。(以上2)線形不等式

{(t_0, -9*t_0 - 5*t_1 + 154, -5*t_0 - 3*t_1 + 77)} 

これまでのところFine。しかし、場合によっては、x、y、およびzが非負であるように制約することがあります。私はこの<

reduce_inequalities([0<=t_0, 0<=-9*t_0 - 5*t_1 + 154, 0<=-5*t_0 - 3*t_1 + 77],[t_0, t_1]) 

のようなアプローチを使用するとき、私は得る:

NotImplementedError: 
inequality has more than one symbol of interest 

はsympy、セージ、プロローグ、Haskellのか、他のいくつかの自由に利用可能な製品がで発生する線形不等式のシステムを解決するための手段を持っていますこちらです。

ありがとうございました!およそ整数プロローグでを推論する

+0

http://docs.sympy.org/latest/modules/solvers/inequalities.html#inequality-docsをご覧ください。私はそれを試したことはありませんが、不等式の線形セットではうまくいくようです。数値的な解法で十分なら、 'scipy.optimize.linprog()'を見てください。 – Dietrich

+0

解決したい方程式の例を投稿してください。 – asmeurer

+0

@Dietrichに感謝します。私はhttp://stackoverflow.com/questions/40441532/how-to-restrict-sympy-finiteset-containing-symbol/40443339#40443339で質問に遭遇するまで、私はそれを読むのを忘れていました。私は不等式のシステム*を解くことが可能であることを理解していませんでした。 –

答えて

2

、あなたのPrologシステムのCLP(FD) 制約を使用することができます。

正確な詳細は、異なるPrologシステム間でわずかに異なります。詳細はシステムのマニュアルを参照してください。関連する質問はをご覧ください。あなたのケースでは

、我々は単に制約を掲載することにより起動することができます。

 
?- 2*X + 3*Y - 5*Z #= 77. 
2*X+3*Y#=5*Z+77. 
この場合

、およびすべての純粋Prologプログラム用として、システムの答えは、宣言元のクエリに同等です。これはここではあまり役に立ちません。システムは元の制約をわずかに書き直しています。あなたがして、たとえば、このさらにを制約することができます

:要求されたよう

 
?- 2*X + 3*Y - 5*Z #= 77, 
    [X,Y,Z] ins 0..sup. 
X in 0..sup, 
2*X+3*Y#=5*Z+77, 
Y in 0..sup, 
Z in 0..sup. 

、この追加の目標は、負でない整数に変数を制約します。システムの答えはまだ ロットを助けていません。

label/1を使用して、具体的なのソリューションを検索することができます。しかし、このいわゆるラベルは、すべてのドメインが  有限であることが必要、と私たちは現在、取得ので:

 
?- 2*X + 3*Y - 5*Z #= 77, 
    Vs = [X,Y,Z], 
    Vs ins 0..sup, 
    label(Vs). 
ERROR: Arguments are not sufficiently instantiated 

(意味で)良いニュースは、我々がしようとする時間がないということですいずれにしてもすべての可能性があります。だから私たちは、検索スペースの有限の部分に自分自身を制限することもできます。たとえば:

 
?- 2*X + 3*Y - 5*Z #= 77, 
    Vs = [X,Y,Z], 
    Vs ins 0..10 000 000 000 000 000 000, 
    label(Vs). 

このクエリでは、あなたが整数ソリューションとして具体的な取得:あなたはで線形制約を推論しているので

 
X = 0, 
Y = 29, 
Z = 2, 
Vs = [0, 29, 2] ; 
X = 0, 
Y = 34, 
Z = 5, 
Vs = [0, 34, 5] ; 
X = 0, 
Y = 39, 
Z = 8, 
Vs = [0, 39, 8] ; 
X = 0, 
Y = 44, 
Z = 11, 
Vs = [0, 44, 11] ; 
etc. 

を、CLP(Q)も価値があるかもしれ 試してみる。

+0

ありがとうございます。これは興味深い研究をする。 –