私の環境は次のとおりです。私は現在やっているのPython 3.5.2、4.2.0アナコンダ(32ビット)、Pyomo 4.4.1(VOTD)(W7にCPythonと3.5.2)、バロン17.3.31PyomoでMINLPを解く。 「実行可能な解決策を開始する」という設定はありますか?
PyomoとBaronをソルバーとして最適化する。テストの場合、minlp問題が使用されます。 main.pyコードを次のように実行して最適な解決策を得ることができます。コードを実行するたびに、最初の実行後に、初めての実行と同じ解決策が得られます。結果が表示されます:ローカル検索で完了
出発溶液は、xxxxxは
の値を持つ可能であるスタートLP
境界ローカル検索
解決行うマルチをスタート局所探索
開始可能な解決策は毎回同じです。
しかし、カーネルを再起動して(Spyderを再起動して)ファイルを再度実行すると、別の解決策が得られる可能性があります。どうして?最適化プロセスをリセットする方法はありますか?カーネルを再起動せずにさまざまな解決策を得るにはどうすればよいですか?など
助けてください... imp.reload(pyomo.environ)、imp.reload(pyomo.opt):
I'vは、いくつかの試みを行って。ありがとうございました。
メインファイルmain.pyは以下の通りです:
from pyomo.environ import *
from pyomo.opt import SolverFactory
from minlp import model
instance = model.create_instance()
instance.dual = Suffix(direction=Suffix.IMPORT)
minlpopt = SolverFactory("baron")
results = minlpopt.solve(instance, tee=True)
print('Objective Fucntion: ' + str(instance.obj()))
モデルファイルminlp.pyは以下の通りです:
from pyomo.environ import *
# SETS ========================================================================
model = ConcreteModel()
model.y1 = Var(within=Binary)
model.y2 = Var(within=Binary)
model.y3 = Var(within=Binary)
model.x1 = Var(within=PositiveReals, bounds=(0,2))
model.x2 = Var(within=PositiveReals, bounds=(0,2))
model.x3 = Var(within=PositiveReals, bounds=(0,1))
# RULE ========================================================================
def obj_rule(model):
return (5 * model.y1 + 6 * model.y2 + 8 * model.y3 + 10 * model.x1 \
- 7 * model.x3 - 18 * log(model.x2 + 1) \
- 19.2 * log(model.x1 - model.x2 + 1) + 10)
model.obj = Objective(rule=obj_rule, sense=minimize)
def c1_rule(model):
return (0.8 * log(model.x2 + 1) + 0.96 * log(model.x1 - model.x2 + 1) \
- 0.8 * model.x3) >= 0
model.c1 = Constraint(rule=c1_rule)
def c2_rule(model):
return (log(model.x2 + 1) + 1.2 * log(model.x1 - model.x2 + 1) - model.x3 \
- 2 * model.y3) >= -2
model.c2 = Constraint(rule=c2_rule)
def c3_rule(model):
return model.x2 - model.x1 <= 0
model.c3 = Constraint(rule=c3_rule)
def c4_rule(model):
return model.x2 - 2 * model.y1 <= 0
model.c4 = Constraint(rule=c4_rule)
def c5_rule(model):
return model.x1 - model.x2 - 2 * model.y2 <= 0
model.c5 = Constraint(rule=c5_rule)
def c6_rule(model):
return model.y1 + model.y2 <= 1
model.c6 = Constraint(rule=c6_rule)