Как использовать изменяемый параметр pyomo?

#pyomo

#pyomo

Вопрос:

Я пытаюсь сделать параметр изменяемым с нулевым инициализатором, но когда я попытался прочитать параметр в ограничении, он не понимает, что читается, единственный способ, который я нашел для чтения, — использовать .value, но когда проблема завершается объявлением всего ограничения. решатель нашел первое решение, но когда я определил новое значение параметра, оно не изменило значение параметра. Я знаю, делаю ли я плохо объявленное или я не нашел правильный белый цвет для этого.

В качестве решателя я использую CPLEX

Именно так я определил параметр:

 model.s_value = pe.Param(mutable=True, initialize=0)
 

Но если я использую параметр как обычный параметр, является ли ограничение промо отправленным этим сообщением:

    ValueError: Constraint 'def_constraint[0]' encountered a strict inequality expression ('>' or '<'). All constraints must be formulated using using '<=', '>=', or '=='.
 

Я думаю, это потому, что, когда pyomo устал читать параметр, который отправляет такой объект:

 pyomo.core.base.param.IndexedParam object at 0x1939C6A0
 

После объявления всех переменных я помещаю решатель в for и там переопределяю значение параметра:

 model.s_value.value= new_value
 

Пожалуйста. Кто-нибудь может объяснить мне, кто может правильно использовать изменяемый параметр и как я могу повторить модель.

Комментарии:

1. Похоже, что ошибка больше связана с типом неравенства. Существует очень мало случаев, когда требуется строгое неравенство, и в большинстве случаев ваш решатель все равно этого не допустит. Итак, вы пробовали переформулировать свои ограничения с <= >= помощью неравенств или?

Ответ №1:

Это простой пример изменения значения изменяемого параметра. Вы не опубликовали полный набор исполняемого кода выше, поэтому трудно понять, что происходит. Если это ниже не отвечает на ваш вопрос, попросите вас обновить (отредактировать) ваш пост выше с минимальным воспроизводимым примером.

 import pyomo.environ as pyo

m = pyo.ConcreteModel()

m.x = pyo.Var(domain=pyo.NonNegativeReals)
m.p = pyo.Param(mutable=True, initialize = 10)

# the problem
m.OBJ = pyo.Objective(expr=m.x)
m.c1 = pyo.Constraint(expr=m.x >= m.p)

solver = pyo.SolverFactory('glpk')

# solve it...  
results = solver.solve(m)
m.display()    # x=10

# change the mutable parameter
m.p = 5

# re-solve it
results = solver.solve(m)
m.display()    # x=5