[SciPy-User] fmin_bfgs failing on simple problem

John Salvatier jsalvati@u.washington....
Tue Apr 17 14:53:27 CDT 2012


It seems that what was actually happening is that in line_search_wolfe2,
calling scalar_search_wolfe2 calling _zoom calling _cubicmin was returning
a NaN if you add a test at the end of _cubicmin testing for a NaN (and then
returning None), it finds the right minimum. It looks like _quadmin
probably would have the same problem.

I'll file a bug report.

On Tue, Apr 17, 2012 at 11:56 AM, John Salvatier
<jsalvati@u.washington.edu>wrote:

> Hmm, that's too bad. Looks like there was a big refactoring of
> linesearch.py (
> https://github.com/scipy/scipy/blob/master/scipy/optimize/linesearch.py )
> a couple of years ago (
> https://github.com/scipy/scipy/commit/fefef2d73200d535b95ce0f21dcfe122301a967d
>  )
>
> Thanks for the help Nathaniel :)
>
>
> On Tue, Apr 17, 2012 at 11:16 AM, Nathaniel Smith <njs@pobox.com> wrote:
>
>> On Tue, Apr 17, 2012 at 7:14 PM, John Salvatier
>> <jsalvati@u.washington.edu> wrote:
>> > Well that's good news. I have scipy .9.0b1, what version do you have?
>>
>> Less good news: I have 0.8.0 :-)
>>
>> - N
>>
>> > On Tue, Apr 17, 2012 at 11:13 AM, Nathaniel Smith <njs@pobox.com>
>> wrote:
>> >>
>> >> On Tue, Apr 17, 2012 at 6:35 PM, John Salvatier
>> >> <jsalvati@u.washington.edu> wrote:
>> >> > Hi all!
>> >> >
>> >> > I am having a problem with the fmin_bfgs solver that's surprising to
>> me.
>> >> > Here's the toy problem I've set up:
>> >> >
>> >> > from scipy.optimize import fmin_bfgs, fmin_ncg
>> >> > from numpy import *
>> >> > import numpy as np
>> >> >
>> >> > def f(x ):
>> >> >     if x < 0:
>> >> >         return 1.79769313e+308
>> >> >     else :
>> >> >         return x + 1./x
>> >> >
>> >> >
>> >> > xs = fmin_bfgs(f, array( [10.]), retall = True)
>> >> >
>> >> > The solver returns [nan] as the solution.
>> >> >
>> >> > The problem is designed to be stiff: between 0 and 1, it slopes
>> upward
>> >> > to
>> >> > infinity but between 1 and infinity, it slopes up at a slope of 1.
>> Left
>> >> > of 0
>> >> > the function has a "nearly infinite" value. If bfgs encounters  a
>> value
>> >> > that's larger than the current value, it should try a different step
>> >> > size,
>> >> > no? Why does fmin_bfgs fail in this way?
>> >>
>> >> I can't reproduce this (on my computer it converges to 0.99999992),
>> >> but have you tried making that < into a <=? The divide-by-zero at f(0)
>> >> might be making it freak out.
>> >>
>> >> -- Nathaniel
>> >> _______________________________________________
>> >> SciPy-User mailing list
>> >> SciPy-User@scipy.org
>> >> http://mail.scipy.org/mailman/listinfo/scipy-user
>> >
>> >
>> >
>> > _______________________________________________
>> > SciPy-User mailing list
>> > SciPy-User@scipy.org
>> > http://mail.scipy.org/mailman/listinfo/scipy-user
>> >
>> _______________________________________________
>> SciPy-User mailing list
>> SciPy-User@scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/scipy-user/attachments/20120417/921d4981/attachment.html 


More information about the SciPy-User mailing list