簡體   English   中英

如何在pyomo優化模式下訪問先前計算的變量

[英]how to access variable of previous calculation in pyomo optimization mode

我如何在 pyomo 中從 gurobi 中寫出這個等價物?

--> 我想在循環中構建 model 並且需要訪問上一步的變量/結果:

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}'])

當然。 您可以在解決后提取該值並使用它做任何您想做的事情......

您可以將其重新合並到約束中(如圖所示),將其置於變量的邊界中,或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

Output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM