You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					190 lines
				
				5.4 KiB
			
		
		
			
		
	
	
					190 lines
				
				5.4 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	This file is part of qpOASES.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	qpOASES -- An Implementation of the Online Active Set Strategy.
							 | 
						||
| 
								 | 
							
								 *	Copyright (C) 2007-2008 by Hans Joachim Ferreau et al. All rights reserved.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	qpOASES is free software; you can redistribute it and/or
							 | 
						||
| 
								 | 
							
								 *	modify it under the terms of the GNU Lesser General Public
							 | 
						||
| 
								 | 
							
								 *	License as published by the Free Software Foundation; either
							 | 
						||
| 
								 | 
							
								 *	version 2.1 of the License, or (at your option) any later version.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	qpOASES is distributed in the hope that it will be useful,
							 | 
						||
| 
								 | 
							
								 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						||
| 
								 | 
							
								 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
							 | 
						||
| 
								 | 
							
								 *	Lesser General Public License for more details.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	You should have received a copy of the GNU Lesser General Public
							 | 
						||
| 
								 | 
							
								 *	License along with qpOASES; if not, write to the Free Software
							 | 
						||
| 
								 | 
							
								 *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *	\file INCLUDE/Bounds.hpp
							 | 
						||
| 
								 | 
							
								 *	\author Hans Joachim Ferreau
							 | 
						||
| 
								 | 
							
								 *	\version 1.3embedded
							 | 
						||
| 
								 | 
							
								 *	\date 2007-2008
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	Declaration of the Bounds class designed to manage working sets of
							 | 
						||
| 
								 | 
							
								 *	bounds within a QProblem.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef QPOASES_BOUNDS_HPP
							 | 
						||
| 
								 | 
							
								#define QPOASES_BOUNDS_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <SubjectTo.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** This class manages working sets of bounds by storing
							 | 
						||
| 
								 | 
							
								 *	index sets and other status information.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	\author Hans Joachim Ferreau
							 | 
						||
| 
								 | 
							
								 *	\version 1.3embedded
							 | 
						||
| 
								 | 
							
								 *	\date 2007-2008
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Bounds : public SubjectTo
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									/*
							 | 
						||
| 
								 | 
							
									 *	PUBLIC MEMBER FUNCTIONS
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public:
							 | 
						||
| 
								 | 
							
										/** Default constructor. */
							 | 
						||
| 
								 | 
							
										Bounds( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Copy constructor (deep copy). */
							 | 
						||
| 
								 | 
							
										Bounds(	const Bounds& rhs	/**< Rhs object. */
							 | 
						||
| 
								 | 
							
												);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Destructor. */
							 | 
						||
| 
								 | 
							
										~Bounds( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Assignment operator (deep copy). */
							 | 
						||
| 
								 | 
							
										Bounds& operator=(	const Bounds& rhs	/**< Rhs object. */
							 | 
						||
| 
								 | 
							
															);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Pseudo-constructor takes the number of bounds.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
										returnValue init(	int n	/**< Number of bounds. */
							 | 
						||
| 
								 | 
							
															);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Initially adds number of a new (i.e. not yet in the list) bound to
							 | 
						||
| 
								 | 
							
										 *  given index set.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
										 			RET_SETUP_BOUND_FAILED \n
							 | 
						||
| 
								 | 
							
													RET_INDEX_OUT_OF_BOUNDS \n
							 | 
						||
| 
								 | 
							
													RET_INVALID_ARGUMENTS */
							 | 
						||
| 
								 | 
							
										returnValue setupBound(	int _number,					/**< Number of new bound. */
							 | 
						||
| 
								 | 
							
																SubjectToStatus _status			/**< Status of new bound. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Initially adds all numbers of new (i.e. not yet in the list) bounds to
							 | 
						||
| 
								 | 
							
										 *  to the index set of free bounds; the order depends on the SujectToType
							 | 
						||
| 
								 | 
							
										 *  of each index.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
										 			RET_SETUP_BOUND_FAILED */
							 | 
						||
| 
								 | 
							
										returnValue setupAllFree( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Moves index of a bound from index list of fixed to that of free bounds.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
										 			RET_MOVING_BOUND_FAILED \n
							 | 
						||
| 
								 | 
							
													RET_INDEX_OUT_OF_BOUNDS */
							 | 
						||
| 
								 | 
							
										returnValue moveFixedToFree(	int _number				/**< Number of bound to be freed. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Moves index of a bound from index list of free to that of fixed bounds.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
										 			RET_MOVING_BOUND_FAILED \n
							 | 
						||
| 
								 | 
							
													RET_INDEX_OUT_OF_BOUNDS */
							 | 
						||
| 
								 | 
							
										returnValue moveFreeToFixed(	int _number,			/**< Number of bound to be fixed. */
							 | 
						||
| 
								 | 
							
																		SubjectToStatus _status	/**< Status of bound to be fixed. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Swaps the indices of two free bounds within the index set.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
										 			RET_SWAPINDEX_FAILED */
							 | 
						||
| 
								 | 
							
										returnValue swapFree(	int number1,					/**< Number of first constraint or bound. */
							 | 
						||
| 
								 | 
							
																int number2						/**< Number of second constraint or bound. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Returns number of variables.
							 | 
						||
| 
								 | 
							
										 *	\return Number of variables. */
							 | 
						||
| 
								 | 
							
										inline int getNV( ) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Returns number of implicitly fixed variables.
							 | 
						||
| 
								 | 
							
										 *	\return Number of implicitly fixed variables. */
							 | 
						||
| 
								 | 
							
										inline int getNFV( ) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Returns number of bounded (but possibly free) variables.
							 | 
						||
| 
								 | 
							
										 *	\return Number of bounded (but possibly free) variables. */
							 | 
						||
| 
								 | 
							
										inline int getNBV( ) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Returns number of unbounded variables.
							 | 
						||
| 
								 | 
							
										 *	\return Number of unbounded variables. */
							 | 
						||
| 
								 | 
							
										inline int getNUV( ) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Sets number of implicitly fixed variables.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
										inline returnValue setNFV(	int n	/**< Number of implicitly fixed variables. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Sets number of bounded (but possibly free) variables.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
										inline returnValue setNBV(	int n	/**< Number of bounded (but possibly free) variables. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Sets number of unbounded variables.
							 | 
						||
| 
								 | 
							
										 *	\return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
										inline returnValue setNUV(	int n	/**< Number of unbounded variables */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Returns number of free variables.
							 | 
						||
| 
								 | 
							
										 *	\return Number of free variables. */
							 | 
						||
| 
								 | 
							
										inline int getNFR( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Returns number of fixed variables.
							 | 
						||
| 
								 | 
							
										 *	\return Number of fixed variables. */
							 | 
						||
| 
								 | 
							
										inline int getNFX( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Returns a pointer to free variables index list.
							 | 
						||
| 
								 | 
							
										 *	\return Pointer to free variables index list. */
							 | 
						||
| 
								 | 
							
										inline Indexlist* getFree( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Returns a pointer to fixed variables index list.
							 | 
						||
| 
								 | 
							
										 *	\return Pointer to fixed variables index list. */
							 | 
						||
| 
								 | 
							
										inline Indexlist* getFixed( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/*
							 | 
						||
| 
								 | 
							
									 *	PROTECTED MEMBER VARIABLES
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									protected:
							 | 
						||
| 
								 | 
							
										int nV;					/**< Number of variables (nV = nFV + nBV + nUV). */
							 | 
						||
| 
								 | 
							
										int nFV;				/**< Number of implicitly fixed variables. */
							 | 
						||
| 
								 | 
							
										int	nBV;				/**< Number of bounded (but possibly free) variables. */
							 | 
						||
| 
								 | 
							
										int nUV;				/**< Number of unbounded variables. */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										Indexlist free;			/**< Index list of free variables. */
							 | 
						||
| 
								 | 
							
										Indexlist fixed;		/**< Index list of fixed variables. */
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <Bounds.ipp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif	/* QPOASES_BOUNDS_HPP */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	end of file
							 | 
						||
| 
								 | 
							
								 */
							 |