Нахождение обязательных ограничений для программы со смешанными целыми числами - PullRequest
0 голосов
/ 31 декабря 2018

Я хочу найти ограничения, которые являются обязательными при оптимальном решении проблемы MIP, решаемой с помощью Cplex в c ++.Под связыванием я подразумеваю ограничение, в котором значение LHS равно значению RHS.Например, если решение проблемы:

x = 1, y = 0,

, тогда ограничение x + y <= 2 не является обязательным (LHS = 1 + 0 <2 = RHS), но x - y <= 1 является обязательным (LHS = 1 - 0 = 1 = RHS).</p>

Это может быть сделано для LP, использующих функции getSlack или getDual IloRange: если ослабление ограничения равно нулю или двойное значение не равно нулю, ограничение является обязательным.

Iне может найти любую функцию Cplex, которая дает это свойство или значение для IloRange, IloConstraint или подобных объектов, когда проблема заключается в MIP.Я также предпочел бы не делать это вручную в c ++ (извлечение каждой переменной ограничения и суммирование их значения для ограничения).Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Даже если вы нашли способ сделать это, как описано в своем собственном ответе, стоит прочитать, например, эту страницу: http://www -01.ibm.com / support / docview.wss? Uid =swg21399941

Идея состоит в том, что вы можете решить свою проблему с MIP, затем изменить тип проблемы на «фиксированную» линейную проблему и решить ее заново.Поскольку этот подход исправляет текущее решение, но решает проблему как LP, тогда становятся доступными все другие двойственные значения и сниженные затраты.

Надеюсь, что это поможет.

0 голосов
/ 01 января 2019

Я нашел ответ, IloCplex :: getValue (IloNumExprArg) фактически дает вам значение выражения (аналогично ограничению LHS) для текущего решения.Сравнение этого значения с константой RHS определяет, является ли ограничение обязательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...