Настраиваемые параметры
Параметры решателей
В 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.