[Coin-ipopt] Re: IPOPT
Andreas Waechter
andreasw at watson.ibm.com
Mon Oct 31 15:58:28 EST 2005
Hi Fijoy,
I'm sending my reply to the mailing list. (I manually subscribed you - I
hope it worked now...)
> First, I checked the C++ version tutorial yesterday; it seems to me that the
> C++ version has no provision for calculating the gradients using finite
> differences. Am I right? (I do have the first derivatives hard coded; if I
> were to code the hessian, I might have to invest too much time before I try to
> see if IPOPT works for my problem).
That's correct, first derivatives have to be supplied. Also, I'm planning
to add quasi-Newton options to the C++ version (thay are already available
in the Fortran version), but so far I didn't find the time to do that
(hopefully before the year ends).
> Second, I am just wondering if you could tell me if there are any potential
> problems if I use IPOPT C++ version for my problem. My problem consists of
> around 200 variables. However, I have tens of thousands (~70000) of nonlinear
> inequality constraints, all of them smooth. Specifically, since IPOPT adds one
> slack variables each constraint, will I run into any problem?
Adding slack variables doesn't really make the problem more complicated
than handling inequalities in other ways, at least not for an interior
point method. Ipopt is able to solve problems with up to millions of
variables (and/or inequality constraints). However, this usually assumes
that second derivatives are supplied.
You could try use the limited-memory BFGS option in the old Fortran
version, but I suspect that would not work very well, since that version
tries to approximate the second derivatives in the space of all variables
(including slack variables). When will I implement the quasi-Newton
option in Ipopt 3.0, I will not include the slack variable space in the
approximation which helpfully makes that more suitable for problems with
many inequality constraints and only few regular variables, but as I said,
I haven't started to work on that yet, so it might take a while until this
is available.
Coding second derivatives is a pain (actually, I'm doing that right now
because I need test problems with millions of variables, and AMPL doesn't
do that - it is so easy to make mistakes :)
Apropos AMPL, in case you problem is given in formulas (and not some
back-box calculations), you might want to consider to code your problem in
AMPL (see www.ampl.com) - this is much easier, since you can just write
the problem in a straight-forward manner, and the tool will take care of
computing first and second derivatives for the optimization tool. You can
get a free student version from the AMPL home page (for up to a few
hundred variables and constraints), and maybe your university has a
regular version that you could use. You can also submit large AMPL
problems to have them solved remotely on the NEOS server (the Ipopt page
there is http://www-neos.mcs.anl.gov/neos/solvers/nco:Ipopt/AMPL.html)
> Note: just to give an idea, I did try my problem using MATLAB fmincon() in
> medium-scale mode which uses SQP. It did solve it, but after several hours. I
> want to try IPOPT in the hope that IPOPT might solve it faster.
Well, I would strongly suspect that Ipopt can do much better than that...
Hope this helps,
Andreas
More information about the Coin-ipopt
mailing list