Руководство по установке
Установка 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)
Большинство пакетов следуют соглашению об именовании |
Поддерживаемые решатели
Большинство решателей написаны не на Julia, для использования некоторых из них требуются коммерческие лицензии, поэтому установка часто оказывается более сложной.
-
Если в столбце
Installation
(«Установка») для решателя указано «Вручную» (Manual
), для его установки требуется
выполнить действие вручную, например скачать и установить двоичный файл либо получить коммерческую лицензию. Дополнительные сведения см. в файле сведений соответствующего пакета Julia.
-
Если в столбце
Installation
(«Установка») для решателя указано «Вручнуюᴹ» (Manualᴹ
), решатель
требует установки MATLAB.
-
Если столбец
Installation
(«Установка») пустой, при установке пакета
Julia автоматически скачиваются и устанавливаются все необходимые двоичные файлы решателя, поэтому вам достаточно выполнить команду Pkg.add
.
Решатели с пустым полем в столбце «Пакет Julia» (Julia Package
) написаны на Julia. В столбце «Решатель» (Solver
) приводится ссылка на соответствующий пакет Julia.
Решатель | Пакет Julia | Установка | Лицензия | Поддерживаемые задачи |
---|---|---|---|---|
Triad NS |
(MI)NLP |
|||
Вручную |
Comm. |
(MI)LP, (MI)SOCP, (MI)NLP |
||
Вручную |
Comm. |
(MI)NLP |
||
EPL |
(MI)NLP |
|||
EPL |
(MI)LP |
|||
Вручнуюᴹ |
GPL |
LP, SOCP, SDP |
||
GPL |
LP |
|||
Apache |
LP, QP, SOCP, SDP |
|||
EPL |
LP |
|||
Comm. |
(MI)LP, SOCP, SDP |
|||
Apache |
LP, QP, SOCP, SDP |
|||
EPL |
(MI)NLP |
|||
Вручную |
Comm. |
(MI)LP, (MI)SOCP |
||
EPL |
LP, SDP |
|||
MIT |
QP (частично двоичные) |
|||
DSDP |
LP, SDP |
|||
MIT |
(MI)NLP |
|||
GPL |
LP, SOCP |
|||
Вручную |
Comm. |
(MI)LP, (MI)SOCP |
||
GPL |
(MI)LP |
|||
Вручную |
Comm. |
(MI)LP, (MI)SOCP |
||
MIT |
(MI)LP, QP |
|||
MIT |
LP, SOCP, SDP |
|||
EPL |
LP, QP, NLP |
|||
MIT |
(MI)SOCP, (MI)NLP |
|||
MIT |
LP, SDP |
|||
MIT |
LP, QP, NLP |
|||
EPL 2.0 |
(MI)NLP |
|||
MIT |
NLP |
|||
Вручную |
MPL-2 |
CP-SAT |
||
Вручную |
BSD-подобные |
(MI)NLP |
||
Вручную |
Comm. |
(MI)LP, (MI)SOCP, SDP |
||
GPL |
LP, QP, NLP |
|||
Comm. |
(MI)NLP |
|||
MIT |
NLP |
|||
Apache |
LP, QP |
|||
MIT |
MCP |
|||
MPL-2 |
(MI)NLP, (MI)SOCP, (MI)SDP |
|||
MPL-2 |
(MI)NLP |
|||
Comm. |
Билинейные SDP |
|||
MPL-2 |
NLP |
|||
MIT |
NLP |
|||
MIT |
NLP |
|||
MIT |
LP, SOCP, SDP |
|||
Вручную |
RAPOSa |
(MI)NLP |
||
Apache |
(MI)LP, (MI)NLP |
|||
MIT |
LP, QP, SOCP, SDP |
|||
GPL |
LP, SDP |
|||
GPL |
LP, SDP |
|||
Вручнуюᴹ |
CC BY-SA |
LP, SDP |
||
Вручнуюᴹ |
GPL |
LP, SOCP, SDP |
||
Вручнуюᴹ |
GPL |
LP, SOCP, SDP |
||
MIT |
LP, QP |
|||
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. Другие требуется установить вручную.
Полный список поддерживаемых решателей см. в документации по AMPL.
Решатели на основе GAMS
Используйте пакет GAMS.jl для доступа к решателям посредством GAMS. В число таких решателей входят AlphaECP, Antigone, BARON, CONOPT, Couenne, LocalSolver, PATHNLP, SHOT, SNOPT, SoPlex. Полный список см. здесь.
GAMS.jl требует установки коммерческого программного обеспечения GAMS, для которого есть бесплатная лицензия для сообщества. |
Решатели на основе NEOS
Используйте NEOSServer.jl для доступа к решателям посредством NEOS Server.
Распространенные проблемы с установкой
Если есть сомнения, выполните команду |
Проверка версии пакетов
Версии каждого пакета имеют номера из трех элементов вида 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
.
При добавлении новых пакетов внимательно следите за выходными данными диспетчера пакетов, особенно за понижением версий пакетов. |