优化问题重用和缓存接口
|
该页面正在翻译中。 |
重用优化缓存 雷尼特!
该 雷尼特! 函数允许您有效地重用具有新参数或初始值的现有优化缓存。 这在使用不同的参数值重复求解类似的优化问题时特别有用,因为它避免了从头创建新缓存的开销。
基本用法
# Create initial problem and cache
using Optimization, OptimizationOptimJL
rosenbrock(u, p) = (p[1] - u[1])^2 + p[2] * (u[2] - u[1]^2)^2
u0 = zeros(2)
p = [1.0, 100.0]
optf = OptimizationFunction(rosenbrock, Optimization.AutoForwardDiff())
prob = OptimizationProblem(optf, u0, p)
# Initialize cache and solve
cache = Optimization.init(prob, Optim.BFGS())
sol = Optimization.solve!(cache)
# Reinitialize cache with new parameters
cache = Optimization.reinit!(cache; p = [2.0, 50.0])
sol2 = Optimization.solve!(cache)
retcode: Success
u: 2-element Vector{Float64}:
1.0000000000045803
1.000000000009483
支持的参数
该 雷尼特! 功能支持更新优化缓存的各个字段:
* u0:优化变量的新初始值
* p:新参数值
* 磅/磅:新的下限(如果适用)
* ub:新上限(如适用)
* 立法会议员:约束的新下限(如果适用)
* 乌肯斯:约束的新上限(如果适用)
示例:参数扫描
# Solve for multiple parameter values efficiently
results = []
p_values = [[1.0, 100.0], [2.0, 100.0], [3.0, 100.0]]
# Create initial cache
cache = Optimization.init(prob, Optim.BFGS())
function sweep(cache, p_values)
for p in p_values
cache = Optimization.reinit!(cache; p = p)
sol = Optimization.solve!(cache)
push!(results, (p = p, u = sol.u, objective = sol.objective))
end
end
sweep(cache, p_values)