使用 Pyomo Bilevel 解决最大最小问题
Solve maxmin problems using Pyomo Bilevel
我想使用 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()
如果您正在寻找 KKTs 方法,请查看以下公式:
我想使用 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()
如果您正在寻找 KKTs 方法,请查看以下公式: