qpOASES  3.2.1
An Implementation of the Online Active Set Strategy
Public Member Functions | Protected Member Functions | Protected Attributes
Constraints Class Reference

Manages working sets of constraints. More...

#include <Constraints.hpp>

Inheritance diagram for Constraints:
SubjectTo

List of all members.

Public Member Functions

 Constraints ()
 Constraints (int_t _n)
 Constraints (const Constraints &rhs)
virtual ~Constraints ()
Constraintsoperator= (const Constraints &rhs)
returnValue init (int_t _n=0)
returnValue setupConstraint (int_t number, SubjectToStatus _status)
returnValue setupAllInactive ()
returnValue setupAllLower ()
returnValue setupAllUpper ()
returnValue moveActiveToInactive (int_t number)
returnValue moveInactiveToActive (int_t number, SubjectToStatus _status)
returnValue flipFixed (int_t number)
int_t getNC () const
int_t getNEC () const
int_t getNIC () const
int_t getNUC () const
int_t getNAC () const
int_t getNIAC () const
IndexlistgetActive ()
IndexlistgetInactive ()
virtual returnValue shift (int_t offset)
virtual returnValue rotate (int_t offset)
returnValue print ()
int_t getNumberOfType (SubjectToType _type) const
SubjectToType getType (int_t i) const
SubjectToStatus getStatus (int_t i) const
returnValue setType (int_t i, SubjectToType value)
returnValue setStatus (int_t i, SubjectToStatus value)
void setNoLower (BooleanType _status)
void setNoUpper (BooleanType _status)
BooleanType hasNoLower () const
BooleanType hasNoUpper () const

Protected Member Functions

returnValue clear ()
returnValue copy (const Constraints &rhs)
returnValue setupAll (SubjectToStatus _status)
returnValue copy (const SubjectTo &rhs)
returnValue addIndex (Indexlist *const indexlist, int_t newnumber, SubjectToStatus newstatus)
returnValue removeIndex (Indexlist *const indexlist, int_t removenumber)
returnValue swapIndex (Indexlist *const indexlist, int_t number1, int_t number2)

Protected Attributes

Indexlist active
Indexlist inactive
int_t n
SubjectToTypetype
SubjectToStatusstatus
BooleanType noLower
BooleanType noUpper

Detailed Description

This class manages working sets of constraints by storing index sets and other status information.

Author:
Hans Joachim Ferreau
Version:
3.2
Date:
2007-2017

Constructor & Destructor Documentation

Default constructor.

Constructor which takes the number of constraints.

Parameters:
_nNumber of constraints.

References init().

Copy constructor (deep copy).

Parameters:
rhsRhs object.

References copy().

Destructor.

References clear().


Member Function Documentation

returnValue SubjectTo::addIndex ( Indexlist *const  indexlist,
int_t  newnumber,
SubjectToStatus  newstatus 
) [protected, inherited]

Adds the index of a new constraint or bound to index set.

Returns:
SUCCESSFUL_RETURN
RET_ADDINDEX_FAILED
RET_INVALID_ARGUMENTS
Parameters:
indexlistIndex list to which the new index shall be added.
newnumberNumber of new constraint or bound.
newstatusStatus of new constraint or bound.

References Indexlist::addNumber(), RET_ADDINDEX_FAILED, RET_INDEX_ALREADY_OF_DESIRED_STATUS, RET_INDEXLIST_EXCEEDS_MAX_LENGTH, RET_INVALID_ARGUMENTS, SubjectTo::status, SUCCESSFUL_RETURN, and THROWERROR.

Referenced by moveActiveToInactive(), Bounds::moveFixedToFree(), Bounds::moveFreeToFixed(), moveInactiveToActive(), Bounds::setupBound(), and setupConstraint().

Frees all allocated memory.

Returns:
SUCCESSFUL_RETURN

Reimplemented from SubjectTo.

References SUCCESSFUL_RETURN.

Referenced by init(), operator=(), and ~Constraints().

returnValue SubjectTo::copy ( const SubjectTo rhs) [protected, inherited]

Copies all members from given rhs object.

Returns:
SUCCESSFUL_RETURN
Parameters:
rhsRhs object.

References SubjectTo::n, SubjectTo::noLower, SubjectTo::noUpper, SubjectTo::status, SUCCESSFUL_RETURN, and SubjectTo::type.

Referenced by SubjectTo::operator=(), and SubjectTo::SubjectTo().

returnValue Constraints::copy ( const Constraints rhs) [protected]

Copies all members from given rhs object.

Returns:
SUCCESSFUL_RETURN
Parameters:
rhsRhs object.

References active, inactive, and SUCCESSFUL_RETURN.

Referenced by Constraints(), and operator=().

Flip fixed constraint.

Returns:
SUCCESSFUL_RETURN
RET_MOVING_CONSTRAINT_FAILED
RET_INDEX_OUT_OF_BOUNDS

References SubjectTo::n, RET_INDEX_OUT_OF_BOUNDS, RET_MOVING_CONSTRAINT_FAILED, ST_LOWER, ST_UPPER, SubjectTo::status, SUCCESSFUL_RETURN, and THROWERROR.

Referenced by QProblem::removeConstraint().

int_t Constraints::getNAC ( ) const [inline]

Returns the number of active constraints.

Returns:
Number of active constraints.

References active, and Indexlist::getLength().

Referenced by QProblem::getNAC(), print(), and QProblem::shallRefactorise().

Returns the number of constraints.

Returns:
Number of constraints.

References SubjectTo::n.

Referenced by SQProblemSchur::addConstraint(), QProblem::addConstraint(), and QProblem::getNC().

int_t Constraints::getNEC ( ) const [inline]

Returns the number of implicit equality constraints.

Returns:
Number of implicit equality constraints.

References SubjectTo::getNumberOfType(), and ST_EQUALITY.

Referenced by QProblem::getNEC().

int_t Constraints::getNIAC ( ) const [inline]

Returns the number of inactive constraints.

Returns:
Number of inactive constraints.

References Indexlist::getLength(), and inactive.

Referenced by QProblem::getNIAC(), and print().

int_t Constraints::getNIC ( ) const [inline]

Returns the number of "real" inequality constraints.

Returns:
Number of "real" inequality constraints.

References SubjectTo::getNumberOfType(), and ST_BOUNDED.

int_t Constraints::getNUC ( ) const [inline]

Returns the number of unbounded constraints (i.e. without any bounds).

Returns:
Number of unbounded constraints (i.e. without any bounds).

References SubjectTo::getNumberOfType(), and ST_UNBOUNDED.

Referenced by SQProblemSchur::addConstraint(), and QProblem::addConstraint().

Returns number of constraints/bounds with given SubjectTo type.

Returns:
Number of constraints/bounds with given type.
Parameters:
_typeType of (constraints') bound.

References SubjectTo::n, and SubjectTo::type.

Referenced by Bounds::getNBV(), getNEC(), Bounds::getNFV(), getNIC(), getNUC(), and Bounds::getNUV().

SubjectToStatus SubjectTo::getStatus ( int_t  i) const [inline, inherited]

Returns status of (constraints') bound.

Returns:
Status of (constraints') bound
ST_UNDEFINED
Parameters:
iNumber of (constraints') bound.

References SubjectTo::n, ST_UNDEFINED, and SubjectTo::status.

Referenced by SQProblemSchur::addBound(), QProblem::addBound(), SQProblemSchur::addConstraint(), QProblem::addConstraint(), SolutionAnalysis::checkCurvatureOnStronglyActiveConstraints(), QProblem::determineStepDirection(), QProblemB::determineStepDirection(), SQProblemSchur::determineStepDirection2(), QProblem::dropInfeasibles(), QProblem::ensureNonzeroCurvature(), QProblemB::getWorkingSetBounds(), QProblem::getWorkingSetConstraints(), QProblemB::init(), QProblem::init(), QProblemB::obtainAuxiliaryWorkingSet(), QProblem::obtainAuxiliaryWorkingSet(), QProblem::performDriftCorrection(), QProblemB::performDriftCorrection(), QProblemB::performRamping(), QProblem::performRamping(), QProblemB::performRatioTest(), SQProblemSchur::removeBound(), QProblem::removeBound(), QProblemB::removeBound(), SQProblemSchur::removeConstraint(), QProblem::removeConstraint(), rotate(), Bounds::rotate(), SQProblemSchur::setupAuxiliaryQP(), QProblem::setupAuxiliaryQP(), QProblemB::setupAuxiliaryQP(), QProblem::setupAuxiliaryQPbounds(), QProblemB::setupAuxiliaryQPbounds(), SQProblemSchur::setupAuxiliaryWorkingSet(), QProblem::setupAuxiliaryWorkingSet(), QProblemB::setupAuxiliaryWorkingSet(), SQProblem::setupNewAuxiliaryQP(), QProblem::shallRefactorise(), QProblemB::shallRefactorise(), shift(), Bounds::shift(), and QProblem::updateActivitiesForHotstart().

SubjectToType SubjectTo::getType ( int_t  i) const [inline, inherited]
BooleanType SubjectTo::hasNoLower ( ) const [inline, inherited]

Returns status of lower (constraints') bounds.

Returns:
BT_TRUE if there is no lower (constraints') bound on any variable.

References SubjectTo::noLower.

Referenced by QProblem::performStep(), QProblemB::performStep(), QProblem::printProperties(), and QProblemB::printProperties().

BooleanType SubjectTo::hasNoUpper ( ) const [inline, inherited]

Returns status of upper bounds.

Returns:
BT_TRUE if there is no upper (constraints') bound on any variable.

References SubjectTo::noUpper.

Referenced by QProblem::performStep(), QProblemB::performStep(), QProblem::printProperties(), and QProblemB::printProperties().

Initialises object with given number of constraints.

Returns:
SUCCESSFUL_RETURN
RET_INVALID_ARGUMENTS
Parameters:
_nNumber of constraints.

Reimplemented from SubjectTo.

References active, clear(), inactive, Indexlist::init(), RET_INVALID_ARGUMENTS, and THROWERROR.

Referenced by Constraints(), QProblem::QProblem(), QProblem::reset(), SQProblemSchur::setupAuxiliaryQP(), QProblem::setupAuxiliaryQP(), and SQProblem::setupNewAuxiliaryQP().

Moves index of a constraint from index list of active to that of inactive constraints.

Returns:
SUCCESSFUL_RETURN
RET_MOVING_CONSTRAINT_FAILED
Parameters:
numberNumber of constraint to become inactive.

References SubjectTo::addIndex(), getActive(), getInactive(), SubjectTo::n, SubjectTo::removeIndex(), RET_INDEX_OUT_OF_BOUNDS, RET_MOVING_BOUND_FAILED, ST_INACTIVE, SUCCESSFUL_RETURN, and THROWERROR.

Referenced by SQProblemSchur::removeConstraint(), QProblem::removeConstraint(), SQProblemSchur::repairSingularWorkingSet(), and SQProblemSchur::setupAuxiliaryWorkingSet().

Moves index of a constraint from index list of inactive to that of active constraints.

Returns:
SUCCESSFUL_RETURN
RET_MOVING_CONSTRAINT_FAILED
Parameters:
numberNumber of constraint to become active.
_statusStatus of constraint to become active.

References SubjectTo::addIndex(), getActive(), getInactive(), SubjectTo::n, SubjectTo::removeIndex(), RET_INDEX_OUT_OF_BOUNDS, RET_MOVING_BOUND_FAILED, SUCCESSFUL_RETURN, and THROWERROR.

Referenced by SQProblemSchur::addConstraint(), QProblem::addConstraint(), SQProblemSchur::removeConstraint(), and SQProblemSchur::setupAuxiliaryWorkingSet().

Constraints & Constraints::operator= ( const Constraints rhs)

Assignment operator (deep copy).

Parameters:
rhsRhs object.

References clear(), and copy().

Prints information on constraints object (in particular, lists of inactive and active constraints.

Returns:
SUCCESSFUL_RETURN
RET_INDEXLIST_CORRUPTED

References getActive(), getInactive(), getNAC(), getNIAC(), Indexlist::getNumberArray(), MAX_STRING_LENGTH, myPrintf(), SubjectTo::n, REFER_NAMESPACE_QPOASES, and SUCCESSFUL_RETURN.

returnValue SubjectTo::removeIndex ( Indexlist *const  indexlist,
int_t  removenumber 
) [protected, inherited]

Removes the index of a constraint or bound from index set.

Returns:
SUCCESSFUL_RETURN
RET_REMOVEINDEX_FAILED
RET_INVALID_ARGUMENTS
Parameters:
indexlistIndex list from which the new index shall be removed.
removenumberNumber of constraint or bound to be removed.

References Indexlist::removeNumber(), RET_INVALID_ARGUMENTS, RET_REMOVEINDEX_FAILED, ST_UNDEFINED, SubjectTo::status, SUCCESSFUL_RETURN, and THROWERROR.

Referenced by moveActiveToInactive(), Bounds::moveFixedToFree(), Bounds::moveFreeToFixed(), and moveInactiveToActive().

returnValue Constraints::rotate ( int_t  offset) [virtual]

Rotates forward type and status of all constraints by a given offset. This offset has to lie within the range [0,n]. Example for offset = 2:
rotate( {c1,c2,c3,c4,c5,c6} ) = {c3,c4,c5,c6,c1,c2}

Returns:
SUCCESSFUL_RETURN
RET_INDEX_OUT_OF_BOUNDS
RET_ROTATING_FAILED
Parameters:
offsetRotation offset within the range [0,n].

Implements SubjectTo.

References active, Indexlist::addNumber(), SubjectTo::getStatus(), SubjectTo::getType(), inactive, SubjectTo::n, RET_INDEX_OUT_OF_BOUNDS, RET_ROTATING_FAILED, SubjectTo::setStatus(), SubjectTo::setType(), ST_INACTIVE, ST_LOWER, ST_UPPER, SUCCESSFUL_RETURN, and THROWERROR.

void SubjectTo::setNoLower ( BooleanType  _status) [inline, inherited]

Sets status of lower (constraints') bounds.

Parameters:
_statusStatus of lower (constraints') bounds.

References SubjectTo::noLower.

Referenced by QProblemB::setupSubjectToType(), and QProblem::setupSubjectToType().

void SubjectTo::setNoUpper ( BooleanType  _status) [inline, inherited]

Sets status of upper (constraints') bounds.

Parameters:
_statusStatus of upper (constraints') bounds.

References SubjectTo::noUpper.

Referenced by QProblemB::setupSubjectToType(), and QProblem::setupSubjectToType().

returnValue SubjectTo::setStatus ( int_t  i,
SubjectToStatus  value 
) [inline, inherited]

Sets status of (constraints') bound.

Returns:
SUCCESSFUL_RETURN
RET_INDEX_OUT_OF_BOUNDS
Parameters:
iNumber of (constraints') bound.
valueStatus of (constraints') bound.

References SubjectTo::n, RET_INDEX_OUT_OF_BOUNDS, SubjectTo::status, SUCCESSFUL_RETURN, and THROWERROR.

Referenced by QProblem::dropInfeasibles(), rotate(), Bounds::rotate(), SQProblemSchur::setupAuxiliaryQP(), SQProblem::setupNewAuxiliaryQP(), shift(), and Bounds::shift().

returnValue SubjectTo::setType ( int_t  i,
SubjectToType  value 
) [inline, inherited]

Sets type of (constraints') bound.

Returns:
SUCCESSFUL_RETURN
RET_INDEX_OUT_OF_BOUNDS
Parameters:
iNumber of (constraints') bound.
valueType of (constraints') bound.

References SubjectTo::n, RET_INDEX_OUT_OF_BOUNDS, SUCCESSFUL_RETURN, THROWERROR, and SubjectTo::type.

Referenced by SQProblemSchur::repairSingularWorkingSet(), rotate(), Bounds::rotate(), QProblem::setA(), QProblem::setupAuxiliaryWorkingSet(), QProblemB::setupSubjectToType(), QProblem::setupSubjectToType(), shift(), and Bounds::shift().

Initially adds all numbers of new (i.e. not yet in the list) bounds to to the index set corresponding to the desired status; the order depends on the SujectToType of each index.

Returns:
SUCCESSFUL_RETURN
RET_SETUP_CONSTRAINT_FAILED
Parameters:
_statusDesired initial status for all bounds.

References SubjectTo::getType(), SubjectTo::n, RET_SETUP_CONSTRAINT_FAILED, setupConstraint(), ST_BOUNDED, ST_DISABLED, ST_EQUALITY, ST_UNBOUNDED, ST_UNKNOWN, SUCCESSFUL_RETURN, and THROWERROR.

Referenced by setupAllInactive(), setupAllLower(), and setupAllUpper().

Initially adds all enabled numbers of new (i.e. not yet in the list) constraints to to the index set of inactive constraints; the order depends on the SujectToType of each index. Only disabled constraints are added to index set of disabled constraints!

Returns:
SUCCESSFUL_RETURN
RET_SETUP_CONSTRAINT_FAILED

References setupAll(), and ST_INACTIVE.

Referenced by SQProblemSchur::setupAuxiliaryQP(), QProblem::setupAuxiliaryQP(), SQProblem::setupNewAuxiliaryQP(), and QProblem::solveInitialQP().

Initially adds all enabled numbers of new (i.e. not yet in the list) constraints to to the index set of active constraints (on their lower bounds); the order depends on the SujectToType of each index. Only disabled constraints are added to index set of disabled constraints!

Returns:
SUCCESSFUL_RETURN
RET_SETUP_CONSTRAINT_FAILED

References setupAll(), and ST_LOWER.

Initially adds all enabled numbers of new (i.e. not yet in the list) constraints to to the index set of active constraints (on their upper bounds); the order depends on the SujectToType of each index. Only disabled constraints are added to index set of disabled constraints!

Returns:
SUCCESSFUL_RETURN
RET_SETUP_CONSTRAINT_FAILED

References setupAll(), and ST_UPPER.

Initially adds number of a new (i.e. not yet in the list) constraint to a given index set.

Returns:
SUCCESSFUL_RETURN
RET_SETUP_CONSTRAINT_FAILED
RET_INDEX_OUT_OF_BOUNDS
RET_INVALID_ARGUMENTS
Parameters:
numberNumber of new constraint.
_statusStatus of new constraint.

References SubjectTo::addIndex(), getActive(), getInactive(), SubjectTo::n, RET_INDEX_OUT_OF_BOUNDS, RET_INVALID_ARGUMENTS, RET_SETUP_CONSTRAINT_FAILED, ST_INACTIVE, ST_LOWER, ST_UPPER, SUCCESSFUL_RETURN, and THROWERROR.

Referenced by QProblem::obtainAuxiliaryWorkingSet(), and setupAll().

returnValue Constraints::shift ( int_t  offset) [virtual]

Shifts forward type and status of all constraints by a given offset. This offset has to lie within the range [0,n/2] and has to be an integer divisor of the total number of constraints n. Type and status of the first <offset> constraints is thrown away, type and status of the last <offset> constraints is doubled, e.g. for offset = 2:
shift( {c1,c2,c3,c4,c5,c6} ) = {c3,c4,c5,c6,c5,c6}

Returns:
SUCCESSFUL_RETURN
RET_INDEX_OUT_OF_BOUNDS
RET_INVALID_ARGUMENTS
RET_SHIFTING_FAILED
Parameters:
offsetShift offset within the range [0,n/2] and integer divisor of n.

Implements SubjectTo.

References active, Indexlist::addNumber(), SubjectTo::getStatus(), SubjectTo::getType(), inactive, SubjectTo::n, RET_INDEX_OUT_OF_BOUNDS, RET_INVALID_ARGUMENTS, RET_SHIFTING_FAILED, SubjectTo::setStatus(), SubjectTo::setType(), ST_INACTIVE, ST_LOWER, ST_UPPER, SUCCESSFUL_RETURN, and THROWERROR.

returnValue SubjectTo::swapIndex ( Indexlist *const  indexlist,
int_t  number1,
int_t  number2 
) [protected, inherited]

Swaps the indices of two constraints or bounds within the index set.

Returns:
SUCCESSFUL_RETURN
RET_SWAPINDEX_FAILED
RET_INVALID_ARGUMENTS
Parameters:
indexlistIndex list in which the indices shold be swapped.
number1Number of first constraint or bound.
number2Number of second constraint or bound.

References RET_INVALID_ARGUMENTS, RET_NOTHING_TO_DO, RET_SWAPINDEX_FAILED, SubjectTo::status, SUCCESSFUL_RETURN, Indexlist::swapNumbers(), THROWERROR, and THROWWARNING.

Referenced by Bounds::swapFree().


Member Data Documentation

Index list of active constraints.

Referenced by copy(), getActive(), getNAC(), init(), rotate(), and shift().

Index list of inactive constraints.

Referenced by copy(), getInactive(), getNIAC(), init(), rotate(), and shift().

int_t SubjectTo::n [protected, inherited]
BooleanType SubjectTo::noLower [protected, inherited]

This flag indicates if there is no lower bound on any variable.

Referenced by SubjectTo::copy(), SubjectTo::hasNoLower(), SubjectTo::init(), and SubjectTo::setNoLower().

BooleanType SubjectTo::noUpper [protected, inherited]

This flag indicates if there is no upper bound on any variable.

Referenced by SubjectTo::copy(), SubjectTo::hasNoUpper(), SubjectTo::init(), and SubjectTo::setNoUpper().

SubjectToStatus* SubjectTo::status [protected, inherited]
SubjectToType* SubjectTo::type [protected, inherited]

The documentation for this class was generated from the following files: