Google OR Tools говорит, что поддерживает FICO XPRESS. Используя Python, вызов help(pywraplp.Solver.CreateSolver) Я вижу, что он поддерживает
- XPRESS_LINEAR_PROGRAMMING or XPRESS_LP
- XPRESS_MIXED_INTEGER_PROGRAMMING or XPRESS or XPRESS_MIP
У меня есть лицензия XPRESS, и она доступна для ОС.
import os
os.environ['XPRESS']='/Users/Me/XPRESS license/oem_xpauth.xpr'
import xpress as xp
xp.beginlicensing()
И это было принято библиотекой XPRESS Python. Настоящая мотивация заключается в том, что я не хочу переопределять эту довольно большую модель в XPRESS, когда Google OR Tools поддерживает ее использование.
Я наткнулся на приведенную ниже документацию от Google:
Чтобы включить поддержку XPRESS, настройте параметр -DUSE_XPRESS=ON и -DXPRESS_ROOT=/absolute/path/to/XPRESS/root/dir, заменив /absolute/path/to/XPRESS/root/dir на путь к вашему XPRESS установка. XPRESS_ROOT также может быть определен как среда переменная, а не опция во время настройки.
Выдаются ли эти командные строки? Или эти аргументы должны быть переданы в OR Tools через созданную ими библиотеку Python? Кроме того, есть ли риск того, что это нарушит пути, ожидаемые библиотекой XPRESS?
А также (по той же ссылке)
OR-Tools также могут опционально (отключено по умолчанию, т.е. OFF) быть скомпилировано с поддержкой следующих сторонних решателей:
GLPK (BUILD_GLPK), примечание. Вы должны включить поддержку решателя GLPK, используя -DUSE_GLPK=ON (по умолчанию OFF). CPLEX (USE_CPLEX), XPRESS (USE_XPRESS)
Но я не понимаю, где пройти USE_XPRESS






Xpress не поддерживается сборками ortools по умолчанию, которые вы получаете, например, от pip install ortools.
Вы должны самостоятельно создавать инструменты Google OR с поддержкой Xpress. Для этого:
make создайте Makefile.local с содержимым UNIX_XPRESS_DIR = /path/to/Xpress/installation и всегда указывайте USE_XPRESS=ON XPRESS_ROOT=/path/to/Xpress/installation при выдаче make commands.Я предполагаю, что вещи для установки через cmake или bazel аналогичны, но я никогда их не пробовал.
Я считаю, что вам нужно перекомпилировать вещи.