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

Optim.jl

Одномерная и многомерная оптимизация в Julia.

Optim.jl является частью семейства JuliaNLSolvers.

Что

Optim — это пакет Julia для оптимизации различных видов функций. Хотя существует некоторая поддержка оптимизации с блочными ограничениями и римановой оптимизации, большинство решателей пытаются найти , который минимизирует функцию без каких-либо ограничений. Таким образом, основное внимание уделяется оптимизации без ограничений. Предоставленные решатели при определенных условиях сходятся к локальному минимуму. В случае, когда требуется найти глобальный минимум, мы предлагаем несколько методов, таких как (ограниченный) имитационный отжиг и рой частиц. Специальный пакет для методов глобальной оптимизации можно найти, например, в BlackBoxOptim.

Почему

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

При написании программ (пакетов) Julia, требующих оптимизации, программист может либо написать собственную процедуру оптимизации, либо воспользоваться одним из множества доступных решателей. Например, это может быть что-то из набора NLopt. При этом возникает необходимость добавления зависимости, которая написана на Julia, и приходится делать дополнительные предположения о том, в какой среде находится пользователь. Есть ли у пользователя соответствующие компиляторы? Можно ли использовать в проекте код с лицензией GPL? Optim выпускается в рамках лицензии MIT, а установка выполняется с помощью простой команды Pkg.add, так что свободнее, проще и легче инструмента нет.

Также верно и то, что использование решателя, написанного на C или Fortran, не позволяет применять одно из главных преимуществ Julia: множественную диспетчеризацию. Поскольку Optim полностью написан на Julia, можно использовать систему диспетчеризации для упрощения работы с пользовательскими предобусловливателями. Планируется, что на этих этапах можно будет выбирать решатели для различных шагов алгоритма под контролем пользователя, полностью основываясь на диспетчере, а не на предопределенных возможностях, выбранных разработчиками Optim.

Являясь пакетом Julia, Optim имеет доступ к функциям автоматического дифференцирования через пакеты в JuliaDiff.