Как использовать XPRESS в качестве решателя в Google ИЛИ Tools?

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

Я считаю, что вам нужно перекомпилировать вещи.

Erwin Kalvelagen 09.12.2022 04:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Xpress не поддерживается сборками ortools по умолчанию, которые вы получаете, например, от pip install ortools.

Вы должны самостоятельно создавать инструменты Google OR с поддержкой Xpress. Для этого:

  1. Следуйте общим инструкциям от ortools здесь (см. разделы «сборка из исходников»).
  2. Для установки через make создайте Makefile.local с содержимым UNIX_XPRESS_DIR = /path/to/Xpress/installation и всегда указывайте USE_XPRESS=ON XPRESS_ROOT=/path/to/Xpress/installation при выдаче make commands.

Я предполагаю, что вещи для установки через cmake или bazel аналогичны, но я никогда их не пробовал.

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