问题描述
我想使用 Pyomo(双层模块)解决以下简单的 maxmin 问题
我已经使用 KKT 的条件解决了问题,结果是(如预期的)x=y=10
但我想使用 pyomo.bilevel 解决类似的问题
我知道该模块已弃用,但 PAO(指示的模块)仍在开发中。
我尝试了以下代码,但没有成功
from pyomo.environ import *
from pyomo.bilevel import *
M = ConcreteModel()
M.x = Var(bounds=(0,100))
M.s = SubModel(fixed=M.x)
M.s.y = Var(bounds=(0,10))
M.s.o = Objective(expr= M.x,sense=maximize)
M.o = Objective(expr= M.s.o,sense=minimize)
M.s.c1 = Constraint(expr= M.x>=M.s.y)
opt = SolverFactory('gurobi')
opt.solve(M)
M.pprint()
如果我尝试在 M 和 M.s 之间切换 x 和 y,则会出现错误。
谢谢。
解决方法
我相信我找到了解决方案
from pyomo.environ import *
from pyomo.bilevel import *
M = ConcreteModel()
M.y = Var(bounds=(0,10))
M.s = SubModel()
M.s.x = Var(bounds=(0,100))
M.s.o = Objective(expr= M.s.x,sense=minimize)
M.o = Objective(expr= M.s.o,sense=maximize)
M.s.c1 = Constraint(expr= M.s.x>=M.y)
opt = SolverFactory('bilevel_blp_global')
opt.options['solver'] = 'gurobi'
result = opt.solve(M)
M.s.x.pprint()
M.y.pprint()