Руководство по установке
Установка 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.
|
При добавлении новых пакетов внимательно следите за выходными данными диспетчера пакетов, особенно за понижением версий пакетов. |