2011-10-11 6 views
11

私はMatlabの年月を経てまだPythonには新しくなっています。私は整数リニアプログラムを設定するためにパルプを使用しようとしています。Pythonのパルプと行列の使用

{P[i]:i=1...N} 

は私が最大限にしたい:

sum(x_i P_i) 

制約を受ける

A x <= b 
A_eq x = b_eq 

との境界(ベクトルベースの境界)

と数字の配列を考えると

LB <= x <= UB 

しかし、パルプでは、ベクター宣言を正しく行う方法はわかりません。私は以下を使用していました:

RANGE = range(numpy.size(P)) 
x = pulp.LpVariable.dicts("x", LB_ind, UB_ind, "Integer") 

私は個別の境界(したがって1つの番号のみ)を入力できます。

prob = pulp.LpProblem("Test", pulp.LpMaximize) 
prob += pulp.lpSum([Prices[i]*Dispatch[i] for i in RANGE]) 

制限のために、私は本当にこの行を1行にする必要がありますか?私は何かを見逃しているようです。私はいくつかの助けに感謝します。ドキュメントでは、簡単な例について説明します。私の場合の変数の数は数千です。

+0

私がPuLPで思い出したように、各制約を個別に(行単位で)追加する必要があります。 – arboc7

+0

私は同じ質問があります。私はこれが古いことを知っています。私は満足のいく答えを大いに感謝します! –

答えて

2

初期化後、変数にlowBoundおよびupBoundを設定できます。 次のコードで

LB[i] <= x[i] <= UB[i] 

で変数の配列を作成することができます。

LpVariable.dictの2番目のパラメータは、その下限ではなく、決定変数のインデックスセットです。

関連する問題