rocket.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ACADO Toolkit.
3  *
4  * ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
5  * Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau,
6  * Milan Vukov, Rien Quirynen, KU Leuven.
7  * Developed within the Optimization in Engineering Center (OPTEC)
8  * under supervision of Moritz Diehl. All rights reserved.
9  *
10  * ACADO Toolkit is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 3 of the License, or (at your option) any later version.
14  *
15  * ACADO Toolkit is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with ACADO Toolkit; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  *
24  */
25 
26 
34 #include <acado_gnuplot.hpp>
35 
36 
37 /* >>> start tutorial code >>> */
38 int main( ){
39 
41 
42  // INTRODUCE THE VARIABLES:
43  // -------------------------
44  DifferentialState v,s,m;
45  Control u ;
47 
48  const double t_start = 0.0;
49  const double t_end = 10.0;
50 
51  // DEFINE A DIFFERENTIAL EQUATION:
52  // -------------------------------
53 
54  f << dot(s) == v;
55  f << dot(v) == (u-0.02*v*v)/m;
56  f << dot(m) == -0.01*u*u;
57 
58 
59  // DEFINE AN OPTIMAL CONTROL PROBLEM:
60  // ----------------------------------
61  OCP ocp( t_start, t_end, 20 );
62  ocp.minimizeLagrangeTerm( u*u );
63  ocp.subjectTo( f );
64 
65  ocp.subjectTo( AT_START, s == 0.0 );
66  ocp.subjectTo( AT_START, v == 0.0 );
67  ocp.subjectTo( AT_START, m == 1.0 );
68  ocp.subjectTo( AT_END , s == 10.0 );
69  ocp.subjectTo( AT_END , v == 0.0 );
70 
71  ocp.subjectTo( -0.01 <= v <= 1.3 );
72 
73  ocp.subjectTo( u*u >= -1.0 );
74 
75 
76  // DEFINE A PLOT WINDOW:
77  // ---------------------
78  GnuplotWindow window;
79  window.addSubplot( s,"DifferentialState s" );
80  window.addSubplot( v,"DifferentialState v" );
81  window.addSubplot( m,"DifferentialState m" );
82  window.addSubplot( u,"Control u" );
83  window.addSubplot( PLOT_KKT_TOLERANCE,"KKT Tolerance" );
84 // window.addSubplot( 0.5 * m * v*v,"Kinetic Energy" );
85 
86 
87  // DEFINE AN OPTIMIZATION ALGORITHM AND SOLVE THE OCP:
88  // ---------------------------------------------------
89  OptimizationAlgorithm algorithm(ocp);
90 
91 // algorithm.set( INTEGRATOR_TYPE, INT_BDF );
92 
93 // algorithm.set( INTEGRATOR_TOLERANCE, 1e-6 );
94 // algorithm.set( KKT_TOLERANCE, 1e-3 );
95 
96  //algorithm.set( DYNAMIC_SENSITIVITY, FORWARD_SENSITIVITY );
97 
98 
99 
101  algorithm.set( MAX_NUM_ITERATIONS, 20 );
102  algorithm.set( KKT_TOLERANCE, 1e-10 );
103 // algorithm.set( MAX_NUM_INTEGRATOR_STEPS, 4 );
104 
105  algorithm << window;
106  algorithm.solve();
107 
108 // BlockMatrix sens;
109 // algorithm.getSensitivitiesX( sens );
110 // sens.print();
111 
112  return 0;
113 }
114 /* <<< end tutorial code <<< */
115 
116 
117 
118 // algorithm.set( DISCRETIZATION_TYPE, MULTIPLE_SHOOTING );
119 // algorithm.set( DISCRETIZATION_TYPE, SINGLE_SHOOTING );
120 //
121 // algorithm.set( DYNAMIC_SENSITIVITY, FORWARD_SENSITIVITY );
122 // algorithm.set( DYNAMIC_SENSITIVITY, BACKWARD_SENSITIVITY );
123 
124 // algorithm.set( INTEGRATOR_TYPE, INT_RK45 );
125 // algorithm.set( INTEGRATOR_TYPE, INT_RK78 );
126 // algorithm.set( INTEGRATOR_TYPE, INT_BDF );
127 //
128 // algorithm.set( KKT_TOLERANCE, 1e-4 );
129 // algorithm.set( MAX_NUM_ITERATIONS, 20 );
130 
131 // algorithm.set( PRINT_SCP_METHOD_PROFILE, YES );
int main()
Definition: rocket.cpp:38
returnValue minimizeLagrangeTerm(const Expression &arg)
Definition: ocp.cpp:240
User-interface to formulate and solve optimal control problems and static NLPs.
#define USING_NAMESPACE_ACADO
returnValue subjectTo(const DifferentialEquation &differentialEquation_)
Definition: ocp.cpp:153
returnValue addSubplot(PlotWindowSubplot &_subplot)
returnValue set(OptionsName name, int value)
Definition: options.cpp:126
Data class for defining optimal control problems.
Definition: ocp.hpp:89
#define v
Expression dot(const Expression &arg)
const double t_end
const double t_start
Provides an interface to Gnuplot for plotting algorithmic outputs.
virtual returnValue solve()
Allows to setup and evaluate differential equations (ODEs and DAEs) based on SymbolicExpressions.


acado
Author(s): Milan Vukov, Rien Quirynen
autogenerated on Mon Jun 10 2019 12:35:03