open source driving agent
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.
 
 
 
 
 
 

469 lines
13 KiB

/*
* This file is part of ACADO Toolkit.
*
* ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
* Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau,
* Milan Vukov, Rien Quirynen, KU Leuven.
* Developed within the Optimization in Engineering Center (OPTEC)
* under supervision of Moritz Diehl. All rights reserved.
*
* ACADO Toolkit 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 3 of the License, or (at your option) any later version.
*
* ACADO Toolkit 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 ACADO Toolkit; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
/**
* \file include/acado/variables_grid/variable_settings.hpp
* \author Hans Joachim Ferreau, Boris Houska
*/
#ifndef ACADO_TOOLKIT_VARIABLE_SETTINGS_HPP
#define ACADO_TOOLKIT_VARIABLE_SETTINGS_HPP
#include <string.h>
#include <acado/matrix_vector/matrix_vector.hpp>
BEGIN_NAMESPACE_ACADO
const char defaultName[] = "-";
const char defaultUnit[] = "-";
const double defaultScaling = 1.0;
const double defaultUpperBound = INFTY;
const double defaultLowerBound = -INFTY;
const BooleanType defaultAutoInit = BT_TRUE;
/**
* \brief Provides variable-specific settings for vector- or matrix-valued optimization variables (for internal use).
*
* \ingroup BasicDataStructures
*
* The class VariableSettings provides variable-specific settings for
* enhancing a DVector or a DMatrix to vector- or matrix-valued
* optimization variables. It is intended for internal use only.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class VariableSettings
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
VariableSettings( );
/** Constructor which takes all settings.
*
* @param[in] _dim Dimension of variable.
* @param[in] _type Type of the variable.
* @param[in] _names Array containing name labels for each component of the variable.
* @param[in] _units Array containing unit labels for each component of the variable.
* @param[in] _scaling Scaling for each component of the variable.
* @param[in] _lb Lower bounds for each component of the variable.
* @param[in] _ub Upper bounds for each component of the variable.
* @param[in] _autoInit Flag indicating whether variable is to be automatically initialized.
*/
VariableSettings( uint _dim,
VariableType _type = VT_UNKNOWN,
const char** const _names = 0,
const char** const _units = 0,
const DVector& _scaling = emptyConstVector,
const DVector& _lb = emptyConstVector,
const DVector& _ub = emptyConstVector,
BooleanType _autoInit = defaultAutoInit
);
/** Copy constructor (deep copy).
*
* @param[in] rhs Right-hand side object.
*/
VariableSettings( const VariableSettings& rhs
);
/** Destructor.
*/
~VariableSettings( );
/** Copy constructor (deep copy).
*
* @param[in] rhs Right-hand side object.
*/
VariableSettings& operator=( const VariableSettings& rhs
);
/** Initializes empty object.
*
* \return SUCCESSFUL_RETURN
*/
returnValue init( );
/** Initializes object with given dimension and settings.
*
* @param[in] _dim Dimension of variable.
* @param[in] _type Type of the variable.
* @param[in] _names Array containing name labels for each component of the variable.
* @param[in] _units Array containing unit labels for each component of the variable.
* @param[in] _scaling Array containing the scaling for each component of the variable.
* @param[in] _lb Array containing lower bounds for each component of the variable.
* @param[in] _ub Array containing upper bounds for each component of the variable.
* @param[in] _autoInit Array defining if each component of the variable is to be automatically initialized.
*
* \return SUCCESSFUL_RETURN
*/
returnValue init( uint _dim,
VariableType _type,
const char** const _names,
const char** const _units,
const DVector& _scaling = emptyConstVector,
const DVector& _lb = emptyConstVector,
const DVector& _ub = emptyConstVector,
BooleanType _autoInit = defaultAutoInit
);
/** Appends given VariableSettings object as additional components
* to the current one.
*
* @param[in] rhs VariableSettings to be appended.
*
* \return SUCCESSFUL_RETURN
*/
returnValue appendSettings( const VariableSettings& rhs
);
/** Appends given VariableSettings object as additional components
* to the current one.
*
* @param[in] _dim Dimension of variable.
* @param[in] _names Array containing name labels for each component of the variable.
* @param[in] _units Array containing unit labels for each component of the variable.
* @param[in] _scaling Array containing the scaling for each component of the variable.
* @param[in] _lb Array containing lower bounds for each component of the variable.
* @param[in] _ub Array containing upper bounds for each component of the variable.
*
* \return SUCCESSFUL_RETURN
*/
returnValue appendSettings( uint _dim,
const char** const _names,
const char** const _units,
const DVector& _scaling = emptyConstVector,
const DVector& _lb = emptyConstVector,
const DVector& _ub = emptyConstVector
);
/** Returns current variable type.
*
* \return Current variable type
*/
inline VariableType getType( ) const;
/** Assigns new variable type.
*
* @param[in] _type New variable type.
*
* \return SUCCESSFUL_RETURN
*/
inline returnValue setType( VariableType _type
);
/** Returns current name label of given component.
*
* @param[in] idx Index of component.
* @param[out] _name Name label of given component.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INDEX_OUT_OF_BOUNDS, \n
* RET_MEMBER_NOT_INITIALISED
*/
returnValue getName( uint idx,
char* _name
) const;
/** Assigns new name label to given component.
*
* @param[in] idx Index of component.
* @param[in] _name New name label.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INDEX_OUT_OF_BOUNDS, \n
* RET_MEMBER_NOT_INITIALISED
*/
returnValue setName( uint idx,
const char* const _name
);
/** Returns current unit label of given component.
*
* @param[in] idx Index of component.
* @param[out] _unit Unit label of given component.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INDEX_OUT_OF_BOUNDS, \n
* RET_MEMBER_NOT_INITIALISED
*/
returnValue getUnit( uint idx,
char* _unit
) const;
/** Assigns new unit label to given component.
*
* @param[in] idx Index of component.
* @param[in] _unit New unit label.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INDEX_OUT_OF_BOUNDS, \n
* RET_MEMBER_NOT_INITIALISED
*/
returnValue setUnit( uint idx,
const char* const _unit
);
/** Returns current scaling.
*
* \return Current scaling
*/
inline DVector getScaling( ) const;
/** Assigns new scaling.
*
* @param[in] _scaling New scaling.
*
* \note Scaling factors need to be positive.
*
* \return SUCCESSFUL_RETURN, \n
* RET_VECTOR_DIMENSION_MISMATCH, \n
* RET_INVALID_ARGUMENTS
*/
inline returnValue setScaling( const DVector& _scaling
);
/** Returns current scaling of given component.
*
* @param[in] idx Index of component.
*
* \return Current scaling of given component
*/
inline double getScaling( uint idx
) const;
/** Assigns new scaling to given component.
*
* @param[in] idx Index of component.
* @param[in] _scaling New scaling.
*
* \note Scaling factor needs to be positive.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INDEX_OUT_OF_BOUNDS, \n
* RET_INVALID_ARGUMENTS
*/
inline returnValue setScaling( uint idx,
double _scaling
);
/** Returns current lower bounds.
*
* \return Current lower bounds
*/
inline DVector getLowerBounds( ) const;
/** Assigns new lower bounds.
*
* @param[in] _lb New lower bounds.
*
* \return SUCCESSFUL_RETURN, \n
* RET_VECTOR_DIMENSION_MISMATCH
*/
inline returnValue setLowerBounds( const DVector& _lb
);
/** Returns current lower bound of given component.
*
* @param[in] idx Index of component.
*
* \return Current lower bound of given component
*/
inline double getLowerBound( uint idx
) const;
/** Assigns new lower bound to given component.
*
* @param[in] idx Index of component.
* @param[in] _lb New lower bound.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INDEX_OUT_OF_BOUNDS
*/
inline returnValue setLowerBound( uint idx,
double _lb
);
/** Returns current upper bounds.
*
* \return Current upper bounds
*/
inline DVector getUpperBounds( ) const;
/** Assigns new upper bounds.
*
* @param[in] _ub New upper bounds.
*
* \return SUCCESSFUL_RETURN, \n
* RET_VECTOR_DIMENSION_MISMATCH
*/
inline returnValue setUpperBounds( const DVector& _ub
);
/** Returns current upper bound of given component.
*
* @param[in] idx Index of component.
*
* \return Current upper bound of given component
*/
inline double getUpperBound( uint idx
) const;
/** Assigns new upper bound to given component.
*
* @param[in] idx Index of component.
* @param[in] _ub New upper bound.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INDEX_OUT_OF_BOUNDS
*/
inline returnValue setUpperBound( uint idx,
double _ub
);
/** Returns whether automatic initialization is enabled or not.
*
* \return BT_TRUE iff automatic initialization is enabled, \n
* BT_FALSE otherwise
*/
inline BooleanType getAutoInit( ) const;
/** Assigns new auto initialization flag.
*
* @param[in] _autoInit New auto initialization flag.
*
* \return SUCCESSFUL_RETURN
*/
inline returnValue setAutoInit( BooleanType _autoInit
);
/** Returns whether VariableSettings comprises (non-empty) name labels
* (at at least one of its grid points).
*
* \return BT_TRUE iff VariableSettings comprises name labels, \n
* BT_FALSE otherwise
*/
inline BooleanType hasNames( ) const;
/** Returns whether VariableSettings comprises (non-empty) unit labels
* (at at least one of its grid points).
*
* \return BT_TRUE iff VariableSettings comprises unit labels, \n
* BT_FALSE otherwise
*/
inline BooleanType hasUnits( ) const;
/** Returns whether scaling is set (at at least one grid point).
*
* \return BT_TRUE iff scaling is set, \n
* BT_FALSE otherwise
*/
inline BooleanType hasScaling( ) const;
/** Returns whether VariableSettings comprises lower bounds
* (at at least one of its grid points).
*
* \return BT_TRUE iff VariableSettings comprises lower bounds, \n
* BT_FALSE otherwise
*/
inline BooleanType hasLowerBounds( ) const;
/** Returns whether VariableSettings comprises upper bounds
* (at at least one of its grid points).
*
* \return BT_TRUE iff VariableSettings comprises upper bounds, \n
* BT_FALSE otherwise
*/
inline BooleanType hasUpperBounds( ) const;
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
/** Clears all settings.
*
* \return SUCCESSFUL_RETURN
*/
returnValue clear( );
//
// DATA MEMBERS:
//
protected:
uint dim; /**< Dimension of variable. */
VariableType type; /**< Type of the variable. */
char** names; /**< Array containing name labels for each component of the variable.. */
char** units; /**< Array containing unit labels for each component of the variable.. */
DVector scaling; /**< Scaling for each component of the variable. */
DVector lb; /**< Lower bounds for each component of the variable. */
DVector ub; /**< Upper bounds for each component of the variable. */
BooleanType autoInit; /**< Flag indicating whether variable is to be automatically initialized. */
};
CLOSE_NAMESPACE_ACADO
#include <acado/variables_grid/variable_settings.ipp>
#endif // ACADO_TOOLKIT_VARIABLE_SETTINGS_HPP
/*
* end of file
*/