
My sense is that the uniquely named arguments to the global solvers are more important, and are less like "advanced options".
When I use the global minimisers I hardly change the tuning of the default options. But, I think there is another concern that may not have been expressed
yet. `x0` is a required, positional argument for `minimize()`, as an array of initial parameter values. Most of the global optimizers in scipy.optimize do not use `x0`. Instead, they require bounds and explore the range of values between those bounds. Would `x0` be required AND ignored for these global optimizers?
The call signature for required positional arguments for `minimize` is different to the global optimizers. Being able to call the global minimizers via `minimize` would alleviate that. As you say the global minimizers do explore within bounds, and don't use an `x0`. The PR (as it currently exists) would still require `x0`, and it would be ignored.
If I understand correctly, with the proposed changes, I hope you would have to continue supporting
minimize(objective, x0, method='Nelder-Mead')
You are correct. There would be no behavioural change of all the existing methods. minimize(objective, x0, bounds=bounds,
method='differential_evolution')
Now, although `bounds` is a keyword argument, it is actually required for the method to work. And `x0` is a required positional argument, but the value is ignored. That seems profoundly weird to me.
`bounds` would required for the method to work. As you mention this is no different to 'newton-cg' that requires 'jac' for that method to work. `x0` would still be a required positional argument for `minimize`. If would be ignored for the `differential-evolution` method. However, it is also possible to change the underlying `differential_evolution` function to use an initial `x0` guess. Those guesses are less important for the global minimisers.
Are there other examples in scipy (outside of scipy.optimize) for which
a) a required, positional argument has a value that is ignored when an optional keyword argument has some value(s)? b) a keyword argument is changed from optional to required due to the value of a different keyword argument?
I am less familiar with other areas of scipy. Either way, if you're looking to improve the uniformity or the ability of
downstream code to use the functions as if they were an API, then OptimizerResult really ought to include the name of the method used.
That's a good suggestion.