2016-11-16 38 views
0

パルプに乗算制約を線形化しようとしています。制約の乗算 - パルプ(Python)で解く

prob += (1 - Y) * (3 - X) 

に等しいです::Y*X:Yは、バイナリ変数は式のすべてが、ある

prob += 3 - 3*Y - X + X*Y 

には、以下の部分を除いて直線的である

それは次のようになります。私は別の質問で見つかった式を使用することによってこの問題を解決しようとした:

Link to the picture

Link to the question

だから私は、これはX*Y = Aを与える私のコードを使用して、X1*X2 = Yを使用してみました。私はログ代入メソッドを使用しました。

prob += math.log(float(A)) = math.log(float(X)) + math.log(float(y)) 

およびその他の制約:フロートが唯一の文字列または数値ではなくLpVariableできるため

prob += 3 - 3*Y - X + A 

のみこれが動作するようには思えないこれは私に次のコードを与えました。数式のイメージで与えられた最初のsubtitutionメソッドを使ってこの問題を解決する方法はありますか?

答えて

0

PyPiページのドキュメントに基づいて、LpVariableの値を呼び出すだけでよいように見えます。それは)あなたが、あなたが値を(使用して変数の値を取得することができ、あなたの計算で

https://pypi.python.org/pypi/PuLP

を使用することができます数値が得られます。例:

値(X): 2.0

だからあなたの関数は()の宣言も同様にそれが見えますので、不要である

prob += math.log(float(value(A))) = math.log(float(value(X))) + math.log(float(value(y))) 

として再書かれたフロートことができるかもしれませんLpVariablesのように内部の数値を普通に浮動小数点数として格納します

+0

私は「float()引数は文字列でも数値でも、 'NoneType」でなくてはなりません。 'フロートが必要です'。私はLpVariableのログを取ることは可能だとは思わない。 – WhatTheShrimp

+0

モジュールのソースコードを掘り下げて、値を取得するのは別の呼び出しです。それらのコードから - https://github.com/coin-or/pulp/blob/master/src/pulp/pulp.py - LpVariableクラスに: def値(自己): return self.varValue 変数の値を取得するには、変数に値が割り当てられていると仮定して、値(x)ではなくx.value()を指定する必要があります。 float()の部分を保持する必要がありますが、内部的にはLpVariableクラスのfloat型への値の代入はありません。 – huma474