【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 2020-09-16
      • 2020-12-20
      • 1970-01-01
      • 2018-09-08
      相关资源
      最近更新 更多