Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00047 #include "acado_optimal_control.hpp"
00048 #include <acado_gnuplot.hpp>
00049
00050
00051 int main( ){
00052
00053 USING_NAMESPACE_ACADO
00054
00055
00056
00057 #define Csin 2.8
00058
00059
00060
00061
00062 DifferentialState x1,x2,x3,x4,x5;
00063 IntermediateState mu,sigma,pif;
00064 Control u ;
00065 Parameter tf ;
00066 DifferentialEquation f(0.0,tf) ;
00067
00068
00069
00070
00071 mu = 0.125*x2/x4;
00072 sigma = mu/0.135;
00073 pif = (-384.0*mu*mu + 134.0*mu);
00074
00075 f << dot(x1) == mu*x1;
00076 f << dot(x2) == -sigma*x1 + u*Csin;
00077 f << dot(x3) == pif*x1;
00078 f << dot(x4) == u;
00079 f << dot(x5) == 0.001*(u*u + 0.01*tf*tf);
00080
00081
00082
00083
00084 OCP ocp( 0.0, tf, 50 );
00085 ocp.minimizeMayerTerm(0, 0.01*x5 -x3/tf );
00086 ocp.minimizeMayerTerm(1, 0.01*x5 -x3/(Csin*x4-x2));
00087
00088 ocp.subjectTo( f );
00089
00090 ocp.subjectTo( AT_START, x1 == 0.1 );
00091 ocp.subjectTo( AT_START, x2 == 14.0 );
00092 ocp.subjectTo( AT_START, x3 == 0.0 );
00093 ocp.subjectTo( AT_START, x4 == 5.0 );
00094 ocp.subjectTo( AT_START, x5 == 0.0 );
00095
00096 ocp.subjectTo( 0.0 <= x1 <= 15.0 );
00097 ocp.subjectTo( 0.0 <= x2 <= 30.0 );
00098 ocp.subjectTo( -0.1 <= x3 <= 1000.0 );
00099 ocp.subjectTo( 5.0 <= x4 <= 20.0 );
00100 ocp.subjectTo( 20.0 <= tf <= 40.0 );
00101 ocp.subjectTo( 0.0 <= u <= 2.0 );
00102
00103
00104
00105
00106 MultiObjectiveAlgorithm algorithm(ocp);
00107
00108 algorithm.set( PARETO_FRONT_DISCRETIZATION, 21 );
00109 algorithm.set( PARETO_FRONT_GENERATION , PFG_NORMAL_BOUNDARY_INTERSECTION );
00110 algorithm.set( HESSIAN_APPROXIMATION, EXACT_HESSIAN );
00111 algorithm.set( KKT_TOLERANCE, 1e-7 );
00112
00113
00114 algorithm.solveSingleObjective(0);
00115
00116
00117 algorithm.solveSingleObjective(1);
00118
00119
00120 algorithm.set( KKT_TOLERANCE, 1e-6 );
00121 algorithm.solve();
00122
00123 algorithm.getWeights("fed_batch_bioreactor_nbi_weights.txt");
00124 algorithm.getAllDifferentialStates("fed_batch_bioreactor_nbi_states.txt");
00125 algorithm.getAllControls("fed_batch_bioreactor_nbi_controls.txt");
00126 algorithm.getAllParameters("fed_batch_bioreactor_nbi_parameters.txt");
00127
00128
00129
00130
00131 VariablesGrid paretoFront;
00132 algorithm.getParetoFront( paretoFront );
00133
00134 GnuplotWindow window1;
00135 window1.addSubplot( paretoFront, "Pareto Front (yield versus productivity)", "-PRODUCTIVTY", "-YIELD", PM_POINTS );
00136 window1.plot( );
00137
00138
00139
00140
00141 algorithm.printInfo();
00142
00143
00144
00145
00146 paretoFront.print();
00147
00148 return 0;
00149 }