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