multi_objective_functionality.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 
36 
37 
39 
40 
41 
42 //
43 // PUBLIC MEMBER FUNCTIONS:
44 //
45 
46 
48 
49  nMayer = 0;
50  mayerTerms = 0;
51 }
52 
53 
55 
56  int run1;
57  nMayer = rhs.nMayer;
58 
59  if( nMayer > 0 ){
60  mayerTerms = (Expression**)calloc(nMayer,sizeof(Expression*));
61  for( run1 = 0; run1 < nMayer; run1++ ){
62  mayerTerms[run1] = new Expression(*rhs.mayerTerms[run1]);
63  }
64  }
65  else{
66  mayerTerms = 0;
67  }
68 }
69 
70 
72 
73  int run1;
74  for( run1 = 0; run1 < nMayer; run1++ )
75  if( mayerTerms[run1] != 0 ) delete mayerTerms[run1];
76 
77  if( mayerTerms != 0 )
78  free(mayerTerms);
79 }
80 
81 
83 
84  int run1;
85 
86  if ( this != &rhs ){
87 
88  for( run1 = 0; run1 < nMayer; run1++ )
89  if( mayerTerms[run1] != 0 ) delete mayerTerms[run1];
90 
91  if( mayerTerms != 0 )
92  free(mayerTerms);
93 
94  nMayer = rhs.nMayer;
95 
96  if( nMayer > 0 ){
97  mayerTerms = (Expression**)calloc(nMayer,sizeof(Expression*));
98  for( run1 = 0; run1 < nMayer; run1++ ){
99  mayerTerms[run1] = new Expression( *rhs.mayerTerms[run1] );
100  }
101  }
102  else{
103  mayerTerms = 0;
104  }
105  }
106  return *this;
107 }
108 
109 
110 
112  const Expression& arg ){
113 
114  ASSERT( multiObjectiveIdx >= 0 );
115 
116  if( multiObjectiveIdx >= nMayer ){
117  ASSERT( multiObjectiveIdx == nMayer );
118  nMayer = multiObjectiveIdx+1;
119  mayerTerms = (Expression**)realloc(mayerTerms,nMayer*sizeof(Expression*));
120  mayerTerms[multiObjectiveIdx] = new Expression(arg);
121  return SUCCESSFUL_RETURN;
122  }
123  mayerTerms[multiObjectiveIdx] = new Expression( *mayerTerms[multiObjectiveIdx] + arg );
124  return SUCCESSFUL_RETURN;
125 }
126 
128 
129  return nMayer;
130 }
131 
132 returnValue MultiObjectiveFunctionality::getObjective( const int &multiObjectiveIdx, Expression **arg ) const{
133 
134  ASSERT( arg != 0 );
135  ASSERT( multiObjectiveIdx < nMayer);
136  *arg = new Expression(*mayerTerms[multiObjectiveIdx]);
137 
138  return SUCCESSFUL_RETURN;
139 }
140 
141 
143 
144 // end of file.
returnValue minimizeMayerTerm(const int &multiObjectiveIdx, const Expression &arg)
returnValue getObjective(const int &multiObjectiveIdx, Expression **arg) const
Allows to pass back messages to the calling function.
MultiObjectiveFunctionality & operator=(const MultiObjectiveFunctionality &rhs)
#define CLOSE_NAMESPACE_ACADO
Base class for all variables within the symbolic expressions family.
Definition: expression.hpp:56
Encapsulates functionality for defining OCPs having multiple objectives.
void rhs(const real_t *x, real_t *f)
#define ASSERT(x)
#define BEGIN_NAMESPACE_ACADO


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