[SciPy-user] openopt: which NLP solver?
Emanuele Olivetti
emanuele@relativita....
Sun Jan 27 05:51:22 CST 2008
First of all thanks a lot Dmitrey. Your advices are
very valuable. Other comments below, inline.
dmitrey wrote:
> ...
> as well as many other solvers, including even ALGENCAN. Maybe I 'll
> provide native OO handling of the situation but, on the other hand,
> usually it means something incorrect with your own funcs, for example it
> has lots of local minima or incorrect gradients.
>
There are fair chances that there are many local minima (at
least "some" are present for sure) and some troubles with
gradients too :)
>> - it is possible that the evaluation of my function and gradient suffers
>> some numerical instabilities
>>
>>
> you should investigate is it so or not. Using p.check.df=1 could be very
> helpful (see openopt doc page, "auto check derivatives" chapter). If
> your 1st derivatives really have instabilities (noise, non-smooth - for
> example, using abs(...)) - then only ralg can handle the problem. On the
> other hand, current OpenOpt ralg implementation is still far from
> perfect (at least from ralg fortran version by our dept). However, ralg
> is for medium-scale problems with nVars up to ~1000, not 10000 as you
> have. It handles matrix b of shape(nVars,nVars) in memory, and requires
> 4..5*nVars^2 multiplication operations each iter.
> If no problems with smooth and noise and 1st derivatives obtain, I would
> recommend you scipy_lbfgsb, ALGENCAN, scipy_tnc, maybe scipy_slsqp;
> lincher also can serve, but it's very primitive. Here's full list:
> http://scipy.org/scipy/scikits/wiki/NLP
>
>
Very interesting. I'll investigate as you suggest. I'll work on
the 1000 variable problem and ralg in a short time. After that
I'll try the other solvers you suggested.
>> If someone (dmitrey?) could help selecting most appropriate solver
>> in openopt it would be much appreciated.
>> In the meawhile I'll try 'ralg'.
>>
>>
>> Thanks in advance,
>>
>> Emanuele
>>
>> P.S.: I'm having some troubles building openopt in ubuntu gutsy.
>> "sudo python setup.py install" works but "python setup.py build"
>> does not, requiring a previously installed "scikits" package. How
>> can I install openopt in a custom path instead of /usr/local/lib/... ?
>>
>>
> Try using "python setup.py", it must ask you what to do (cho0se install)
> and destination (choose your own)
>
Right, I'm just trying now. Cool :)
>>
>> [0]: by the way fmin_cg does not handle constraints, at least in
>> standard scipy, which forced me to use abs() in many places. This
>> could be a source of instabilities when computing gradient.
>>
>>
> I guess you use very obsolete OpenOpt version.
> I had implemented (ling time ago) yielding error message
> "the solver scipy_cg cannot handle 'lb' constraints"
> (at least I get the one with trying to pass lb constraints to scipy_cg)
> Of course, since scipy.optimize.fmin_cg can't handle constraints, so
> does OO scipy_cg.
>
>
The 'fmin_cg' I'm using is the standard scipy's one (scipy-0.5.2, as
in ubuntu gutsy 7.10), not yours in openopt. I'll use yours now.
Thanks again!
Emanuele
More information about the SciPy-user
mailing list