Построение задачи в символьной форме с помощью ModelingToolkit
|
Страница в процессе перевода. |
|
Note В этом примере применяется пакет OptimizationOptimJL.jl. Подробные сведения об установке и использовании см. на странице Optim.jl. |
ModelingToolkit.jl — это комплексная система символьного моделирования в Julia. Позволяет выполнять множество операций до этапа решателя, таких как определение шаблонов разреженности, аналитическое решение частей модели для уменьшения сложности решения и многое другое. Одним из поддерживаемых типов систем является OptimizationSystem, то есть символьный аналог OptimizationProblem. Давайте продемонстрируем, как использовать OptimizationSystem для построения оптимизированных задач OptimizationProblem.
Для начала нужно определить символьные переменные. Это делается следующим образом:
using ModelingToolkit, Optimization, OptimizationOptimJL
@variables x y
@parameters a b
Теперь можно создать OptimizationSystem, построив символьное выражение для функции потерь:
loss = (a - x)^2 + b * (y - x^2)^2
@named sys = OptimizationSystem(loss, [x, y], [a, b])
Чтобы превратить эту систему в задачу для численного решения, нужно указать значения параметров и начальные условия. Это выглядит следующим образом:
u0 = [x => 1.0
y => 2.0]
p = [a => 6.0
b => 7.0]
2-element Vector{Pair{Num, Float64}}:
a => 6.0
b => 7.0
Теперь решим задачу.
sys = complete(sys)
prob = OptimizationProblem(sys, u0, p, grad = true, hess = true)
solve(prob, Newton())
retcode: Success
u: 2-element Vector{Float64}:
6.0
36.0
Пакет также предоставляет множество других возможностей, таких как автоматический параллелизм и разрежение. Кроме того, вы можете иерархически вкладывать системы, создавая масштабные задачи оптимизации. Дополнительные сведения см. в документации по OptimizationSystem в ModelingToolkit.jl.