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
00027
00035 #ifndef ACADO_TOOLKIT_CONSTRAINT_HPP
00036 #define ACADO_TOOLKIT_CONSTRAINT_HPP
00037
00038 #include <acado/constraint/box_constraint.hpp>
00039 #include <acado/constraint/boundary_constraint.hpp>
00040 #include <acado/constraint/coupled_path_constraint.hpp>
00041 #include <acado/constraint/path_constraint.hpp>
00042 #include <acado/constraint/algebraic_consistency_constraint.hpp>
00043 #include <acado/constraint/point_constraint.hpp>
00044
00045
00046 BEGIN_NAMESPACE_ACADO
00047
00048
00060 class Constraint : public BoxConstraint{
00061
00062 friend class OptimizationAlgorithmBase;
00063 friend class OptimizationAlgorithm;
00064 friend class RealTimeAlgorithm;
00065 friend class TESTExport;
00066 friend class ExportNLPSolver;
00067
00068
00069
00070
00071 public:
00072
00074 Constraint( );
00075
00077 Constraint( const Constraint& rhs );
00078
00080 virtual ~Constraint( );
00081
00083 Constraint& operator=( const Constraint& rhs );
00084
00085
00093 returnValue init( const Grid& grid_, const int& numberOfStages_ = 1 );
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00114 returnValue add( const double lb_, const Expression& arg, const double ub_ );
00115
00116
00124 returnValue add( const DVector lb_, const Expression& arg, const double ub_ );
00125
00126
00134 returnValue add( const double lb_, const Expression& arg, const DVector ub_ );
00135
00136
00144 returnValue add( const DVector lb_, const Expression& arg, const DVector ub_ );
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00165 returnValue add( const int index_, const double lb_, const Expression& arg, const double ub_ );
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00188 returnValue add( const double lb_, const Expression& arg1,
00189 const Expression& arg2, const double ub_ );
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00211 returnValue add( const double lb_, const Expression *arguments, const double ub_ );
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00234 returnValue add( const uint& endOfStage_ ,
00235 const DifferentialEquation& dae );
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00250 returnValue add( const ConstraintComponent& component );
00251
00252
00257 returnValue add( const int index_, const ConstraintComponent& component );
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00274 virtual returnValue setForwardSeed( BlockMatrix *xSeed_ ,
00275 BlockMatrix *xaSeed_,
00276 BlockMatrix *pSeed_ ,
00277 BlockMatrix *uSeed_ ,
00278 BlockMatrix *wSeed_ ,
00279 int order );
00280
00281
00288 virtual returnValue setUnitForwardSeed( );
00289
00290
00291
00297 virtual returnValue setBackwardSeed( BlockMatrix *seed,
00298 int order );
00299
00300
00301
00308 virtual returnValue setUnitBackwardSeed( );
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320 returnValue evaluate( const OCPiterate& iter );
00321
00322
00323
00324
00325 returnValue evaluateSensitivities();
00326
00327
00334 returnValue evaluateSensitivities( const BlockMatrix &seed, BlockMatrix &hessian );
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00350 virtual returnValue getConstraintResiduum( BlockMatrix &lowerRes,
00351 BlockMatrix &upperRes );
00352
00353
00358 virtual returnValue getBoundResiduum( BlockMatrix &lowerRes,
00359 BlockMatrix &upperRes );
00360
00361
00362
00368 virtual returnValue getForwardSensitivities( BlockMatrix &D ,
00371 int order );
00372
00373
00374
00380 virtual returnValue getBackwardSensitivities( BlockMatrix &D ,
00383 int order );
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00396 inline Grid& getGrid();
00397
00399 inline int getNC();
00400
00404 inline int getNX () const;
00405
00409 inline int getNXA () const;
00410
00414 inline int getNP () const;
00415
00419 inline int getNU () const;
00420
00424 inline int getNW () const;
00425
00426
00428 inline int getNumberOfBlocks() const;
00429
00430
00432 inline int getBlockDim( int idx ) const;
00433
00435 inline DVector getBlockDims( ) const;
00436
00437
00438
00440 inline BooleanType isAffine() const;
00441
00443 inline BooleanType isBoxConstraint() const;
00444
00450 BooleanType isEmpty() const;
00451
00452 returnValue getPathConstraints(Function& function_, DMatrix& lb_, DMatrix& ub_) const;
00453
00454 returnValue getPointConstraint(const unsigned index, Function& function_, DMatrix& lb_, DMatrix& ub_) const;
00455
00456
00457
00458
00459 protected:
00460
00461
00462 BoundaryConstraint *boundary_constraint ;
00463 CoupledPathConstraint *coupled_path_constraint ;
00464 PathConstraint *path_constraint ;
00465 AlgebraicConsistencyConstraint *algebraic_consistency_constraint;
00466 PointConstraint **point_constraints ;
00467
00468
00469
00470
00471
00472 protected:
00473
00477 returnValue add( const int index_, const double lb_, Expression* arg, const double ub_ );
00478
00482 returnValue add( const DVector lb_, Expression* arg, const DVector ub_ );
00483
00484
00488 virtual returnValue getBounds( const OCPiterate& iter );
00489
00491 void deleteAll();
00492
00493 };
00494
00495
00496 CLOSE_NAMESPACE_ACADO
00497
00498
00499
00500 #include <acado/constraint/constraint.ipp>
00501
00502
00503 #endif // ACADO_TOOLKIT_CONSTRAINT_HPP
00504
00505
00506
00507