[SciPy-dev] one more scipy.optimize.line_search question

dmitrey openopt at ukr.net
Mon Aug 6 17:18:03 EDT 2007


Alan G Isaac wrote:
>>> On Mon, 06 Aug 2007, dmitrey apparently wrote: 
>>>       
>>>> I wonder what does the parameter amax=50 mean (in 
>>>> optimize.line_search func)?  Seems like this parameter is 
>>>> never used in the func 
>>>>         
>
>
>   
>> Alan G Isaac wrote:
>>     
>>> Is there something wrong with the minpack2 documentation? 
>>>       
>
>   
>>> c       stpmax is a double precision variable. 
>>> c         On entry stpmax is a nonnegative upper bound for the step. 
>>> c         On exit stpmax is unchanged. 
>>>       
>
>
> On Mon, 06 Aug 2007, dmitrey apparently wrote:
>   
>> the line_search func from scipy.optimize has no any relation to the 
>> fortran routine you have mentioned. 
>> Maybe you mean line_search func from scipy.optimize.linesearch, but as I 
>> mentioned, scipy has 2 funcs line_search, one python-written (from 
>> optimize.py), other from /optimize/linesearch.py. 
>> So, as I have mentioned, amax is unused in scipy.optimize.linesearch 
>>     
>
>
> In optimize.linesearch we define:
> line_search(f, myfprime, xk, pk, gfk, old_fval, old_old_fval, args=(), c1=1e-4, c2=0.9, amax=50):
> In optimize.optimize we define:
> line_search(f, myfprime, xk, pk, gfk, old_fval, old_old_fval, args=(), c1=1e-4, c2=0.9, amax=50):
> Clearly this is just a matter of a consistent interface,
> so all args get the same interpretation.
>   
If you'll just try ctrl-f "amax" in optimize.py, you'll see that it has 
only 2 : one - definition of amax as a func and one - in line_search 
func input args. So the value is unused in line_search.


> As to why the stepsize bound is not used in the latter,
> you will have to ask Travis.
>
> Do you find a difference in the performance of the two?
>   
Yes, I do. At least, they return different numbers for my whole problem.

fortran:
itn 0: Fk= 8596.39550577 maxResidual= 804.031293334
itn 1 : Fk= 8596.39529687 maxResidual= 804.031284626
itn 2 : Fk= 8596.39509622 maxResidual= 804.03127639
itn 3 : Fk= 8596.39489987 maxResidual= 804.031268349
...
itn 10 : Fk= 8596.39355523 maxResidual= 804.031212067
itn 20 : Fk= 8596.39164144 maxResidual= 804.031131664
itn 30 : Fk= 8596.3897277 maxResidual= 804.031051261
itn 40 : Fk= 8596.38781395 maxResidual= 804.030970858
itn 50 : Fk= 8596.38590021 maxResidual= 804.030890455

python:
itn 0: Fk= 8596.39550577 maxResidual= 804.031293334
itn 1 : Fk= 8591.30146061 maxResidual= 803.818915875
itn 2 : Fk= 8586.40946095 maxResidual= 803.61802955
itn 3 : Fk= 8581.62365205 maxResidual= 803.421917306
...
itn 10 : Fk= 8548.91083789 maxResidual= 802.050160864
itn 20 : Fk= 8502.55420774 maxResidual= 800.094501458
itn 30 : Fk= 8456.43702405 maxResidual= 798.143610745
itn 40 : Fk= 8410.55715335 maxResidual= 796.19747748
itn 50 : Fk= 8364.9134737 maxResidual= 794.256090032

So Python implementation seems to be better (at least for the single 
test func; also, I don't check how much time and/or iterations do they 
consume).
But Matthieu's implementation works much more better in single (1st) 
iteration, but after 2nd i constantly get either zero shift (x_new=x0) 
or CPU hanging.
Maybe he has some variables remembered from previous calculations?
D.

> Cheers,
> Alan Isaac
>
>
>
> _______________________________________________
> Scipy-dev mailing list
> Scipy-dev at scipy.org
> http://projects.scipy.org/mailman/listinfo/scipy-dev
>
>
>
>   




More information about the SciPy-Dev mailing list