external_packages/qpOASES-3.2.0/include/qpOASES/QProblem.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of qpOASES.
3  *
4  * qpOASES -- An Implementation of the Online Active Set Strategy.
5  * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka,
6  * Christian Kirches et al. All rights reserved.
7  *
8  * qpOASES is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * qpOASES is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  * See the GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with qpOASES; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  *
22  */
23 
24 
37 #ifndef QPOASES_QPROBLEM_HPP
38 #define QPOASES_QPROBLEM_HPP
39 
40 
41 #include <qpOASES/QProblemB.hpp>
42 #include <qpOASES/Constraints.hpp>
43 #include <qpOASES/ConstraintProduct.hpp>
44 #include <qpOASES/Matrices.hpp>
45 
46 
48 
49 
61 class QProblem : public QProblemB
62 {
63  /* allow SolutionAnalysis class to access private members */
64  friend class SolutionAnalysis;
65 
66  /*
67  * PUBLIC MEMBER FUNCTIONS
68  */
69  public:
71  QProblem( );
72 
78  QProblem( int_t _nV,
79  int_t _nC,
80  HessianType _hessianType = HST_UNKNOWN
81  );
82 
84  QProblem( const QProblem& rhs
85  );
86 
88  virtual ~QProblem( );
89 
91  virtual QProblem& operator=( const QProblem& rhs
92  );
93 
94 
98  virtual returnValue reset( );
99 
100 
123  const real_t* const _g,
124  Matrix *_A,
125  const real_t* const _lb,
127  const real_t* const _ub,
129  const real_t* const _lbA,
131  const real_t* const _ubA,
133  int_t& nWSR,
135  real_t* const cputime = 0,
137  const real_t* const xOpt = 0,
139  const real_t* const yOpt = 0,
141  const Bounds* const guessedBounds = 0,
143  const Constraints* const guessedConstraints = 0,
145  const real_t* const _R = 0
149  );
150 
151 
173  returnValue init( const real_t* const _H,
175  const real_t* const _g,
176  const real_t* const _A,
177  const real_t* const _lb,
179  const real_t* const _ub,
181  const real_t* const _lbA,
183  const real_t* const _ubA,
185  int_t& nWSR,
187  real_t* const cputime = 0,
189  const real_t* const xOpt = 0,
191  const real_t* const yOpt = 0,
193  const Bounds* const guessedBounds = 0,
195  const Constraints* const guessedConstraints = 0,
197  const real_t* const _R = 0
201  );
202 
225  returnValue init( const char* const H_file,
227  const char* const g_file,
228  const char* const A_file,
229  const char* const lb_file,
231  const char* const ub_file,
233  const char* const lbA_file,
235  const char* const ubA_file,
237  int_t& nWSR,
239  real_t* const cputime = 0,
241  const real_t* const xOpt = 0,
243  const real_t* const yOpt = 0,
245  const Bounds* const guessedBounds = 0,
247  const Constraints* const guessedConstraints = 0,
249  const char* const R_file = 0
252  );
253 
254 
272  returnValue hotstart( const real_t* const g_new,
273  const real_t* const lb_new,
275  const real_t* const ub_new,
277  const real_t* const lbA_new,
279  const real_t* const ubA_new,
281  int_t& nWSR,
283  real_t* const cputime = 0,
285  const Bounds* const guessedBounds = 0,
287  const Constraints* const guessedConstraints = 0
289  );
290 
311  returnValue hotstart( const char* const g_file,
312  const char* const lb_file,
314  const char* const ub_file,
316  const char* const lbA_file,
318  const char* const ubA_file,
320  int_t& nWSR,
322  real_t* const cputime = 0,
324  const Bounds* const guessedBounds = 0,
326  const Constraints* const guessedConstraints = 0
328  );
329 
330 
336  returnValue solveCurrentEQP ( const int_t n_rhs,
337  const real_t* g_in,
338  const real_t* lb_in,
340  const real_t* ub_in,
342  const real_t* lbA_in,
344  const real_t* ubA_in,
345  real_t* x_out,
346  real_t* y_out
347  );
348 
352  virtual returnValue getWorkingSet( real_t* workingSet
353  );
354 
358  virtual returnValue getWorkingSetBounds( real_t* workingSetB
359  );
360 
364  virtual returnValue getWorkingSetConstraints( real_t* workingSetC
365  );
366 
367 
371  inline returnValue getConstraints( Constraints& _constraints
372  ) const;
373 
374 
377  inline int_t getNC( ) const;
378 
381  inline int_t getNEC( ) const;
382 
385  inline int_t getNAC( ) const;
386 
389  inline int_t getNIAC( ) const;
390 
393  virtual int_t getNZ( ) const;
394 
395 
399  virtual returnValue getDualSolution( real_t* const yOpt
400  ) const;
401 
402 
405  returnValue setConstraintProduct( ConstraintProduct* const _constraintProduct
406  );
407 
408 
411  virtual returnValue printProperties( );
412 
416 
417 
418  /*
419  * PROTECTED MEMBER FUNCTIONS
420  */
421  protected:
424  returnValue clear( );
425 
428  returnValue copy( const QProblem& rhs
429  );
430 
443  returnValue solveInitialQP( const real_t* const xOpt,
444  const real_t* const yOpt,
445  const Bounds* const guessedBounds,
446  const Constraints* const guessedConstraints,
447  const real_t* const _R,
448  int_t& nWSR,
450  real_t* const cputime
452  );
453 
466  returnValue solveQP( const real_t* const g_new,
467  const real_t* const lb_new,
469  const real_t* const ub_new,
471  const real_t* const lbA_new,
473  const real_t* const ubA_new,
475  int_t& nWSR,
477  real_t* const cputime,
479  int_t nWSRperformed = 0,
483  BooleanType isFirstCall = BT_TRUE
484  );
485 
486 
500  const real_t* const lb_new,
502  const real_t* const ub_new,
504  const real_t* const lbA_new,
506  const real_t* const ubA_new,
508  int_t& nWSR,
510  real_t* const cputime,
512  int_t nWSRperformed = 0,
515  BooleanType isFirstCall = BT_TRUE
516  );
517 
518 
521  /* \return SUCCESSFUL_RETURN \n
522  RET_HOTSTART_FAILED */
523  virtual returnValue updateActivitiesForHotstart( const real_t* const lb_new,
524  const real_t* const ub_new,
525  const real_t* const lbA_new,
526  const real_t* const ubA_new
527  );
528 
529 
533  virtual returnValue setupSubjectToType( );
534 
539  virtual returnValue setupSubjectToType( const real_t* const lb_new,
540  const real_t* const ub_new,
541  const real_t* const lbA_new,
542  const real_t* const ubA_new
543  );
544 
552 
559 
564 
565 
574  const real_t* const yOpt,
576  const Bounds* const guessedBounds,
577  const Constraints* const guessedConstraints,
578  Bounds* auxiliaryBounds,
580  Constraints* auxiliaryConstraints
582  ) const;
583 
592  virtual returnValue setupAuxiliaryWorkingSet( const Bounds* const auxiliaryBounds,
593  const Constraints* const auxiliaryConstraints,
594  BooleanType setupAfresh
596  );
597 
602  const real_t* const yOpt
604  );
605 
611 
617  returnValue setupAuxiliaryQPbounds( const Bounds* const auxiliaryBounds,
618  const Constraints* const auxiliaryConstraints,
619  BooleanType useRelaxation
620  );
621 
622 
628  virtual returnValue addConstraint( int_t number,
629  SubjectToStatus C_status,
630  BooleanType updateCholesky,
631  BooleanType ensureLI = BT_TRUE
632  );
633 
639  virtual returnValue addConstraint_checkLI( int_t number
640  );
641 
650  virtual returnValue addConstraint_ensureLI( int_t number,
651  SubjectToStatus C_status
652  );
653 
659  virtual returnValue addBound( int_t number,
660  SubjectToStatus B_status,
661  BooleanType updateCholesky,
662  BooleanType ensureLI = BT_TRUE
663  );
664 
669  virtual returnValue addBound_checkLI( int_t number
670  );
671 
680  virtual returnValue addBound_ensureLI( int_t number,
681  SubjectToStatus B_status
682  );
683 
689  virtual returnValue removeConstraint( int_t number,
690  BooleanType updateCholesky,
691  BooleanType allowFlipping = BT_FALSE,
692  BooleanType ensureNZC = BT_FALSE
693  );
694 
700  virtual returnValue removeBound( int_t number,
701  BooleanType updateCholesky,
702  BooleanType allowFlipping = BT_FALSE,
703  BooleanType ensureNZC = BT_FALSE
704  );
705 
706 
711  const int_t* const idxList,
712  const real_t* const num,
713  const real_t* const den,
714  real_t epsNum,
715  real_t epsDen,
716  real_t& t,
717  int_t& BC_idx
718  ) const;
719 
720 
725  BooleanType removeBoundNotConstraint,
726  int_t remIdx,
727  BooleanType &exchangeHappened,
728  BooleanType &addBoundNotConstraint,
729  int_t &addIdx,
730  SubjectToStatus &addStatus
731  );
732 
733 
737  virtual returnValue backsolveT( const real_t* const b,
738  BooleanType transposed,
739  real_t* const a
740  ) const;
741 
742 
746  const real_t* const lbA_new,
747  const real_t* const ubA_new,
748  const real_t* const lb_new,
749  const real_t* const ub_new,
750  real_t* const delta_g,
751  real_t* const delta_lbA,
752  real_t* const delta_ubA,
753  real_t* const delta_lb,
754  real_t* const delta_ub,
755  BooleanType& Delta_bC_isZero,
756  BooleanType& Delta_bB_isZero
757  );
758 
763  virtual returnValue determineStepDirection( const real_t* const delta_g,
764  const real_t* const delta_lbA,
765  const real_t* const delta_ubA,
766  const real_t* const delta_lb,
767  const real_t* const delta_ub,
768  BooleanType Delta_bC_isZero,
769  BooleanType Delta_bB_isZero,
770  real_t* const delta_xFX,
771  real_t* const delta_xFR,
772  real_t* const delta_yAC,
773  real_t* const delta_yFX
774  );
775 
781  returnValue performStep( const real_t* const delta_g,
782  const real_t* const delta_lbA,
783  const real_t* const delta_ubA,
784  const real_t* const delta_lb,
785  const real_t* const delta_ub,
786  const real_t* const delta_xFX,
787  const real_t* const delta_xFR,
788  const real_t* const delta_yAC,
789  const real_t* const delta_yFX,
790  int_t& BC_idx,
791  SubjectToStatus& BC_status,
792  BooleanType& BC_isBound
793  );
794 
800  SubjectToStatus BC_status,
801  BooleanType BC_isBound
802  );
803 
804 
809  const real_t* const lb_new,
810  const real_t* const ub_new,
811  const real_t* const lbA_new,
812  const real_t* const ubA_new
813  );
814 
815 
819  virtual returnValue performRamping( );
820 
821 
823  returnValue updateFarBounds( real_t curFarBound,
824  int_t nRamp,
825  const real_t* const lb_new,
826  real_t* const lb_new_far,
827  const real_t* const ub_new,
828  real_t* const ub_new_far,
829  const real_t* const lbA_new,
830  real_t* const lbA_new_far,
831  const real_t* const ubA_new,
832  real_t* const ubA_new_far
833  ) const;
834 
835 
839 
840 
848  virtual returnValue setupAuxiliaryQP( const Bounds* const guessedBounds,
849  const Constraints* const guessedConstraints
850  );
851 
856  BooleanType shallRefactorise( const Bounds* const guessedBounds,
857  const Constraints* const guessedConstraints
858  ) const;
859 
866  const real_t* const _g,
867  Matrix *_A,
868  const real_t* const _lb,
870  const real_t* const _ub,
872  const real_t* const _lbA,
874  const real_t* const _ubA
876  );
877 
878 
885  returnValue setupQPdata( const real_t* const _H,
887  const real_t* const _g,
888  const real_t* const _A,
889  const real_t* const _lb,
891  const real_t* const _ub,
893  const real_t* const _lbA,
895  const real_t* const _ubA
897  );
898 
907  returnValue setupQPdataFromFile( const char* const H_file,
909  const char* const g_file,
910  const char* const A_file,
911  const char* const lb_file,
913  const char* const ub_file,
915  const char* const lbA_file,
917  const char* const ubA_file
919  );
920 
926  returnValue loadQPvectorsFromFile( const char* const g_file,
927  const char* const lb_file,
929  const char* const ub_file,
931  const char* const lbA_file,
933  const char* const ubA_file,
935  real_t* const g_new,
936  real_t* const lb_new,
937  real_t* const ub_new,
938  real_t* const lbA_new,
939  real_t* const ubA_new
940  ) const;
941 
942 
946  int_t BC_idx,
947  SubjectToStatus BC_status,
948  BooleanType BC_isBound,
949  real_t homotopyLength,
950  BooleanType isFirstCall = BT_TRUE
951  );
952 
953 
958  inline returnValue setA( Matrix *A_new
959  );
960 
965  inline returnValue setA( const real_t* const A_new
966  );
967 
968 
972  inline returnValue setLBA( const real_t* const lbA_new
973  );
974 
979  inline returnValue setLBA( int_t number,
980  real_t value
981  );
982 
986  inline returnValue setUBA( const real_t* const ubA_new
987  );
988 
993  inline returnValue setUBA( int_t number,
994  real_t value
995  );
996 
997 
1002  returnValue dropInfeasibles ( int_t BC_number,
1003  SubjectToStatus BC_status,
1004  BooleanType BC_isBound,
1005  real_t *xiB,
1006  real_t *xiC
1007  );
1008 
1014  returnValue areBoundsConsistent(const real_t* const lb,
1015  const real_t* const ub,
1016  const real_t* const lbA,
1017  const real_t* const ubA
1018  ) const;
1019 
1020 
1021  public:
1025  returnValue writeQpDataIntoMatFile( const char* const filename
1026  ) const;
1027 
1031  returnValue writeQpWorkspaceIntoMatFile( const char* const filename
1032  );
1033 
1034 
1035 
1036  /*
1037  * PROTECTED MEMBER VARIABLES
1038  */
1039  protected:
1041  Matrix* A;
1043  real_t* lbA;
1044  real_t* ubA;
1048  real_t* T;
1049  real_t* Q;
1052  real_t* Ax;
1054  real_t* Ax_l;
1056  real_t* Ax_u;
1061  real_t* tempA;
1062  real_t* tempB;
1064  real_t* delta_xFRy;
1065  real_t* delta_xFRz;
1067 };
1068 
1069 
1071 
1072 #include <qpOASES/QProblem.ipp>
1073 
1074 #endif /* QPOASES_QPROBLEM_HPP */
1075 
1076 
1077 /*
1078  * end of file
1079  */
BooleanType areBoundsConsistent(const real_t *const delta_lb, const real_t *const delta_ub, const real_t *const delta_lbA, const real_t *const delta_ubA) const
returnValue addConstraint_ensureLI(int number, SubjectToStatus C_status)
returnValue addBound_ensureLI(int number, SubjectToStatus B_status)
returnValue setupQPdataFromFile(const char *const H_file, const char *const g_file, const char *const A_file, const char *const lb_file, const char *const ub_file, const char *const lbA_file, const char *const ubA_file)
returnValue solveCurrentEQP(const int n_rhs, const real_t *g_in, const real_t *lb_in, const real_t *ub_in, const real_t *lbA_in, const real_t *ubA_in, real_t *x_out, real_t *y_out)
returnValue init(const real_t *const _H, const real_t *const _g, const real_t *const _A, const real_t *const _lb, const real_t *const _ub, const real_t *const _lbA, const real_t *const _ubA, int &nWSR, const real_t *const yOpt=0, real_t *const cputime=0)
returnValue writeQpWorkspaceIntoMatFile(const char *const filename)
Interface for specifying user-defined evaluations of constraint products.
BooleanType shallRefactorise(const Bounds *const guessedBounds, const Constraints *const guessedConstraints) const
returnValue removeConstraint(int number, BooleanType updateCholesky)
virtual returnValue getWorkingSetBounds(real_t *workingSetB)
Implements the online active set strategy for box-constrained QPs.
returnValue solveRegularisedQP(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new, const real_t *const lbA_new, const real_t *const ubA_new, int &nWSR, real_t *const cputime, int nWSRperformed=0)
returnValue setupAuxiliaryQPsolution(const real_t *const xOpt, const real_t *const yOpt)
Allows to pass back messages to the calling function.
returnValue setLBA(const real_t *const lbA_new)
virtual returnValue updateActivitiesForHotstart(const real_t *const lb_new, const real_t *const ub_new, const real_t *const lbA_new, const real_t *const ubA_new)
returnValue ensureNonzeroCurvature(BooleanType removeBoundNotConstraint, int remIdx, BooleanType &exchangeHappened, BooleanType &addBoundNotConstraint, int &addIdx, SubjectToStatus &addStatus)
real_t getRelativeHomotopyLength(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new, const real_t *const lbA_new, const real_t *const ubA_new)
returnValue hotstart(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new, const real_t *const lbA_new, const real_t *const ubA_new, int &nWSR, real_t *const cputime)
virtual returnValue getWorkingSetConstraints(real_t *workingSetC)
returnValue performPlainRatioTest(int nIdx, const int *const idxList, const real_t *const num, const real_t *const den, real_t epsNum, real_t epsDen, real_t &t, int &BC_idx) const
returnValue obtainAuxiliaryWorkingSet(const real_t *const xOpt, const real_t *const yOpt, const Bounds *const guessedBounds, const Constraints *const guessedConstraints, Bounds *auxiliaryBounds, Constraints *auxiliaryConstraints) const
returnValue solveInitialQP(const real_t *const xOpt, const real_t *const yOpt, const Bounds *const guessedBounds, const Constraints *const guessedConstraints, int &nWSR, real_t *const cputime)
int getNAC()
returnValue setupQPdata(const real_t *const _H, const real_t *const _g, const real_t *const _A, const real_t *const _lb, const real_t *const _ub, const real_t *const _lbA, const real_t *const _ubA)
returnValue backsolveT(const real_t *const b, BooleanType transposed, real_t *const a)
returnValue changeActiveSet(int BC_idx, SubjectToStatus BC_status, BooleanType BC_isBound)
returnValue setConstraintProduct(ConstraintProduct *const _constraintProduct)
returnValue updateFarBounds(real_t curFarBound, int_t nRamp, const real_t *const lb_new, real_t *const lb_new_far, const real_t *const ub_new, real_t *const ub_new_far, const real_t *const lbA_new, real_t *const lbA_new_far, const real_t *const ubA_new, real_t *const ubA_new_far) const
virtual returnValue computeProjectedCholesky()
returnValue setupAuxiliaryQPbounds(const Bounds *const auxiliaryBounds, const Constraints *const auxiliaryConstraints, BooleanType useRelaxation)
returnValue getConstraints(Constraints *const _constraints) const
returnValue getFreeVariablesFlags(BooleanType *varIsFree)
int getNEC() const
returnValue determineStepDirection(const real_t *const delta_g, const real_t *const delta_lbA, const real_t *const delta_ubA, const real_t *const delta_lb, const real_t *const delta_ub, BooleanType Delta_bC_isZero, BooleanType Delta_bB_isZero, real_t *const delta_xFX, real_t *const delta_xFR, real_t *const delta_yAC, real_t *const delta_yFX)
Abstract base class for interfacing tailored matrix-vector operations.
returnValue loadQPvectorsFromFile(const char *const g_file, const char *const lb_file, const char *const ub_file, const char *const lbA_file, const char *const ubA_file, real_t *const g_new, real_t *const lb_new, real_t *const ub_new, real_t *const lbA_new, real_t *const ubA_new) const
void rhs(const real_t *x, real_t *f)
returnValue solveQP(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new, const real_t *const lbA_new, const real_t *const ubA_new, int &nWSR, real_t *const cputime, int nWSRperformed=0)
int getNC() const
returnValue addBound(int number, SubjectToStatus B_status, BooleanType updateCholesky)
returnValue copy(const QProblem &rhs)
returnValue performStep(const real_t *const delta_g, const real_t *const delta_lbA, const real_t *const delta_ubA, const real_t *const delta_lb, const real_t *const delta_ub, const real_t *const delta_xFX, const real_t *const delta_xFR, const real_t *const delta_yAC, const real_t *const delta_yFX, int &BC_idx, SubjectToStatus &BC_status, BooleanType &BC_isBound)
virtual returnValue setupAuxiliaryQP(const Bounds *const guessedBounds, const Constraints *const guessedConstraints)
returnValue setupAuxiliaryQP(const Bounds *const guessedBounds)
#define BT_TRUE
Definition: acado_types.hpp:47
returnValue removeBound(int number, BooleanType updateCholesky)
returnValue determineDataShift(const real_t *const g_new, const real_t *const lbA_new, const real_t *const ubA_new, const real_t *const lb_new, const real_t *const ub_new, real_t *const delta_g, real_t *const delta_lbA, real_t *const delta_ubA, real_t *const delta_lb, real_t *const delta_ub, BooleanType &Delta_bC_isZero, BooleanType &Delta_bB_isZero)
#define HST_UNKNOWN
real_t ub[NVMAX]
Definition: QProblem.h:70
real_t lb[NVMAX]
Definition: QProblem.h:69
virtual returnValue getWorkingSet(real_t *workingSet)
#define BT_FALSE
Definition: acado_types.hpp:49
Manages working sets of bounds (= box constraints).
returnValue dropInfeasibles(int_t BC_number, SubjectToStatus BC_status, BooleanType BC_isBound, real_t *xiB, real_t *xiC)
returnValue printIteration(int iteration, int BC_idx, SubjectToStatus BC_status, BooleanType BC_isBound)
double real_t
Definition: AD_test.c:10
Implements the online active set strategy for QPs with general constraints.
returnValue setupAuxiliaryWorkingSet(const Bounds *const auxiliaryBounds, const Constraints *const auxiliaryConstraints, BooleanType setupAfresh)
returnValue writeQpDataIntoMatFile(const char *const filename) const
returnValue setA(const real_t *const A_new)
returnValue setUBA(const real_t *const ubA_new)
int getNIAC()
returnValue addConstraint(int number, SubjectToStatus C_status, BooleanType updateCholesky)
Abstract base class for interfacing matrix-vector operations tailored to symmetric matrices...


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