Как добавить условия KKT, двойные ограничения выполнимости в примитивную модель с помощью Pyomo или Julia?

Я должен смоделировать определенные двухуровневые задачи. Подход состоит в том, чтобы удалить проблемы второго уровня, заменив их их условиями KKT или заменив их их условиями оптимальности, такими как сильная двойственность ... Я хочу делать это автоматически, не вычисляя эти условия самостоятельно и не перекодируя их обратно в первичный. У меня есть два основных вопроса, по которым я хотел бы получить вашу помощь:

  1. Как добавить к целевой функции двойственность определенных ограничений?
  2. Есть ли у меня способы делать то, что я хочу, и если нет, где я могу начать их писать, чтобы в конечном итоге они получили первичную модель и вернули модель с первичными, двойными ограничениями и сильной двойственностью или условиями KKT? Я полагаю, что получение ограничений и ручное формирование двойной задачи могло бы быть правильным подходом.

Я очень признателен за любую помощь, которую вы можете оказать, будь то Джулия или Пьомо.


person AliRa    schedule 22.11.2020    source источник
comment
Я настоятельно рекомендую задать два вопроса: один для Джулии, а второй - для Python. Вы можете копировать, вставлять и редактировать   -  person Lyndon White    schedule 22.11.2020


Ответы (1)


Для Pyomo обратитесь к пакетам pyomo.bilevel (ссылка) и pyomo.mpec (ссылка). Я обычно предпочитаю переформулировать вручную, чтобы знать, что происходит (и использовать инструмент, чтобы убедиться, что я сделал это правильно).

person Erwin Kalvelagen    schedule 22.11.2020
comment
спасибо, что нашли время, чтобы прокомментировать мою проблему. Я действительно просмотрел несколько из этих пакетов как в Python, так и в Julia (BilevelJuMP.jl ...); однако в большинстве случаев эти пакеты сделали все для решения сами. Мне нужно было бы самому взять эти условия оптимальности и, возможно, изменить их по некоторым критериям, а затем добавить их в первичный. Возможно, наличие ряда функций, которые дадут нам все такие ограничения, было бы идеальным для этой потребности: dualConstraints (..) strongDuality (..), KKT (..), каждая функция принимает объект модели. - person AliRa; 24.11.2020
comment
В отличие от пакета Julia, который я только что упомянул, и решателя EMP в GAMS, которые каким-то образом предоставляют способ использования двойника определенного ограничения нижнего уровня, кажется, однако, что Pyomo не предоставляет такой возможности. Вы что-нибудь об этом знаете? - person AliRa; 24.11.2020