0

条件式を持つ目的関数を使用することは可能ですか?ドキュメントからの例を変更Pyomoと条件付き目的関数

、私のような表現たいと思います:

def objective_function(model): 
    return model.x[0] if model.x[1] < const else model.x[2] 

model.Obj = Objective(rule=objective_function, sense=maximize) 

をこれは、このように直接モデル化できるか、私は、変換のいくつかの並べ替えを検討する必要があります(もしそうならどのように見えるでしょう好きですか?)代わりに、変数と式の、私はPyomoは私が値を取得したいと考えているためだと思います

Evaluating Pyomo variables in a Boolean context, e.g. 
    if expression <= 5: 
is generally invalid. If you want to obtain the Boolean value of the 
expression based on the current variable values, explicitly evaluate the 
expression using the value() function: 
    if value(expression) <= 5: 
or 
    if value(expression <= 5): 

ちょうど上記のようなエラーメッセージを表示します実行します。

答えて

0

これを定式化する1つの方法は、論理的論理和を使用することです。あなたは、使用のためにPyomo.GDPの文書に見ることができますが、それは次のようになります。あなたはまた、この使用して相補性制約を策定することができます

m.helper_var = Var() 
m.obj = Objective(expr=m.helper_var) 
m.lessthan = Disjunct() 
m.lessthan.linker = Constraint(expr=m.helper_var == m.x[0]) 
m.lessthan.constr = Constraint(expr=m.x[1] < const) 
m.greaterthan = Disjunct() 
m.greaterthan.linker = Constraint(expr=m.helper_var == m.x[2]) 
m.greaterthan.constr = Constraint(expr=m.x[1] >= const) 
m.lessthanorgreaterthan = Disjunction(expr=[m.lessthan, m.greaterthan]) 
# some kind of transformation (convex hull or big-M) 

関連する問題