朱莉娅的自动分化:来自ReverseDiffSparse的Hessian

时间:2018-01-14 21:17:23

标签: julia hessian julia-jump automatic-differentiation

如何使用自动区分(最好使用ReverseDiffSparse)来评估Julia中函数的Hessian?在以下示例中,我可以计算和评估点valuesJuMP的渐变:

m = Model()
@variable(m, x)
@variable(m, y)

@NLobjective(m, Min, sin(x) + sin(y))
values = zeros(2)
values[linearindex(x)] = 2.0
values[linearindex(y)] = 3.0

d = JuMP.NLPEvaluator(m)
MathProgBase.initialize(d, [:Grad])
objval = MathProgBase.eval_f(d, values) # == sin(2.0) + sin(3.0)

∇f = zeros(2)
MathProgBase.eval_grad_f(d, ∇f, values)
# ∇f[linearindex(x)] == cos(2.0)
# ∇f[linearindex(y)] == cos(3.0)

现在我想要values的Hessian。我试过更改以下内容:

MathProgBase.initialize(d, [:Grad,:Hess])
H = zeros(2);  # based on MathProgBase.hesslag_structure(d) = ([1,2],[1,2])
MathProgBase.eval_hesslag(d, H, values, 0, [0])

但是收到错误。

作为参考,交叉帖子在有用的Julia话语论坛here上。

0 个答案:

没有答案