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.
		
		
		
		
			
				
					501 lines
				
				16 KiB
			
		
		
			
		
	
	
					501 lines
				
				16 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	This file is part of qpOASES.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	qpOASES -- An Implementation of the Online Active Set Strategy.
							 | 
						||
| 
								 | 
							
								 *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka,
							 | 
						||
| 
								 | 
							
								 *	Christian Kirches 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/qpOASES_e/Utils.h
							 | 
						||
| 
								 | 
							
								 *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches
							 | 
						||
| 
								 | 
							
								 *	\version 3.1embedded
							 | 
						||
| 
								 | 
							
								 *	\date 2007-2015
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	Declaration of some utilities for working with the different QProblem classes.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef QPOASES_UTILS_H
							 | 
						||
| 
								 | 
							
								#define QPOASES_UTILS_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <qpOASES_e/MessageHandling.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BEGIN_NAMESPACE_QPOASES
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints a vector.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printV(	const real_t* const v,	/**< Vector to be printed. */
							 | 
						||
| 
								 | 
							
															int n					/**< Length of vector. */
							 | 
						||
| 
								 | 
							
															);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints a permuted vector.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printPV(	const real_t* const v,		/**< Vector to be printed. */
							 | 
						||
| 
								 | 
							
																int n,						/**< Length of vector. */
							 | 
						||
| 
								 | 
							
																const int* const V_idx		/**< Pemutation vector. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints a named vector.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printNV(	const real_t* const v,	/**< Vector to be printed. */
							 | 
						||
| 
								 | 
							
																int n,					/**< Length of vector. */
							 | 
						||
| 
								 | 
							
																const char* name		/** Name of vector. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints a matrix.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printM(	const real_t* const M,	/**< Matrix to be printed. */
							 | 
						||
| 
								 | 
							
															int nrow,				/**< Row number of matrix. */
							 | 
						||
| 
								 | 
							
															int ncol				/**< Column number of matrix. */
							 | 
						||
| 
								 | 
							
															);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints a permuted matrix.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printPM(	const real_t* const M,		/**< Matrix to be printed. */
							 | 
						||
| 
								 | 
							
																int nrow,					/**< Row number of matrix. */
							 | 
						||
| 
								 | 
							
																int ncol	,				/**< Column number of matrix. */
							 | 
						||
| 
								 | 
							
																const int* const ROW_idx,	/**< Row pemutation vector. */
							 | 
						||
| 
								 | 
							
																const int* const COL_idx	/**< Column pemutation vector. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints a named matrix.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printNM(	const real_t* const M,	/**< Matrix to be printed. */
							 | 
						||
| 
								 | 
							
																int nrow,				/**< Row number of matrix. */
							 | 
						||
| 
								 | 
							
																int ncol,				/**< Column number of matrix. */
							 | 
						||
| 
								 | 
							
																const char* name		/** Name of matrix. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints an index array.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printI(	const int* const _index,	/**< Index array to be printed. */
							 | 
						||
| 
								 | 
							
															int n						/**< Length of index array. */
							 | 
						||
| 
								 | 
							
															);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints a named index array.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printNI(	const int* const _index,	/**< Index array to be printed. */
							 | 
						||
| 
								 | 
							
																int n,						/**< Length of index array. */
							 | 
						||
| 
								 | 
							
																const char* name			/**< Name of index array. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints a string to desired output target (useful also for MATLAB output!).
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_myPrintf(	const char* s	/**< String to be written. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints qpOASES copyright notice.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_printCopyrightNotice( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Reads a real_t matrix from file.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 		   RET_UNABLE_TO_OPEN_FILE \n
							 | 
						||
| 
								 | 
							
										   RET_UNABLE_TO_READ_FILE */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_readFromFileM(	real_t* data,				/**< Matrix to be read from file. */
							 | 
						||
| 
								 | 
							
																	int nrow,					/**< Row number of matrix. */
							 | 
						||
| 
								 | 
							
																	int ncol,					/**< Column number of matrix. */
							 | 
						||
| 
								 | 
							
																	const char* datafilename	/**< Data file name. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Reads a real_t vector from file.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 		   RET_UNABLE_TO_OPEN_FILE \n
							 | 
						||
| 
								 | 
							
										   RET_UNABLE_TO_READ_FILE */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_readFromFileV(	real_t* data,				/**< Vector to be read from file. */
							 | 
						||
| 
								 | 
							
																	int n,						/**< Length of vector. */
							 | 
						||
| 
								 | 
							
																	const char* datafilename	/**< Data file name. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Reads an integer (column) vector from file.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 		   RET_UNABLE_TO_OPEN_FILE \n
							 | 
						||
| 
								 | 
							
										   RET_UNABLE_TO_READ_FILE */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_readFromFileI(	int* data,					/**< Vector to be read from file. */
							 | 
						||
| 
								 | 
							
																	int n,						/**< Length of vector. */
							 | 
						||
| 
								 | 
							
																	const char* datafilename	/**< Data file name. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Writes a real_t matrix into a file.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 		   RET_UNABLE_TO_OPEN_FILE  */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_writeIntoFileM(	const real_t* const data,	/**< Matrix to be written into file. */
							 | 
						||
| 
								 | 
							
																	int nrow,					/**< Row number of matrix. */
							 | 
						||
| 
								 | 
							
																	int ncol,					/**< Column number of matrix. */
							 | 
						||
| 
								 | 
							
																	const char* datafilename,	/**< Data file name. */
							 | 
						||
| 
								 | 
							
																	BooleanType append			/**< Indicates if data shall be appended if the file already exists (otherwise it is overwritten). */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Writes a real_t vector into a file.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 		   RET_UNABLE_TO_OPEN_FILE  */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_writeIntoFileV(	const real_t* const data,	/**< Vector to be written into file. */
							 | 
						||
| 
								 | 
							
																	int n,						/**< Length of vector. */
							 | 
						||
| 
								 | 
							
																	const char* datafilename,	/**< Data file name. */
							 | 
						||
| 
								 | 
							
																	BooleanType append			/**< Indicates if data shall be appended if the file already exists (otherwise it is overwritten). */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Writes an integer (column) vector into a file.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 		   RET_UNABLE_TO_OPEN_FILE */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_writeIntoFileI(	const int* const integer,	/**< Integer vector to be written into file. */
							 | 
						||
| 
								 | 
							
																	int n,						/**< Length of vector. */
							 | 
						||
| 
								 | 
							
																	const char* datafilename,	/**< Data file name. */
							 | 
						||
| 
								 | 
							
																	BooleanType append			/**< Indicates if integer shall be appended if the file already exists (otherwise it is overwritten). */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Writes a real_t matrix/vector into a Matlab binary file.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
										   RET_INVALID_ARGUMENTS
							 | 
						||
| 
								 | 
							
								 		   RET_UNABLE_TO_WRITE_FILE */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_writeIntoMatFile(	FILE* const matFile,		/**< Pointer to Matlab binary file. */
							 | 
						||
| 
								 | 
							
																		const real_t* const data,	/**< Data to be written into file. */
							 | 
						||
| 
								 | 
							
																		int nRows,					/**< Row number of matrix. */
							 | 
						||
| 
								 | 
							
																		int nCols, 					/**< Column number of matrix. */
							 | 
						||
| 
								 | 
							
																		const char* name			/**< Matlab name of matrix/vector to be stored. */
							 | 
						||
| 
								 | 
							
								 										);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Writes in integer matrix/vector into a Matlab binary file.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
										   RET_INVALID_ARGUMENTS
							 | 
						||
| 
								 | 
							
								 		   RET_UNABLE_TO_WRITE_FILE */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_writeIntoMatFileI(	FILE* const matFile,		/**< Pointer to Matlab binary file. */
							 | 
						||
| 
								 | 
							
																		const int* const data,		/**< Data to be written into file. */
							 | 
						||
| 
								 | 
							
																		int nRows,					/**< Row number of matrix. */
							 | 
						||
| 
								 | 
							
																		int nCols,					/**< Column number of matrix. */
							 | 
						||
| 
								 | 
							
																		const char* name			/**< Matlab name of matrix/vector to be stored. */
							 | 
						||
| 
								 | 
							
								 										);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the current system time.
							 | 
						||
| 
								 | 
							
								 * \return current system time */
							 | 
						||
| 
								 | 
							
								real_t qpOASES_getCPUtime( );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the N-norm of a vector.
							 | 
						||
| 
								 | 
							
								 * \return >= 0.0: successful */
							 | 
						||
| 
								 | 
							
								real_t qpOASES_getNorm(	const real_t* const v,	/**< Vector. */
							 | 
						||
| 
								 | 
							
														int n,					/**< Vector's dimension. */
							 | 
						||
| 
								 | 
							
														int type				/**< Norm type, 1: one-norm, 2: Euclidean norm. */
							 | 
						||
| 
								 | 
							
														);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Tests whether two real-valued arguments are (numerically) equal.
							 | 
						||
| 
								 | 
							
								 * \return	BT_TRUE:  arguments differ not more than TOL \n
							 | 
						||
| 
								 | 
							
										 	BT_FALSE: arguments differ more than TOL */
							 | 
						||
| 
								 | 
							
								static inline BooleanType qpOASES_isEqual(	real_t x,	/**< First real number. */
							 | 
						||
| 
								 | 
							
																			real_t y,	/**< Second real number. */
							 | 
						||
| 
								 | 
							
																			real_t TOL	/**< Tolerance for comparison. */
							 | 
						||
| 
								 | 
							
																			);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Tests whether a real-valued argument is (numerically) zero.
							 | 
						||
| 
								 | 
							
								 * \return	BT_TRUE:  argument differs from 0.0 not more than TOL \n
							 | 
						||
| 
								 | 
							
										 	BT_FALSE: argument differs from 0.0 more than TOL */
							 | 
						||
| 
								 | 
							
								static inline BooleanType qpOASES_isZero(	real_t x,			/**< Real number. */
							 | 
						||
| 
								 | 
							
																			real_t TOL			/**< Tolerance for comparison. */
							 | 
						||
| 
								 | 
							
																			);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns sign of a real-valued argument.
							 | 
						||
| 
								 | 
							
								 * \return	 1.0: argument is non-negative \n
							 | 
						||
| 
								 | 
							
										 	-1.0: argument is negative */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getSign(	real_t arg	/**< real-valued argument whose sign is to be determined. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns maximum of two integers.
							 | 
						||
| 
								 | 
							
								 * \return	Maximum of two integers */
							 | 
						||
| 
								 | 
							
								static inline int qpOASES_getMaxI(	int x,	/**< First integer. */
							 | 
						||
| 
								 | 
							
																	int y	/**< Second integer. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns minimum of two integers.
							 | 
						||
| 
								 | 
							
								 * \return	Minimum of two integers */
							 | 
						||
| 
								 | 
							
								static inline int qpOASES_getMinI(	int x,	/**< First integer. */
							 | 
						||
| 
								 | 
							
																	int y	/**< Second integer. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns maximum of two reals.
							 | 
						||
| 
								 | 
							
								 * \return	Maximum of two reals */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getMax(	real_t x,	/**< First real number. */
							 | 
						||
| 
								 | 
							
																		real_t y	/**< Second real number. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns minimum of two reals.
							 | 
						||
| 
								 | 
							
								 * \return	Minimum of two reals */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getMin(	real_t x,	/**< First real number. */
							 | 
						||
| 
								 | 
							
																		real_t y	/**< Second real number. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the absolute value of a real_t-valued argument.
							 | 
						||
| 
								 | 
							
								 * \return	Absolute value of a real_t-valued argument */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getAbs(	real_t x	/**< real_t-valued argument. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the square-root of a real number.
							 | 
						||
| 
								 | 
							
								 * \return	Square-root of a real number */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getSqrt(	real_t x	/**< Non-negative real number. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Computes the maximum violation of the KKT optimality conditions
							 | 
						||
| 
								 | 
							
								 *	of given iterate for given QP data. */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_getKktViolation(	int nV,						/**< Number of variables. */
							 | 
						||
| 
								 | 
							
																		int nC,						/**< Number of constraints. */
							 | 
						||
| 
								 | 
							
																		const real_t* const H,		/**< Hessian matrix (may be NULL if Hessian is zero or identity matrix). */
							 | 
						||
| 
								 | 
							
																		const real_t* const g,		/**< Gradient vector. */
							 | 
						||
| 
								 | 
							
																		const real_t* const A,		/**< Constraint matrix. */
							 | 
						||
| 
								 | 
							
																		const real_t* const lb,		/**< Lower bound vector (on variables). */
							 | 
						||
| 
								 | 
							
																		const real_t* const ub,		/**< Upper bound vector (on variables). */
							 | 
						||
| 
								 | 
							
																		const real_t* const lbA,	/**< Lower constraints' bound vector. */
							 | 
						||
| 
								 | 
							
																		const real_t* const ubA,	/**< Upper constraints' bound vector. */
							 | 
						||
| 
								 | 
							
																		const real_t* const x,		/**< Primal trial vector. */
							 | 
						||
| 
								 | 
							
																		const real_t* const y,		/**< Dual trial vector. */
							 | 
						||
| 
								 | 
							
																		real_t* const _stat,		/**< Output: maximum value of stationarity condition residual. */
							 | 
						||
| 
								 | 
							
																		real_t* const feas,			/**< Output: maximum value of primal feasibility violation. */
							 | 
						||
| 
								 | 
							
																		real_t* const cmpl			/**< Output: maximum value of complementarity residual. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Computes the maximum violation of the KKT optimality conditions
							 | 
						||
| 
								 | 
							
								 *	of given iterate for given QP data. */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_getKktViolationSB(	int nV,						/**< Number of variables. */
							 | 
						||
| 
								 | 
							
																		const real_t* const H,		/**< Hessian matrix (may be NULL if Hessian is zero or identity matrix). */
							 | 
						||
| 
								 | 
							
																		const real_t* const g,		/**< Gradient vector. */
							 | 
						||
| 
								 | 
							
																		const real_t* const lb,		/**< Lower bound vector (on variables). */
							 | 
						||
| 
								 | 
							
																		const real_t* const ub,		/**< Upper bound vector (on variables). */
							 | 
						||
| 
								 | 
							
																		const real_t* const x,		/**< Primal trial vector. */
							 | 
						||
| 
								 | 
							
																		const real_t* const y,		/**< Dual trial vector. */
							 | 
						||
| 
								 | 
							
																		real_t* const _stat,		/**< Output: maximum value of stationarity condition residual. */
							 | 
						||
| 
								 | 
							
																		real_t* const feas,			/**< Output: maximum value of primal feasibility violation. */
							 | 
						||
| 
								 | 
							
																		real_t* const cmpl			/**< Output: maximum value of complementarity residual. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Writes a value of BooleanType into a string.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_convertBooleanTypeToString(	BooleanType value, 		/**< Value to be written. */
							 | 
						||
| 
								 | 
							
																				char* const string		/**< Input: String of sufficient size, \n
							 | 
						||
| 
								 | 
							
																											Output: String containing value. */
							 | 
						||
| 
								 | 
							
																				);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Writes a value of SubjectToStatus into a string.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_convertSubjectToStatusToString(	SubjectToStatus value,	/**< Value to be written. */
							 | 
						||
| 
								 | 
							
																					char* const string		/**< Input: String of sufficient size, \n
							 | 
						||
| 
								 | 
							
																												Output: String containing value. */
							 | 
						||
| 
								 | 
							
																					);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Writes a value of PrintLevel into a string.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_convertPrintLevelToString(	PrintLevel value, 		/**< Value to be written. */
							 | 
						||
| 
								 | 
							
																				char* const string		/**< Input: String of sufficient size, \n
							 | 
						||
| 
								 | 
							
																											Output: String containing value. */
							 | 
						||
| 
								 | 
							
																				);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Converts a returnValue from an QProblem(B) object into a more 
							 | 
						||
| 
								 | 
							
								 *	simple status flag.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * \return  0: QP problem solved
							 | 
						||
| 
								 | 
							
								 *          1: QP could not be solved within given number of iterations
							 | 
						||
| 
								 | 
							
								 *         -1: QP could not be solved due to an internal error
							 | 
						||
| 
								 | 
							
								 *         -2: QP is infeasible (and thus could not be solved)
							 | 
						||
| 
								 | 
							
								 *         -3: QP is unbounded (and thus could not be solved)
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int qpOASES_getSimpleStatus(	returnValue returnvalue, 	/**< ReturnValue to be analysed. */
							 | 
						||
| 
								 | 
							
																BooleanType doPrintStatus	/**< Flag indicating whether simple status shall be printed to screen. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Normalises QP constraints.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 *		   RET_INVALID_ARGUMENTS */
							 | 
						||
| 
								 | 
							
								returnValue qpOASES_normaliseConstraints(	int nV,			/**< Number of variables. */
							 | 
						||
| 
								 | 
							
																			int nC, 		/**< Number of constraints. */
							 | 
						||
| 
								 | 
							
																			real_t* A,		/**< Input:  Constraint matrix, \n
							 | 
						||
| 
								 | 
							
																								 Output: Normalised constraint matrix. */
							 | 
						||
| 
								 | 
							
																			real_t* lbA,	/**< Input:  Constraints' lower bound vector, \n
							 | 
						||
| 
								 | 
							
																								 Output: Normalised constraints' lower bound vector. */
							 | 
						||
| 
								 | 
							
																			real_t* ubA,	/**< Input:  Constraints' upper bound vector, \n
							 | 
						||
| 
								 | 
							
																								 Output: Normalised constraints' upper bound vector. */
							 | 
						||
| 
								 | 
							
																			int type		/**< Norm type, 1: one-norm, 2: Euclidean norm. */
							 | 
						||
| 
								 | 
							
																			);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __DEBUG__
							 | 
						||
| 
								 | 
							
								/** Writes matrix with given dimension into specified file. */
							 | 
						||
| 
								 | 
							
								void gdb_printmat(	const char *fname,			/**< File name. */
							 | 
						||
| 
								 | 
							
													real_t *M,					/**< Matrix to be written. */
							 | 
						||
| 
								 | 
							
													int n,						/**< Number of rows. */
							 | 
						||
| 
								 | 
							
													int m,						/**< Number of columns. */
							 | 
						||
| 
								 | 
							
													int ldim					/**< Leading dimension. */
							 | 
						||
| 
								 | 
							
													);
							 | 
						||
| 
								 | 
							
								#endif /* __DEBUG__ */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(__DSPACE__) || defined(__XPCTARGET__) 
							 | 
						||
| 
								 | 
							
								void __cxa_pure_virtual( void );
							 | 
						||
| 
								 | 
							
								#endif /* __DSPACE__ || __XPCTARGET__*/ 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   i s E q u a l
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline BooleanType qpOASES_isEqual(	real_t x,
							 | 
						||
| 
								 | 
							
																			real_t y,
							 | 
						||
| 
								 | 
							
																			real_t TOL
							 | 
						||
| 
								 | 
							
																			)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if ( qpOASES_getAbs(x-y) <= TOL )
							 | 
						||
| 
								 | 
							
										return BT_TRUE;
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										return BT_FALSE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   i s Z e r o
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline BooleanType qpOASES_isZero(	real_t x,
							 | 
						||
| 
								 | 
							
																			real_t TOL
							 | 
						||
| 
								 | 
							
																			)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if ( qpOASES_getAbs(x) <= TOL )
							 | 
						||
| 
								 | 
							
										return BT_TRUE;
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										return BT_FALSE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   g e t S i g n
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getSign(	real_t arg
							 | 
						||
| 
								 | 
							
																		)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if ( arg >= 0.0 )
							 | 
						||
| 
								 | 
							
										return 1.0;
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										return -1.0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   g e t M a x
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int qpOASES_getMaxI(	int x,
							 | 
						||
| 
								 | 
							
																	int y
							 | 
						||
| 
								 | 
							
																	)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return (y<x) ? x : y;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   g e t M i n
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int qpOASES_getMinI(	int x,
							 | 
						||
| 
								 | 
							
																	int y
							 | 
						||
| 
								 | 
							
																	)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return (y>x) ? x : y;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   g e t M a x
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getMax(	real_t x,
							 | 
						||
| 
								 | 
							
																		real_t y
							 | 
						||
| 
								 | 
							
																		)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									#ifdef __NO_FMATH__
							 | 
						||
| 
								 | 
							
								    return (y<x) ? x : y;
							 | 
						||
| 
								 | 
							
									#else
							 | 
						||
| 
								 | 
							
									return (y<x) ? x : y;
							 | 
						||
| 
								 | 
							
									/*return fmax(x,y); seems to be slower */
							 | 
						||
| 
								 | 
							
									#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   g e t M i n
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getMin(	real_t x,
							 | 
						||
| 
								 | 
							
																		real_t y
							 | 
						||
| 
								 | 
							
																		)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									#ifdef __NO_FMATH__
							 | 
						||
| 
								 | 
							
								    return (y>x) ? x : y;
							 | 
						||
| 
								 | 
							
									#else
							 | 
						||
| 
								 | 
							
									return (y>x) ? x : y;
							 | 
						||
| 
								 | 
							
									/*return fmin(x,y); seems to be slower */
							 | 
						||
| 
								 | 
							
									#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   g e t A b s
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getAbs(	real_t x
							 | 
						||
| 
								 | 
							
																		)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									#ifdef __NO_FMATH__
							 | 
						||
| 
								 | 
							
									return (x>=0.0) ? x : -x;
							 | 
						||
| 
								 | 
							
									#else
							 | 
						||
| 
								 | 
							
									return fabs(x);
							 | 
						||
| 
								 | 
							
									#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *   g e t S q r t
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline real_t qpOASES_getSqrt(	real_t x
							 | 
						||
| 
								 | 
							
																		)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    #ifdef __NO_FMATH__
							 | 
						||
| 
								 | 
							
									return sqrt(x); /* put your custom sqrt-replacement here */
							 | 
						||
| 
								 | 
							
									#else
							 | 
						||
| 
								 | 
							
									return sqrt(x);
							 | 
						||
| 
								 | 
							
									#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								END_NAMESPACE_QPOASES
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif	/* QPOASES_UTILS_H */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	end of file
							 | 
						||
| 
								 | 
							
								 */
							 |