[SciPy-Dev] Using global minimizer methods from `optimize.minimize` function
Andrew Nelson
andyfaff at gmail.com
Thu Apr 30 01:26:50 EDT 2020
>
> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20200430/634a5d22/attachment.html>
More information about the SciPy-Dev
mailing list