[Ipopt] ipopt: The problem FAILED
Stefan Vigerske
stefan at math.hu-berlin.de
Thu Apr 25 18:54:55 EDT 2013
Hi,
On 04/25/2013 08:48 PM, Joris Kinable wrote:
> Dear Stefan,
>
> I managed to find out why the init start didn't work: instead of copying my
> initial values into the double array x, I mistakenly wrote:
> x=myInitialValues; thereby overwriting the reference to the array.
>
> Unfortunately, I'm still having some weird results with the initial starts.
>
>
> 1. I initialized my model with a heuristically obtained solution, limit the
> number of iterations to 0, and solve the model. This is the result:
>
> (scaled) (unscaled)
> Objective...............: 1.4348357906583399e+02 1.4348357906583399e+02
> Dual infeasibility......: 3.4494939467173791e+00 1.1992447967144086e+00
> Constraint violation....: 2.5542688232884450e+02 2.7080707935425266e+03
> Complementarity.........: 1.0000000000015498e+09 1.0000000000015498e+09
> Overall NLP error.......: 1.0000000000015498e+09 1.0000000000015498e+09
>
> The objective is indeed identical to my heuristic objective. However, I'm
> puzzled by the large Constraint Violation. I wrote some additional code
> which inserts my initial solution into the function protected boolean
> eval_g(int n, double[] x, boolean new_x, int m, double[] g), and compares
> the result against the lower and upper bounds of the constraints. The
> result was a maximum bound violation of 0.0000000001 caused by a rounding
> error. So, how is it possible that Ipopt reports a bound violation of
> 255.42, which is significant larger?
Increasing Ipopt's print_level may help to see where these constraint
violations come from.
Note also the bound_push and bound_frac options.
> 2. Another problem occurs as follows:
>
> 1. Solve the problem.
> Result:
> Number of Iterations....: 122
> (scaled) (unscaled)
> Objective...............: 1.4023993576871166e+02 1.4023993576871166e+02
> Dual infeasibility......: 3.2150729385190527e-10 3.2150729385190527e-10
> Constraint violation....: 0.0000000000000000e+00 0.0000000000000000e+00
> Complementarity.........: 2.5415311533493614e-09 2.5415311533493614e-09
> Overall NLP error.......: 2.5415311533493614e-09 2.5415311533493614e-09
>
> 2. Take the solution, and use that solution as an initial start.
By solution you mean here the primal variable values, I guess?
> 3. Set the max iterations to 0 (or 1).
> 4. Resolve.
>
> Result:
> Number of Iterations....: 0
> (scaled) (unscaled)
> Objective...............: 1.4023993576871166e+02 1.4023993576871166e+02
> Dual infeasibility......: 9.2604242966773098e-01 9.2604242966773098e-01
> Constraint violation....: 0.0000000000000000e+00 0.0000000000000000e+00
> Complementarity.........: 5.7376840606707844e+13 5.7376840606707844e+13
> Overall NLP error.......: 5.7376840606707844e+13 5.7376840606707844e+13
>
>
> As you can see, the objectives and constraint violation are identical (as
> they should be). But why are 'Dual infeasibility', 'Complementarity' and
> 'Overall NLP error' so much different? Note that the IPOPT output
> description in the manual:
> http://www.coin-or.org/Ipopt/documentation/node56.html does not elaborate
> on these values. I hope that there is a good explanation why Ipopt seems so
> inconsistent.
Next to the values for the variables, Ipopt also computes a dual
solution corresponding to the problem constraints.
Since I believe you did not pass back the dual solution from your first
solve, Ipopts initial dual solution in the second solve does not satisfy
the duality and complementarity constraints.
If you were passing back also the dual solution and you are setting the
warm_start_init_point accordingly, then you may be possible to get also
a dual infeasibility of 0.
The "implementation paper" referenced on the wiki page and in the
documentation gives more information about the definition of dual
infeasibility and complementarity.
Stefan
>
> Btw, the derivative checker does not report any errors.
>
>
> br,
>
> Joris
>
>
> On Wed, Apr 3, 2013 at 12:42 PM, Stefan Vigerske
> <stefan at math.hu-berlin.de>wrote:
>
>> Hi,
>>
>>
>> On 04/02/2013 07:01 PM, Joris Kinable wrote:
>>
>>> Dear,
>>>
>>> I've implemented a small NLP model into ipopt using the Java interface.
>>> When I hit solve, the program terminates with the following message:
>>>
>>> "The problem FAILED".
>>>
>>> I'm trying to debug the model to see what's wrong. Hence, I've set the
>>> objective function to a fixed constant, thereby turning the optimization
>>> problem into a constraint satisfaction problem. Next, I've initialized the
>>> problem with a feasible solution, i.e. a solution which satisfies all
>>> constraints. So basically, the optimizer could return the initial solution
>>> immediately; no optimization is required. Still, I get the message that
>>> the
>>> problem fails (part of the log is included at the end of this mail).
>>>
>>> 1. Why doesn't the solver return the initial solution, as it is a feasible
>>> solution?
>>>
>>
>> Ipopt may have moved your initial point, if it was close to the bounds.
>> Try setting the options bound_push and bound_frac to 0.0:
>> http://www.coin-or.org/Ipopt/**documentation/node97.html<http://www.coin-or.org/Ipopt/documentation/node97.html>
>> http://www.coin-or.org/Ipopt/**documentation/node98.html<http://www.coin-or.org/Ipopt/documentation/node98.html>
>>
>>
>> 2. What could cause ipopt to return 'The problem Failed', i.e. what should
>>> I debug? I manually checked that all my constraints are feasible, as well
>>> as the variable bounds.
>>>
>>
>> The problem failed message is written by the Java interface and not really
>> helpful. Look at the messages from Ipopt itself (e.g., after EXIT) to see
>> why Ipopt stopped. There you also see which infeasibility (primal, dual, or
>> complementarity) is still too high to have Ipopt stopping successfully.
>>
>>
>> 3. The logger mentions that the search direction becomes too small. Why
>>> can't it identify that it has found a local/global optimum?
>>>
>>
>> Maybe your implementation of gradients or hessians is wrong. Try the
>> derivative checker:
>> http://www.coin-or.org/Ipopt/**documentation/node53.html<http://www.coin-or.org/Ipopt/documentation/node53.html>
>>
>> Stefan
>>
>>
>>> br,
>>>
>>> Joris
>>>
>>>
>>>
>>> ==============================**=
>>>
>>> Number of Iterations....: 263
>>>
>>> (scaled) (unscaled)
>>> Objective...............: 1.0000000000000000e+00
>>> 1.0000000000000000e+00
>>> Dual infeasibility......: 1.0999505370964350e-05
>>> 1.0999505370964350e-05
>>> Constraint violation....: 0.0000000000000000e+00
>>> 0.0000000000000000e+00
>>> Complementarity.........: 9.0909090909090941e-10
>>> 9.0909090909090941e-10
>>> Overall NLP error.......: 1.0999505370964350e-05
>>> 1.0999505370964350e-05
>>>
>>>
>>> Number of objective function evaluations = 289
>>> Number of objective gradient evaluations = 55
>>> Number of equality constraint evaluations = 0
>>> Number of inequality constraint evaluations = 289
>>> Number of equality constraint Jacobian evaluations = 0
>>> Number of inequality constraint Jacobian evaluations = 266
>>> Number of Lagrangian Hessian evaluations = 264
>>> Total CPU secs in IPOPT (w/o function evaluations) = 0.180
>>> Total CPU secs in NLP function evaluations = 0.016
>>>
>>> EXIT: Search Direction is becoming Too Small.
>>> Obj: 1.0
>>> Circle 0: (-41.30054873354737,3.**222049686239637), r:10.0
>>> Circle 1: (0.49442322310794523,-26.**773758302392906), r:10.0
>>> Circle 2: (-44.843610818313735,-23.**277936648765795), r:10.0
>>> Circle 3: (-22.36952325252463,-36.**936746537913145), r:10.0
>>>
>>>
>>> *** The problem FAILED!
>>>
>>>
>>>
>>> ______________________________**_________________
>>> Ipopt mailing list
>>> Ipopt at list.coin-or.org
>>> http://list.coin-or.org/**mailman/listinfo/ipopt<http://list.coin-or.org/mailman/listinfo/ipopt>
>>>
>>>
>>
>
More information about the Ipopt
mailing list