[SciPy-User] fmin_bfgs stuck in infinite loop

josef.pktd at gmail.com josef.pktd at gmail.com
Mon Oct 24 15:26:59 EDT 2011


On Mon, Oct 24, 2011 at 2:39 PM, Johann Cohen-Tanugi
<johann.cohentanugi at gmail.com> wrote:
> Dear Josef
> On 10/24/2011 07:58 PM, josef.pktd at gmail.com wrote:
>>
>> On Mon, Oct 24, 2011 at 1:56 PM,<josef.pktd at gmail.com>  wrote:
>>>
>>> On Mon, Oct 24, 2011 at 1:50 PM, Johann Cohen-Tanugi
>>> <johann.cohentanugi at gmail.com>  wrote:
>>>>
>>>> Hello,
>>>> the OP is a colleague of mine and I looked quickly at the code. The
>>>> infinite
>>>> loop in the OP's illustrating script comes from the "while 1" loop in
>>>> l.144
>>>> of linesearch.py : becuse phi0 is np.nan, phi1 is returned as np.nan as
>>>> well, and the break condition is never met. There is an easy fix :
>>>>     while 1:
>>>>         stp, phi1, derphi1, task = minpack2.dcsrch(alpha1, phi1,
>>>> derphi1,
>>>>                                                    c1, c2, xtol, task,
>>>>                                                    amin, amax, isave,
>>>> dsave)
>>>>         if task[:2] == asbytes('FG') and not np.isnan(phi1):
>>>>             alpha1 = stp
>>>>             phi1 = phi(stp)
>>>>             derphi1 = derphi(stp)
>>>>         else:
>>>>             break
>>>>
>>>> but it is not a nice kludge.... Is there a better way to secure this
>>>> while 1
>>>> loop? I am sure I am not covering all possible pathological cases with
>>>> adding "not np.isnan(phi1)" in the code above.
>>>
>>> Is this still a problem with 0.10 ?
>>> I thought this fixed it, https://github.com/scipy/scipy/commit/a31acbf
>
> Well I am a complete newby with github, but I think I went to the head of
> master before testing, and the problem is still there. I can see the code
> snippet from https://github.com/scipy/scipy/commit/a31acbf in my local copy,
> and this is testing against +/-inf, not nan. Changing the OP's code to test
> against inf yields :
> In [1]: run test_bgfs.py
> /home/cohen/sources/python/scipydev/lib/python2.6/site-packages/scipy/optimize/optimize.py:303:
> RuntimeWarning: invalid value encountered in subtract
>  if (max(numpy.ravel(abs(sim[1:] - sim[0]))) <= xtol \
> /home/cohen/sources/python/scipydev/lib/python2.6/site-packages/scipy/optimize/optimize.py:308:
> RuntimeWarning: invalid value encountered in subtract
>  xr = (1 + rho)*xbar - rho*sim[-1]
> /home/cohen/sources/python/scipydev/lib/python2.6/site-packages/scipy/optimize/optimize.py:350:
> RuntimeWarning: invalid value encountered in subtract
>  sim[j] = sim[0] + sigma*(sim[j] - sim[0])
> fmin works [ inf]
> /home/cohen/sources/python/scipydev/lib/python2.6/site-packages/scipy/optimize/linesearch.py:132:
> RuntimeWarning: invalid value encountered in subtract
>  alpha1 = min(1.0, 1.01*2*(phi0 - old_phi0)/derphi0)
> /home/cohen/sources/python/scipydev/lib/python2.6/site-packages/scipy/optimize/linesearch.py:308:
> RuntimeWarning: invalid value encountered in subtract
>  alpha1 = min(1.0, 1.01*2*(phi0 - old_phi0)/derphi0)
> /home/cohen/sources/python/scipydev/lib/python2.6/site-packages/scipy/optimize/linesearch.py:417:
> RuntimeWarning: invalid value encountered in subtract
>  B = (fb-D-C*db)/(db*db)
> fmin_bfgs gets stuck in a loop [ nan]
>
> so it looks like your code solves the inf situation, but not the nan.

It's not my fix (I'm still on scipy 0.9 and avoid bfgs because I don't
want to have to kill my interpreter session)

isfinite also checks for nans

>>> np.isfinite(np.nan)
False

so there should be another reason that the linesearch doesn't return.

Josef





>
>
>> Is http://projects.scipy.org/scipy/ticket/1542 the same?
>
> yes it looks like a duplicate
>>
>> josef
>>
>>> Josef
>>>
>>>
>>>> thoughts?
>>>> Johann
>>>>
>>>> On 08/14/2011 01:38 AM, b9o2jnbm tsd71eam wrote:
>>>>
>>>> I have run into a frustrating problem where scipy.optimize.fmin_bfgs
>>>> will
>>>> get stuck in an infinite loop.
>>>>
>>>> I have submitted a bug report:
>>>>
>>>> http://projects.scipy.org/scipy/ticket/1494
>>>>
>>>> but would also like to see if anybody on this list has any suggestions
>>>> or
>>>> feedback.
>>>>
>>>> Thanks,
>>>>
>>>> --
>>>> This message has been scanned for viruses and
>>>> dangerous content by MailScanner, and is
>>>> believed to be clean.
>>>>
>>>> _______________________________________________
>>>> SciPy-User mailing list
>>>> SciPy-User at scipy.org
>>>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>>>
>>>> _______________________________________________
>>>> SciPy-User mailing list
>>>> SciPy-User at scipy.org
>>>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>>>
>>>>
>



More information about the SciPy-User mailing list