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

Настраиваемые параметры

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

Параметры решателей

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

Требуется только дескриптор функции:

  • NelderMead()

  • SimulatedAnnealing()

Требуется функция и градиент (если опущены, будет аппроксимирован):

  • BFGS()

  • LBFGS()

  • ConjugateGradient()

  • GradientDescent()

  • MomentumGradientDescent()

  • AcceleratedGradientDescent()

Требуется функция, градиент и гессиан (не может быть опущен):

  • Newton()

  • NewtonTrustRegion()

Минимизация с блочными ограничениями:

  • Fminbox()

Специальные методы для ограниченной одномерной оптимизации:

  • Brent()

  • GoldenSection()

Общие параметры

Помимо решателя, вы можете изменить работу пакета Optim, используя приведенные далее ключевые слова.

  • x_tol: абсолютный допуск на изменения входного вектора x в бесконечной норме. Значение по умолчанию — 0.0.

  • f_tol: относительный допуск на изменения значения цели. Значение по умолчанию — 0.0.

  • g_tol: абсолютный допуск на градиент в бесконечной норме. Значение по умолчанию — 1e-8. Для методов без градиентов будет контролироваться основной допуск на сходимость, который зависит от конкретного решателя.

  • f_calls_limit: мягкий верхний предел количества вызовов цели. Значение по умолчанию — 0 (не ограничено).

  • g_calls_limit: мягкий верхний предел количества вызовов градиентов. Значение по умолчанию — 0 (не ограничено).

  • h_calls_limit: мягкий верхний предел количества вызовов гессианов. Значение по умолчанию — 0 (не ограничено).

  • allow_f_increases: разрешать выполнение шагов, которые увеличивают значение цели. Значение по умолчанию — false. Обратите внимание, что при установке значения true в качестве минимизатора будет возвращена последняя итерация, даже если цель увеличилась.

  • iterations: количество выполненных итераций до завершения алгоритма. Значение по умолчанию — 1_000.

  • store_trace: следует ли хранить трассировку состояния алгоритма оптимизации. Значение по умолчанию — false.

  • show_trace: следует ли отображать трассировку состояния алгоритма оптимизации в stdout. Значение по умолчанию — false.

  • extended_trace: сохранять дополнительную информацию. Зависит от решателя. Значение по умолчанию — false.

  • show_warnings: следует ли показывать предупреждения, связанные с NaN или Inf. Значение по умолчанию — true.

  • trace_simplex: включить полный симплекс в трассировку для NelderMead. Значение по умолчанию — false.

  • show_every: выходные данные трассировки выводятся каждую show_every-ю итерацию.

  • callback: функция, вызываемая во время трассировки. Возвращаемое значение true останавливает вызов optimize. Функция обратного вызова вызывается каждую show_every-ю итерацию. Если store_trace имеет значение false, аргумент обратного вызова имеет тип OptimizationState, описывающий состояние текущей итерации. Если store_trace имеет значение true, аргументом будет список всех состояний от первой итерации до текущей.

  • time_limit: мягкий верхний предел общего времени выполнения. Значение по умолчанию — NaN (не ограничено).

Оптимизация с блочными ограничениями имеет дополнительные ключевые слова для изменения поведения внешнего решателя:

  • outer_x_tol: абсолютный допуск на изменения входного вектора x в бесконечной норме. Значение по умолчанию — 0.0.

  • outer_f_tol: относительный допуск на изменения значения цели. Значение по умолчанию — 0.0.

  • outer_g_tol: абсолютный допуск на градиент в бесконечной норме. Значение по умолчанию — 1e-8. Для методов без градиентов будет контролироваться основной допуск на сходимость, который зависит от конкретного решателя.

  • allow_outer_f_increases: разрешать выполнение шагов, которые увеличивают значение цели. Значение по умолчанию — false. Обратите внимание, что при установке значения true в качестве минимизатора будет возвращена последняя итерация, даже если цель увеличилась.

  • outer_iterations: количество выполненных итераций до завершения алгоритма. Значение по умолчанию — 1_000.

Если указать outer_iterations = 10 и iterations = 100, внешний алгоритм будет выполняться в течение 10 итераций, а для каждой внешней итерации внутренний алгоритм будет выполняться в течение 100 итераций.

На данный момент рекомендуется использовать статически диспетчеризируемый интерфейс с помощью конструктора Optim.Options:

res = optimize(f, g!,
               [0.0, 0.0],
               GradientDescent(),
               Optim.Options(g_tol = 1e-12,
                             iterations = 10,
                             store_trace = true,
                             show_trace = false,
                             show_warnings = true))

Также доступен другой интерфейс, основанный непосредственно на ключевых словах:

res = optimize(f, g!,
               [0.0, 0.0],
               method = GradientDescent(),
               g_tol = 1e-12,
               iterations = 10,
               store_trace = true,
               show_trace = false,
               show_warnings = true)

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