I have defined objgrad! just like you show here (although the obj and grad! are also defined, I don’t bother to remove them). Note the difference of outputs of these two options though.
Sorry, I didn’t notice that. I recreated the issue here: https://github.com/JuliaSmoothOptimizers/NLPModels.jl/issues/304. Wrapping your model in LBFGSModel breaks the use of objgrad. This should be easy to fix. Thanks for finding it!
NLPModels 0.8.2 is released and should help with this. Let me know if it works now.
I have tested the new version NLPModels v0.13.2. It indeed reduces the number of evaluations to half!
In a final summary, for the same tolerance of the gradients (g_tol and outer_g_tol = 1e-4 for Optim.jl and atol = 1e-4 for JSOSolvers), to optimize my problem, JSOSolvers requires 12 evaluations and Optim.jl requires 24 evaluations.