Документация Engee

Руководство по установке

В этом руководстве объясняется, как установить Julia и JuMP. Если при установке возникают проблемы, см. раздел Common installation issues ниже.

Установка Julia

JuMP — это пакет для Julia. Для использования JuMP сначала скачайте и установите Julia.

Если у вас нет опыта работы с Julia, прочитайте наше руководство Getting started with Julia.

Выбор версии

Вы можете установить текущий стабильный выпуск или выпуск с долгосрочной поддержкой (LTS).

  • Текущий стабильный выпуск — это последний выпуск Julia. В нем доступны новые функции и может быть выше быстродействие.

  • Выпуск с долгосрочной поддержкой — это более старая версия Julia, в которую продолжают вноситься исправления ошибок и проблем безопасности. Однако в ней может не быть новейших функций и улучшений производительности.

Большинству пользователей следует устанавливать текущий стабильный выпуск Julia и обновлять его при выходе новой версии. Обратите внимание, что любой код, написанный в одной из версий текущего стабильного выпуска, будет работать и во всех последующих.

Пользователям, работающим в ограниченных программных средах (например, с контролем устанавливаемого программного обеспечения со стороны ИТ-отдела предприятия), возможно, будет лучше установить выпуск с долгосрочной поддержкой, так как Julia не придется обновлять так часто.

Установка JuMP

JuMP устанавливается с помощью встроенного диспетчера пакетов Julia. Запустите Julia, а затем введите в командной строке julia> следующие команды:

julia> import Pkg

julia> Pkg.add("JuMP")

Мы рекомендуем создавать среду Pkg для каждого проекта, в котором применяется JuMP, чтобы не добавлять множество пакетов в глобальную среду. Дополнительные сведения по этой теме приводятся в документации по диспетчеру Pkg.

При выпуске новой версии JuMP выполнить обновление можно с помощью следующих команд:

julia> import Pkg

julia> Pkg.update("JuMP")

Установка решателя

Для решения задач оптимизации в JuMP применяются решатели. Поэтому перед решением задач с помощью JuMP потребуется установить один из них.

Установите решатель с помощью диспетчера пакетов Julia, при необходимости заменив "HiGHS" соответствующим именем пакета Julia.

julia> import Pkg

julia> Pkg.add("HiGHS")

После установки можно будет использовать HiGHS в качестве решателя в JuMP следующим образом, используя set_attribute для задания параметров решателя:

julia> using JuMP

julia> using HiGHS

julia> model = Model(HiGHS.Optimizer);

julia> set_attribute(model, "output_flag" => false)

julia> set_attribute(model, "primal_feasibility_tolerance" => 1e-8)

Большинство пакетов следуют соглашению об именовании ModuleName.Optimizer, но могут быть и исключения. Дополнительные сведения об использовании конкретного решателя, включая его специальные параметры, см. в файле сведений в репозитории пакета Julia на GitHub.

Поддерживаемые решатели

Большинство решателей написаны не на Julia, для использования некоторых из них требуются коммерческие лицензии, поэтому установка часто оказывается более сложной.

  • Если в столбце Installation («Установка») для решателя указано «Вручную» (Manual), для его установки требуется

выполнить действие вручную, например скачать и установить двоичный файл либо получить коммерческую лицензию. Дополнительные сведения см. в файле сведений соответствующего пакета Julia.

  • Если в столбце Installation («Установка») для решателя указано «Вручнуюᴹ» (Manualᴹ), решатель

требует установки MATLAB.

  • Если столбец Installation («Установка») пустой, при установке пакета

Julia автоматически скачиваются и устанавливаются все необходимые двоичные файлы решателя, поэтому вам достаточно выполнить команду Pkg.add.

Решатели с пустым полем в столбце «Пакет Julia» (Julia Package) написаны на Julia. В столбце «Решатель» (Solver) приводится ссылка на соответствующий пакет Julia.

Решатель Пакет Julia Установка Лицензия Поддерживаемые задачи

Alpine.jl

Triad NS

(MI)NLP

Artelys Knitro

KNITRO.jl

Вручную

Comm.

(MI)LP, (MI)SOCP, (MI)NLP

BARON

BARON.jl

Вручную

Comm.

(MI)NLP

Bonmin

AmplNLWriter.jl

EPL

(MI)NLP

Cbc

Cbc.jl

EPL

(MI)LP

CDCS

CDCS.jl

Вручнуюᴹ

GPL

LP, SOCP, SDP

CDD

CDDLib.jl

GPL

LP

Clarabel.jl

Apache

LP, QP, SOCP, SDP

Clp

Clp.jl

EPL

LP

COPT

COPT.jl

Comm.

(MI)LP, SOCP, SDP

COSMO.jl

Apache

LP, QP, SOCP, SDP

Couenne

AmplNLWriter.jl

EPL

(MI)NLP

CPLEX

CPLEX.jl

Вручную

Comm.

(MI)LP, (MI)SOCP

CSDP

CSDP.jl

EPL

LP, SDP

DAQP

DAQP.jl

MIT

QP (частично двоичные)

DSDP

DSDP.jl

DSDP

LP, SDP

EAGO.jl

MIT

(MI)NLP

ECOS

ECOS.jl

GPL

LP, SOCP

FICO Xpress

Xpress.jl

Вручную

Comm.

(MI)LP, (MI)SOCP

GLPK

GLPK.jl

GPL

(MI)LP

Gurobi

Gurobi.jl

Вручную

Comm.

(MI)LP, (MI)SOCP

HiGHS

HiGHS.jl

MIT

(MI)LP, QP

Hypatia.jl

MIT

LP, SOCP, SDP

Ipopt

Ipopt.jl

EPL

LP, QP, NLP

Juniper.jl

MIT

(MI)SOCP, (MI)NLP

Loraine.jl

MIT

LP, SDP

MadNLP.jl

MIT

LP, QP, NLP

MAiNGO

MAiNGO.jl

EPL 2.0

(MI)NLP

Manopt.jl

MIT

NLP

MiniZinc

MiniZinc.jl

Вручную

MPL-2

CP-SAT

Minotaur

AmplNLWriter.jl

Вручную

BSD-подобные

(MI)NLP

MOSEK

MosekTools.jl

Вручную

Comm.

(MI)LP, (MI)SOCP, SDP

NLopt

NLopt.jl

GPL

LP, QP, NLP

Octeract

AmplNLWriter.jl

Comm.

(MI)NLP

Optim.jl

MIT

NLP

OSQP

OSQP.jl

Apache

LP, QP

PATH

PATHSolver.jl

MIT

MCP

Pajarito.jl

MPL-2

(MI)NLP, (MI)SOCP, (MI)SDP

Pavito.jl

MPL-2

(MI)NLP

Penbmi

Penopt.jl

Comm.

Билинейные SDP

Percival.jl

MPL-2

NLP

PolyJuMP.KKT

PolyJuMP.jl

MIT

NLP

PolyJuMP.QCQP

PolyJuMP.jl

MIT

NLP

ProxSDP.jl

MIT

LP, SOCP, SDP

RAPOSa

AmplNLWriter.jl

Вручную

RAPOSa

(MI)NLP

SCIP

SCIP.jl

Apache

(MI)LP, (MI)NLP

SCS

SCS.jl

MIT

LP, QP, SOCP, SDP

SDPA

SDPA.jl, SDPAFamily.jl

GPL

LP, SDP

SDPLR

SDPLR.jl

GPL

LP, SDP

SDPNAL

SDPNAL.jl

Вручнуюᴹ

CC BY-SA

LP, SDP

SDPT3

SDPT3.jl

Вручнуюᴹ

GPL

LP, SOCP, SDP

SeDuMi

SeDuMi.jl

Вручнуюᴹ

GPL

LP, SOCP, SDP

StatusSwitchingQP.jl

MIT

LP, QP

Tulip.jl

MPL-2

LP

Где:

  • LP — линейное программирование

  • QP — квадратичное программирование

  • SOCP — коническое программирование второго порядка (включая задачи с выпуклыми квадратичными ограничениями или целевой функцией)

  • MCP — частично комплементарное программирование

  • NLP — нелинейное программирование

  • SDP — полуопределенное программирование

  • (MI)XXX — частично целочисленный эквивалент типа задачи XXX

  • CP-SAT — программирование в ограничениях и логическая выполнимость

Разработали решатель или оболочку для него? Эта таблица открыта для дополнений. Отредактируйте файл installation.md](https://github.com/jump-dev/JuMP.jl/blob/master/docs/src/installation.md) и сверьтесь с контрольным списком [Adding a new solver to the documentation при открытии запроса на вытягивание.

Разрабатываете решатель или оболочку для него? В разделе Модели и документации по MathOptInterface приводятся дополнительные сведения о взаимодействии JuMP с решателями. С любыми вопросами касательно подключения новых решателей к JuMP обращайтесь в чат разработчиков.

Решатели на основе AMPL

Используйте AmplNLWriter для доступа к решателям, поддерживающим формат NL.

Некоторые решатели, такие как Bonmin и Couenne, можно установить через диспетчер пакетов Julia. Другие требуется установить вручную.

Решатели на основе GAMS

Используйте пакет GAMS.jl для доступа к решателям посредством GAMS. В число таких решателей входят AlphaECP, Antigone, BARON, CONOPT, Couenne, LocalSolver, PATHNLP, SHOT, SNOPT, SoPlex. Полный список см. здесь.

GAMS.jl требует установки коммерческого программного обеспечения GAMS, для которого есть бесплатная лицензия для сообщества.

Решатели на основе NEOS

Используйте NEOSServer.jl для доступа к решателям посредством NEOS Server.

Распространенные проблемы с установкой

Если есть сомнения, выполните команду import Pkg; Pkg.update(), чтобы проверить, решит ли проблему обновление пакетов. Не забудьте выйти из Julia и начать новый сеанс, чтобы изменения вступили в силу.

Проверка версии пакетов

Версии каждого пакета имеют номера из трех элементов вида vX.Y.Z. Проверить установленные версии можно с помощью команды import Pkg; Pkg.status().

Почти всегда это будут самые последние выпуски. Чтобы проверить выпуски пакета, перейдите на соответствующую страницу на GitHub, а затем на страницу releases (выпуски). Например, список выпусков JuMP доступен на следующей странице: https://github.com/jump-dev/JuMP.jl/releases.

При публикации сообщения на форуме сообщества включите выходные данные Pkg.status().

Обнаружены невыполнимые требования

Получили ошибку наподобие Unsatisfiable requirements detected for package JuMP? В документации по Pkg есть раздел, посвященный определению причины и устранению таких конфликтов.

При установке новых пакетов может происходить возврат к более ранней версии JuMP

Еще одна распространенная проблема заключается в том, что после добавления нового пакета код, который ранее работал, перестает работать.

Обычно причина в том, что новый пакет несовместим с последней версией JuMP. Поэтому диспетчер пакетов откатывает JuMP до более ранней версии. Вот пример.

Сначала добавим JuMP:

(jump_example) pkg> add JuMP
  Resolving package versions...
Updating `~/jump_example/Project.toml`
  [4076af6c] + JuMP v0.21.5
Updating `~/jump_example/Manifest.toml`
  ... lines omitted ...

Строка + JuMP v0.21.5 указывает на то, что добавлена версия JuMP 0.21.5. Однако посмотрите, что произойдет, если добавить JuMPeR:

(jump_example) pkg> add JuMPeR
  Resolving package versions...
Updating `~/jump_example/Project.toml`
  [4076af6c] ↓ JuMP v0.21.5 ⇒ v0.18.6
  [707a9f91] + JuMPeR v0.6.0
Updating `~/jump_example/Manifest.toml`
  ... lines omitted ...

Добавляется версия JuMPeR 0.6.0 (+ JuMPeR v0.6.0), но JuMP откатывается с версии 0.21.5 до версии 0.18.6 (↓ JuMP v0.21.5 ⇒ v0.18.6)! Причина в том, что JuMPeR поддерживает версии JuMP не выше 0.18.6.

При добавлении новых пакетов внимательно следите за выходными данными диспетчера пакетов, особенно за понижением версий пакетов.