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

Начало работы

HiGHS.jl — это оболочка для решателя HiGHS.

Она состоит из двух компонентов:

  • тонкая оболочка вокруг полного API на C;

  • интерфейс для MathOptInterface.

Принадлежность

Эта оболочка поддерживается сообществом JuMP и не является официальным проектом разработчиков HiGHS.

Получение справки

Если вам нужна помощь, задайте вопрос на форуме сообщества JuMP.

При возникновении воспроизводимой ошибки откройте проблему на GitHub.

Лицензия

HiGHS.jl распространяется по лицензии MIT.

Базовый решатель ERGO-Code/HiGHS распространяется по лицензии MIT.

Установка

HiGHS можно установить следующим образом:

import Pkg
Pkg.add("HiGHS")

Помимо установки пакета HiGHS.jl, будут скачаны и установлены двоичные файлы HiGHS. Устанавливать HiGHS отдельно не требуется.

Чтобы узнать, как использовать пользовательский двоичный файл, прочитайте раздел Пользовательские двоичные файлы решателей в документации по JuMP.

Использование с JuMP

Чтобы использовать HiGHS с JuMP, воспользуйтесь HiGHS.Optimizer:

using JuMP, HiGHS
model = Model(HiGHS.Optimizer)
set_attribute(model, "presolve", "on")
set_attribute(model, "time_limit", 60.0)

API MathOptInterface

Оптимизатор HiGHS поддерживает следующие ограничения и атрибуты.

Список поддерживаемых целевых функций:

  • MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}

  • MOI.ObjectiveFunction{MOI.ScalarQuadraticFunction{Float64}}

Список поддерживаемых типов переменных:

  • MOI.Reals

Список поддерживаемых типов ограничений:

  • MOI.ScalarAffineFunction{Float64} в MOI.EqualTo{Float64}

  • MOI.ScalarAffineFunction{Float64} в MOI.GreaterThan{Float64}

  • MOI.ScalarAffineFunction{Float64} в MOI.Interval{Float64}

  • MOI.ScalarAffineFunction{Float64} в MOI.LessThan{Float64}

  • MOI.VariableIndex в MOI.EqualTo{Float64}

  • MOI.VariableIndex в MOI.GreaterThan{Float64}

  • MOI.VariableIndex в MOI.Integer

  • MOI.VariableIndex в MOI.Interval{Float64}

  • MOI.VariableIndex в MOI.LessThan{Float64}

  • MOI.VariableIndex в MOI.Semicontinuous{Float64}

  • MOI.VariableIndex в MOI.Semiinteger{Float64}

  • MOI.VariableIndex в MOI.ZeroOne

Список поддерживаемых атрибутов моделей:

  • MOI.Name()

  • MOI.ObjectiveSense()

Параметры

Полный список доступных параметров см. в документации по HiGHS.

API на C

Доступ к API на C можно получить с помощью функций HiGHS.Highs_xxx, имена и аргументы которых идентичны API на C.

Потоки

HiGHS использует глобальный планировщик, общий для всех потоков.

Перед изменением количества потоков с помощью MOI.Threads() необходимо вызвать Highs_resetGlobalScheduler(1):

using JuMP, HiGHS
model = Model(HiGHS.Optimizer)
Highs_resetGlobalScheduler(1)
set_attribute(model, MOI.NumberOfThreads(), 1)

При изменении количества потоков HiGHS в разных потоках Julia обязательно прочтите docstring функции Highs_resetGlobalScheduler. В частности, сброс планировщика не является потокобезопасным.