I have a kind of hard nonlinear optimization problem. 12 variables, I know the result of the function should be zero, but how to find the combination of 12 values that give a very low residual?

So far I tried Optim.jl and NLopt.jl. BFGS(linesearch=LineSearches.BackTracking(order=3)) gives the fastest result, but it is not accurate.

NLopt with :LN_BOBYQA works better, but it is very slow, and it also does not always converge.

So my preferred optimizer would have the following properties:

- do global optimization if it is stuck at a local minima, but only then
- use gradient based search otherwise
- use multiple cores
- terminate only if the norm of the residual is below a given threshold

Is there anything else I could try?