【问题标题】:how to access variable of previous calculation in pyomo optimization mode如何在pyomo优化模式下访问先前计算的变量
【发布时间】:2022-09-23 01:22:28
【问题描述】:
我如何在 pyomo 中从 gurobi 中写出这个等价物?
--> 我想在循环中构建模型,并且需要访问上一步的变量/结果:
variables = {\'A_0\': 1, \'B_0\':2, \'C_0\':3}
for ix in range(1,77):
variables[f\'A_{ix}\'] = model.addVar(vtype=GRB.CONTINUOUS, name=f\'A_{ix}\', lb=0.0)
variables[f\'B_{ix}\'] = model.addVar(vtype=GRB.CONTINUOUS, name=f\'B_{ix}\', lb=0.0, ub=77)
variables[f\'C_{ix}\'] = model.addVar(vtype=GRB.CONTINUOUS, name=f\'C_{ix}\', lb=0.0)
model.addConstr(variables[f\'C_{ix}\'] <= variables[f\'A_{ix}\'] * variables[f\'B_{ix-1}\'])
标签:
python
optimization
pyomo
gurobi
【解决方案1】:
当然。您可以在解决后提取该值并使用它做任何您想做的事情......
您可以将其重新合并到约束中(如图所示),将其置于变量的边界中,或 fix() 具有该值的变量等。
import pyomo.environ as pyo
def model_runner(prior_value : float=None):
m = pyo.ConcreteModel()
m.X = pyo.Var()
constraint_lim = prior_value if prior_value else 10
m.c = pyo.Constraint(expr=m.X <= constraint_lim)
m.obj = pyo.Objective(expr=m.X*5, sense=pyo.maximize)
res = pyo.SolverFactory('glpk').solve(m)
return pyo.value(m.obj), pyo.value(m.X)
x_lim = None
for i in range(5):
obj, x_lim = model_runner(x_lim)
print(f'current objective {obj} with x_lim: {x_lim}')
x_lim -= 1
输出:
current objective 50.0 with x_lim: 10.0
current objective 45.0 with x_lim: 9.0
current objective 40.0 with x_lim: 8.0
current objective 35.0 with x_lim: 7.0
current objective 30.0 with x_lim: 6.0