Обработка ConstraintList с помощью постоянного решателя

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

Перед использованием постоянного решателя, как описано на https://pyomo.readthedocs.io/en/stable/solvers/persistent_solvers.html, я использовал объект ConstraintList для итеративного добавления моих новых ограничений без необходимости называть их по отдельности. Я подумал, что это очень элегантное решение, и хочу посмотреть, есть ли способ уведомить постоянный решатель, когда к ConstraintList добавлено новое ограничение.

В документации написано, что

m.c2 = pe.Constraint(expr=m.y >= m.x)  
opt.add_constraint(m.c2) 

где m.c2 - ограничение, добавляемое к модели с помощью постоянного решателя. Какой была бы эквивалентная строка для уведомления постоянного решателя о том, что в ConstraintList было внесено изменение, после того как в него было добавлено ограничение?


person V. Brunelle    schedule 12.11.2018    source источник


Ответы (1)


Вот как вы создаете свой список ограничений

m.Cut_Defn = pyomo.ConstraintList(noruleinit=True)

А затем вы можете добавить ограничения в свой список ограничений:

m.Cut_Defn.add(some_number >= your_variable + some_other_number)

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

person oakca    schedule 13.11.2018
comment
Можете ли вы подтвердить / доказать / показать мне документы, что метод .add( из списка ограничений обновит модель, которая была ранее загружена, только один раз в постоянном экземпляре решателя? Это очень важно, поскольку решение с этими ограничениями дает тот же результат, что и решение без них (и я могу подтвердить, что они изменят результаты). И я не забыл решить после изменения списка ограничений. - person V. Brunelle; 13.11.2018
comment
Я не могу доказать вам, будет ли он обновляться, но вы можете попробовать что-то вроде: Предположим, ваша цель минимизировать - x, и у вас есть ограничение, которое говорит, что x ›= 10, и если вы добавите x‹ = 11 в свой список ограничений, и если вы разрешите эту модель, вы должны получить ошибку невозможности выполнения от вашего решателя. Чтобы вы могли понять, это добавляет ограничение. - person oakca; 14.11.2018
comment
вы можете найти интересный ответ на мой вопрос на форуме Pyomo здесь: groups .google.com / forum / #! topic / pyomo-forum / TI0bWesN62o Спасибо за потраченное время и помощь! - person V. Brunelle; 14.11.2018