[Coin-ipopt] Heuristic for IPOPT
Andreas Waechter
andreasw at watson.ibm.com
Tue May 16 15:42:42 EDT 2006
Hi Dahai,
> I would like to modify the core code of IPOPT to implement some heuristic.
> For example, a variable x is 0.01 at some iteration and I want to FIX it to 0
> afterwards (i.e. future iterations). So where are the best locations /
> functions to do that?
I don't think it would really work to change the problem definition during
the optimization. In particular, fixing a variable to a value changes the
dimension of the problem, and the data structure cannot be adapted. In
addition, I'm not sure how useful it is to fix a variable during the
optimization, since you don't know yet if it is really going to 0. The
purpose of the interior point approach is not to make decisions about
activities.
However, if you still want to try something, you could simply interrupt
the optimization when you realize that you want to fix a number of
variables and restart the algorithm from that point, after changing the
problem statement (I'm assuming that you are using Ipopt from a C++
program.)
You could overload the method intermediate_callback of the TNLP class,
which is called once per iteration (around the time of the convergence
check). You could monitor the variables there and decide when you want to
quick (and return false in that case). It is a bit tricky to get the
information about the variables out of the Ipopt internal data structures
(it is stored in the IpoptData object). After the optimization was
aborted by you (by returning false), you could use the
get_warm_start_iterate method of the TNLP class, to set the starting point
for ALL Ipopt-internal variables. All this is not documented, so you
would have to dig into the code...
Regards,
Andreas
More information about the Coin-ipopt
mailing list