car_nnc.cpp
Go to the documentation of this file.
00001 /*
00002  *    This file is part of ACADO Toolkit.
00003  *
00004  *    ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
00005  *    Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau,
00006  *    Milan Vukov, Rien Quirynen, KU Leuven.
00007  *    Developed within the Optimization in Engineering Center (OPTEC)
00008  *    under supervision of Moritz Diehl. All rights reserved.
00009  *
00010  *    ACADO Toolkit is free software; you can redistribute it and/or
00011  *    modify it under the terms of the GNU Lesser General Public
00012  *    License as published by the Free Software Foundation; either
00013  *    version 3 of the License, or (at your option) any later version.
00014  *
00015  *    ACADO Toolkit is distributed in the hope that it will be useful,
00016  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018  *    Lesser General Public License for more details.
00019  *
00020  *    You should have received a copy of the GNU Lesser General Public
00021  *    License along with ACADO Toolkit; if not, write to the Free Software
00022  *    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00023  *
00024  */
00025 
00026 
00046 // IMPLEMENTATION:
00047 // ---------------
00048 
00049 #include <acado_optimal_control.hpp>
00050 #include <acado_gnuplot.hpp>
00051 
00052 
00053 /* >>> start tutorial code >>> */
00054 int main( ){
00055 
00056     USING_NAMESPACE_ACADO
00057 
00058     // INTRODUCE THE VARIABLES:
00059     // -------------------------
00060     DifferentialState     x1,x2;
00061     Control               u    ;
00062     Parameter             t1   ;
00063     DifferentialEquation  f(0.0,t1);
00064 
00065 
00066     // DEFINE A DIFFERENTIAL EQUATION:
00067     // -------------------------------
00068     f << dot(x1) ==  x2;
00069     f << dot(x2) ==   u;
00070 
00071 
00072     // DEFINE AN OPTIMAL CONTROL PROBLEM:
00073     // ----------------------------------
00074     OCP ocp(0.0,t1,25);
00075     ocp.minimizeMayerTerm( 0, x2         );
00076     ocp.minimizeMayerTerm( 1, 2.0*t1/20.0);
00077 
00078     ocp.subjectTo( f );
00079 
00080     ocp.subjectTo( AT_START, x1 ==   0.0 );
00081     ocp.subjectTo( AT_START, x2 ==   0.0 );
00082     ocp.subjectTo( AT_END  , x1 == 200.0 );
00083 
00084     ocp.subjectTo( 0.0 <= x1 <= 200.0001 );
00085     ocp.subjectTo( 0.0 <= x2 <=  40.0    );
00086     ocp.subjectTo( 0.0 <= u  <=   5.0    );
00087     ocp.subjectTo( 0.1 <= t1 <=  50.0    );
00088 
00089 
00090     // DEFINE A MULTI-OBJECTIVE ALGORITHM AND SOLVE THE OCP:
00091     // -----------------------------------------------------
00092     MultiObjectiveAlgorithm algorithm(ocp);
00093 
00094     algorithm.set( PARETO_FRONT_GENERATION, PFG_NORMALIZED_NORMAL_CONSTRAINT );
00095     algorithm.set( PARETO_FRONT_DISCRETIZATION, 11 );
00096     algorithm.set( KKT_TOLERANCE, 1e-8 );
00097 
00098     // Minimize individual objective function
00099     algorithm.solveSingleObjective(0);
00100 
00101     // Minimize individual objective function
00102     algorithm.solveSingleObjective(1);
00103 
00104     // Generate Pareto set
00105     algorithm.solve();
00106 
00107     algorithm.getWeights("car_nnc_weights.txt");
00108     algorithm.getAllDifferentialStates("car_nnc_states.txt");
00109     algorithm.getAllControls("car_nnc_controls.txt");
00110     algorithm.getAllParameters("car_nnc_parameters.txt");
00111 
00112 
00113     // OBTAIN RESULTS FOR PLOTTING:
00114     // ----------------------------
00115     VariablesGrid paretoFront;
00116     algorithm.getParetoFront( paretoFront );
00117 
00118     GnuplotWindow window1;
00119     window1.addSubplot( paretoFront, "Pareto Front (time versus energy)", "ENERGY","TIME", PM_POINTS );
00120     window1.plot( );
00121 
00122     printf("\n\n");
00123     printf("-------------------------------------------\n\n");
00124     printf("Pay off matrix: \n");
00125     (algorithm.getPayOffMatrix()).print();
00126     printf("\n\n");
00127     printf("Utopia vector: \n");
00128     (algorithm.getUtopiaVector()).print();
00129     printf("\n\n");
00130     printf("-------------------------------------------\n\n");
00131 
00132 
00133     // PRINT INFORMATION ABOUT THE ALGORITHM:
00134     // --------------------------------------
00135     algorithm.printInfo();
00136 
00137 
00138     // SAVE INFORMATION:
00139     // -----------------
00140     paretoFront.print( "car_nnc_pareto.txt" );
00141 
00142     return 0;
00143 }
00144 /* <<< end tutorial code <<< */
00145 


acado
Author(s): Milan Vukov, Rien Quirynen
autogenerated on Thu Aug 27 2015 11:57:54