[SciPy-User] fmin_bfgs failing on simple problem

Kathleen M Tacina Kathleen.M.Tacina@nasa....
Wed Apr 18 11:39:57 CDT 2012


I've recreated this problem on my machine. It appears to be relating to
floating point precision, and only occurs when the x<0 return value is
extremely large.



>>> def f2(x,badval=1e20):
...   if x<=0:
...     return badval
...   else:
...     return x+1/x
...
>>> ans=1.
>>> badval=1e20
>>> while abs(ans-1.)<1e-5:
...     badval = 10*badval
...     ans = fmin_bfgs(f2,10,args=(badval,))  


The while loop ends when badval is 1.0e301, with ans as nan and the
following error message:
Warning: Desired error not necessarily achieved due to precision loss.
         Current function value: nan
         Iterations: 45
         Function evaluations: 1989
         Gradient evaluations: 654

But it works with badval=1.0e300.  Would it hurt your problem to use
1e200 as your "nearly infinite" value instead of  1.79769313e+308?

Or am I missing something here?


On Tue, 2012-04-17 at 13:56 -0500, John Salvatier 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/20120418/987d8e39/attachment.html 


More information about the SciPy-User mailing list