CPLEX: доступ к сильным значениям ветвления через Python API - PullRequest
3 голосов
/ 29 апреля 2019

Я работаю над некоторой расширенной эвристикой ветвления для смешанного целочисленного программирования с использованием CPLEX (12.9) и его API-интерфейса Python (3.6). Часть решений о ветвлении должна основываться на сильной оценке переменных (SB). Несмотря на то, что я могу запросить оценку псевдостановок переменных непосредственно через API [1], кажется, что нет простого способа получить вычисленные оценки SB. Поэтому я хочу осуществить расчет самостоятельно. Я нашел старый пост на форуме, описывающий, как реализовать эффективные вычисления ветвления как можно эффективнее [2] с помощью C-API. К сожалению, описанный метод использует библиотечные вызовы (например, CPXgetcallbacknodelp ()), для которых я не могу найти соответствующие методы python.

Это оставляет мне три вопроса:

  1. Есть ли вызов API для получения баллов SB, которые я пропустил?
  2. Я пропустил питона оболочка для CPXgetcallbacknodelp () и т. д .?
  3. Есть ли простой способ добавить оболочки для неподдерживаемых вызовов C-API к оболочке cplex python (может быть, путем расширения генерируемых SWIG файлов Python)?

[1] https://www.ibm.com/support/knowledgecenter/SSSA5P_12.9.0/ilog.odms.cplex.help/refpythoncplex/html/cplex.callbacks.ControlCallback-class.html

[2] https://www.ibm.com/developerworks/community/forums/html/threadTopic?id=77777777-0000-0000-0000-000014479565&ps=25

1 Ответ

3 голосов
/ 29 апреля 2019

Нет способа получить прямой доступ к nodelp через CPLEX Python API.Если вы используете один из обратных вызовов, которые наследуют от HSCallback , вы можете позвонить на solve() и т. Д.исходная проблема, передайте его обратному вызову при его создании, а затем на каждом узле вызовите Cplex.advanced.strong_branching () .

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