jacob-roth:
Is there a simple fix?
Yes, call the method with arguments that match its (strict) type signature:
MathProgBase.eval_hesslag(d, H, values, 0.0, Float64[])
Use eval_grad_f
. If you take a peek at the implementation you see that some computation is avoided if you’ve already evaluated the Hessian at the same point.
for k in 1:length(qobj.qvars1)
val += qobj.qcoeffs[k]*x[qobj.qvars1[k].col]*x[qobj.qvars2[k].col]
end
end
d.eval_f_timer += toq()
return val
end
function MathProgBase.eval_grad_f(d::NLPEvaluator, g, x)
tic()
if d.last_x != x
forward_eval_all(d,x)
reverse_eval_all(d,x)
end
SIMPLIFY = d.m.simplify_nonlinear_expressions
if d.has_nlobj
fill!(g,0.0)
ex = d.objective
subexpr_reverse_values = d.subexpression_reverse_values
subexpr_reverse_values[ex.dependent_subexpressions] = 0.0
reverse_extract(g,ex.reverse_storage,ex.nd,ex.adj,subexpr_reverse_values,1.0)
1 Like