[Coin-ipopt] Re: IPOPT + warm-start

Dominique Orban dominique.orban at polymtl.ca
Wed Feb 21 13:55:14 EST 2007


Hi Adela and Andreas,

Andreas Waechter wrote:
> Hi Adela,
> 
> Please send messages regarding Ipopt to the Ipopt mailing list 
> (http://list.coin-or.org/mailman/listinfo/coin-ipopt).  I'm copying my 
> answer to it now.   (Note, if you haven't signed up yet, you need to 
> subscribe first before you can post messages.)
> 
>> I'm Adela Pag�s from the Universitat Polit�cnica de Catalunya 
>> (Barcelona, Spain). Currently our research group is trying to solve a 
>> quadratic binary mixed problem by relaxing the integrality constraints 
>> and adding some quadratic constraints. The model comes from the 
>> merging of a power generation planning problem (which is quadratic and 
>> continuous) and a maintenance scheduling problem (which is linear and 
>> binary).
>>
>> We implemented our strategy in AMPL and we use IPOPT as a solver. 
>> Given that the initial point is very important for achieving good 
>> solutions, I wish to try some warm-start techniques.
>>
>> I don't know which is the better way to do the variable initialization 
>> and I wonder if you would give me some advice on the following questions:
>> * I can see different results if the 'warm_start_init_point' option is 
>> 'yes' or 'no'. However, if I print the _var.init0 and _con.dinit0 the 
>> result is always 0. I understand that IPOPT is using always the primal 
>> variable initialization and dual information only if  
>> 'warm_start_init_point' option is 'yes'. Am I right?
>> * Is it possible to initialize the reduced costs of the variable 
>> bounds component-wise?
>> * Is there any document/examples/guidelines in which I could learn how 
>> to implement my own warm-start? Or how to retrieve information of an 
>> iterate that satisfies some conditions? I have to admit that my 
>> knowledge on C++ programming is very basic.
> 
> You bring up a good point.
> 
> Carl Laird was the one who initially wrote that AMPL interface, and I'm 
> not completely familiar with everything he did there (so it might be 
> good if he could chip in).  However, here my 10 cents:
> 
> It seems to me that the following is currently happening:
> 
> When you solve a problem for the first time, AMPL is giving only the 
> value for the primal variables to Ipopt.  If you then rerun the problem 
> (or a related problem), Ipopt gets the values of what is currently in 
> _var.val as initial values for the primal x variables.  Ipopt also 
> receives the content of _con.dual as possible initial values for the 
> constraint multipliers.  Those values are only used by Ipopt, if you 
> choose "warm_start_init_point yes".  (I have no idea what the meanings 
> of init0 and dinit0 are... they seem to be always zero...?)
> 
> At this point, I don't see how one could possibly assign different 
> initial values for the contraint multipliers, and I also don't see how 
> initial dual values could be given to Ipopt for the bound constraint 
> multipliers.
> 
> Maybe there are standard ways to do this, and I just don't know them, 
> since I'm not so familiar with AMPL.  However, if there is no standard 
> way how other solvers receive this information, we could find a 
> workaround using "suffixes".  Here, you would define a new suffix in 
> your AMPL model, and after some changes in the Ipopt AMPL interface code 
> (AmplTNLP.cpp), Ipopt could check of you have set values for those 
> suffixes, and then use that information for a warm start.
> 
> Does anyone else reading this mailing list have an idea what might be 
> the easiest and most elegant way to do this?

Here's my own 10 cents: you can specify initial values for the Lagrange 
multipliers in AMPL by saying something like this in your model file:

	subject to my_constraint default 12.3: x^2 + y^2 <= 1;

This assigns the value 12.3 to the multipliers. Solvers have access to this 
value through the "pi0" component of the ASL structure.

Cheers,
Dominique



More information about the Coin-ipopt mailing list