What are the default keyword arguments for `Optimization.solve`

shown here?

Can anyone point out to that code in Github?

Not an Optimization.jl developer, but I assume if not set, they default to the solverâ€™s choice, so it will vary depending on the solver you choose.

I see. I think if `Optimization.jl`

aims to be a consistent interface for numerical optimizers, perhaps it should provide the same default values for common parameters used by all back ends.

Different solvers implement different algorithms, so there isnâ€™t one set of values would work by default for every solver.

Arguments that have shared meaning get bubbled up to a higher level to be the common keyword arguments, such as with `maxiters`

and tolerances. Those are then made to default similarly across the interface. However, arguments that are solver-specific are then defaulted specifically for the solvers. This of course is the same scheme throughout SciML. Optimization.jl is just orders of magnitude less developed than some other pieces, so it doesnâ€™t have that many common args at this point.

I think the point was that two algorithms can both have a `maxiters`

argument, but a common default value of `1000`

doesnâ€™t make sense.

There is a sensible default, and that is to use a tolerance-based stopping criteria if the algorithm allows for it, or require `maxiters`

. And thatâ€™s how the `maxiters`

argument works.

So we can expect common defaults at some point in the future?

For anything thatâ€™s a common argument, yes. Itâ€™s an interface break if thatâ€™s the case.

What is the mathematical definition of `abstol`

and `reltol`

? How do you set a reasonable common tolerance across solvers?

The only two common options that are (mostly) unambiguous across solvers are time limits and verbosity, which is why JuMP has `TimeLimitSec`

and `Silent`

as options. Even time limits have a number of non-trival differences in the implementation between solvers.