Получить метку ограничения (не индекс) в журнале CPLEX с помощью PYOMO - PullRequest
0 голосов
/ 22 марта 2020

Я использую модель MIP в PYOMO, вызывая CPLEX в качестве решателя.

Я получаю следующий журнал:

  Implied bounds make row 'c_e_x1835719_' infeasible.

Я хотел бы знать, какое из моих ограничений c_e_x1835719 представляет. Как мне выполнить sh это в PYOMO?

Вот мой вызов решателя:

 results = SolverFactory.solve(model, 
                               tee = True,
                               logfile = "model.log")

Я пытался имитировать c этот поток из OPL, устанавливая больший порог BigMAP через option_string, но не удалось (CPLEX не распознал BigMAPthreshold в качестве допустимого параметра).

 results = SolverFactory.solve(model, 
                               tee = True,
                               logfile = "model.log",
                               option_string='bigMapTheshold=1000000')

Я объявляю свои ограничения следующим образом:

    model.profit=Constraint(model.T, name='profit', rule=_profit)

РЕДАКТИРОВАТЬ:

В качестве первого комментария к вопросу, preolve изменяет конфигурации ограничений, и поэтому нет смысла пытаться получить оригинальное имя ограничения в журнале.

НО ...

Было бы возможно распечатать это совершенно новое невыполнимое ограничение, чтобы выяснить, что может быть root причиной неосуществимости?

Спасибо

1 Ответ

1 голос
/ 25 марта 2020

Как упоминал Даниил, вам следует использовать уточнение конфликта. Я не знаю, предоставляет ли Pyomo интерфейс для этой функции CPLEX. Если это не так, вы можете сохранить модель в виде файла .lp или .sav и использовать интерактив CPLEX:

cplex -c "read file.sav" "tools conflict"

Документация по этой функции находится на https://www.ibm.com/support/knowledgecenter/SSSA5P_12.10.0/ilog.odms.cplex.help/CPLEX/UsrMan/topics/infeas_unbd/conflict_refiner/06_Interactive_title_synopsis.html.

...