[Coin-ipopt] IPOPT remains dual infeasible

Peter Carbonetto pcarbo at cs.ubc.ca
Tue Feb 13 18:58:02 EST 2007


Andreas and Sylvain,

    I will try out your suggestions and let you know about any positive 
developments. Thank you for the illuminating responses!

Peter

On Tue, 13 Feb 2007, Sylvain Miossec wrote:

> Hello Peter,
>
> I used to have the same problem. I send a previous post about it.
>
> I solved it by scaling the problem myself (using additional information of my 
> problem to scale better). But the essential point I think (and Andreas 
> response seems to confirms it) is that I implemented a Quasi-Newton update 
> (not just a limited memory one). I am not a specialist of optimization, but 
> since more histories are used, the hessian must be better approximated. Of 
> course for big problems, more memory will be necessary. Another problem is 
> that my implementation is not very clean. I didn't want to enter IPOPT's 
> code, so I implemented it in the eval_h function, using saved values of 
> objective and constraints gradients when calling eval_f_grad and eval_jac_g. 
> I can send you the piece of code if you want to give it a try.
>
> I guess a quick solution would be to increase the limited_memory_max_history.
>
> Best regards
>
> Sylvain Miossec
>
>
>
> Peter Carbonetto wrote:
>> THE SCENARIO: I have an optimization problem with about 60 variables
>> (later this will grow), a nonlinear objective, bound constraints (all
>> the variables must lie in the positive quadrant) and a sparse set of
>> linear constraints.
>> 
>> [My problem consists of solving inference in a Bayesian model using a
>> variational approximation.]
>> 
>> THE GOOD NEWS: IPOPT converges to a very reasonable solution after about 
>> 80 iterations, and does so using a limited-memory quasi-Newton 
>> approximation to the Hessian (limited_memory_max_history = 5) because I 
>> haven't bothered to compute the second derivatives. I know the solution is 
>> reasonable because there is an existing algorithm tailored to my problem 
>> that comes up with the same answer.
>> 
>> THE BAD NEWS: IPOPT fails to converge to a point that is dual
>> feasible, or takes an extremely long time to do so. The output from
>> IPOPT looks something like this:
>> 
>> iter    objective    inf_pr   inf_du lg(mu)  ||d||
>>    0  9.4872744e+01 2.22e-16 4.89e+02   0.0 0.00e+00
>>    1  5.4935737e+01 2.22e-16 7.25e+00  -4.0 2.80e+01
>>    2  5.3405603e+01 1.11e-16 5.21e+00  -1.3 4.36e-02
>>    3  4.6288683e+01 0.00e+00 2.84e+00  -0.8 3.29e-01
>> 
>>                         . . .
>> 
>>   85  2.6698305e+01 2.22e-16 5.84e-02  -2.6 3.35e-02
>>   86  2.6698300e+01 2.22e-16 2.42e-02  -2.6 5.99e-02
>>   87  2.6658051e+01 2.22e-16 1.91e+00  -3.9 8.45e-03
>>   88  2.6669530e+01 2.22e-16 2.75e-01  -3.1 1.11e-02
>> 
>> Notice that the dual variables have failed to converge to the feasible
>> region. Currently, I workaround this problem by setting a high
>> tolerance for dual infeasibility (dual_inf_tol = 0.9).
>> 
>> I'm wondering if anyone may have some deeper understanding of
>> primal-dual methods than myself and may be able to explain why this is
>> going on. I suspect that the problem may have something to do with the 
>> quasi-Newton approximation, but I can't be sure since I haven't coded
>> the exact Hessian.
>> 
>> [By the way, Andreas, I've done all this using a MATLAB interface I've
>> developed. There were a few significant obstacles in getting IPOPT to
>> interface with MATLAB, but at this point it is working quite
>> nicely. More on that in the not-too-distant future.]
>> 
>> Thank you,
>> 
>> Peter Carbonetto
>> Dept. of Computer Science
>> University of British Columbia
>> _______________________________________________
>> Coin-ipopt mailing list
>> Coin-ipopt at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/coin-ipopt
>> 
>



More information about the Coin-ipopt mailing list