<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, Sans-Serif;font-size:14pt"><div id="yiv8524269118"><div><div style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-size: 14pt;"><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7">Hi,</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7"><br></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">first of all, thanks a lot for providing such a powerful solver and continuing to maintain and support it so actively.</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;"><br id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_17"></div><div
 id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">I am trying to solve a problem which contains many complementarity constraints, i.e. constraints of the
 type</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;"><br id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_22"></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">x &gt;= 0</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">y &gt;= 0</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">xy = 0</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;"><br id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_32"></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">which I believe are awkward
 for interior point solvers because the solution lies on the boundary and the IP solver is trying to stay strictly inside a feasible region. &nbsp;A well-known way to handle this issue is to replace the final constraint with</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;"><br id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_37"></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">xy &lt;= t</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;"><br id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_42"></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">for some small t which is then driven to 0 as the solver progresses. &nbsp;Using this
 approach I have been able to find solutions for successively smaller values of t in separate solver runs, feeding in the solution from each run as the starting point for the next run, but it is a large problem which takes quite some time to converge and I was wondering if it would be possible to modify the value of t during a single solver run, for example by reducing it when the barrier term is lowered.</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;"><br id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_47"></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">I believe there was a modification to IPOPT called IPOPT-C which used this approach for complementarity problems, but as I understand it IPOPT-C has not been maintained for some time and was only available in fortran, which I would prefer
 to avoid.</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;"><br id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_51"></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" style="font-size:18.88888931274414px;background-color:transparent;">Is there a way to change the value of a constraint bound (my current implementation has t as a fixed upper bound) during execution, or some neat way to reformulate the problem? &nbsp;I did wonder if it would be possible to do something like make t a variable, fiddle with its derivatives so that the algorithm doesn't try to modify it, and then overwrite its value during the intermediate_callback function?</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" class="yiv8524269118yui_3_13_0_ym1_1_1390390848824_166965" style="font-size:18.88888931274414px;background-color:transparent;"><br></div><div
 id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" class="yiv8524269118yui_3_13_0_ym1_1_1390390848824_166965" style="font-size:18.88888931274414px;background-color:transparent;">I am also interested in improving performance. &nbsp;The solver seems to be progressing pretty smoothly to a solution once it finds a feasible region, but appears to take a rather large number of iterations (see https://docs.google.com/document/d/14Ta84ggR4psvTzwpbpr0s26vAx7O0wB0Vca4voAt4m0/edit?usp=sharing for example output). &nbsp;Might this indicate a problem with scaling? &nbsp;If so, what is the easiest way to examine the scaling? &nbsp;I thought about exporting the numerical values of the Hessian for one iteration and examining them, but is there a better way? &nbsp;Previous threads regarding performance on the mailing list often suggest using the derivative checker to test if the derivatives are valid. &nbsp;I have not tried this yet, but the derivatives all come from
 ADOL-C so I think they should be OK.</div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" class="yiv8524269118yui_3_13_0_ym1_1_1390390848824_166965" style="font-size:18.88888931274414px;background-color:transparent;"><br></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" class="yiv8524269118yui_3_13_0_ym1_1_1390390848824_166965" style="font-size:18.88888931274414px;background-color:transparent;">Another performance issue I want to look at is that the NLP function evaluation seems to be taking a lot of the time. &nbsp;I used the&nbsp;<span id="yiv8524269118yui_3_13_0_ym1_1_1391358658671_30461" style="background-color:transparent;">print_timing_statistics option to investigate further and found that almost all of the time is spent in the Lagrangian Hessian evaluation. &nbsp;Is it possible to get any more detailed information to identify if one particular section of that evaluation is dominating the CPU time?</span></div><div
 id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" class="yiv8524269118yui_3_13_0_ym1_1_1390390848824_166965" style="font-size:18.88888931274414px;background-color:transparent;"><span style="background-color:transparent;"><br></span></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" class="yiv8524269118yui_3_13_0_ym1_1_1390390848824_166965" style="font-size:18.88888931274414px;background-color:transparent;"><span id="yiv8524269118yui_3_13_0_ym1_1_1391358658671_30560" style="background-color:transparent;">Best wishes,</span></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" class="yiv8524269118yui_3_13_0_ym1_1_1390390848824_166965" style="font-size:18.88888931274414px;background-color:transparent;"><span style="background-color:transparent;"><br></span></div><div id="yiv8524269118yui_3_13_0_ym1_9_1390390848824_7" class="yiv8524269118yui_3_13_0_ym1_1_1390390848824_166965" style="font-size:18.88888931274414px;
background-color:transparent;"><span id="yiv8524269118yui_3_13_0_ym1_1_1391358658671_30559" style="background-color:transparent;">David</span></div></div></div></div></div></body></html>