Общие параметры решателей (именованные аргументы функции Solve)
|
Страница в процессе перевода. |
#
CommonSolve.solve — Method
solve(prob::OptimizationProblem, alg::AbstractOptimizationAlgorithm,
args...; kwargs...)::OptimizationSolution
Сведения о возвращаемом объекте решения см. в документации по OptimizationSolution.
Именованные аргументы
Аргументы функции solve одинаковы для всех оптимизаторов. Эти аргументы следующие:
-
maxiters: максимальное количество итераций -
maxtime: максимальная продолжительность (обычно в секундах) выполнения оптимизации -
abstol: абсолютный допуск на изменения целевого значения -
reltol: относительный допуск на изменения целевого значения -
callback: функция обратного вызова
У некоторых алгоритмов оптимизаторов есть специальные именованные аргументы, описываемые в разделе документации, посвященной решателям, и в их собственной документации. Эти аргументы могут передаваться в solve как kwargs.... Аналогичным образом, специальные именованные аргументы для local_method глобального оптимизатора передаются в local_options как NamedTuple.
Со временем мы надеемся включить больше этих именованных аргументов в общий интерфейс.
Если для оптимизатора не реализован общий аргумент, выводится предупреждение.
Функции обратного вызова
Функция обратного вызова callback — это функция, которая вызывается после каждого шага оптимизатора. Вот ее сигнатура:
callback = (state, loss_val) -> false
где state — это объект OptimizationState, в котором хранится информация о текущей итерации решателя, а loss_val — это значение потерь или целевое значение. Дополнительные сведения о полях объекта state см. в документации по OptimizationState. Обратный вызов должен возвращать логическое значение, причем значением по умолчанию должно быть false, чтобы оптимизация останавливалась при возврате значения true.
Пример обратного вызова
Здесь представлен пример функции обратного вызова, которая строит график прогноза при текущих значениях переменных оптимизации. Для обратного вызова визуализации понадобится прогноз при текущих параметрах, то есть решение задачи ODEProblem prob. Поэтому мы снова вызываем функцию predict внутри обратного вызова.
function predict(u)
Array(solve(prob, Tsit5(), p = u))
end
function loss(u, p)
pred = predict(u)
sum(abs2, batch .- pred)
end
callback = function (state, l; doplot = false) #функция обратного вызова для наблюдения за обучением
display(l)
# строим график текущего прогноза по данным
if doplot
pred = predict(state.u)
pl = scatter(t, ode_data[1, :], label = "data")
scatter!(pl, t, pred[1, :], label = "prediction")
display(plot(pl))
end
return false
end
Если выбранный метод является глобальным оптимизатором, использующим метод локальной оптимизации, существует аналогичный набор общих аргументов локального оптимизатора. В качестве примера см. MLSL или AUGLAG из NLopt. Общие аргументы локального оптимизатора:
-
local_method: оптимизатор, используемый для локальной оптимизации в глобальном методе -
local_maxiters: максимальное количество итераций -
local_maxtime: максимальная продолжительность (в секундах) выполнения оптимизации -
local_abstol: абсолютный допуск на изменения целевого значения -
local_reltol: относительный допуск на изменения целевого значения -
local_options: кортежNamedTupleименованных аргументов для локального оптимизатора