qpOASES 3.2.1
An Implementation of the Online Active Set Strategy
QProblemB.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-2017 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
38#ifndef QPOASES_QPROBLEMB_HPP
39#define QPOASES_QPROBLEMB_HPP
40
41
42#include <qpOASES/Flipper.hpp>
43#include <qpOASES/Options.hpp>
44#include <qpOASES/Matrices.hpp>
45
46
48
49
51
64{
65 /* allow SolutionAnalysis class to access private members */
66 friend class SolutionAnalysis;
67
68 /*
69 * PUBLIC MEMBER FUNCTIONS
70 */
71 public:
73 QProblemB( );
74
80 QProblemB( int_t _nV,
81 HessianType _hessianType = HST_UNKNOWN,
82 BooleanType allocDenseMats = BT_TRUE
83 );
84
86 QProblemB( const QProblemB& rhs
87 );
88
90 virtual ~QProblemB( );
91
93 virtual QProblemB& operator=( const QProblemB& rhs
94 );
95
96
100 virtual returnValue reset( );
101
102
124 const real_t* const _g,
125 const real_t* const _lb,
127 const real_t* const _ub,
129 int_t& nWSR,
131 real_t* const cputime = 0,
133 const real_t* const xOpt = 0,
135 const real_t* const yOpt = 0,
137 const Bounds* const guessedBounds = 0,
139 const real_t* const _R = 0
143 );
144
165 returnValue init( const real_t* const _H,
167 const real_t* const _g,
168 const real_t* const _lb,
170 const real_t* const _ub,
172 int_t& nWSR,
174 real_t* const cputime = 0,
176 const real_t* const xOpt = 0,
178 const real_t* const yOpt = 0,
180 const Bounds* const guessedBounds = 0,
182 const real_t* const _R = 0
186 );
187
208 returnValue init( const char* const H_file,
210 const char* const g_file,
211 const char* const lb_file,
213 const char* const ub_file,
215 int_t& nWSR,
217 real_t* const cputime = 0,
219 const real_t* const xOpt = 0,
221 const real_t* const yOpt = 0,
223 const Bounds* const guessedBounds = 0,
225 const char* const R_file = 0
228 );
229
230
249 returnValue hotstart( const real_t* const g_new,
250 const real_t* const lb_new,
252 const real_t* const ub_new,
254 int_t& nWSR,
256 real_t* const cputime = 0,
258 const Bounds* const guessedBounds = 0
260 );
261
283 returnValue hotstart( const char* const g_file,
284 const char* const lb_file,
286 const char* const ub_file,
288 int_t& nWSR,
290 real_t* const cputime = 0,
292 const Bounds* const guessedBounds = 0
294 );
295
296
300 virtual returnValue getWorkingSet( real_t* workingSet
301 );
302
306 virtual returnValue getWorkingSetBounds( real_t* workingSetB
307 );
308
312 virtual returnValue getWorkingSetConstraints( real_t* workingSetC
313 );
314
315
319 inline returnValue getBounds( Bounds& _bounds
320 ) const;
321
322
325 inline int_t getNV( ) const;
326
329 inline int_t getNFR( ) const;
330
333 inline int_t getNFX( ) const;
334
337 inline int_t getNFV( ) const;
338
341 virtual int_t getNZ( ) const;
342
343
347 real_t getObjVal( ) const;
348
351 real_t getObjVal( const real_t* const _x
352 ) const;
353
358 ) const;
359
363 virtual returnValue getDualSolution( real_t* const yOpt
364 ) const;
365
366
369 inline QProblemStatus getStatus( ) const;
370
371
375 inline BooleanType isInitialised( ) const;
376
380 inline BooleanType isSolved( ) const;
381
385 inline BooleanType isInfeasible( ) const;
386
390 inline BooleanType isUnbounded( ) const;
391
392
395 inline HessianType getHessianType( ) const;
396
399 inline returnValue setHessianType( HessianType _hessianType
400 );
401
405 inline BooleanType usingRegularisation( ) const;
406
409 inline Options getOptions( ) const;
410
413 inline returnValue setOptions( const Options& _options
414 );
415
418 inline PrintLevel getPrintLevel( ) const;
419
423 );
424
425
428 inline uint_t getCount( ) const;
429
432 inline returnValue resetCounter( );
433
434
437 virtual returnValue printProperties( );
438
441 returnValue printOptions( ) const;
442
443
444 /*
445 * PROTECTED MEMBER FUNCTIONS
446 */
447 protected:
451
454 returnValue copy( const QProblemB& rhs
455 );
456
463
468
472 virtual returnValue setupSubjectToType( const real_t* const lb_new,
473 const real_t* const ub_new
474 );
475
484 virtual returnValue computeCholesky( );
485
486
493
499 returnValue obtainAuxiliaryWorkingSet( const real_t* const xOpt,
501 const real_t* const yOpt,
503 const Bounds* const guessedBounds,
504 Bounds* auxiliaryBounds
506 ) const;
507
514 const real_t* const ub
515 ) const;
516
520 virtual returnValue backsolveR( const real_t* const b,
521 BooleanType transposed,
522 real_t* const a
523 ) const;
524
529 virtual returnValue backsolveR( const real_t* const b,
530 BooleanType transposed,
531 BooleanType removingBound,
532 real_t* const a
533 ) const;
534
535
538 returnValue determineDataShift( const real_t* const g_new,
539 const real_t* const lb_new,
540 const real_t* const ub_new,
541 real_t* const delta_g,
542 real_t* const delta_lb,
543 real_t* const delta_ub,
544 BooleanType& Delta_bB_isZero
545 );
546
547
552 const real_t* const _g,
553 const real_t* const _lb,
555 const real_t* const _ub
557 );
558
565 returnValue setupQPdata( const real_t* const _H,
567 const real_t* const _g,
568 const real_t* const _lb,
570 const real_t* const _ub
572 );
573
582 returnValue setupQPdataFromFile( const char* const H_file,
584 const char* const g_file,
585 const char* const lb_file,
587 const char* const ub_file
589 );
590
596 returnValue loadQPvectorsFromFile( const char* const g_file,
597 const char* const lb_file,
599 const char* const ub_file,
601 real_t* const g_new,
602 real_t* const lb_new,
603 real_t* const ub_new
604 ) const;
605
606
613 BooleanType doThrowError = BT_FALSE
614 );
615
616
620 BooleanType isCPUtimeLimitExceeded( const real_t* const cputime,
621 real_t starttime,
622 int_t nWSR
623 ) const;
624
625
630
631
634 inline returnValue setH( SymmetricMatrix* H_new
635 );
636
642 inline returnValue setH( const real_t* const H_new
643 );
644
648 inline returnValue setG( const real_t* const g_new
649 );
650
654 inline returnValue setLB( const real_t* const lb_new
655 );
656
661 inline returnValue setLB( int_t number,
662 real_t value
663 );
664
668 inline returnValue setUB( const real_t* const ub_new
669 );
670
675 inline returnValue setUB( int_t number,
676 real_t value
677 );
678
679
682 inline void computeGivens( real_t xold,
683 real_t yold,
684 real_t& xnew,
685 real_t& ynew,
686 real_t& c,
687 real_t& s
688 ) const;
689
692 inline void applyGivens( real_t c,
693 real_t s,
694 real_t nu,
695 real_t xold,
697 real_t yold,
699 real_t& xnew,
701 real_t& ynew
703 ) const;
704
705
706
710 real_t getRelativeHomotopyLength( const real_t* const g_new,
711 const real_t* const lb_new,
712 const real_t* const ub_new
713 );
714
718 virtual returnValue performRamping( );
719
720
722 returnValue updateFarBounds( real_t curFarBound,
723 int_t nRamp,
724 const real_t* const lb_new,
725 real_t* const lb_new_far,
726 const real_t* const ub_new,
727 real_t* const ub_new_far
728 ) const;
729
730
735 const int_t* const idxList,
736 const SubjectTo* const subjectTo,
737 const real_t* const num,
738 const real_t* const den,
739 real_t epsNum,
740 real_t epsDen,
741 real_t& t,
742 int_t& BC_idx
743 ) const;
744
748 inline BooleanType isBlocking( real_t num,
749 real_t den,
750 real_t epsNum,
751 real_t epsDen,
752 real_t& t
754 ) const;
755
756
762 real_t diagVal = 1.0
763 );
764
765
766 /*
767 * PRIVATE MEMBER FUNCTIONS
768 */
769 private:
781 returnValue solveInitialQP( const real_t* const xOpt,
782 const real_t* const yOpt,
783 const Bounds* const guessedBounds,
784 const real_t* const _R,
785 int_t& nWSR,
787 real_t* const cputime
789 );
790
803 returnValue solveQP( const real_t* const g_new,
804 const real_t* const lb_new,
806 const real_t* const ub_new,
808 int_t& nWSR,
810 real_t* const cputime,
812 int_t nWSRperformed = 0,
816 BooleanType isFirstCall = BT_TRUE
817 );
818
819
832 returnValue solveRegularisedQP( const real_t* const g_new,
833 const real_t* const lb_new,
835 const real_t* const ub_new,
837 int_t& nWSR,
839 real_t* const cputime,
841 int_t nWSRperformed = 0,
844 BooleanType isFirstCall = BT_TRUE
845 );
846
847
855 returnValue setupAuxiliaryWorkingSet( const Bounds* const auxiliaryBounds,
856 BooleanType setupAfresh
858 );
859
862 returnValue setupAuxiliaryQPsolution( const real_t* const xOpt,
864 const real_t* const yOpt
866 );
867
873
880 );
881
882
883 protected:
889 virtual returnValue setupAuxiliaryQP( const Bounds* const guessedBounds
890 );
891
892 private:
896 returnValue determineStepDirection( const real_t* const delta_g,
897 const real_t* const delta_lb,
898 const real_t* const delta_ub,
899 BooleanType Delta_bB_isZero,
900 real_t* const delta_xFX,
901 real_t* const delta_xFR,
902 real_t* const delta_yFX
903 );
904
910 returnValue performStep( const real_t* const delta_g,
911 const real_t* const delta_lb,
912 const real_t* const delta_ub,
913 const real_t* const delta_xFX,
914 const real_t* const delta_xFR,
915 const real_t* const delta_yFX,
916 int_t& BC_idx,
917 SubjectToStatus& BC_status
918 );
919
925 SubjectToStatus BC_status
926 );
927
931
936 BooleanType shallRefactorise( const Bounds* const guessedBounds
937 ) const;
938
939
943 returnValue addBound( int_t number,
944 SubjectToStatus B_status,
945 BooleanType updateCholesky
946 );
947
953 BooleanType updateCholesky
954 );
955
956
960 int_t BC_idx,
961 SubjectToStatus BC_status,
962 real_t homotopyLength,
963 BooleanType isFirstCall = BT_TRUE
964 );
965
966
967 /*
968 * PROTECTED MEMBER VARIABLES
969 */
970 protected:
996 uint_t count;
1009};
1010
1011
1013
1014#include <qpOASES/QProblemB.ipp>
1015
1016#endif /* QPOASES_QPROBLEMB_HPP */
1017
1018
1019/*
1020 * end of file
1021 */
returnValue
Defines all symbols for global return values.
Definition: MessageHandling.hpp:65
BooleanType
Definition: Types.hpp:204
@ BT_TRUE
Definition: Types.hpp:206
@ BT_FALSE
Definition: Types.hpp:205
HessianType
Definition: Types.hpp:249
@ HST_UNKNOWN
Definition: Types.hpp:256
SubjectToStatus
Definition: Types.hpp:273
PrintLevel
Definition: Types.hpp:213
QProblemStatus
Definition: Types.hpp:234
int int_t
Definition: Types.hpp:180
BEGIN_NAMESPACE_QPOASES typedef double real_t
Definition: Types.hpp:171
#define END_NAMESPACE_QPOASES
Definition: Types.hpp:110
#define BEGIN_NAMESPACE_QPOASES
Definition: Types.hpp:107
Manages working sets of bounds (i.e. box constraints).
Definition: Bounds.hpp:57
Auxiliary class for storing a copy of the current matrix factorisations.
Definition: Flipper.hpp:58
Manages all user-specified options for solving QPs.
Definition: Options.hpp:57
Implements the online active set strategy for box-constrained QPs.
Definition: QProblemB.hpp:64
returnValue determineHessianType()
Definition: QProblemB.cpp:1176
real_t getObjVal() const
Definition: QProblemB.cpp:700
real_t * delta_xFR_TMP
Definition: QProblemB.hpp:998
returnValue setInfeasibilityFlag(returnValue returnvalue, BooleanType doThrowError=BT_FALSE)
Definition: QProblemB.cpp:1938
returnValue printIteration(int_t iter, int_t BC_idx, SubjectToStatus BC_status, real_t homotopyLength, BooleanType isFirstCall=BT_TRUE)
Definition: QProblemB.cpp:3692
SymmetricMatrix * H
Definition: QProblemB.hpp:972
QProblemB()
Definition: QProblemB.cpp:51
returnValue determineStepDirection(const real_t *const delta_g, const real_t *const delta_lb, const real_t *const delta_ub, BooleanType Delta_bB_isZero, real_t *const delta_xFX, real_t *const delta_xFR, real_t *const delta_yFX)
Definition: QProblemB.cpp:3042
returnValue solveQP(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new, int_t &nWSR, real_t *const cputime, int_t nWSRperformed=0, BooleanType isFirstCall=BT_TRUE)
Definition: QProblemB.cpp:2407
returnValue solveInitialQP(const real_t *const xOpt, const real_t *const yOpt, const Bounds *const guessedBounds, const real_t *const _R, int_t &nWSR, real_t *const cputime)
Definition: QProblemB.cpp:2259
returnValue performStep(const real_t *const delta_g, 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_yFX, int_t &BC_idx, SubjectToStatus &BC_status)
Definition: QProblemB.cpp:3209
uint_t getCount() const
Definition: QProblemB.ipp:216
int_t rampOffset
Definition: QProblemB.hpp:1002
BooleanType freeHessian
Definition: QProblemB.hpp:971
returnValue resetCounter()
Definition: QProblemB.ipp:225
virtual returnValue getWorkingSet(real_t *workingSet)
Definition: QProblemB.cpp:644
BooleanType isInfeasible() const
Definition: QProblemB.ipp:133
returnValue hotstart(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new, int_t &nWSR, real_t *const cputime=0, const Bounds *const guessedBounds=0)
Definition: QProblemB.cpp:414
returnValue setPrintLevel(PrintLevel _printlevel)
Definition: QProblemB.cpp:824
virtual returnValue getWorkingSetBounds(real_t *workingSetB)
Definition: QProblemB.cpp:653
void applyGivens(real_t c, real_t s, real_t nu, real_t xold, real_t yold, real_t &xnew, real_t &ynew) const
Definition: QProblemB.ipp:447
virtual int_t getNZ() const
Definition: QProblemB.cpp:690
BooleanType haveCholesky
Definition: QProblemB.hpp:981
real_t tau
Definition: QProblemB.hpp:986
BooleanType isCPUtimeLimitExceeded(const real_t *const cputime, real_t starttime, int_t nWSR) const
Definition: QProblemB.cpp:1971
real_t * g
Definition: QProblemB.hpp:974
real_t * y
Definition: QProblemB.hpp:984
real_t * lb
Definition: QProblemB.hpp:975
BooleanType isBlocking(real_t num, real_t den, real_t epsNum, real_t epsDen, real_t &t) const
Definition: QProblemB.ipp:474
returnValue addBound(int_t number, SubjectToStatus B_status, BooleanType updateCholesky)
Definition: QProblemB.cpp:3484
HessianType getHessianType() const
Definition: QProblemB.ipp:151
returnValue determineDataShift(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new, real_t *const delta_g, real_t *const delta_lb, real_t *const delta_ub, BooleanType &Delta_bB_isZero)
Definition: QProblemB.cpp:1694
returnValue setG(const real_t *const g_new)
Definition: QProblemB.ipp:293
virtual returnValue setupSubjectToType()
Definition: QProblemB.cpp:1281
uint_t count
Definition: QProblemB.hpp:996
returnValue loadQPvectorsFromFile(const char *const g_file, const char *const lb_file, const char *const ub_file, real_t *const g_new, real_t *const lb_new, real_t *const ub_new) const
Definition: QProblemB.cpp:1877
returnValue setUB(const real_t *const ub_new)
Definition: QProblemB.ipp:360
SymSparseMat * createDiagSparseMat(int_t n, real_t diagVal=1.0)
Definition: QProblemB.cpp:2038
returnValue setOptions(const Options &_options)
Definition: QProblemB.ipp:191
virtual returnValue printProperties()
Definition: QProblemB.cpp:873
Options options
Definition: QProblemB.hpp:1004
BooleanType isSolved() const
Definition: QProblemB.ipp:121
real_t getRelativeHomotopyLength(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new)
Definition: QProblemB.cpp:2113
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
Definition: QProblemB.cpp:2202
virtual returnValue computeCholesky()
Definition: QProblemB.cpp:1366
BooleanType unbounded
Definition: QProblemB.hpp:991
returnValue setupQPdataFromFile(const char *const H_file, const char *const g_file, const char *const lb_file, const char *const ub_file)
Definition: QProblemB.cpp:1805
int_t getNFV() const
Definition: QProblemB.ipp:91
returnValue setupAuxiliaryQPgradient()
Definition: QProblemB.cpp:2871
returnValue setLB(const real_t *const lb_new)
Definition: QProblemB.ipp:312
returnValue setupAuxiliaryQPsolution(const real_t *const xOpt, const real_t *const yOpt)
Definition: QProblemB.cpp:2830
BooleanType shallRefactorise(const Bounds *const guessedBounds) const
Definition: QProblemB.cpp:3456
returnValue performRatioTest(int_t nIdx, const int_t *const idxList, const SubjectTo *const subjectTo, const real_t *const num, const real_t *const den, real_t epsNum, real_t epsDen, real_t &t, int_t &BC_idx) const
Definition: QProblemB.cpp:2065
TabularOutput tabularOutput
Definition: QProblemB.hpp:1008
returnValue regulariseHessian()
Definition: QProblemB.cpp:1999
real_t * R
Definition: QProblemB.hpp:980
QProblemStatus getStatus() const
Definition: QProblemB.ipp:100
BooleanType isUnbounded() const
Definition: QProblemB.ipp:142
void computeGivens(real_t xold, real_t yold, real_t &xnew, real_t &ynew, real_t &c, real_t &s) const
Definition: QProblemB.ipp:409
returnValue setHessianType(HessianType _hessianType)
Definition: QProblemB.ipp:160
int_t getNV() const
Definition: QProblemB.ipp:64
int_t getNFR() const
Definition: QProblemB.ipp:73
returnValue clear()
Definition: QProblemB.cpp:1024
virtual returnValue reset()
Definition: QProblemB.cpp:210
returnValue getPrimalSolution(real_t *const xOpt) const
Definition: QProblemB.cpp:774
virtual ~QProblemB()
Definition: QProblemB.cpp:183
returnValue setupAuxiliaryWorkingSet(const Bounds *const auxiliaryBounds, BooleanType setupAfresh)
Definition: QProblemB.cpp:2763
virtual returnValue setupAuxiliaryQP(const Bounds *const guessedBounds)
Definition: QProblemB.cpp:2980
returnValue getBounds(Bounds &_bounds) const
Definition: QProblemB.ipp:48
virtual returnValue getWorkingSetConstraints(real_t *workingSetC)
Definition: QProblemB.cpp:678
returnValue changeActiveSet(int_t BC_idx, SubjectToStatus BC_status)
Definition: QProblemB.cpp:3354
Options getOptions() const
Definition: QProblemB.ipp:182
returnValue obtainAuxiliaryWorkingSet(const real_t *const xOpt, const real_t *const yOpt, const Bounds *const guessedBounds, Bounds *auxiliaryBounds) const
Definition: QProblemB.cpp:1479
returnValue removeBound(int_t number, BooleanType updateCholesky)
Definition: QProblemB.cpp:3554
returnValue printOptions() const
Definition: QProblemB.cpp:1010
returnValue setupQPdata(SymmetricMatrix *_H, const real_t *const _g, const real_t *const _lb, const real_t *const _ub)
Definition: QProblemB.cpp:1757
BooleanType usingRegularisation() const
Definition: QProblemB.ipp:170
PrintLevel getPrintLevel() const
Definition: QProblemB.ipp:206
real_t ramp0
Definition: QProblemB.hpp:1000
returnValue setupAuxiliaryQPbounds(BooleanType useRelaxation)
Definition: QProblemB.cpp:2911
real_t ramp1
Definition: QProblemB.hpp:1001
returnValue init(SymmetricMatrix *_H, const real_t *const _g, const real_t *const _lb, const real_t *const _ub, int_t &nWSR, real_t *const cputime=0, const real_t *const xOpt=0, const real_t *const yOpt=0, const Bounds *const guessedBounds=0, const real_t *const _R=0)
Definition: QProblemB.cpp:253
returnValue setH(SymmetricMatrix *H_new)
Definition: QProblemB.ipp:239
QProblemStatus status
Definition: QProblemB.hpp:988
int_t getNFX() const
Definition: QProblemB.ipp:82
BooleanType infeasible
Definition: QProblemB.hpp:990
virtual returnValue performDriftCorrection()
Definition: QProblemB.cpp:3405
BooleanType isInitialised() const
Definition: QProblemB.ipp:109
virtual returnValue backsolveR(const real_t *const b, BooleanType transposed, real_t *const a) const
Definition: QProblemB.cpp:1623
returnValue solveRegularisedQP(const real_t *const g_new, const real_t *const lb_new, const real_t *const ub_new, int_t &nWSR, real_t *const cputime, int_t nWSRperformed=0, BooleanType isFirstCall=BT_TRUE)
Definition: QProblemB.cpp:2654
real_t * ub
Definition: QProblemB.hpp:976
returnValue areBoundsConsistent(const real_t *const lb, const real_t *const ub) const
Definition: QProblemB.cpp:1954
returnValue copy(const QProblemB &rhs)
Definition: QProblemB.cpp:1081
virtual returnValue performRamping()
Definition: QProblemB.cpp:2163
virtual returnValue getDualSolution(real_t *const yOpt) const
Definition: QProblemB.cpp:799
virtual QProblemB & operator=(const QProblemB &rhs)
Definition: QProblemB.cpp:195
Bounds bounds
Definition: QProblemB.hpp:978
HessianType hessianType
Definition: QProblemB.hpp:993
real_t * x
Definition: QProblemB.hpp:983
real_t regVal
Definition: QProblemB.hpp:994
Flipper flipper
Definition: QProblemB.hpp:1006
virtual returnValue setupInitialCholesky()
Definition: QProblemB.cpp:1447
Provides additional tools for analysing QP solutions.
Definition: SolutionAnalysis.hpp:58
Base class for managing working sets of bounds and constraints.
Definition: SubjectTo.hpp:57
Interfaces matrix-vector operations tailored to symmetric sparse matrices.
Definition: Matrices.hpp:937
Abstract base class for interfacing matrix-vector operations tailored to symmetric matrices.
Definition: Matrices.hpp:293
Stores internal information for tabular (debugging) output.
Definition: Types.hpp:302