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

Общие параметры решателей (именованные аргументы функции Solve)

Страница в процессе перевода.

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 именованных аргументов для локального оптимизатора