Функция внешнего ограничения Python в MINLP

Можно ли добавить в качестве динамического ограничения внешнюю пользовательскую функцию в библиотеках смешанного целочисленного нелинейного программирования в Python? Я работаю с булевыми переменными и матрицами Numpy (размер m x n), где я хочу минимизировать сумму запрашиваемых общих значений (например, tot_vals = 2,3......n). Поэтому я хочу добавить некоторые "пространственные" ограничения, я создал функции (на основе булевой индексации) и пытаюсь реализовать их в своей процедуре оптимизации. В CVXPY происходит сбой, так как я могу добавить только форматированные ограничения CVXPY (насколько я знаю), PULP завершается сбоем, поскольку он работает только для проблем с LP, может быть, выбор может быть Pyomo, OpenOpt или PySCIPopt?

Заранее спасибо за вашу помощь

1 ответ

Решение

С PySCIPOpt это возможно. Вам потребуется создать пользовательский обработчик ограничений, который проверяет текущее решение LP на предмет выполнимости и, возможно, добавляет допустимые неравенства, чтобы обойти невозможность в следующем узле.

Одним из примеров этой процедуры является реализация TSP в PySCIPOpt. Это также объясняется более подробно в этой статье о PySCIPOpt.

Другие вопросы по тегам