Двухуровневая оптимизация с использованием Python scipy.optimize

#python #mathematical-optimization #scipy-optimize

#python #математическая оптимизация #scipy-оптимизировать

Вопрос:

Как я могу закодировать задачу двухуровневой оптимизации, используя scipy.optimize.minimize которую, состоящую из следующих двух уровней: (1) является проблемой верхнего уровня, которая зависит от (2) является проблемой нижнего уровня:

  1. минимизировать задачу линейного программирования с учетом
  2. минимизировать проблему квадратичного программирования

Я знаю, как написать единую целевую функцию для квадратичного программирования как типичную scipy.optimize.minimize процедуру (шаг 2 сам по себе), но как я могу добавить задачу минимизации верхнего уровня, которая имеет свою собственную целевую функцию? Можно scipy ли справиться с проблемой минимизации, связанной с более низкой проблемой минимизации? Приблизительный план кода с использованием minimize и linprog поможет

Ответ №1:

Я не думаю, что решатели scipy очень подходят для этого.

Стандартный подход к двухуровневым задачам заключается в формировании условий KKT внутренней задачи и добавлении их в качестве ограничений к внешней задаче. Условия взаимодополняемости усложняют проблему. Вам нужен глобальный решатель NLP или MIP-решатель, чтобы решить эту проблему с доказанной оптимальностью. Вот некоторые формулировки для линейных двухуровневых задач. Если внутренняя проблема является (выпуклой) проблемой QP, все становится немного сложнее, но можно применить ту же идею (сформировать условия KKT внутренней проблемы).

Для получения дополнительной информации см. Bard, Практическая двухуровневая оптимизация: алгоритмы и приложения, Springer, 1998.