I do not understand based on the documentation exactly what the restoration mode is, when Ipopt enters it, and how it exits it. <div><br></div><div>Based on what I have read, Ipopt enters restoration mode when it determines it is in a non-feasible region, and uses a modified algorithm to attempt to return to a feasible region. Can anyone clarify matters further?</div>
<div><br></div><div>I have two versions of my program, one which evaluates NLP functions in serial, and one which evaluates them in parallel. Since modifying my parallel version, now Ipopt enters restoration mode every time, while the serial version never does. Both are started with random initial parameters which in general do not result in a feasible starting point, but the serial version is always able to drive the system to a feasible state while reducing the cost function, all without  entering restoration mode (at least, no &quot;r&quot; is printed in the standard output).</div>
<div><br></div><div>Even when fixing the seed of the random number generator to compare serial and parallel versions directly, the serial does not enter restoration mode while the parallel version does. Based on some some of the restoration mode options in the documentation, I think it is possible this may occur when the derivatives of the constraints are not correct. Comparing my serial and parallel results, I do have some small discrepancies, which I believe are due to parallel evaluation of the derivatives and the non-commutativity of floating point operations.</div>
<div><br></div><div>Is it possible that small changes in the derivatives could force Ipopt into restoration mode? If so, what options would you recommend to reduce this behavior?</div><div><br></div><div>Thank you,</div><div>
Seth Watts</div>