<div dir="ltr">Hi Pablo!<div><br></div><div>Since you're interested in optimal control, you might want to have a look at our tool CasADi (<a href="http://casadi.org">http://casadi.org</a>), which is an optimization modeling environment with focus on optimal control.</div><div><br></div><div>Here is an example that shows how to do more or less exactly what you're describing:</div><div><br></div><div><a href="https://github.com/casadi/casadi/blob/master/docs/examples/cplusplus/rocket_mx_and_sx.cpp">https://github.com/casadi/casadi/blob/master/docs/examples/cplusplus/rocket_mx_and_sx.cpp</a></div><div><br></div><div>That is an Euler method discretization for time and then solved with IPOPT via the CasADi interface (which takes care of all derivative calculations).</div><div><br></div><div>There are other more efficient ways of solving this problem, however. Especially if you're using IPOPT, it's better to use a "simultaneous approach" and include the entire state trajectory as decision variables instead of the "sequential approach" in the linked example. You should also consider replacing your Euler scheme with something of higher order - that will allow you to get the same accuracy with a more crude time discretization. I would recommend a collocation type integrator scheme (a type of implicit Runge-Kutta methods popular in optimal control) or if you're system is non-stiff, you can also consider the the classical (explicit) Runge-Kutta 4 scheme. Biegler's "Nonlinear Programming: Concepts, Algorithms, and Applications to Chemical Processes" is an excellent reference: <a href="http://epubs.siam.org/doi/book/10.1137/1.9780898719383">http://epubs.siam.org/doi/book/10.1137/1.9780898719383</a>. You'll find implementations of these methods in CasADi.</div><div><br></div><div>Also note that you don't necessarily need to do the modeling in C++ even if you're planning to do solve it online in an environment that only has C++. If you're using AMPL, you can can use the AMPL executable to simply to parse the problem and generate a ".nl" file. This file would then be read by the open-source AMPL Solver Library, which is pure C and easy to embed. If you're using CasADi as a modeling environment, you can do the modeling in Python or MATLAB and have CasADi generate C code for the function calls, including first and second order derivative information. It can then be run on an embedded system in a minimalistic CasADi-IPOPT environment.</div><div><br></div><div>Best regards,</div><div>Joel</div><div><br></div><div class="gmail_extra">
<br><div class="gmail_quote">2016-09-14 8:35 GMT-05:00 Pablo Perez <span dir="ltr"><<a href="mailto:pabloperez555@hotmail.com" target="_blank">pabloperez555@hotmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div><div dir="ltr">Dear all,<div><br></div><div>after having discovered Ipopt last month, I have thought using it in my academic research for optimizing the power use of a dynamic of a point mass train.</div><div><br></div><div>Due to the optimal control nature of the problem, I understand that the problem must be discretized (by an Euler method, pe). The problem has the next structure:</div><div><br></div><div>min J(x, u) = Integral[0, T](f(x, u)·dt);</div><div>dx/dt = y(x, u);</div><div>g(x, u) >= K;</div><div>x_min <= x <= x_max;</div><div>u_min <= u <= u_max;</div><div>x(0) = x0;</div><div><br></div><div>I have test and understand the examples provided with Ipopt and other users, but all of them are about continuos time problems. The only discrete systems problems I have found are used throught AMPL interface mostly, but I would like using Ipopt throught the C++ interface because it should be embeded within a standalone application.</div><div><br></div><div>Please, does anyone knows of some link where there aer an example of how to use Ipopt with a discretized system using c++ interface? Might anybody provide me with any source code example?</div><div><br></div><div>Best regards,</div><div>Pablo</div>                                       </div></div>
<br>______________________________<wbr>_________________<br>
Ipopt mailing list<br>
<a href="mailto:Ipopt@list.coin-or.org">Ipopt@list.coin-or.org</a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__list.coin-2Dor.org_mailman_listinfo_ipopt&d=CwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=OtjwlDFa50ew9RXNsKUjcDYXBipGc0uQDVH_0daPLFk&m=EVZY3slpC56CA2pzk9y1rGYqC9FTWeGeR0vY6pONZAA&s=19a6i0ofgIF1oDAvpq3MaUg30PUmRSLFdgJjL7B-kEw&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__list.<wbr>coin-2Dor.org_mailman_<wbr>listinfo_ipopt&d=CwICAg&c=Ngd-<wbr>ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLx<wbr>WPA_2Wlc4&r=<wbr>OtjwlDFa50ew9RXNsKUjcDYXBipGc0<wbr>uQDVH_0daPLFk&m=<wbr>EVZY3slpC56CA2pzk9y1rGYqC9FTWe<wbr>GeR0vY6pONZAA&s=<wbr>19a6i0ofgIF1oDAvpq3MaUg30PUmRS<wbr>LFdgJjL7B-kEw&e=</a><br>
<br></blockquote></div><br></div></div>