[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