[SciPy-Dev] Consideration of differential evolution minimizer being added to scipy.optimize.
Ralf Gommers
ralf.gommers at gmail.com
Sun Mar 9 06:26:17 EDT 2014
On Sat, Mar 8, 2014 at 10:55 PM, Andrew Nelson <andyfaff at gmail.com> wrote:
> Dear all,
> I've put some more work into the differential evolution (another
> global optimizer) code I would like to contribute to scipy.optimize.
> Since this is the first time I'm contributing to scipy I'd would like
> a code review, with a view to putting in a pull request in the near
> future.
>
> The changes/additions I've made are at (under files changed):
> https://github.com/andyfaff/scipy/compare/scipy:master...master
>
Could you send a PR? That's easier to comment on, and will be preserved
better for future reference.
Question that the docstring doesn't answer:
- why are there so many options for `DEstrategy` (and what's the default)?
- `mutation` and `regeneration` aren't explained, do I need to tweak those
as a user?
Some minor comments:
- please reference the original paper (format as in
https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt)
instead of linking to someone's homepage.
- there's ``**options`` in the signature, but it's not explained and
doesn't appear to be needed.
- tests: don't use plain assert, use np.testing.assert_ instead
- tests: don't import unittest, only numpy.testing
- tests: test cases shouldn't have docstrings because that messes up nose
output, replace with comments
> Some of the comments when I first discussed this were for benchmarking
> DE to see if it had comparable performance to basinhopping. To that
> end I've added some code and extra test functions
> (http://en.wikipedia.org/wiki/Test_functions_for_optimization) for
> benchmarking global optimizers. You can see the output of the
> benchmarking at: https://gist.github.com/andyfaff/9439229
>
So it looks like on average DE has worse performance, but there are
problems where it does significantly better than basinhopping. That's also
the conclusion one could draw from
http://infinity77.net/global_optimization/multidimensional.html. Which may
be an OK motivation to add it.
Cheers,
Ralf
> >From the test functions differential_evolution doesn't do too badly,
> especially when no gradient is available for the function to be
> minimized. Having said that, I do recognise that you sometimes need
> to tune the optimizer for a specific problem.
>
> My specific motivation for adding differential_evolution is for
> curve_fitting. For most of my problems function expense isn't
> enormous, so I don't regard number of function evaluations to be all
> that important. In those cases finding the global minimum is the key.
> I've tried comparing basinhopping to DE for harder curvefitting
> problems and in the example I tried the number of function evaluations
> was a lot smaller for DE
> (http://www.itl.nist.gov/div898/strd/index.html - Thurber).
> (One can always use Levenberg Marquardt to 'polish' the end result)
>
> Of course, there are problems where function expense is enormous.
> However, if that is truly horrendous one can always use the callback
> function to terminate if you think one is getting towards a solution.
>
> cheers,
> Andrew.
>
>
>
> --
> _____________________________________
> Dr. Andrew Nelson
>
>
> _____________________________________
> _______________________________________________
> SciPy-Dev mailing list
> SciPy-Dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20140309/97caa4d8/attachment.html>
More information about the SciPy-Dev
mailing list