bring over phonelibs minus frida-gum and qsml

albatross
George Hotz 2020-01-17 10:37:11 -08:00
parent 6abffe0ede
commit da6863f427
2473 changed files with 759632 additions and 0 deletions

View File

@ -0,0 +1,14 @@
Import('env')
def static_library(lib_dir, header_dir):
env.Append(LIBPATH=[Dir(lib_dir)])
env.Append(CPPPATH=[Dir(header_dir)])
env.Library('json', ['json/src/json.c'])
env.Append(CPPPATH=[Dir('json/src')])
env.Library('json11', ['json11/json11.cpp'])
env.Append(CPPPATH=[Dir('json11')])
static_library('zmq/aarch64-linux/lib', 'zmq/aarch64-linux/include')
static_library('capnp-cpp/aarch64-linux/lib', 'capnp-cpp/aarch64-linux/include')

View File

@ -0,0 +1,28 @@
From a1b2938bcf0b2bbb9156ed9ee922bc5b5a38cea7 Mon Sep 17 00:00:00 2001
From: heyyeh12 <heyyeh12@users.noreply.github.com>
Date: Sat, 27 Apr 2019 09:08:48 -0400
Subject: [PATCH] fixes issue #261 binding to temporary object
---
acado/code_generation/export_function_declaration.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/acado/code_generation/export_function_declaration.cpp b/acado/code_generation/export_function_declaration.cpp
index d6450b50..46a3269f 100644
--- a/acado/code_generation/export_function_declaration.cpp
+++ b/acado/code_generation/export_function_declaration.cpp
@@ -36,12 +36,12 @@
BEGIN_NAMESPACE_ACADO
-
+const ExportFunction& _ff = ExportFunction();
//
// PUBLIC MEMBER FUNCTIONS:
//
-ExportFunctionDeclaration::ExportFunctionDeclaration( ) : ExportStatement( ), f( ExportFunction() )
+ExportFunctionDeclaration::ExportFunctionDeclaration( ) : ExportStatement( ), f( _ff )
{}

BIN
phonelibs/acado/aarch64/lib/libacado_casadi.a (Stored with Git LFS) 100644

Binary file not shown.

BIN
phonelibs/acado/aarch64/lib/libacado_csparse.a (Stored with Git LFS) 100644

Binary file not shown.

BIN
phonelibs/acado/aarch64/lib/libacado_qpoases.a (Stored with Git LFS) 100644

Binary file not shown.

BIN
phonelibs/acado/aarch64/lib/libacado_toolkit.a (Stored with Git LFS) 100644

Binary file not shown.

View File

@ -0,0 +1 @@
libacado_toolkit_s.so.1

View File

@ -0,0 +1 @@
libacado_toolkit_s.so.1.2.2beta

Binary file not shown.

View File

@ -0,0 +1,16 @@
git clone https://github.com/acado/acado.git
cd acado
git reset --hard 5adb8cbcff5a5464706a48eaf073218ac87c9044
# Clang 8 fixes
# git apply 01.patch
# sed -i '100d' cmake/CompilerOptions.cmake
# sed -i '100d' cmake/CompilerOptions.cmake
mkdir build
cd build
cmake -DACADO_WITH_EXAMPLES=OFF -DACADO_BUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX="$HOME/one/phonelibs/acado" ..
make -j4
make install

View File

@ -0,0 +1,33 @@
/*
* 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_code_generation.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2009 - 2014
*/
#include <acado/code_generation/code_generation.hpp>

View File

@ -0,0 +1,62 @@
/*
* 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_controller.hpp
* \author Hans Joachim Ferreau, Boris Houska
*/
#include <acado/utils/acado_utils.hpp>
#include <acado/user_interaction/user_interaction.hpp>
#include <acado/matrix_vector/matrix_vector.hpp>
#include <acado/variables_grid/variables_grid.hpp>
#include <acado/index_list/index_list.hpp>
#include <acado/symbolic_expression/symbolic_expression.hpp>
#include <acado/function/function.hpp>
#include <acado/integrator/integrator.hpp>
#include <acado/sparse_solver/sparse_solver.hpp>
#include <acado/dynamic_system/dynamic_system.hpp>
#include <acado/dynamic_discretization/dynamic_discretization.hpp>
#include <acado/dynamic_discretization/integration_algorithm.hpp>
#include <acado/nlp_solver/nlp_solver.hpp>
#include <acado/nlp_solver/scp_method.hpp>
#include <acado/ocp/ocp.hpp>
#include <acado/optimization_algorithm/optimization_algorithm.hpp>
#include <acado/optimization_algorithm/parameter_estimation_algorithm.hpp>
#include <acado/optimization_algorithm/multi_objective_algorithm.hpp>
#include <acado/curve/curve.hpp>
#include <acado/controller/controller.hpp>
#include <acado/estimator/estimator.hpp>
#include <acado/control_law/control_law.hpp>
#include <acado/control_law/pid_controller.hpp>
#include <acado/control_law/dynamic_feedback_law.hpp>
#include <acado/control_law/linear_state_feedback.hpp>
#include <acado/control_law/feedforward_law.hpp>
#include <acado/reference_trajectory/reference_trajectory.hpp>

View File

@ -0,0 +1,33 @@
/*
* 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_gnuplot.hpp
* \author Milan Vukov
* \date 2014
*/
#include <acado/bindings/acado_gnuplot/gnuplot_window.hpp>

View File

@ -0,0 +1,44 @@
/*
* 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_integrators.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 10.06.2009
*/
#include <acado/utils/acado_utils.hpp>
#include <acado/clock/clock.hpp>
#include <acado/curve/curve.hpp>
#include <acado/user_interaction/user_interaction.hpp>
#include <acado/matrix_vector/matrix_vector.hpp>
#include <acado/variables_grid/variables_grid.hpp>
#include <acado/symbolic_expression/symbolic_expression.hpp>
#include <acado/function/function.hpp>
#include <acado/integrator/integrator.hpp>
#include <acado/sparse_solver/sparse_solver.hpp>

View File

@ -0,0 +1,47 @@
/*
* 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_optimal_control.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 10.06.2009
*/
#include <acado_integrators.hpp>
#include <acado/dynamic_system/dynamic_system.hpp>
#include <acado/dynamic_discretization/dynamic_discretization.hpp>
#include <acado/dynamic_discretization/integration_algorithm.hpp>
#include <acado/nlp_solver/nlp_solver.hpp>
#include <acado/nlp_solver/scp_method.hpp>
#include <acado/ocp/ocp.hpp>
#include <acado/ocp/nlp.hpp>
#include <acado/optimization_algorithm/optimization_algorithm.hpp>
#include <acado/optimization_algorithm/real_time_algorithm.hpp>
#include <acado/optimization_algorithm/parameter_estimation_algorithm.hpp>
#include <acado/optimization_algorithm/multi_objective_algorithm.hpp>

View File

@ -0,0 +1,51 @@
/*
* 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_toolkit.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 10.06.2009
*/
#include <acado_optimal_control.hpp>
#include <acado/curve/curve.hpp>
#include <acado/controller/controller.hpp>
#include <acado/estimator/estimator.hpp>
#include <acado/control_law/control_law.hpp>
#include <acado/control_law/pid_controller.hpp>
#include <acado/control_law/linear_state_feedback.hpp>
#include <acado/control_law/feedforward_law.hpp>
#include <acado/reference_trajectory/reference_trajectory.hpp>
#include <acado/simulation_environment/simulation_environment.hpp>
#include <acado/process/process.hpp>
#include <acado/noise/noise.hpp>
#include <acado/transfer_device/actuator.hpp>
#include <acado/transfer_device/sensor.hpp>
#include <acado/code_generation/code_generation.hpp>

View File

@ -0,0 +1,210 @@
/*
* 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 external_packages/include/acado_csparse.hpp
* \author Boris Houska, Hans Joachim Ferreau
* \date 2009
*/
#ifndef ACADO_TOOLKIT_ACADO_CSPARSE_HPP
#define ACADO_TOOLKIT_ACADO_CSPARSE_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/sparse_solver/sparse_solver.hpp>
// FORWARD DECLARATIONS:
// ---------------------
struct cs_numeric ;
struct cs_symbolic;
BEGIN_NAMESPACE_ACADO
/**
* \brief (not yet documented)
*
* \ingroup ExternalFunctionality
*
* The class ...
*
* \author Boris Houska, Hans Joachim Ferreau
*/
class ACADOcsparse : public SparseSolver{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor. */
ACADOcsparse( );
/** Copy constructor (deep copy). */
ACADOcsparse( const ACADOcsparse &arg );
/** Destructor. */
virtual ~ACADOcsparse( );
/** Clone operator (deep copy). */
virtual ACADOcsparse* clone() const;
/** Defines the dimension n of A \in R^{n \times n} \n
* \n
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue setDimension( const int &n );
/** Defines the number of non-zero elements in the \n
* matrix A \n
* \n
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue setNumberOfEntries( const int &nDense_ );
/** Sets an index list containing the positions of the \n
* non-zero elements in the matrix A.
*/
virtual returnValue setIndices( const int *rowIdx_,
const int *colIdx_ );
/** Sets the non-zero elements of the matrix A. The double* A \n
* is assumed to contain nDense entries corresponding to \n
* non-zero elements of A. \n
*/
virtual returnValue setMatrix( double *A_ );
/** Solves the system A*x = b for the specified data. \n
* \n
* \return SUCCESSFUL_RETURN \n
* RET_LINEAR_SYSTEM_NUMERICALLY_SINGULAR \n
*/
virtual returnValue solve( double *b );
/** Solves the system A^T*x = b for the specified data. \n
* \n
* \return SUCCESSFUL_RETURN \n
* RET_LINEAR_SYSTEM_NUMERICALLY_SINGULAR \n
*/
virtual returnValue solveTranspose( double *b );
/** Returns the solution of the equation A*x = b if solved. \n
* \n
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue getX( double *x_ );
/** Sets the required tolerance (accuracy) for the solution of \n
* the linear equation. For large tolerances an iterative \n
* algorithm might converge earlier. \n
* \n
* Requires || A*x - b || <= TOL \n
* \n
* The norm || . || is possibly scaled by a preconditioner. \n
* \n
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue setTolerance( double TOL_ );
/** Sets the print level. \n
* \n
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue setPrintLevel( PrintLevel printLevel_ );
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
//
// DATA MEMBERS:
//
protected:
// DIMENSIONS:
// --------------------
int dim; // dimension of the matrix A
int nDense; // number of non-zero entries in A
int *index1, *index2; // and the associated indices
// DATA:
// --------------------
double *x; // The result vector x
// AUXILIARY VARIABLES:
// --------------------
cs_symbolic *S; // pointer to a struct, which contains symbolic information about the matrix
cs_numeric *N; // pointer to a struct, which contains numeric information about the matrix
double TOL; // The required tolerance. (default 10^(-10))
PrintLevel printLevel; // The PrintLevel.
};
CLOSE_NAMESPACE_ACADO
#endif
/*
* end of file
*/

View File

@ -0,0 +1,226 @@
/*
* 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 external_packages/acado_gnuplot/gnuplot_window.hpp
* \author Boris Houska, Hans Joachim Ferreau, Milan Vukov
* \date 2009-2013
*/
#ifndef ACADO_TOOLKIT_ACADO_2_GNUPLOT_HPP
#define ACADO_TOOLKIT_ACADO_2_GNUPLOT_HPP
#include <acado/user_interaction/plot_window.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Provides an interface to Gnuplot for plotting algorithmic outputs.
*
* \ingroup ExternalFunctionality
*
* The acado2gnuplot interface provides the functionality to easiliy
* plot data which is available in the ACADO Toolkit format. The methods
* that are implemented in this interface convert ACADO sturctures into
* a format that can be read by the program Gnuplot.
*
* \author Boris Houska, Hans Joachim Ferreau, Milan Vukov
*/
class GnuplotWindow : public PlotWindow
{
// PUBLIC FUNCTIONS:
// -----------------
public:
/** Default constructor. */
GnuplotWindow( );
/** Constructor which takes the plot frequency.
*
* @param[in] _frequency Frequency determining at which time instants the window is to be plotted.
*/
GnuplotWindow( PlotFrequency _frequency
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
GnuplotWindow( const GnuplotWindow& arg
);
/** Destructor. */
virtual ~GnuplotWindow( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
GnuplotWindow& operator=( const GnuplotWindow& arg
);
/** Clone operator returning a base class pointer to a deep copy
* of respective class instance.
*
* \return Base class pointer to a deep copy of respective class instance
*/
virtual PlotWindow* clone( ) const;
/** Initializes the Gnuplot-thread.
*
* \return SUCCESSFUL_RETURN, \n
* RET_PLOT_WINDOW_CAN_NOT_BE_OPEN
*/
virtual returnValue init( );
/** Actually sets-up and plots the data in a Gnuplot window.
*
* @param[in] _frequency Frequency determining at which time instants the window is to be plotted.
*
* \return SUCCESSFUL_RETURN, \n
* RET_PLOTTING_FAILED, \n
* RET_INVALID_ARGUMENTS, \n
* RET_PLOT_WINDOW_CAN_NOT_BE_OPEN
*/
virtual returnValue replot( PlotFrequency _frequency = PLOT_IN_ANY_CASE
);
/** Runs the Gnuplot window in waiting mode until a mouse event
* occurs.
*
* \return SUCCESSFUL_RETURN
*/
returnValue waitForMouseEvents( );
/** Returns whether a mouse event has occured.
*
* @param[out] mouseX X coordinate of mouse click.
* @param[out] mouseX Y coordinate of mouse click.
*
* \return BT_TRUE iff mouse event occured, \n
* BT_FALSE otherwise
*/
BooleanType getMouseEvent( double& mouseX,
double& mouseY
);
/** Waits until a mouse event occurs.
*
* @param[out] mouseX X coordinate of mouse click.
* @param[out] mouseX Y coordinate of mouse click.
*
* \return SUCCESSFUL_RETURN, \n
* RET_NOT_YET_IMPLEMENTED
*/
returnValue waitForMouseEvent( double& mouseX,
double& mouseY
);
// PROTECTED FUNCTIONS:
// --------------------
protected:
/** Sets-up and plots the data in a Gnuplot window.
*
* \return SUCCESSFUL_RETURN, \n
* RET_PLOTTING_FAILED, \n
* RET_INVALID_ARGUMENTS, \n
* RET_PLOT_WINDOW_CAN_NOT_BE_OPEN
*/
returnValue sendDataToGnuplot( );
/** Generates string in Gnuplot syntax for plotting in given plot mode.
*
* @param[in] plotMode Plot mode whose string needs to be generated, see the PlotMode documentation for details.
* @param[out] plotModeString String in Gnuplot syntax for plotting in given plot mode.
*
* \return SUCCESSFUL_RETURN
*/
returnValue getPlotModeString( PlotMode plotMode,
std::string& plotModeString
) const;
/** Generates string in Gnuplot syntax for plotting in given plot style.
*
* @param[in] _type Type of variable to be plotted.
* @param[out] plotStyleString String in Gnuplot syntax for plotting in given plot style.
*
* \return SUCCESSFUL_RETURN
*/
returnValue getPlotStyleString( VariableType _type,
std::string& plotStyleString
) const;
/** Generates string in Gnuplot syntax for plotting given data grid.
*
* @param[in] _dataGrid Date grid to be plotted.
* @param[out] _plotDataString String in Gnuplot syntax for plotting given data grid.
*
* \return SUCCESSFUL_RETURN
*/
returnValue obtainPlotDataString( VariablesGrid& _dataGrid,
std::string& _plotDataString
) const;
// PROTECTED DATA MEMBERS:
// -----------------------
protected:
FILE* gnuPipe; /**< Pipe to Gnuplot. */
BooleanType mouseEvent; /**< Flag indicating whether window should wait for mouse events. */
static int counter; /**< Static counter for counting the number of GnuplotWindows. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_ACADO_2_GNUPLOT_HPP
/*
* end of file
*/

View File

@ -0,0 +1,57 @@
/*
* 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 external_packages/acado_gnuplot/gnuplot_window.ipp
* \author Boris Houska, Hans Joachim Ferreau
* \date 2009
*/
BEGIN_NAMESPACE_ACADO
//
// PUBLIC MEMBER FUNCTIONS:
//
//
// PROTECTED MEMBER FUNCTIONS:
//
CLOSE_NAMESPACE_ACADO
/*
* end of file
*/

View File

@ -0,0 +1,218 @@
/*
* 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 external_packages/include/acado_qpoases/qp_solver_qpoases.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 19.08.2008
*/
#ifndef ACADO_TOOLKIT_QP_SOLVER_QPOASES_HPP
#define ACADO_TOOLKIT_QP_SOLVER_QPOASES_HPP
#include <acado/conic_solver/dense_qp_solver.hpp>
namespace qpOASES
{
class SQProblem;
}
BEGIN_NAMESPACE_ACADO
/**
* \brief (not yet documented)
*
* \ingroup ExternalFunctionality
*
* The class QPsolver_qpOASES interfaces the qpOASES software package
* for solving convex quadratic programming (QP) problems.
*
* \author Boris Houska, Hans Joachim Ferreau
*/
class QPsolver_qpOASES : public DenseQPsolver
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor. */
QPsolver_qpOASES( );
QPsolver_qpOASES( UserInteraction* _userInteraction
);
/** Copy constructor (deep copy). */
QPsolver_qpOASES( const QPsolver_qpOASES& rhs );
/** Destructor. */
virtual ~QPsolver_qpOASES( );
/** Assignment operator (deep copy). */
QPsolver_qpOASES& operator=( const QPsolver_qpOASES& rhs );
virtual DenseCPsolver* clone( ) const;
virtual DenseQPsolver* cloneDenseQPsolver( ) const;
/** Solves the QP. */
virtual returnValue solve( DenseCP *cp_ );
/** Solves QP using at most <maxIter> iterations.
* \return SUCCESSFUL_RETURN \n
* RET_QP_SOLUTION_REACHED_LIMIT \n
* RET_QP_SOLUTION_FAILED \n
* RET_INITIALIZE_FIRST */
virtual returnValue solve( double* H, /**< Hessian matrix of neighbouring QP to be solved. */
double* A, /**< Constraint matrix of neighbouring QP to be solved. */
double* g, /**< Gradient of neighbouring QP to be solved. */
double* lb, /**< Lower bounds of neighbouring QP to be solved. */
double* ub, /**< Upper bounds of neighbouring QP to be solved. */
double* lbA, /**< Lower constraints' bounds of neighbouring QP to be solved. */
double* ubA, /**< Upper constraints' bounds of neighbouring QP to be solved. */
uint maxIter /**< Maximum number of iterations. */
);
/** Solves QP using at most <maxIter> iterations. */
virtual returnValue solve( DMatrix *H, /**< Hessian matrix of neighbouring QP to be solved. */
DMatrix *A, /**< Constraint matrix of neighbouring QP to be solved. */
DVector *g, /**< Gradient of neighbouring QP to be solved. */
DVector *lb, /**< Lower bounds of neighbouring QP to be solved. */
DVector *ub, /**< Upper bounds of neighbouring QP to be solved. */
DVector *lbA, /**< Lower constraints' bounds of neighbouring QP to be solved. */
DVector *ubA, /**< Upper constraints' bounds of neighbouring QP to be solved. */
uint maxIter /**< Maximum number of iterations. */
);
/** Performs exactly one QP iteration.
* \return SUCCESSFUL_RETURN \n
* RET_QP_SOLUTION_REACHED_LIMIT \n
* RET_QP_SOLUTION_FAILED \n
* RET_INITIALIZE_FIRST */
virtual returnValue step( double* H, /**< Hessian matrix of neighbouring QP to be solved. */
double* A, /**< Constraint matrix of neighbouring QP to be solved. */
double* g, /**< Gradient of neighbouring QP to be solved. */
double* lb, /**< Lower bounds of neighbouring QP to be solved. */
double* ub, /**< Upper bounds of neighbouring QP to be solved. */
double* lbA, /**< Lower constraints' bounds of neighbouring QP to be solved. */
double* ubA /**< Upper constraints' bounds of neighbouring QP to be solved. */
);
/** Performs exactly one QP iteration.
* \return SUCCESSFUL_RETURN \n
* RET_QP_SOLUTION_REACHED_LIMIT \n
* RET_QP_SOLUTION_FAILED \n
* RET_INITIALIZE_FIRST */
virtual returnValue step( DMatrix *H, /**< Hessian matrix of neighbouring QP to be solved. */
DMatrix *A, /**< Constraint matrix of neighbouring QP to be solved. */
DVector *g, /**< Gradient of neighbouring QP to be solved. */
DVector *lb, /**< Lower bounds of neighbouring QP to be solved. */
DVector *ub, /**< Upper bounds of neighbouring QP to be solved. */
DVector *lbA, /**< Lower constraints' bounds of neighbouring QP to be solved. */
DVector *ubA /**< Upper constraints' bounds of neighbouring QP to be solved. */
);
/** Returns primal solution vector if QP has been solved.
* \return SUCCESSFUL_RETURN \n
* RET_QP_NOT_SOLVED */
virtual returnValue getPrimalSolution( DVector& xOpt /**< OUTPUT: primal solution vector. */
) const;
/** Returns dual solution vector if QP has been solved.
* \return SUCCESSFUL_RETURN \n
* RET_QP_NOT_SOLVED */
virtual returnValue getDualSolution( DVector& yOpt /**< OUTPUT: dual solution vector. */
) const;
/** Returns optimal objective function value.
* \return finite value: Optimal objective function value (QP has been solved) \n
+INFTY: QP has not been solved or is infeasible \n
-INFTY: QP is unbounded */
virtual double getObjVal( ) const;
virtual uint getNumberOfVariables( ) const;
virtual uint getNumberOfConstraints( ) const;
/** Returns a variance-covariance estimate if possible or an error message otherwise.
*
* \return SUCCESSFUL_RETURN
* RET_MEMBER_NOT_INITIALISED
*/
virtual returnValue getVarianceCovariance( DMatrix &var );
/** Returns a variance-covariance estimate if possible or an error message otherwise.
*
* \return SUCCESSFUL_RETURN
* RET_MEMBER_NOT_INITIALISED
*/
virtual returnValue getVarianceCovariance( DMatrix &H, DMatrix &var );
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
/** Setups QP object.
* \return SUCCESSFUL_RETURN \n
* RET_QP_INIT_FAILED */
virtual returnValue setupQPobject( uint nV, /**< Number of QP variables. */
uint nC /**< Number of QP constraints (without bounds). */
);
returnValue updateQPstatus( int ret
);
//
// DATA MEMBERS:
//
protected:
qpOASES::SQProblem* qp;
};
CLOSE_NAMESPACE_ACADO
#include <acado/bindings/acado_qpoases/qp_solver_qpoases.ipp>
#endif // ACADO_TOOLKIT_QP_SOLVER_QPOASES_HPP
/*
* end of file
*/

View File

@ -0,0 +1,48 @@
/*
* 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 external_packages/include/acado_qpoases/qp_solver_qpoases.ipp
* \author Hans Joachim Ferreau, Boris Houska
* \date 19.08.2008
*/
//
// PUBLIC MEMBER FUNCTIONS:
//
BEGIN_NAMESPACE_ACADO
CLOSE_NAMESPACE_ACADO
/*
* end of file
*/

View File

@ -0,0 +1,184 @@
/*
* 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/clock/clock.hpp
* \author Hans Joachim Ferreau, Boris Houska
*/
#ifndef ACADO_TOOLKIT_CLOCK_HPP
#define ACADO_TOOLKIT_CLOCK_HPP
#include <acado/utils/acado_utils.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Base class for all kind of time measurements.
*
* \ingroup BasicDataStructures
*
* The class Clock serves as base class for all kind of time measurements,
* both real and simulated ones.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class Clock
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
Clock( );
/** Copy constructor (deep copy).
*
* @param[in] rhs Right-hand side object.
*/
Clock( const Clock &rhs
);
/** Destructor.
*/
virtual ~Clock();
/** Assignment Operator (deep copy).
*
* @param[in] rhs Right-hand side object.
*/
Clock& operator=( const Clock &rhs
);
/** Clone constructor (deep copy).
*
* \return Pointer to deep copy of base class type
*/
virtual Clock* clone( ) const = 0;
/** Initializes the clock with given initial time.
*
* @param[in] _initialTime Initial time.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue init( double _initialTime
);
/** Initializes the clock with initial time zero.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue reset( );
/** Starts time measurement.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY, \n
* RET_NO_SYSTEM_TIME
*/
virtual returnValue start( ) = 0;
/** Shifts measured time by a given offset.
*
* @param[in] _timeShift Time offset.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY, \n
* RET_NO_SYSTEM_TIME
*/
virtual returnValue step( double _timeShift
) = 0;
/** Stops time measurement.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY, \n
* RET_NO_SYSTEM_TIME
*/
virtual returnValue stop ( ) = 0;
/** Returns elapsed time.
*
* @param[in] _elapsedTime Elapsed time.
*
* \return SUCCESSFUL_RETURN, \n
* RET_BLOCK_NOT_READY
*/
virtual returnValue getTime( double& _elapsedTime
);
/** Returns elapsed time.
*
* \return >= 0: elapsed time, \n
* -INFTY: internal error
*/
virtual double getTime( );
/** Returns current status of clock, see documentation of ClockStatus for details.
*
* \return Current status of clock
*/
inline ClockStatus getStatus( ) const;
//
// PROTECTED MEMBERS:
//
protected:
double elapsedTime; /**< Elapsed time since last reset. */
ClockStatus status; /**< Status of clock. */
};
CLOSE_NAMESPACE_ACADO
#include <acado/clock/clock.ipp>
// collect all remaining headers of clock directory
#include <acado/clock/real_clock.hpp>
#include <acado/clock/simulation_clock.hpp>
#endif // ACADO_TOOLKIT_CLOCK_HPP
/*
* end of file
*/

View File

@ -0,0 +1,54 @@
/*
* 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/clock/clock.ipp
* \author Boris Houska, Hans Joachim Ferreau
* \date 13.06.2008
*/
//
// PUBLIC MEMBER FUNCTIONS:
//
BEGIN_NAMESPACE_ACADO
inline ClockStatus Clock::getStatus( ) const
{
return status;
}
CLOSE_NAMESPACE_ACADO
/*
* end of file
*/

View File

@ -0,0 +1,138 @@
/*
* 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/clock/real_clock.hpp
* \author Boris Houska, Hans Joachim Ferreau
*/
#ifndef ACADO_TOOLKIT_REAL_CLOCK_HPP
#define ACADO_TOOLKIT_REAL_CLOCK_HPP
#include <acado/clock/clock.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows real time measurements based on the system's clock.
*
* \ingroup BasicDataStructures
*
* The class RealClock allows real time measurements based on the
* system's clock.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class RealClock : public Clock
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
RealClock();
/** Copy constructor (deep copy).
*
* @param[in] rhs Right-hand side object.
*/
RealClock( const RealClock &rhs
);
/** Destructor.
*/
virtual ~RealClock( );
/** Assignment Operator (deep copy).
*
* @param[in] rhs Right-hand side object.
*/
RealClock& operator=( const RealClock &rhs
);
/** Clone constructor (deep copy).
*
* \return Pointer to deep copy of base class type
*/
virtual Clock* clone( ) const;
/** Starts time measurement.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY, \n
* RET_NO_SYSTEM_TIME
*/
virtual returnValue start( );
/** Shifts measured time by a given offset.
*
* @param[in] _timeShift Time offset.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY, \n
* RET_NO_SYSTEM_TIME
*/
virtual returnValue step( double _timeShift
);
/** Stops time measurement.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY, \n
* RET_NO_SYSTEM_TIME
*/
virtual returnValue stop( );
//
// PROTECTED MEMBERS:
//
protected:
double lastTimeInstant; /**< Last time instant at which start() has been called. */
};
CLOSE_NAMESPACE_ACADO
//#include <acado/clock/real_clock.ipp>
#endif // ACADO_TOOLKIT_REAL_CLOCK_HPP
/*
* end of file
*/

View File

@ -0,0 +1,49 @@
/*
* 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/clock/real_clock.ipp
* \author Boris Houska, Hans Joachim Ferreau
* \date 13.06.2008
*/
//
// PUBLIC MEMBER FUNCTIONS:
//
BEGIN_NAMESPACE_ACADO
CLOSE_NAMESPACE_ACADO
/*
* end of file
*/

View File

@ -0,0 +1,132 @@
/*
* 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/clock/simulation_clock.hpp
* \author Boris Houska, Hans Joachim Ferreau
*/
#ifndef ACADO_TOOLKIT_SIMULATION_CLOCK_HPP
#define ACADO_TOOLKIT_SIMULATION_CLOCK_HPP
#include <acado/clock/clock.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Simulates real time measurements for simulations.
*
* \ingroup BasicDataStructures
*
* The class SimulationClock simulates real time measurements for
* simulations within the SimulationEnvironment.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class SimulationClock : public Clock
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
SimulationClock();
/** Copy constructor (deep copy).
*
* @param[in] rhs Right-hand side object.
*/
SimulationClock( const SimulationClock& rhs
);
/** Destructor.
*/
virtual ~SimulationClock( );
/** Assignment Operator (deep copy).
*
* @param[in] rhs Right-hand side object.
*/
SimulationClock& operator=( const SimulationClock& rhs
);
/** Clone constructor (deep copy).
*
* \return Pointer to deep copy of base class type
*/
virtual Clock* clone( ) const;
/** Starts time measurement.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY
*/
virtual returnValue start( );
/** Shifts measured time by a given offset.
*
* @param[in] _timeShift Time offset.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY
*/
virtual returnValue step( double _timeShift
);
/** Stops time measurement.
*
* \return SUCCESSFUL_RETURN, \n
* RET_CLOCK_NOT_READY
*/
virtual returnValue stop( );
//
// PROTECTED MEMBERS:
//
protected:
};
CLOSE_NAMESPACE_ACADO
//#include <acado/clock/simulation_clock.ipp>
#endif // ACADO_TOOLKIT_SIMULATION_CLOCK_HPP
/*
* end of file
*/

View File

@ -0,0 +1,48 @@
/*
* 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/clock/simulation_clock.ipp
* \author Boris Houska, Hans Joachim Ferreau
* \date 13.06.2008
*/
//
// PUBLIC MEMBER FUNCTIONS:
//
BEGIN_NAMESPACE_ACADO
CLOSE_NAMESPACE_ACADO
/*
* end of file
*/

View File

@ -0,0 +1,42 @@
/*
* 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/code_generation/code_generation.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov, Rien Quirynen
* \date 2010 - 2014
*/
#ifndef ACADO_TOOLKIT_CODE_GENERATION_HPP
#define ACADO_TOOLKIT_CODE_GENERATION_HPP
#include <acado/code_generation/integrators/integrator_export_types.hpp>
#include <acado/code_generation/sim_export.hpp>
#include <acado/code_generation/ocp_export.hpp>
#include <acado/code_generation/integrators/register_exported_integrators.hpp>
#include <acado/code_generation/register_nlp_solvers.hpp>
#endif // ACADO_TOOLKIT_CODE_GENERATION_HPP

View File

@ -0,0 +1,205 @@
/*
* 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/code_generation/export_ode_function.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2010 - 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_ODE_FUNCTION_HPP
#define ACADO_TOOLKIT_EXPORT_ODE_FUNCTION_HPP
#include <acado/code_generation/export_function.hpp>
BEGIN_NAMESPACE_ACADO
class Function;
/**
* \brief Allows to export code of an ACADO function.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportAcadoFunction allows to export code of an ACADO function.
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportAcadoFunction : public ExportFunction
{
public:
/** Default constructor. */
ExportAcadoFunction( );
/** Constructor which takes the differential equation to be exported
* as well as the name of the exported ODE.
*
* @param[in] _f Differential equation to be exported.
* @param[in] _name Name of exported ODE function.
*/
ExportAcadoFunction( const Function& _f,
const std::string& _name = "acadoFcn"
);
/** Constructor which takes name of a function only.
*
* This way, we can define an "external symbolic function" with the
* following prototype:
* \verbatim
* void (const real_t* in, real_t* out);
* \endverbatim
*
* @param[in] _name Name of exported ODE function.
*/
ExportAcadoFunction( const std::string& _name
);
/** Destructor. */
virtual ~ExportAcadoFunction( );
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Initializes ODE function export by taking the differential equation
* to be exported as well as the name of the exported ODE.
*
* @param[in] _f Differential equation to be exported.
* @param[in] _name Name of exported ODE function.
* @param[in] _numX The number of states that are needed to evaluate the system of differential equations
* (needed when the number of equations is not equal to the number of given states).
* @param[in] _numXA The number of algebraic states in the input for the evaluation of the system of equations.
* @param[in] _numU The number of control inputs given for the evaluation of the system of equations.
* @param[in] _numP The number of parameters given for the evaluation of the system of equations.
* @param[in] _numDX The number of differential state derivatives given for the evaluation of the system of equations.
*/
returnValue init( const Function& _f,
const std::string& _name = "acadoFcn",
const uint _numX = 0,
const uint _numXA = 0,
const uint _numU = 0,
const uint _numP = 0,
const uint _numDX = 0,
const uint _numOD = 0
);
/** Exports data declaration of the ODE function into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export function.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Exports forward declaration of the ODE function into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] file Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportForwardDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Exports source code of the ODE function into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] string Name of file to be used to export function.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Returns whether function has been defined.
*
* \return true iff function has been defined, \n
* false otherwise
*/
virtual bool isDefined( ) const;
/** Get output dimension of the ACADO function. */
unsigned getFunctionDim( void );
/** Get global export variable - a variable that holds intermediate values. */
returnValue setGlobalExportVariable(const ExportVariable& var);
/** Set global export variable - a variable that holds intermediate values. */
ExportVariable getGlobalExportVariable( ) const;
/** A helper function to check whether a function is external. */
bool isExternal() const;
protected:
/** The number of states that are needed to evaluate the system of differential equations.
* If this number isn't specified, then it will be set to the number of equations (minus
* the number of algebraic states). */
unsigned numX;
/** The number of algebraic states in the input for the evaluation of the system of
* equations (similar to numX). */
unsigned numXA;
/** The number of control inputs given for the evaluation of the system of equations
* (similar to numX). */
unsigned numU;
/** The number of parameters given for the evaluation of the system of equations. */
unsigned numP;
/** The number of differential state derivatives given for the evaluation of the
* system of equations. */
unsigned numDX;
/** The number of "online data" objects. */
unsigned numOD;
/** ACADO function to be exported. */
std::shared_ptr< Function > f;
/** A variable that holds intermediate values. */
ExportVariable globalVar;
/** Flag indicating whether the symbolic function is external or not. */
bool external;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_FUNCTION_HPP

View File

@ -0,0 +1,226 @@
/*
* 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/integrator/export_algorithm.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 2010-2011
*/
#ifndef ACADO_TOOLKIT_EXPORT_ALGORITHM_HPP
#define ACADO_TOOLKIT_EXPORT_ALGORITHM_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/user_interaction/algorithmic_base.hpp>
#include <acado/matrix_vector/matrix_vector.hpp>
#include <acado/code_generation/export_variable.hpp>
#include <acado/code_generation/export_function.hpp>
#include <acado/code_generation/export_acado_function.hpp>
#include <acado/code_generation/export_arithmetic_statement.hpp>
#include <acado/code_generation/export_function_call.hpp>
#include <acado/code_generation/export_for_loop.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export automatically generated algorithms for fast model predictive control
*
* \ingroup NumericalAlgorithms
*
* The class ExportAlgorithm allows to export automatically generated
* algorithms for fast model predictive control.
*
* \author Hans Joachim Ferreau, Milan Vukov, Boris Houska
*/
class ExportAlgorithm : public AlgorithmicBase
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportAlgorithm( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = std::string()
);
/** Destructor. */
virtual ~ExportAlgorithm( );
/** Initializes code export into given file.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated algorithm to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const = 0;
/** Adds all function (forward) declarations of the auto-generated algorithm to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const = 0;
/** Exports source code of the auto-generated algorithm into the given directory.
*
* @param[in] code Code block containing the auto-generated algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
) = 0;
/** Sets the variables dimensions (ODE).
*
* @param[in] _NX New number of differential states.
* @param[in] _NU New number of control inputs.
* @param[in] _NP New number of parameters.
* @param[in] _NI New number of control intervals. (using _N resulted in a strange error when compiling with cygwin!)
*
* \return SUCCESSFUL_RETURN
*/
returnValue setDimensions( uint _NX = 0,
uint _NU = 0,
uint _NP = 0,
uint _NI = 0,
uint _NOD = 0
);
/** Sets the variables dimensions (DAE).
*
* @param[in] _NX New number of differential states.
* @param[in] _NDX New number of differential states derivatives.
* @param[in] _NXA New number of algebraic states.
* @param[in] _NU New number of control inputs.
* @param[in] _NP New number of parameters.
* @param[in] _NI New number of control intervals.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setDimensions( uint _NX,
uint _NDX,
uint _NXA,
uint _NU,
uint _NP,
uint _NI,
uint _NOD
);
/** Returns number of differential states.
*
* \return Number of differential states
*/
uint getNX( ) const;
/** Returns number of algebraic states.
*
* \return Number of algebraic states
*/
uint getNXA( ) const;
/** Returns the number of differential states derivatives.
*
* \return The requested number of differential state derivatives
*/
uint getNDX( ) const;
/** Returns number of control inputs.
*
* \return Number of control inputs
*/
uint getNU( ) const;
/** Returns number of parameters.
*
* \return Number of parameters
*/
uint getNP( ) const;
/** Returns number of parameters.
*
* \return Number of parameters
*/
uint getNOD( ) const;
/** Returns number of control intervals.
*
* \return Number of control intervals
*/
uint getN( ) const;
void setNY( uint NY_ );
uint getNY( ) const;
void setNYN( uint NYN_ );
uint getNYN( ) const;
protected:
uint NX; /**< Number of differential states. */
uint NDX; /**< Number of differential states derivatives. */
uint NXA; /**< Number of algebraic states. */
uint NU; /**< Number of control inputs. */
uint NP; /**< Number of parameters. */
uint NOD; /**< Number of "online data" values. */
uint N; /**< Number of control intervals. */
uint NY; /**< Number of references/measurements, nodes 0,..., N - 1. */
uint NYN; /**< Number of references/measurements, node N. */
std::string commonHeaderName; /**< Name of common header file. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_ALGORITHM_HPP
// end of file.

View File

@ -0,0 +1,127 @@
/*
* 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/code_generation/export_algorithm_factory.hpp
* \author Milan Vukov
* \date 2012
* */
#ifndef ACADO_TOOLKIT_EXPORT_ALGORITHM_FACTORY_HPP
#define ACADO_TOOLKIT_EXPORT_ALGORITHM_FACTORY_HPP
#include <acado/code_generation/export_algorithm.hpp>
#include <acado/utils/acado_types.hpp>
#include <acado/utils/acado_message_handling.hpp>
#include <map>
BEGIN_NAMESPACE_ACADO
/** \brief Factory for creation of exported algorithms.
*
* Note that the class is implemented as a singleton
*
* \author Milan Vukov
* \date 2012 - 2013
* */
template
<
/** Base class, derived from ExportAlgorithm class. */
class AlgorithmBase,
/** Type identifier. */
typename AlgorithmType
>
class ExportAlgorithmFactory
{
public:
/** Helper type. */
typedef AlgorithmBase* (*exportAlgorithmCreator)(UserInteraction* _userInteraction, const std::string &_commonHeaderName);
/** Static creator function. */
static ExportAlgorithmFactory& instance()
{
static ExportAlgorithmFactory instance;
return instance;
}
/** Function for algorithm registration. */
bool registerAlgorithm( const AlgorithmType& id,
exportAlgorithmCreator creator)
{
bool status = associations_.insert(
typename idToProductMap::value_type(id, creator)).second;
if ( status == true )
return true;
return false;
}
/** Function to unregister an algorithm. */
bool unregisterAlgorithm( const AlgorithmType& id)
{
bool status = associations_.erase( id ) == 1;
if ( status == true )
return true;
return false;
}
/** Function to create an instance of an algorithm. */
AlgorithmBase* createAlgorithm( UserInteraction* _userInteraction,
const std::string& _commonHeaderName,
const AlgorithmType& id)
{
typename idToProductMap::const_iterator it = associations_.find( id );
if (it != associations_.end())
{
return (it->second)(_userInteraction, _commonHeaderName);
}
LOG( LVL_DEBUG ) << "Algorithm is not registered!" << std::endl;
return NULL;
}
private:
typedef std::map<AlgorithmType, exportAlgorithmCreator> idToProductMap;
idToProductMap associations_;
ExportAlgorithmFactory()
{}
ExportAlgorithmFactory(const ExportAlgorithmFactory&);
ExportAlgorithmFactory& operator=(const ExportAlgorithmFactory&);
~ExportAlgorithmFactory()
{}
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_ALGORITHM_FACTORY_HPP

View File

@ -0,0 +1,211 @@
/*
* 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/code_generation/export_argument.hpp
* \author Hans Joachim Ferreau, Boris Houska
*/
#ifndef ACADO_TOOLKIT_EXPORT_ARGUMENT_HPP
#define ACADO_TOOLKIT_EXPORT_ARGUMENT_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/matrix_vector/matrix_vector.hpp>
#include <acado/code_generation/export_data.hpp>
#include <acado/code_generation/export_index.hpp>
BEGIN_NAMESPACE_ACADO
class ExportArgumentInternal;
/**
* \brief Defines a matrix-valued variable that can be passed as argument to exported functions.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportArgument defines a matrix-valued variable that
* can be passed as argument to exported functions. By default, all entries
* of an arguments are undefined, but each of its component can be set to
* a fixed value if known beforehand.
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportArgument : public ExportData
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
ExportArgument( );
/** Constructor which takes the name, type
* and dimensions of the argument.
*
* @param[in] _name Name of the argument.
* @param[in] _nRows Number of rows of the argument.
* @param[in] _nCols Number of columns of the argument.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
* @param[in] _addressIdx If an address index is specified, not the argument itself but
* a pointer to this address within the memory of the argument is passed.
*/
ExportArgument( const std::string& _name,
uint _nRows = 1,
uint _nCols = 1,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callByValue = false,
const ExportIndex& _addressIdx = emptyConstExportIndex,
const std::string& _prefix = std::string()
);
/** Constructor which takes the name and type of the argument.
* Moreover, it initializes the argument with the dimensions and the
* values of the given matrix.
*
* @param[in] _name Name of the argument.
* @param[in] _data DMatrix used for initialization.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
* @param[in] _addressIdx If an address index is specified, not the argument itself but
* a pointer to this address within the memory of the argument is passed.
*/
ExportArgument( const std::string& _name,
const DMatrixPtr& _data,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callByValue = false,
const ExportIndex& _addressIdx = emptyConstExportIndex,
const std::string& _prefix = std::string()
);
ExportArgument( const DMatrix& _data
);
ExportArgumentInternal* operator->();
const ExportArgumentInternal* operator->() const;
/** Returns a copy of the argument with address index set to given location.
*
* @param[in] rowIdx Row index of the adress.
* @param[in] colIdx Column index of the adress.
*
* \return Copy of the argument with address index set to given location
*/
ExportArgument getAddress( const ExportIndex& _rowIdx,
const ExportIndex& _colIdx = emptyConstExportIndex
) const;
/** Returns a string containing the address of the argument to be called.
* If an address index has been set, the string contains a pointer to the
* desired location. The string also depends on whether the argument is
* to be called by value or not.
*
* \return String containing the address of the argument
*/
const std::string getAddressString( bool withDataStruct = true
) const;
/** Returns number of rows of the argument.
*
* \return Number of rows of the argument
*/
virtual uint getNumRows( ) const;
/** Returns number of columns of the argument.
*
* \return Number of columns of the argument
*/
virtual uint getNumCols( ) const;
/** Returns total dimension of the argument.
*
* \return Total dimension of the argument
*/
virtual uint getDim( ) const;
/** Returns whether all components of the argument are given.
*
* \return true iff all components of the argument have given values, \n
* false otherwise
*/
virtual bool isGiven( ) const;
/** Returns whether argument is to be called by value.
*
* \return true iff argument is to be called by value, \n
* false otherwise
*/
bool isCalledByValue( ) const;
/** Specifies to call argument by value.
*
* \return SUCCESSFUL_RETURN
*/
returnValue callByValue( );
/** Exports declaration of the argument into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] file Name of file to be used to export declaration.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
};
static const ExportArgument emptyConstExportArgument;
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_ARGUMENT_HPP
// end of file.

View File

@ -0,0 +1,220 @@
/*
* 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/code_generation/export_argument.hpp
* \author Hans Joachim Ferreau, Boris Houska
*/
#ifndef ACADO_TOOLKIT_EXPORT_ARGUMENT_INTERNAL_HPP
#define ACADO_TOOLKIT_EXPORT_ARGUMENT_INTERNAL_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/matrix_vector/matrix_vector.hpp>
#include <acado/code_generation/export_data_internal.hpp>
#include <acado/code_generation/export_index.hpp>
BEGIN_NAMESPACE_ACADO
class ExportArithmeticStatement;
class ExportIndex;
/**
* \brief Defines a matrix-valued variable that can be passed as argument to exported functions.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportArgumentInternal defines a matrix-valued variable that
* can be passed as argument to exported functions. By default, all entries
* of an arguments are undefined, but each of its component can be set to
* a fixed value if known beforehand.
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportArgumentInternal : public ExportDataInternal
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
ExportArgumentInternal( );
/** Constructor which takes the name and type of the argument.
* Moreover, it initializes the argument with the dimensions and the
* values of the given matrix.
*
* @param[in] _name Name of the argument.
* @param[in] _data DMatrix used for initialization.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
* @param[in] _addressIdx If an address index is specified, not the argument itself but
* a pointer to this address within the memory of the argument is passed.
*/
ExportArgumentInternal( const std::string& _name,
const DMatrixPtr& _data,
ExportType _type,
ExportStruct _dataStruct,
bool _callByValue,
const ExportIndex& _addressIdx,
const std::string& _prefix
);
/** Destructor. */
virtual ~ExportArgumentInternal( );
virtual ExportArgumentInternal* clone() const;
/** Deep copy data members. */
virtual void deepCopyMembers( std::map<CasADi::SharedObjectNode*, CasADi::SharedObject>& already_copied
);
/** Returns a copy of the argument with address index set to given location.
*
* @param[in] rowIdx Row index of the adress.
* @param[in] colIdx Column index of the adress.
*
* \return Copy of the argument with address index set to given location
*/
ExportArgument getAddress( const ExportIndex& rowIdx,
const ExportIndex& colIdx = emptyConstExportIndex
) const;
/** Returns a string containing the address of the argument to be called.
* If an address index has been set, the string contains a pointer to the
* desired location. The string also depends on whether the argument is
* to be called by value or not.
*
* \return std::string containing the address of the argument
*/
const std::string getAddressString( bool withDataStruct = true
) const;
/** Returns number of rows of the argument.
*
* \return Number of rows of the argument
*/
virtual uint getNumRows( ) const;
/** Returns number of columns of the argument.
*
* \return Number of columns of the argument
*/
virtual uint getNumCols( ) const;
/** Returns total dimension of the argument.
*
* \return Total dimension of the argument
*/
virtual uint getDim( ) const;
/** Returns whether all components of the argument are given.
*
* \return true iff all components of the argument have given values, \n
* false otherwise
*/
virtual bool isGiven( ) const;
/** Returns whether argument is to be called by value.
*
* \return true iff argument is to be called by value, \n
* false otherwise
*/
bool isCalledByValue( ) const;
/** Specifies to call argument by value.
*
* \return SUCCESSFUL_RETURN
*/
returnValue callByValue( );
/** Exports declaration of the argument into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export declaration.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
/** Returns column dimension of the argument.
*
* \return Column dimension of the argument
*/
virtual uint getColDim( ) const;
/** Returns total index of given component within memory.
*
* @param[in] rowIdx Row index of the component.
* @param[in] colIdx Column index of the component.
*
* \return Total index of given component
*/
virtual ExportIndex getTotalIdx( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
protected:
DMatrixPtr data; /**< DMatrix containing the values of each component of the argument
* (by default, all entries are undefined). */
ExportIndex addressIdx; /**< Address index in case not the argument itself but a pointer to
* this address within the memory of the argument is to be passed. */
bool callItByValue; /**< Flag indicating whether argument it to be called by value. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_ARGUMENT_INTERNAL_HPP
// end of file.

View File

@ -0,0 +1,220 @@
/*
* 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/code_generation/export_argument_list.hpp
* \author Hans Joachim Ferreau, Boris Houska
*/
#ifndef ACADO_TOOLKIT_EXPORT_ARGUMENT_LIST_HPP
#define ACADO_TOOLKIT_EXPORT_ARGUMENT_LIST_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_argument.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to store a list of calling arguments of an ExportFunction.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportArgumentList allows to store a list of calling
* arguments of an ExportFunction.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class ExportArgumentList
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/**< Default Constructor.
*/
ExportArgumentList( );
/** Constructor which takes up to nine calling arguments.
*
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*/
ExportArgumentList( const ExportArgument& _argument1,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportArgumentList( const ExportArgumentList& arg
);
/** Destructor.
*/
virtual ~ExportArgumentList( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportArgumentList& operator=( const ExportArgumentList& rhs
);
/** Adds up to nine calling arguments to the list.
*
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addArgument( const ExportArgument& _argument1,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Return number of calling arguments in list.
*
* \return Number of calling arguments
*/
uint getNumArguments( ) const;
/** Exports a code snippet containing all calling arguments of the list.
* Its appearance can can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export function.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Removes all calling arguments to yield an empty argument list.
*
* \return SUCCESSFUL_RETURN
*/
returnValue clear( );
/** Specifies to include variable types into calling arguments.
*
* \return SUCCESSFUL_RETURN
*/
returnValue doIncludeType( );
/** Specifies not to include variable types into calling arguments.
*
* \return SUCCESSFUL_RETURN
*/
returnValue doNotIncludeType( );
/** Get the list of arguments.
*
* \return Argument list
*/
const std::vector< ExportArgument >& get( ) const;
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
/** Adds a single calling arguments to the list.
*
* @param[in] _argument Calling argument.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addSingleArgument( const ExportArgument& _argument
);
//
// DATA MEMBERS:
//
protected:
/** Array containing all calling arguments. */
std::vector< ExportArgument > arguments;
/** Flag indicating whether variable types are to be included in calling arguments. */
bool includeType;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_ARGUMENT_LIST_HPP
/*
* end of file
*/

View File

@ -0,0 +1,218 @@
/*
* 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/code_generation/export_arithmetic_statement.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2010 - 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_ARITHMETIC_STATEMENT_HPP
#define ACADO_TOOLKIT_EXPORT_ARITHMETIC_STATEMENT_HPP
#include <acado/code_generation/export_statement.hpp>
#include <acado/code_generation/export_variable.hpp>
#include <acado/code_generation/memory_allocator.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export code of different arithmetic statements.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportArithmeticStatement allows to export code of different arithmetic
* statements of the form:
*
* lhs <op0> rhs1 <op1> rhs2 <op2> rhs3,
*
* where <op0> can be "=", "+=" or "-=",
* <op1> can be "+", "-" or "*" and
* <op2> can be "+" or "-".
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportArithmeticStatement : public ExportStatement
{
friend class ExportVariable;
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
ExportArithmeticStatement( );
/** Constructor which takes all expressions and operators of the arithmetic statement.
*
* @param[in] _lhs Left-hand side expressions
* @param[in] _op0 Operator between left- and right-hand side expression.
* @param[in] _rhs1 First right-hand side expression.
* @param[in] _op1 Operator between first and second right-hand side expression.
* @param[in] _rhs2 Second right-hand side expression of arithmetic statement.
* @param[in] _op2 Operator between second and third right-hand side expression.
* @param[in] _rhs3 Third right-hand side expression.
*/
ExportArithmeticStatement( const ExportVariable& _lhs,
ExportStatementOperator _op0,
const ExportVariable& _rhs1,
ExportStatementOperator _op1,
const ExportVariable& _rhs2,
ExportStatementOperator _op2 = ESO_UNDEFINED,
const ExportVariable& _rhs3 = 0
);
/** Destructor. */
virtual ~ExportArithmeticStatement( );
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Exports data declaration of the statement into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Exports source code of the statement into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
ExportArithmeticStatement& allocate( MemoryAllocatorPtr allocator );
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
/** Exports source code for an addition or subtraction to given file.
* Its appearance can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _sign std::string of the operation ("+" or "-").
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
returnValue exportCodeAddSubtract( std::ostream& stream,
const std::string& _sign = "+",
const std::string& _realString = "real_t",
const std::string& _intString = "int"
) const;
/** Exports source code for a multiplication to given file.
* Its appearance can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] transposeRhs1 Flag indicating whether rhs1 shall be transposed.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
returnValue exportCodeMultiply( std::ostream& stream,
bool transposeRhs1 = false,
const std::string& _realString = "real_t",
const std::string& _intString = "int"
) const;
/** Exports source code for an assignment to given file.
* Its appearance can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _op std::string of the assignment operation ("=", "+=" or "-=").
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
returnValue exportCodeAssign( std::ostream& stream,
const std::string& _op = "=",
const std::string& _realString = "real_t",
const std::string& _intString = "int"
) const;
protected:
// Refactor this guys as shared pointers
ExportVariable lhs; /**< Left-hand side expression of arithmetic statement. */
ExportVariable rhs1; /**< First right-hand side expression of arithmetic statement. */
ExportVariable rhs2; /**< Second right-hand side expression of arithmetic statement. */
ExportVariable rhs3; /**< Third right-hand side expression of arithmetic statement. */
ExportStatementOperator op0; /**< Operator between left- and right-hand side expression of arithmetic statement. */
ExportStatementOperator op1; /**< Operator between first and second right-hand side expression of arithmetic statement. */
ExportStatementOperator op2; /**< Operator between second and third right-hand side expression of arithmetic statement. */
MemoryAllocatorPtr memAllocator;
private:
std::string getAssignString( ) const;
uint getNumRows( ) const;
uint getNumCols( ) const;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_ARITHMETIC_STATEMENT_HPP
// end of file.

View File

@ -0,0 +1,96 @@
/*
* 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/code_generation/export_auxiliary_functions.hpp
* \author Milan Vukov
* \date 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_AUXILIARY_FUNCTIONS_HPP
#define ACADO_TOOLKIT_EXPORT_AUXILIARY_FUNCTIONS_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for generating some helper functions.
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportAuxiliaryFunctions
{
public:
/** Default constructor.
*
* @param[in] _moduleName Module name for customization.
** @param[in] _moduleName Module prefix for customization.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportAuxiliaryFunctions( const std::string& _headerFileName,
const std::string& _sourceFileName,
const std::string& _moduleName = "acado",
const std::string& _modulePrefix = "ACADO",
const std::string& _commonHeaderName = "",
const std::string& _realString = "double",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportAuxiliaryFunctions()
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( );
/** Export the interface. */
returnValue exportCode();
private:
ExportTemplatedFile source;
ExportTemplatedFile header;
std::string moduleName;
std::string modulePrefix;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_AUXILIARY_FUNCTIONS_HPP

View File

@ -0,0 +1,122 @@
/*
* 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/code_generation/export_cholesky_decomposition.hpp
* \author Milan Vukov
* \date 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_CHOLESKY_DECOMPOSITION_HPP
#define ACADO_TOOLKIT_EXPORT_CHOLESKY_DECOMPOSITION_HPP
#include <acado/code_generation/export_algorithm.hpp>
#include <acado/code_generation/export_function.hpp>
#include <acado/code_generation/export_variable.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for exporting a function for calculation of the
* Cholesky decomposition.
*
* \ingroup NumericalAlgorithms
*
* \author Milan Vukov
*/
class ExportCholeskyDecomposition: public ExportAlgorithm
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportCholeskyDecomposition( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor. */
virtual ~ExportCholeskyDecomposition()
{}
/** Initializes the different parameters of the linear solver that will be exported.
*
* \return SUCCESSFUL_RETURN
*/
returnValue init( const std::string& _name,
unsigned _dim,
bool _unrolling = false
);
/** Initializes code export into given file.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup();
/** Adds all data declarations of the auto-generated algorithm to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated algorithm to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated algorithm into the given directory.
*
* @param[in] code Code block containing the auto-generated algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Get name of the function that perform the decomposition. */
const std::string getName();
private:
ExportVariable A;
ExportFunction fcn;
bool unrolling;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_CHOLESKY_DECOMPOSITION_HPP

View File

@ -0,0 +1,90 @@
/*
* 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/code_generation/export_common_header.hpp
* \author Milan Vukov
* \date 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_COMMON_HEADER_HPP
#define ACADO_TOOLKIT_EXPORT_COMMON_HEADER_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Centralized place to export the common header for a generated module.
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportCommonHeader : public ExportTemplatedFile
{
public:
/** Default constructor.
*
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentstd::string std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportCommonHeader( const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportCommonHeader( )
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( const std::string& _moduleName,
const std::string& _modulePrefix,
bool _useSinglePrecision,
bool _useComplexArithmetic,
QPSolverName _qpSolver,
const std::map<std::string, std::pair<std::string, std::string> >& _options,
const std::string& _variables,
const std::string& _workspace,
const std::string& _functions
);
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_COMMON_HEADER_HPP

View File

@ -0,0 +1,194 @@
/*
* 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/code_generation/export_data.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
#ifndef ACADO_TOOLKIT_EXPORT_DATA_HPP
#define ACADO_TOOLKIT_EXPORT_DATA_HPP
#include <acado/utils/acado_utils.hpp>
#include <casadi/symbolic/shared_object.hpp>
BEGIN_NAMESPACE_ACADO
// Forward declaration
class ExportDataInternal;
/**
* \brief Abstract base class to define variables to be used for exporting code
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportData serves as an abstract base class to define variables
* to be used for exporting code.
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportData : public CasADi::SharedObject
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
ExportData( );
/** Destructor.
*/
virtual ~ExportData( );
/** An operator for access to functions and members of the node
*/
ExportDataInternal* operator->();
/** An operator for const access to functions and members of the node
*/
const ExportDataInternal* operator->() const;
/** Sets the name of the data object.
*
* @param[in] _name New name of the data object.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setName( const std::string& _name
);
/** Sets the data type of the data object.
*
* @param[in] _type New data type of the data object.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setType( ExportType _type
);
/** Sets the global data struct to which the data object belongs to.
*
* @param[in] _dataStruct New global data struct to which the data object belongs to.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setDataStruct( ExportStruct _dataStruct
);
/** Sets the prefix which is placed before the structure name.
*
* @param[in] _prefix Prefix name.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setPrefix( const std::string& _prefix
);
/** Returns the name of the data object.
*
* \return Name of the data object
*/
std::string getName( ) const;
/** Returns the data type of the data object.
*
* \return Data type of the data object
*/
ExportType getType( ) const;
/** Returns a string containing the data type of the data object.
*
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
*
* \return std::string containing the data type of the data object.
*/
std::string getTypeString( const std::string& _realString = "real_t",
const std::string& _intString = "int"
) const;
/** Returns the global data struct to which the data object belongs to.
*
* \return Global data struct to which the data object belongs to
*/
ExportStruct getDataStruct( ) const;
/** Returns a string containing the global data struct to which the data object belongs to.
*
* \return std::string containing the global data struct to which the data object belongs to.
*/
std::string getDataStructString( ) const;
/** Returns a string which contains a prefix name.
*
* \return Prefix name
*/
std::string getPrefix( ) const;
/** Returns the full name of the data object including the possible prefix
* of the global data struct.
*
* \return Full name of the data object
*/
std::string getFullName( ) const;
/** Exports declaration of the index variable. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export function.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Returns whether the index is set to a given value.
*
* \return true iff index is set to a given value, \n
* false otherwise
*/
virtual bool isGiven( );
virtual returnValue setDoc(const std::string& _doc);
virtual std::string getDoc() const;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_DATA_HPP
// end of file.

View File

@ -0,0 +1,146 @@
/*
* 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/code_generation/export_data_declaration.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 2010-2011
*/
#ifndef ACADO_TOOLKIT_EXPORT_DATA_DECLARATION_HPP
#define ACADO_TOOLKIT_EXPORT_DATA_DECLARATION_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_statement.hpp>
#include <acado/code_generation/export_variable.hpp>
#include <acado/code_generation/export_index.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export code containing variable declarations.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportDataDeclaration allows to export code containing variable
* declarations of different data types.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class ExportDataDeclaration : public ExportStatement
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
ExportDataDeclaration( );
/** Constructor taking the variable to be declared.
*
* @param[in] _data Variable to be declared.
*/
ExportDataDeclaration( const ExportVariable& _data
);
/** Constructor taking the index variable to be declared.
*
* @param[in] _data Index Variable to be declared.
*/
ExportDataDeclaration( const ExportIndex& _data
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportDataDeclaration( const ExportDataDeclaration& arg
);
/** Destructor.
*/
virtual ~ExportDataDeclaration( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportDataDeclaration& operator=( const ExportDataDeclaration& arg
);
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Exports source code of the statement into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] file Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
protected:
ExportData data; /**< Variable to be declared. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_DATA_DECLARATION_HPP
// end of file.

View File

@ -0,0 +1,201 @@
/*
* 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
*
*/
#ifndef ACADO_TOOLKIT_EXPORT_DATA_INTERNAL_HPP
#define ACADO_TOOLKIT_EXPORT_DATA_INTERNAL_HPP
#include <casadi/symbolic/shared_object.hpp>
#include <acado/utils/acado_utils.hpp>
BEGIN_NAMESPACE_ACADO
class ExportDataInternal : public CasADi::SharedObjectNode
{
public:
/** Default constructor which optionally takes name and type string
* of the data object.
*
* @param[in] _name Name of the data object.
* @param[in] _type Data type of the data object.
* @param[in] _dataStruct Global data struct to which the data object belongs to (if any).
* @param[in] _prefix Optional prefix that will be put in front of the name.
*/
explicit ExportDataInternal( const std::string& _name = std::string(),
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
const std::string& _prefix = std::string()
);
/** Destructor.
*/
virtual ~ExportDataInternal( );
virtual ExportDataInternal* clone() const = 0;
/** Sets the name of the data object.
*
* @param[in] _name New name of the data object.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setName( const std::string& _name
);
/** Sets the data type of the data object.
*
* @param[in] _type New data type of the data object.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setType( ExportType _type
);
/** Sets the global data struct to which the data object belongs to.
*
* @param[in] _dataStruct New global data struct to which the data object belongs to.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setDataStruct( ExportStruct _dataStruct
);
/** Sets the prefix which is placed before the structure name.
*
* @param[in] _prefix Prefix name.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setPrefix( const std::string& _prefix
);
/** Returns the name of the data object.
*
* \return Name of the data object
*/
std::string getName( ) const;
/** Returns the data type of the data object.
*
* \return Data type of the data object
*/
ExportType getType( ) const;
/** Returns a string containing the data type of the data object.
*
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
*
* \return std::string containing the data type of the data object.
*/
std::string getTypeString( const std::string& _realString = "real_t",
const std::string& _intString = "int"
) const;
/** Returns the global data struct to which the data object belongs to.
*
* \return Global data struct to which the data object belongs to
*/
ExportStruct getDataStruct( ) const;
/** Returns a string containing the global data struct to which the data object belongs to.
*
* \return String containing the global data struct to which the data object belongs to.
*/
std::string getDataStructString( ) const;
/** Returns a string which contains a prefix name.
*
* \return Prefix name
*/
std::string getPrefix( ) const;
/** Returns the full name of the data object including the possible prefix
* of the global data struct.
*
* \return Full name of the data object
*/
std::string getFullName( ) const;
/** Exports declaration of the index variable. Its appearance can
* can be adjusted by various options.
*
* @param[in] file Name of file to be used to export function.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const = 0;
/** Returns whether the index is set to a given value.
*
* \return true iff index is set to a given value, \n
* false otherwise
*/
virtual bool isGiven( ) const = 0;
virtual returnValue setDoc( const std::string& _doc );
virtual std::string getDoc( ) const;
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
returnValue setFullName( void );
protected:
/** Name of the data object. */
std::string name;
/** Data type of the data object. */
ExportType type;
/** Prefix, which is added before the structure name*/
std::string prefix;
/** Global data struct to which the data object belongs to (if any). */
ExportStruct dataStruct;
/** Full name of the data object including the possible prefix of the global data struct. */
std::string fullName;
/** Description of the variable */
std::string description;
public:
static std::string fcnPrefix;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_DATA_INTERNAL_HPP

View File

@ -0,0 +1,102 @@
/*
* 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/code_generation/export_exact_hessian_cn2.hpp
* \authors Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_EXACT_HESSIAN_CN2_HPP
#define ACADO_TOOLKIT_EXPORT_EXACT_HESSIAN_CN2_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
#include <acado/code_generation/export_gauss_newton_cn2.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief TBD
*
* \ingroup NumericalAlgorithms
*
* \authors Rien Quirynen
*
* \note Early experimental implementation
*/
class ExportExactHessianCN2 : public ExportGaussNewtonCN2
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportExactHessianCN2( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor. */
virtual ~ExportExactHessianCN2( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Setting up of a Hessian regularization routine */
virtual returnValue setupHessianRegularization( void );
protected:
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_EXACT_HESSIAN_CN2_HPP

View File

@ -0,0 +1,115 @@
/*
* 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/code_generation/export_gauss_newton_qpdunes.hpp
* \author Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_EXACT_HESSIAN_QPDUNES_HPP
#define ACADO_TOOLKIT_EXPORT_EXACT_HESSIAN_QPDUNES_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
#include <acado/code_generation/export_gauss_newton_qpdunes.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for export of an OCP solver using sparse QP solver qpDUNES
*
* \ingroup NumericalAlgorithms
*
* The class ExportExactHessianQpDunes allows export of an OCP solver using
* the generalized Exact-Hessian method. The underlying QP is solved using the
* structured sparse QP solver qpDUNES.
*
* \author Rien Quirynen
*/
class ExportExactHessianQpDunes : public ExportGaussNewtonQpDunes
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportExactHessianQpDunes( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor.
*/
virtual ~ExportExactHessianQpDunes( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Setting up of a Hessian regularization routine */
virtual returnValue setupHessianRegularization( void );
protected:
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_EXACT_HESSIAN_QPDUNES_HPP

View File

@ -0,0 +1,126 @@
/*
* 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/integrator/export_file.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 2010-2011
*/
#ifndef ACADO_TOOLKIT_EXPORT_FILE_HPP
#define ACADO_TOOLKIT_EXPORT_FILE_HPP
#include <acado/code_generation/export_statement_block.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export files containing automatically generated algorithms for fast model predictive control
*
* \ingroup NumericalAlgorithms
*
* The class ExportFile allows to export files containing automatically generated
* algorithms for fast model predictive control.
*
* \author Hans Joachim Ferreau, Milan Vukov, Boris Houska
*/
class ExportFile : public ExportStatementBlock
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
ExportFile( );
/** Standard constructor.
*
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*/
ExportFile( const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportFile( );
/** Setup routine.
*
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Exports the file containing the auto-generated code.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( ) const;
protected:
std::string fileName; /**< Name of exported file. */
std::string commonHeaderName; /**< Name of common header file. */
std::string realString; /**< std::string to be used to declare real variables. */
std::string intString; /**< std::string to be used to declare integer variables. */
int precision; /**< Number of digits to be used for exporting real values. */
std::string commentString; /**< std::string to be used for exporting comments. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_FILE_HPP
// end of file.

View File

@ -0,0 +1,205 @@
/*
* 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/code_generation/export_for_loop.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2010-2011
*/
#ifndef ACADO_TOOLKIT_EXPORT_FOR_LOOP_HPP
#define ACADO_TOOLKIT_EXPORT_FOR_LOOP_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_index.hpp>
#include <acado/code_generation/export_statement_block.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export code of a for-loop.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportForLoop allows to export code of a for-loop.
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportForLoop : public ExportStatementBlock
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor which optionally takes the name of the
* loop variable as well as other loop settings.
*
* @param[in] _loopVariable Name of the loop variable.
* @param[in] _startValue Start value of the loop counter.
* @param[in] _finalValue Final value of the loop counter.
* @param[in] _increment Increment of the loop counter.
* @param[in] _doLoopUnrolling Flag indicating whether loop shall be unrolled.
*/
ExportForLoop( const ExportIndex& _loopVariable = emptyConstExportIndex,
const ExportIndex& _startValue = emptyConstExportIndex,
const ExportIndex& _finalValue = emptyConstExportIndex,
const ExportIndex& _increment = constExportIndexValueOne,
bool _doLoopUnrolling = false
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportForLoop( const ExportForLoop& arg
);
/** Destructor.
*/
virtual ~ExportForLoop( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportForLoop& operator=( const ExportForLoop& arg
);
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Initializes for-loop with given loop settings.
*
* @param[in] _loopVariable Name of the loop variable.
* @param[in] _startValue Start value of the loop counter.
* @param[in] _finalValue Final value of the loop counter.
* @param[in] _increment Increment of the loop counter.
* @param[in] _doLoopUnrolling Flag indicating whether loop shall be unrolled.
*/
returnValue init( const ExportIndex& _loopVariable,
const ExportIndex& _startValue,
const ExportIndex& _finalValue,
const ExportIndex& _increment,
bool _doLoopUnrolling
);
/** Exports data declaration of the statement into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Exports source code of the statement into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] file Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Specifies to unroll for-loop.
*
* \return Reference to for-loop object
*/
ExportForLoop& unrollLoop( );
/** Specifies not to unroll for-loop.
*
* \return Loop-unrolled copy of for-loop object
*/
ExportForLoop& keepLoop( );
ExportForLoop& allocate(MemoryAllocatorPtr allocator);
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
/** Frees internal dynamic memory to yield an empty for-loop.
*
* \return SUCCESSFUL_RETURN
*/
returnValue clear( );
private:
returnValue sanityCheck( void ) const;
//
// DATA MEMBERS:
//
protected:
ExportIndex loopVariable; /**< Loop variable. */
ExportIndex startValue; /**< Start value of the loop counter. */
ExportIndex finalValue; /**< Final value of the loop counter. */
ExportIndex increment; /**< Increment of the loop counter. */
bool doLoopUnrolling; /**< Flag indicating whether loop shall be unrolled when exporting the code. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_FOR_LOOP_HPP
/*
* end of file
*/

View File

@ -0,0 +1,100 @@
/*
* 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/code_generation/export_forces_generator.hpp
* \author Milan Vukov
* \date 2012 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_FORCES_GENERATOR_HPP
#define ACADO_TOOLKIT_EXPORT_FORCES_GENERATOR_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Generator of the FORCES interface, the to, be called from MATLAB
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportForcesGenerator : public ExportTemplatedFile
{
public:
/** Default constructor.
*
* @param[in] _templateName Name of a template.
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportForcesGenerator( const std::string& _templateName,
const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportForcesGenerator( )
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( const unsigned _nx,
const unsigned _nu,
const unsigned _NN,
const std::vector< std::vector< unsigned > >& _lbIdx,
const std::vector< std::vector< unsigned > >& _ubIdx,
const std::vector< unsigned >& _AbDim,
const bool _constHessian,
const bool _diagHessian,
const bool _diagHessianN,
const bool _fixedInitialState,
const std::string& _solverName,
const unsigned _printLevel,
const unsigned _maxIterations,
const unsigned _parallel,
bool matlabGenerator,
bool warmStart
);
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_FORCES_GENERATOR_HPP

View File

@ -0,0 +1,91 @@
/*
* 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/code_generation/export_forces_interface.hpp
* \author Milan Vukov
* \date 2012
*/
#ifndef ACADO_TOOLKIT_EXPORT_FORCES_INTERFACE_HPP
#define ACADO_TOOLKIT_EXPORT_FORCES_INTERFACE_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for configuration and export for interface to the FORCES QP solver
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportForcesInterface : public ExportTemplatedFile
{
public:
/** Default constructor.
*
* @param[in] _templateName Name of a template.
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentstd::string std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportForcesInterface( const std::string& _templateName,
const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportForcesInterface( )
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( const std::string& _forcesHeader,
const std::string& _forcesParams,
const std::string& _forcesParamsObj,
const std::string& _forcesOutput,
const std::string& _forcesOutputObj,
const std::string& _forcesInfo,
const std::string& _forcesInfoObj
);
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_FORCES_INTERFACE_HPP

View File

@ -0,0 +1,303 @@
/*
* 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/code_generation/export_function.hpp
* \authors Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2010 - 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_FUNCTION_HPP
#define ACADO_TOOLKIT_EXPORT_FUNCTION_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_variable.hpp>
#include <acado/code_generation/export_argument_list.hpp>
#include <acado/code_generation/export_statement_block.hpp>
#include <acado/code_generation/export_statement_string.hpp>
#include <acado/code_generation/memory_allocator.hpp>
#include <memory>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export code of an arbitrary function.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportFunction allows to export code of an arbitrary function.
*
*/
class ExportFunction : public ExportStatementBlock
{
public:
/** Default constructor which optionally takes the name of the function
* as well as possible calling arguments.
*
* @param[in] _name Name of the function.
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*/
ExportFunction( const std::string& _name = "defaultFunctionName",
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Destructor.
*/
virtual ~ExportFunction( );
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Initializes function with given name and possible calling arguments.
*
* @param[in] _name Name of the function.
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*
* \return SUCCESSFUL_RETURN
*/
returnValue init( const std::string& _name = "defaultFunctionName",
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Initializes function with given name and possible calling arguments.
*
* @param[in] _name Name of the function.
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*
* \return Reference to initialized object
*/
ExportFunction& setup( const std::string& _name = "defaultFunctionName",
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Adds up to nine calling arguments to the function.
*
* @param[in] _name Name of the function.
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addArgument( const ExportArgument& _argument1,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Assigns a return value to the function (by default, its return value is void).
*
* @param[in] _functionReturnValue New return value of the function.
* @param[in] _returnAsPointer Flag indicating whether value shall be returned as pointer.
*
* \return SUCCESSFUL_RETURN
*/
ExportFunction& setReturnValue( const ExportVariable& _functionReturnValue,
bool _returnAsPointer = false
);
/** Sets the name of the function. */
ExportFunction& setName(const std::string& _name);
/** Returns the name of the function. */
std::string getName( ) const;
/** Exports data declaration of the function into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] file Name of file to be used to export function.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Exports forward declaration of the function into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportForwardDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Exports source code of the function into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export function.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Returns whether function has been defined.
*
* \return true iff function has been defined, \n
* false otherwise
*/
virtual bool isDefined( ) const;
/** Return number of calling arguments of the function. */
unsigned getNumArguments( ) const;
/** Add a new index (local) index to the function */
ExportFunction& addIndex( const ExportIndex& _index );
/** Add a new index (local) variable to the function. */
ExportFunction& addVariable( const ExportVariable& _var );
/** Acquire a local variable. */
virtual ExportFunction& acquire( ExportIndex& obj );
/** Release a local variable. */
virtual ExportFunction& release( const ExportIndex& obj );
/** Set a documentation string. */
virtual ExportFunction& doc( const std::string& _doc );
/** Set the function as private. If this is true, then do not export it's declaration. */
virtual ExportFunction& setPrivate( bool _set = true );
/** Is function private? */
virtual bool isPrivate() const;
protected:
/** Frees internal dynamic memory to yield an empty function.
*
* \return SUCCESSFUL_RETURN
*/
returnValue clear( );
/** Name of the function. */
std::string name;
/** A description string. */
std::string description;
/** List of calling arguments. */
ExportArgumentList functionArguments;
/** Return value of the function. */
ExportVariable retVal;
/** Flag indicating whether value shall be returned as pointer. */
bool returnAsPointer;
/** Memory allocator */
MemoryAllocatorPtr memAllocator;
/** Array of local variables. */
std::vector< ExportVariable > localVariables;
/** Private flag. In principle if this guy is true, do not export function declaration. */
bool flagPrivate;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_FUNCTION_HPP

View File

@ -0,0 +1,249 @@
/*
* 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/code_generation/export_function_call.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 2010-2011
*/
#ifndef ACADO_TOOLKIT_EXPORT_FUNCTION_CALL_HPP
#define ACADO_TOOLKIT_EXPORT_FUNCTION_CALL_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_statement.hpp>
#include <acado/code_generation/export_function.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export code of a function call.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportFunctionCall allows to export code of a function call.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class ExportFunctionCall : public ExportStatement
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor which optionally takes the name of the function
* to be called as well as possible calling arguments.
*
* @param[in] _name Name of the function to be called.
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*/
ExportFunctionCall( const std::string& _name = "acadoFcn",
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Constructor which optionally takes the function to be called
* as well as possible calling arguments.
*
* @param[in] _f Function to be called.
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*/
ExportFunctionCall( const ExportFunction& _f,
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportFunctionCall( const ExportFunctionCall& arg
);
/** Destructor.
*/
virtual ~ExportFunctionCall( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportFunctionCall& operator=( const ExportFunctionCall& arg
);
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Initializes function call with given name of the function and possible calling arguments.
*
* @param[in] _name Name of the function to be called.
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*
* \return SUCCESSFUL_RETURN
*/
returnValue init( const std::string& _name = "defaultFunctionName",
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Initializes function call with function to be called and possible calling arguments.
*
* @param[in] _f Function to be called.
* @param[in] _argument1 Calling argument no. 1.
* @param[in] _argument2 Calling argument no. 2.
* @param[in] _argument3 Calling argument no. 3.
* @param[in] _argument4 Calling argument no. 4.
* @param[in] _argument5 Calling argument no. 5.
* @param[in] _argument6 Calling argument no. 6.
* @param[in] _argument7 Calling argument no. 7.
* @param[in] _argument8 Calling argument no. 8.
* @param[in] _argument9 Calling argument no. 9.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INVALID_CALL_TO_EXPORTED_FUNCTION
*/
returnValue init( const ExportFunction& _f,
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Exports source code of the function call into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export function call.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN, \n
* RET_MEMBER_NOT_INITIALISED
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
/** Frees internal dynamic memory to yield an empty function call.
*
* \return SUCCESSFUL_RETURN
*/
returnValue clear( );
/** Sets the name of the function to be called.
*
* @param[in] _name New name of the function to be called.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setName( const std::string& _name
);
protected:
std::string name; /**< Name of function to be called. */
ExportArgumentList functionArguments; /**< List of calling arguments. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_STATEMENT_HPP
// end of file.

View File

@ -0,0 +1,109 @@
/*
* 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/code_generation/export_function_declaration.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2010 - 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_FUNCTION_DECLARATION_HPP
#define ACADO_TOOLKIT_EXPORT_FUNCTION_DECLARATION_HPP
#include <acado/code_generation/export_statement.hpp>
#include <acado/code_generation/export_function.hpp>
#include <acado/code_generation/export_acado_function.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export code containing function (forward) declarations.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportDataDeclaration allows to export code containing function
* (forward) declarations.
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportFunctionDeclaration : public ExportStatement
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Constructor taking the function to be declared.
*
* @param[in] _f Function to be declared.
*/
ExportFunctionDeclaration( const ExportFunction& _f
);
/** Constructor taking the ODE function to be declared.
*
* @param[in] _f ODE function to be declared.
*/
ExportFunctionDeclaration( const ExportAcadoFunction& _f
);
/** Destructor.
*/
virtual ~ExportFunctionDeclaration( );
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Exports source code of the statement into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
private:
ExportFunctionDeclaration( );
const ExportFunction& f;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_FUNCTION_DECLARATION_HPP

View File

@ -0,0 +1,176 @@
/*
* 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/code_generation/export_gauss_newton_block_cn2.hpp
* \authors Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_CN2_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_CN2_HPP
#include <acado/code_generation/export_gauss_newton_cn2.hpp>
BEGIN_NAMESPACE_ACADO
class ExportQpDunesInterface;
/**
* \brief An OCP solver based on the block N^2 condensing algorithm.
*
* \ingroup NumericalAlgorithms
*
* \authors Rien Quirynen
*
* \note Still a limited experimental version
*/
class ExportGaussNewtonBlockCN2 : public ExportGaussNewtonCN2
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonBlockCN2( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor. */
virtual ~ExportGaussNewtonBlockCN2( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
) = 0;
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
unsigned getNumQPvars( ) const;
uint getBlockSize( ) const;
uint getNumberOfBlocks( ) const;
uint getNumBlockVariables( ) const;
virtual unsigned getNumStateBoundsPerBlock( ) const;
protected:
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( );
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( ) = 0;
virtual returnValue setupQPInterface( ) = 0;
virtual returnValue setupCondensing( );
protected:
ExportIndex blockI;
std::vector< unsigned > qpConDim;
ExportVariable qpgN;
ExportVariable qpH;
ExportVariable qpC;
ExportVariable qpc;
ExportVariable qpLb0, qpUb0;
ExportVariable qpLambda, qpMu;
ExportFunction cleanup;
ExportFunction shiftQpData;
ExportFunction evaluateConstraints;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_CN2_HPP

View File

@ -0,0 +1,142 @@
/*
* 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/code_generation/export_gauss_newton_block_forces.hpp
* \authors Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_FORCES_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_FORCES_HPP
#include <acado/code_generation/export_gauss_newton_block_cn2.hpp>
#include <acado/code_generation/export_forces_interface.hpp>
#include <acado/code_generation/export_forces_generator.hpp>
BEGIN_NAMESPACE_ACADO
class ExportQpDunesInterface;
/**
* \brief An OCP solver based on the block N^2 condensing algorithm, in combination with qpDUNES as the QP solver.
*
* \ingroup NumericalAlgorithms
*
* \authors Rien Quirynen
*
* \note Still a limited experimental version
*/
class ExportGaussNewtonBlockForces : public ExportGaussNewtonBlockCN2
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonBlockForces( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor. */
virtual ~ExportGaussNewtonBlockForces( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
protected:
virtual returnValue setupCondensing( );
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( );
virtual returnValue setupQPInterface( );
protected:
/** \name QP interface */
/** @{ */
std::string qpModuleName;
std::string qpObjPrefix;
/** @} */
std::vector< ExportVariable > objHessians;
std::vector< ExportVariable > objGradients;
std::vector< ExportVariable > conLB;
std::vector< ExportVariable > conUB;
std::vector< std::vector< unsigned > > conLBIndices, conUBIndices;
std::vector< ExportVariable > conA, conAB;
ExportFunction evaluateAffineConstraints;
std::vector< unsigned > conABDimensions;
std::vector< ExportVariable > conC;
std::vector< ExportVariable > cond;
/** FORCES interface object. */
std::shared_ptr< ExportForcesInterface > qpInterface;
std::shared_ptr< ExportForcesGenerator > qpGenerator;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_QPDUNES_HPP

View File

@ -0,0 +1,105 @@
/*
* 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/code_generation/export_gauss_newton_block_qpdunes.hpp
* \authors Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_QPDUNES_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_QPDUNES_HPP
#include <acado/code_generation/export_gauss_newton_block_cn2.hpp>
#include <acado/code_generation/export_split_qpdunes_interface.hpp>
BEGIN_NAMESPACE_ACADO
class ExportQpDunesInterface;
/**
* \brief An OCP solver based on the block N^2 condensing algorithm, in combination with qpDUNES as the QP solver.
*
* \ingroup NumericalAlgorithms
*
* \authors Rien Quirynen
*
* \note Still a limited experimental version
*/
class ExportGaussNewtonBlockQpDunes : public ExportGaussNewtonBlockCN2
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonBlockQpDunes( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor. */
virtual ~ExportGaussNewtonBlockQpDunes( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
protected:
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( );
virtual returnValue setupQPInterface( );
protected:
/** qpDUNES interface object. */
std::shared_ptr< ExportSplitQpDunesInterface > qpInterface;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_BLOCK_QPDUNES_HPP

View File

@ -0,0 +1,259 @@
/*
* 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/code_generation/export_gauss_newton_cn2.hpp
* \authors Milan Vukov, Joel Andersson, Rien Quirynen
* \date 2013 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CN2_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CN2_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief An OCP solver based on the N^2 condensing algorithm
*
* \ingroup NumericalAlgorithms
*
* \authors Milan Vukov, Joel Andersson
*
* \note Still a limited experimental version
*/
class ExportGaussNewtonCN2 : public ExportNLPSolver
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonCN2( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor. */
virtual ~ExportGaussNewtonCN2( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
unsigned getNumQPvars( ) const;
/** Returns number of bounds on differential states.
*
* \return Number of bounds on differential states
*/
virtual unsigned getNumStateBounds( ) const;
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( );
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( );
virtual returnValue setupQPInterface( );
virtual returnValue setupCondensing( );
bool performFullCondensing( ) const;
protected:
ExportFunction evaluateObjective;
ExportVariable x0, Dx0;
ExportFunction setObjQ1Q2;
ExportFunction setObjR1R2;
ExportFunction setObjS1;
ExportFunction setObjQN1QN2;
/** Variable containing the QP Hessian matrix. */
ExportVariable H;
/** Variable containing the QP constraint matrix. */
ExportVariable A;
/** Variable containing the QP gradient. */
ExportVariable g;
/** Variable containing the lower limits on QP variables. */
ExportVariable lb;
/** Variable containing the upper limits on QP variables. */
ExportVariable ub;
/** Variable containing lower limits on QP constraints. */
ExportVariable lbA;
/** Variable containing upper limits on QP constraints. */
ExportVariable ubA;
/** Variable containing the primal QP variables. */
ExportVariable xVars;
/** Variable containing the dual QP variables. */
ExportVariable yVars;
std::vector< unsigned > xBoundsIdx;
ExportVariable lbValues, ubValues;
ExportVariable lbAValues, ubAValues;
ExportFunction condensePrep;
ExportFunction condenseFdb;
ExportFunction expand;
ExportVariable C, E, QDy, Qd;
ExportFunction multGxd;
ExportFunction moveGxT;
ExportFunction multGxGx;
ExportFunction multGxGu;
ExportFunction moveGuE;
ExportFunction copyHTH;
ExportFunction copyHTH1;
ExportFunction multQ1d;
ExportFunction multQN1d;
ExportFunction multRDy;
ExportFunction multQDy;
ExportFunction multEQDy;
ExportFunction multQETGx;
ExportFunction multEDu;
ExportFunction multQ1Gx;
ExportFunction multQN1Gx;
ExportFunction multQ1Gu;
ExportFunction multQN1Gu;
ExportFunction multHxC;
ExportFunction multHxE;
ExportFunction macHxd;
/** \name Contraint evaluation variables */
/** @{ */
ExportVariable A10;
ExportVariable A20;
ExportVariable pacA01Dx0;
ExportVariable pocA02Dx0;
/** @} */
ExportFunction preparation;
ExportFunction feedback;
ExportFunction getKKT;
//
// N2 condensing related
//
ExportVariable T1, T2, W1, W2;
ExportVariable sbar, w1, w2;
ExportFunction multBTW1, macBTW1_R1, multGxTGu, macQEW2, mac_S1T_E;
ExportFunction macATw1QDy, macBTw1, macQSbarW2, macASbar, macS1TSbar;
ExportFunction expansionStep;
// lagrange multipliers
ExportFunction expansionStep2;
// H00 and H10 computations
ExportFunction mult_BT_T1, mac_ST_C, multGxTGx, macGxTGx;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CN2_HPP

View File

@ -0,0 +1,278 @@
/*
* 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/code_generation/export_gauss_newton_cn2_factorization.hpp
* \authors Milan Vukov
* \date 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CN2_FACTORIZATION_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CN2_FACTORIZATION_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
#include <acado/code_generation/linear_solvers/export_cholesky_solver.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief TBD
*
* \ingroup NumericalAlgorithms
*
* \authors Milan Vukov
*
* \note Early experimental implementation
*/
class ExportGaussNewtonCn2Factorization : public ExportNLPSolver
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonCn2Factorization( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor. */
virtual ~ExportGaussNewtonCn2Factorization( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
unsigned getNumQPvars( ) const;
/** Returns number of bounds on differential states.
*
* \return Number of bounds on differential states
*/
virtual unsigned getNumStateBounds( ) const;
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( );
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( );
virtual returnValue setupQPInterface( );
virtual returnValue setupCondensing( );
bool performFullCondensing( ) const;
protected:
ExportFunction evaluateObjective;
ExportVariable x0, Dx0;
ExportFunction setObjQ1Q2;
ExportFunction setObjR1R2;
ExportFunction setObjQN1QN2;
/** Variable containing the QP Hessian matrix. */
ExportVariable H, H00, H10, H11;
/** Variable containing factorization of the QP Hessian matrix; R' * R = H. */
ExportVariable U;
/** Variable containing the QP constraint matrix. */
ExportVariable A;
/** Variable containing the QP gradient. */
ExportVariable g, g0, g1;
/** Variable containing the lower limits on QP variables. */
ExportVariable lb;
/** Variable containing the upper limits on QP variables. */
ExportVariable ub;
/** Variable containing lower limits on QP constraints. */
ExportVariable lbA;
/** Variable containing upper limits on QP constraints. */
ExportVariable ubA;
/** Variable containing the primal QP variables. */
ExportVariable xVars;
/** Variable containing the dual QP variables. */
ExportVariable yVars;
std::vector< unsigned > xBoundsIdxRev, xBoundsIdx;
ExportVariable lbValues, ubValues;
ExportVariable lbAValues, ubAValues;
ExportVariable Qd;
ExportFunction condensePrep;
ExportFunction condenseFdb;
ExportFunction expand;
ExportVariable E, QE, QGx, QDy;
ExportFunction multGxd;
ExportFunction moveGxT;
ExportFunction multGxGx;
ExportFunction multGxGu;
ExportFunction moveGuE;
ExportFunction setBlockH11;
ExportFunction zeroBlockH11;
ExportFunction copyHTH;
ExportFunction multQ1d;
ExportFunction multQN1d;
ExportFunction multRDy;
ExportFunction multQDy;
ExportFunction multEQDy;
ExportFunction multQETGx;
ExportFunction zeroBlockH10;
ExportFunction multEDu;
ExportFunction multQ1Gx;
ExportFunction multQN1Gx;
ExportFunction multQ1Gu;
ExportFunction multQN1Gu;
ExportFunction zeroBlockH00;
ExportFunction multCTQC;
ExportVariable A10;
ExportVariable A20;
ExportVariable pacA01Dx0;
ExportVariable pocA02Dx0;
ExportFunction multHxC;
ExportFunction multHxE;
ExportFunction macHxd;
ExportFunction macCTSlx;
ExportFunction macETSlu;
ExportFunction preparation;
ExportFunction feedback;
ExportFunction getKKT;
// N2 condensing related
ExportVariable W1, W2;
ExportVariable sbar, w1, w2;
ExportFunction mult_H_W2T_W3, mac_H_W2T_W3_R, mac_W3_G_W1T_G;
ExportFunction multBTW1, macBTW1_R1, multGxTGu, macQEW2;
ExportFunction macATw1QDy, macBTw1, macQSbarW2, macASbar, macASbarD2;
ExportFunction expansionStep;
ExportCholeskySolver cholSolver;
ExportFunction mac_R_T2_B_D;
ExportFunction move_D_U;
ExportFunction mult_L_E_U;
ExportFunction updateQ;
ExportFunction mul_T2_A_L;
ExportFunction mult_BT_T1_T2;
ExportVariable D, L;
ExportVariable T1, T2, T3, F;
ExportFunction mac_R_BT_F_D, mult_FT_A_L;
ExportFunction updateQ2;
ExportFunction mac_W1_T1_E_F;
ExportFunction move_GxT_T3;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CN2_FACTORIZATION_HPP

View File

@ -0,0 +1,280 @@
/*
* 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/code_generation/export_gauss_newton_condensed.hpp
* \authors Boris Houska, Hans Joachim Ferreau, Milan Vukov
* \date 2010 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CONDENSED_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CONDENSED_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
#include <acado/code_generation/linear_solvers/export_cholesky_solver.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for export of Gauss-Newton condensed OCP solver
*
* \ingroup NumericalAlgorithms
*
* The class ExportGaussNewtonCondensed allows to export an OCP solver
* using the generalized Gauss-Newton method. The sparse QP is condensed
* and solved with qpOASES QP solver.
*
* \authors Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportGaussNewtonCondensed : public ExportNLPSolver
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonCondensed( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor.
*/
virtual ~ExportGaussNewtonCondensed( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
unsigned getNumQPvars( ) const;
/** Returns number of bounds on differential states.
*
* \return Number of bounds on differential states
*/
virtual unsigned getNumStateBounds( ) const;
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( );
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( );
/** Setup qpOASES interface. */
virtual returnValue setupQPInterface( );
/** Setup condensing routine variables and functions. */
virtual returnValue setupCondensing( );
/** Indicator for full condensing. */
bool performFullCondensing( ) const;
private:
/** Current state feedback. */
ExportVariable x0;
/** Current state feedback deviation. */
ExportVariable Dx0;
/** \name Objective evaluation */
/** @{ */
ExportFunction evaluateObjective;
ExportFunction setObjQ1Q2;
ExportFunction setObjR1R2;
ExportFunction setObjQN1QN2;
/** @} */
/** \name Condensing functions and variables */
/** @{ */
ExportFunction condensePrep;
ExportFunction condenseFdb;
ExportFunction expand;
ExportVariable T, E, QE, QGx, QDy, Qd;
ExportVariable H00, H10, H11;
ExportVariable g0, g1;
ExportCholeskySolver cholSolver;
std::vector< unsigned > xBoundsIdx;
ExportVariable lbValues, ubValues;
ExportVariable lbAValues, ubAValues;
/** @} */
/** \name Helper functions */
/** @{ */
ExportFunction multGxd;
ExportFunction moveGxT;
ExportFunction multGxGx;
ExportFunction multGxGu;
ExportFunction moveGuE;
ExportFunction setBlockH11;
ExportFunction setBlockH11_R1;
ExportFunction zeroBlockH11;
ExportFunction copyHTH;
ExportFunction multQ1d;
ExportFunction multQN1d;
ExportFunction multRDy;
ExportFunction multQDy;
ExportFunction multEQDy;
ExportFunction multQETGx;
ExportFunction zeroBlockH10;
ExportFunction multEDu;
ExportFunction multQ1Gx;
ExportFunction multQN1Gx;
ExportFunction multQ1Gu;
ExportFunction multQN1Gu;
ExportFunction zeroBlockH00;
ExportFunction multCTQC;
ExportFunction macCTSlx;
ExportFunction macETSlu;
ExportFunction multHxC;
ExportFunction multHxE;
ExportFunction macHxd;
/** @} */
/** \name Contraint evaluation variables */
/** @{ */
ExportVariable A10;
ExportVariable A20;
ExportVariable pacA01Dx0;
ExportVariable pocA02Dx0;
/** @} */
/** \name RTI related */
/** @{ */
ExportFunction preparation;
ExportFunction feedback;
ExportFunction getKKT;
/** @} */
/** \name Covariance calculation varibables and functions */
/** @{ */
ExportVariable CEN, sigmaTmp, sigma, sigmaN;
ExportFunction calculateCovariance;
/** @} */
/** \name qpOASES interface variables */
/** @{ */
/** Variable containing the QP Hessian matrix. */
ExportVariable H;
/** Variable containing factorization of the QP Hessian matrix; R' * R = H. */
ExportVariable R;
/** Variable containing the QP constraint matrix. */
ExportVariable A;
/** Variable containing the QP gradient. */
ExportVariable g;
/** Variable containing the lower limits on QP variables. */
ExportVariable lb;
/** Variable containing the upper limits on QP variables. */
ExportVariable ub;
/** Variable containing lower limits on QP constraints. */
ExportVariable lbA;
/** Variable containing upper limits on QP constraints. */
ExportVariable ubA;
/** Variable containing the primal QP variables. */
ExportVariable xVars;
/** Variable containing the dual QP variables. */
ExportVariable yVars;
/** @} */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_CONDENSED_HPP

View File

@ -0,0 +1,227 @@
/*
* 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/code_generation/export_gauss_newton_forces.hpp
* \author Milan Vukov
* \date 2012 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_FORCES_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_FORCES_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
BEGIN_NAMESPACE_ACADO
class ExportForcesInterface;
class ExportForcesGenerator;
/**
* \brief A class for export of an OCP solver using sparse QP solver FORCES
*
* \ingroup NumericalAlgorithms
*
* The class ExportGaussNewtonForces allows export of and OCP solver using
* the generalized Gauss-Newton method. The underlying QP is solved using the
* structured sparse QP solver FORCES.
*
* \author Milan Vukov
*/
class ExportGaussNewtonForces : public ExportNLPSolver
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonForces( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor.
*/
virtual ~ExportGaussNewtonForces( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
unsigned getNumQPvars( ) const;
unsigned getNumLowerBounds( ) const;
unsigned getNumUpperBounds( ) const;
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( );
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( );
virtual returnValue setupQPInterface( );
private:
/** Current state feedback. */
ExportVariable x0;
/** \name Objective evaluation */
/** @{ */
ExportFunction evaluateObjective;
std::vector< ExportVariable > objHessians;
std::vector< ExportVariable > objGradients;
ExportFunction setStageH;
ExportFunction setStagef;
ExportFunction setObjQ1Q2;
ExportFunction setObjR1R2;
ExportFunction setObjQN1QN2;
ExportFunction setObjS1;
bool diagH;
bool diagHN;
/** @} */
/** \name Constraint evaluation */
/** @{ */
std::vector< ExportVariable > conLB;
std::vector< ExportVariable > conUB;
ExportVariable lbValues, ubValues;
unsigned numLB;
unsigned numUB;
std::vector< std::vector< unsigned > > conLBIndices, conUBIndices;
std::vector< unsigned > conABDimensions;
std::vector< std::vector< double > > conLBValues, conUBValues;
ExportFunction evaluateConstraints;
ExportFunction conSetGxGu;
ExportVariable conStageC;
std::vector< ExportVariable > conC;
std::vector< ExportVariable > cond;
ExportFunction conSetd;
/** @} */
/** \name RTI related */
/** @{ */
ExportFunction preparation;
ExportFunction feedback;
ExportFunction getKKT;
/** @} */
/** \name Helper functions */
/** @{ */
ExportFunction acc;
/** @} */
/** \name QP interface */
/** @{ */
std::string qpModuleName;
std::string qpObjPrefix;
std::shared_ptr< ExportForcesInterface > qpInterface;
std::shared_ptr< ExportForcesGenerator > qpGenerator;
/** @} */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_FORCES_HPP

View File

@ -0,0 +1,212 @@
/*
* 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/code_generation/export_gauss_newton_generic.hpp
* \author Rien Quirynen
* \date 2017
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_GENERIC_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_GENERIC_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief TBD
*
* \ingroup NumericalAlgorithms
*
* TBD
*
* \author Milan Vukov
*/
class ExportGaussNewtonGeneric : public ExportNLPSolver
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonGeneric( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor.
*/
virtual ~ExportGaussNewtonGeneric( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
unsigned getNumQPvars( ) const;
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( );
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( );
private:
/** Current state feedback. */
ExportVariable x0;
/** \name Objective evaluation */
/** @{ */
ExportFunction evaluateObjective;
ExportFunction setStagef;
ExportFunction setObjQ1Q2;
ExportFunction setObjR1R2;
ExportFunction setObjS1;
ExportFunction setObjQN1QN2;
/** @} */
/** \name Constraint evaluation */
/** @{ */
ExportFunction evaluateConstraints;
ExportFunction setStagePac;
unsigned qpDimHtot;
unsigned qpDimH;
unsigned qpDimHN;
std::vector< unsigned > qpConDim;
/** @} */
/** \name RTI related */
/** @{ */
ExportFunction preparation;
ExportFunction feedback;
ExportFunction getKKT;
/** @} */
/** \name Helper functions */
/** @{ */
ExportFunction acc;
/** @} */
/** \name QP interface */
/** @{ */
ExportVariable qpQ, qpQf, qpS, qpR;
ExportVariable qpq, qpqf, qpr;
ExportVariable qpx, qpu;
ExportVariable evLbValues, evUbValues;
ExportVariable evLbAValues, evUbAValues;
ExportVariable qpLb, qpUb;
ExportVariable qpLbA, qpUbA;
ExportVariable sigmaN;
ExportVariable qpLambda, qpMu, qpSlacks;
ExportVariable nIt;
// ExportVariable qpWork;
/** @} */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_GENERIC_HPP

View File

@ -0,0 +1,217 @@
/*
* 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/code_generation/export_gauss_newton_hpmpc.hpp
* \author Milan Vukov, Niels van Duijkeren
* \date 2016
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_HPMPC_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_HPMPC_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
BEGIN_NAMESPACE_ACADO
class ExportHpmpcInterface;
/**
* \brief TBD
*
* \ingroup NumericalAlgorithms
*
* TBD
*
* \author Milan Vukov
*/
class ExportGaussNewtonHpmpc : public ExportNLPSolver
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonHpmpc( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor.
*/
virtual ~ExportGaussNewtonHpmpc( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
unsigned getNumQPvars( ) const;
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( );
/** Exports source code containing the evaluation routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupEvaluation( );
virtual returnValue setupQPInterface( );
private:
/** Current state feedback. */
ExportVariable x0;
/** \name Objective evaluation */
/** @{ */
ExportFunction evaluateObjective;
ExportFunction setStagef;
ExportFunction setObjQ1Q2;
ExportFunction setObjR1R2;
ExportFunction setObjS1;
ExportFunction setObjQN1QN2;
/** @} */
/** \name Constraint evaluation */
/** @{ */
ExportFunction evaluateConstraints;
ExportFunction setStagePac;
unsigned qpDimHtot;
unsigned qpDimH;
unsigned qpDimHN;
std::vector< unsigned > qpConDim;
/** @} */
/** \name RTI related */
/** @{ */
ExportFunction preparation;
ExportFunction feedback;
ExportFunction getKKT;
/** @} */
/** \name Helper functions */
/** @{ */
ExportFunction acc;
/** @} */
/** \name QP interface */
/** @{ */
ExportVariable qpQ, qpQf, qpS, qpR;
ExportVariable qpq, qpqf, qpr;
ExportVariable qpx, qpu;
ExportVariable evLbValues, evUbValues;
ExportVariable qpLb, qpUb;
ExportVariable qpLbA, qpUbA;
ExportVariable sigmaN;
ExportVariable qpLambda, qpMu, qpSlacks;
ExportVariable nIt;
// ExportVariable qpWork;
std::shared_ptr< ExportHpmpcInterface > qpInterface;
/** @} */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_HPMPC_HPP

View File

@ -0,0 +1,222 @@
/*
* 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/code_generation/export_gauss_newton_qpdunes.hpp
* \author Milan Vukov
* \date 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_QPDUNES_HPP
#define ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_QPDUNES_HPP
#include <acado/code_generation/export_nlp_solver.hpp>
BEGIN_NAMESPACE_ACADO
class ExportQpDunesInterface;
/**
* \brief A class for export of an OCP solver using sparse QP solver qpDUNES
*
* \ingroup NumericalAlgorithms
*
* The class ExportGaussNewtonQpDunes allows export of and OCP solver using
* the generalized Gauss-Newton method. The underlying QP is solved using the
* structured sparse QP solver qpDUNES.
*
* \author Milan Vukov
*/
class ExportGaussNewtonQpDunes : public ExportNLPSolver
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportGaussNewtonQpDunes( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor.
*/
virtual ~ExportGaussNewtonQpDunes( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
unsigned getNumQPvars( ) const;
protected:
/** Setting up of an objective evaluation:
* - functions and derivatives evaulation
* - creating Hessians and gradients
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupObjectiveEvaluation( void );
/** Set-up evaluation of constraints
* - box constraints on states and controls
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupConstraintsEvaluation( void );
/** Initialization of all member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( );
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( );
/** Exports source code containing the evaluation routines of the algorithm. */
virtual returnValue setupEvaluation( );
/** Setup of the glue code for the QP solver interaction. */
virtual returnValue setupQPInterface( );
protected:
/** Current state feedback. */
ExportVariable x0;
/** \name QP interface variables */
/** @{ */
ExportVariable qpH;
ExportVariable qpg;
ExportVariable qpgN;
ExportVariable qpC;
ExportVariable qpc;
ExportVariable qpLb0, qpUb0;
ExportVariable qpLb, qpUb;
ExportVariable lbValues, ubValues;
ExportVariable qpA;
ExportVariable qpLbA, qpUbA;
ExportVariable qpPrimal, qpLambda, qpMu;
/** @} */
/** \name Objective evaluation. */
/** @{ */
ExportFunction evaluateObjective;
ExportFunction setStageH;
ExportFunction setStagef;
ExportFunction setObjQ1Q2;
ExportFunction setObjR1R2;
ExportFunction setObjQN1QN2;
bool diagH, diagHN;
/** @} */
/** \name Constraint evaluation */
/** @{ */
ExportFunction evaluateConstraints;
ExportFunction setStagePac;
std::vector< unsigned > qpConDim;
/** @} */
/** \name RTI related */
/** @{ */
ExportFunction preparation;
ExportFunction feedback;
/** @} */
/** \name qpDUNES interface functions */
/** @{ */
ExportFunction cleanup;
ExportFunction shiftQpData;
/** @} */
/** \name Auxiliary functions */
/** @{ */
ExportFunction getKKT;
/** @} */
/** \name Helper functions */
/** @{ */
ExportFunction acc;
/** @} */
/** qpDUNES interface object. */
std::shared_ptr< ExportQpDunesInterface > qpInterface;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_GAUSS_NEWTON_QPDUNES_HPP

View File

@ -0,0 +1,91 @@
/*
* 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/code_generation/export_hessian_regularization.hpp
* \author Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_HESSIAN_REG_HPP
#define ACADO_TOOLKIT_EXPORT_HESSIAN_REG_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for generating code implementing a symmetric EigenValue Decomposition.
*
* \ingroup ExportHessianRegularization
*
* \author Rien Quirynen
*/
class ExportHessianRegularization : public ExportTemplatedFile
{
public:
/** Default constructor.
*
* @param[in] _moduleName Module name for customization.
* @param[in] _modulePrefix Module name for customization.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportHessianRegularization( const std::string& _sourceFileName,
const std::string& _moduleName = "acado",
const std::string& _modulePrefix = "ACADO",
const std::string& _commonHeaderName = "",
const std::string& _realString = "double",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportHessianRegularization()
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( uint DIM, double eps );
private:
std::string moduleName;
std::string modulePrefix;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_HESSIAN_REG_HPP

View File

@ -0,0 +1,96 @@
/*
* 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/code_generation/export_hpmpc_interface.hpp
* \author Milan Vukov
* \date 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_HPMPC_INTERFACE_HPP
#define ACADO_TOOLKIT_EXPORT_HPMPC_INTERFACE_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Interface generator for the HPMPC QP solver
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportHpmpcInterface : public ExportTemplatedFile
{
public:
/** Default constructor.
*
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentstd::string std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportHpmpcInterface( const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportHpmpcInterface( )
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( const unsigned _maxIter,
const unsigned _printLevel,
bool _useSinglePrecision,
bool _warmStart,
const std::string& _Hx,
const std::string& _Hu,
const std::string& _lbA,
const std::string& _ubA,
const unsigned _DimH,
const std::vector< unsigned >& _conDim,
const unsigned _NI,
const unsigned _NX,
const unsigned _NU
);
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_HPMPC_INTERFACE_HPP

View File

@ -0,0 +1,144 @@
/*
* 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/code_generation/export_index.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
#ifndef ACADO_TOOLKIT_EXPORT_INDEX_HPP
#define ACADO_TOOLKIT_EXPORT_INDEX_HPP
#include <acado/code_generation/export_data.hpp>
BEGIN_NAMESPACE_ACADO
class ExportIndexNode;
class ExportArgument;
/**
* \brief Defines a scalar-valued index variable to be used for exporting code.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportIndex defines a scalar-valued index variable to be used for
* exporting code. Instances of this class can be used similar to usual integers
* but offer additional functionality, e.g. they allow to export arithmetic
* expressions involving indices of the form:
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportIndex : public ExportData
{
public:
ExportIndex();
ExportIndex( const int _value );
explicit ExportIndex( const std::string& _name,
const std::string& _prefix = std::string()
);
ExportIndexNode* operator->();
const ExportIndexNode* operator->() const;
operator ExportArgument();
friend ExportIndex operator+( const ExportIndex& _arg1,
const ExportIndex& _arg2
);
friend ExportIndex operator-( const ExportIndex& _arg1,
const ExportIndex& _arg2
);
friend ExportIndex operator*( const ExportIndex& _arg1,
const ExportIndex& _arg2
);
friend ExportIndex operator/( const ExportIndex& _arg1,
const ExportIndex& _arg2
);
friend ExportIndex operator%( const ExportIndex& _arg1,
const ExportIndex& _arg2
);
friend std::string operator==( const ExportIndex& _arg1,
const ExportIndex& _arg2
);
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Returns a string containing the value of the index.
*
* \return std::string containing the value of the index.
*/
const std::string get( ) const;
/** Returns the given value of the index (if defined).
*
* \return Given value of the index or "undefinedValue".
*/
int getGivenValue( ) const;
/** Returns whether the index is set to a given value.
*
* \return true iff index is set to a given value, \n
* false otherwise
*/
bool isGiven( ) const;
bool isBinary() const;
bool isVariable() const;
};
struct ExportIndexComparator
{
bool operator() (const ExportIndex& val1, const ExportIndex& val2) const
{
int tmp = std::string( val1.getName() ).compare( std::string( val2.getName() ) );
return (tmp < 0) ? true : false;
}
};
const ExportIndex emptyConstExportIndex( int( 0 ) );
const ExportIndex constExportIndexValueOne( int( 1 ) );
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_INDEX_HPP

View File

@ -0,0 +1,163 @@
/*
* 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/code_generation/export_index_node.hpp
* \author Milan Vukov
*/
#ifndef ACADO_TOOLKIT_EXPORT_INDEX_NODE_HPP
#define ACADO_TOOLKIT_EXPORT_INDEX_NODE_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_data_internal.hpp>
#include <acado/code_generation/export_index.hpp>
#include <acado/code_generation/export_index_node.hpp>
BEGIN_NAMESPACE_ACADO
enum ExportVariableType
{
EVT_VARIABLE,
EVT_VALUE,
EVT_BINARY_OPERATOR
};
class ExportIndexNode : public ExportDataInternal
{
public:
ExportIndexNode( const std::string& _name,
const std::string& _prefix,
const int _factor = 1,
const int _offset = 0)
: ExportDataInternal(_name, INT, ACADO_LOCAL, _prefix)
{
if ( _factor )
{
varType = EVT_VARIABLE;
value = 0;
factor = _factor;
offset = _offset;
op = ESO_UNDEFINED;
}
else
{
varType = EVT_VALUE;
value = _offset;
factor = 1;
offset = 0;
op = ESO_UNDEFINED;
}
}
explicit ExportIndexNode( const int _value )
: ExportDataInternal("defaultIndexName", INT, ACADO_LOCAL, ""),
varType( EVT_VALUE ), value( _value ), factor( 1 ), offset( 0 ), op( ESO_UNDEFINED )
{}
ExportIndexNode( ExportStatementOperator _op,
const ExportIndex& _arg1,
const ExportIndex& _arg2
)
: ExportDataInternal("defaultIndexName", INT, ACADO_LOCAL, ""),
varType( EVT_BINARY_OPERATOR ), value( 0 ), factor( 1 ), offset( 0 ),
op( _op ), left( _arg1 ), right( _arg2 )
{}
virtual ~ExportIndexNode()
{}
virtual ExportIndexNode* clone() const
{
return new ExportIndexNode( *this );
}
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/// Returns a string containing the value of the index.
const std::string get( ) const;
/** Returns the given value of the index (if defined).
*
* \return Given value of the index or 0 in case the index is undefined.
*/
const int getGivenValue( ) const;
/** Returns whether the index is set to a given value.
*
* \return true iff index is set to a given value, \n
* false otherwise
*/
virtual bool isGiven( ) const;
bool isBinary() const
{
if (varType == EVT_BINARY_OPERATOR)
return true;
return false;
}
bool isVariable() const
{
if (varType == EVT_VARIABLE)
return true;
return false;
}
const int getFactor( ) const
{
return factor;
}
const int getOffset( ) const
{
return offset;
}
private:
ExportVariableType varType;
int value;
int factor;
int offset;
int op;
ExportIndex left;
ExportIndex right;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_INDEX_NODE_HPP

View File

@ -0,0 +1,140 @@
/*
* 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/code_generation/export_module.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2010 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_MODULE_HPP
#define ACADO_TOOLKIT_EXPORT_MODULE_HPP
#include <acado/user_interaction/user_interaction.hpp>
BEGIN_NAMESPACE_ACADO
class ExportStatementBlock;
/**
* \brief User-interface to automatically generate algorithms for fast model predictive control
*
* \ingroup UserInterfaces
*
* The class ExportModule is a user-interface to automatically generate tailored
* algorithms for fast model predictive control. It takes an optimal control
* problem (OCP) formulation and generates code based on given user options.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class ExportModule : public UserInteraction
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor. */
ExportModule( );
/** Destructor.
*/
virtual ~ExportModule( );
/** Exports all files of the auto-generated code into the given directory.
*
* @param[in] dirName Name of directory to be used to export files.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( const std::string& dirName,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) = 0;
protected:
/** Exports main header file for using the exported algorithm.
*
* @param[in] _dirName Name of directory to be used to export file.
* @param[in] _fileName Name of file to be exported.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportAcadoHeader( const std::string& _dirName,
const std::string& _fileName,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const = 0;
/** Collects all data declarations of the auto-generated sub-modules to given
* list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN, \n
* RET_UNABLE_TO_EXPORT_CODE
*/
virtual returnValue collectDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const = 0;
/** Collects all function (forward) declarations of the auto-generated sub-modules
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN, \n
* RET_UNABLE_TO_EXPORT_CODE
*/
virtual returnValue collectFunctionDeclarations( ExportStatementBlock& declarations
) const = 0;
/** Sets-up default options.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setupOptions( );
/** Name of common header file. */
std::string commonHeaderName;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_MODULE_HPP

View File

@ -0,0 +1,378 @@
/*
* 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/code_generation/export_nlp_solver.hpp
* \author Milan Vukov, Rien Quirynen
* \date 2012 - 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_NLP_SOLVER_HPP
#define ACADO_TOOLKIT_EXPORT_NLP_SOLVER_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/matrix_vector/matrix_vector.hpp>
#include <acado/code_generation/export_algorithm_factory.hpp>
#include <acado/code_generation/integrators/integrator_export.hpp>
#include <acado/code_generation/export_cholesky_decomposition.hpp>
#include <acado/code_generation/linear_solvers/householder_qr_export.hpp>
BEGIN_NAMESPACE_ACADO
class OCP;
class Objective;
/**
* \brief Base class for export of NLP/OCP solvers.
*
* \ingroup NumericalAlgorithms
*
* This base class is basically used to extract information from an OCP
* object and prepare low level structures. Later, a derived class is
* actually building the solver to solve an OCP problem.
*
* \author Milan Vukov
*
* \note Based on code originally developed by Boris Houska and Hand Joachim Ferreau.
*/
class ExportNLPSolver : public ExportAlgorithm
{
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExportNLPSolver( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Destructor. */
virtual ~ExportNLPSolver( )
{}
/** Initializes export of an algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( ) = 0;
/** Assigns module for exporting a tailored integrator.
*
* @param[in] _integrator Integrator module.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setIntegratorExport( IntegratorExportPtr const _integrator
);
/** Assigns new constant for Levenberg-Marquardt regularization.
*
* @param[in] _levenbergMarquardt Non-negative constant for Levenberg-Marquardt regularization.
*
* \return SUCCESSFUL_RETURN
*/
returnValue setLevenbergMarquardt( double _levenbergMarquardt
);
/** Adds all data declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated condensing algorithm
* to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const = 0;
/** Exports source code of the auto-generated condensing algorithm
* into the given directory.
*
* @param[in] code Code block containing the auto-generated condensing algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
) = 0;
/** Returns number of variables in underlying QP.
*
* \return Number of variables in underlying QP
*/
virtual unsigned getNumQPvars( ) const = 0;
/** Returns whether a single shooting state discretization is used.
*
* \return true iff single shooting state discretization is used, \n
* false otherwise
*/
bool performsSingleShooting( ) const;
/** Set objective function
* \return SUCCESSFUL_RETURN, \n
* RET_INITIALIZE_FIRST, \n
* RET_INVALID_OBJECTIVE_FOR_CODE_EXPORT, \n
* RET_INVALID_ARGUMENTS
* */
returnValue setObjective(const Objective& _objective);
returnValue setLSQObjective(const Objective& _objective);
returnValue setGeneralObjective(const Objective& _objective);
/** Set the "complex" path and point constraints
* \return SUCCESSFUL_RETURN
* */
returnValue setConstraints(const OCP& _ocp);
/** Get the number of complex constraints - path + point constraints.
* \return Number of complex constraints
* */
unsigned getNumComplexConstraints( void );
/** Get the number of path constraints.
* \return Number of path constraints
* */
unsigned getNumPathConstraints( void );
/** Return type of weighting matrices.
* \return Type of weighting matrices. */
unsigned weightingMatricesType( void ) const;
/** Indicates whether initial state is fixed. */
bool initialStateFixed( ) const;
/** Indicates whether linear terms in the objective are used. */
bool usingLinearTerms() const;
protected:
/** Setting up of a model simulation:
* - model integration
* - sensitivity generation
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupSimulation( void );
/** Initialization of member variables.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupVariables( ) = 0;
/** Exports source code containing the multiplication routines of the algorithm.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupMultiplicationRoutines( ) = 0;
/** Exports source code containing the evaluation routines of the algorithm. */
virtual returnValue setupEvaluation( ) = 0;
/** Setup of functions for evaluation of constraints. */
virtual returnValue setupConstraintsEvaluation( ) = 0;
/** Setup of functions for evaluation of auxiliary functions. */
returnValue setupAuxiliaryFunctions();
/** Setup the function for evaluating the actual objective value. */
virtual returnValue setupGetObjective();
/** Setup the function for evaluating the actual LSQ objective value. */
virtual returnValue setupGetLSQObjective();
/** Setup the function for evaluating the actual objective value. */
virtual returnValue setupGetGeneralObjective();
/** Setup of functions and variables for evaluation of arrival cost. */
returnValue setupArrivalCostCalculation();
/** Setup main initialization code for the solver */
virtual returnValue setupInitialization();
protected:
/** \name Evaluation of model dynamics. */
/** @{ */
/** Module for exporting a tailored integrator. */
IntegratorExportPtr integrator;
ExportFunction modelSimulation;
ExportVariable state;
ExportVariable x;
ExportVariable z;
ExportVariable u;
ExportVariable od;
ExportVariable d;
ExportVariable evGx; // stack of sensitivities w.r.t. x
ExportVariable evGu; // stack of sensitivities w.r.t. u
/** @} */
/** \name Evaluation of objective */
/** @{ */
/** Non-negative constant for Levenberg-Marquardt regularization. */
double levenbergMarquardt;
ExportVariable y, yN, Dy, DyN;
// lagrange multipliers
ExportVariable mu;
ExportVariable objg, objS, objSEndTerm;
ExportVariable objEvFx, objEvFu, objEvFxEnd; // aliasing
ExportVariable objEvFxx, objEvFxu, objEvFuu, objEvFxxEnd; // aliasing
ExportVariable objAuxVar, objValueIn, objValueOut;
ExportAcadoFunction evaluateStageCost;
ExportAcadoFunction evaluateTerminalCost;
ExportVariable Q1, Q2;
ExportVariable R1, R2;
ExportVariable S1;
ExportVariable QN1, QN2;
ExportVariable objSlx, objSlu;
bool diagonalH, diagonalHN;
/** @} */
/** \name Evaluation of box constraints*/
/** @{ */
VariablesGrid uBounds;
VariablesGrid xBounds;
/** @} */
/** \name Evaluation of path constraints */
/** @{ */
unsigned dimPacH;
ExportAcadoFunction evaluatePathConstraints;
ExportVariable conAuxVar;
ExportVariable conValueIn;
ExportVariable conValueOut;
DVector lbPathConValues, ubPathConValues;
ExportVariable pacEvH;
ExportVariable pacEvHx, pacEvHu, pacEvHxd;
ExportVariable pacEvDDH;
/** @} */
/** \name Evaluation of point constraints */
/** @{ */
unsigned dimPocH;
std::vector< std::shared_ptr< ExportAcadoFunction > > evaluatePointConstraints;
DVector lbPointConValues, ubPointConValues;
std::vector< DVector > pocLbStack, pocUbStack;
ExportVariable pocEvH;
ExportVariable pocEvHx, pocEvHu, pocEvHxd;
/** @} */
/** \name Auxiliary functions */
/** @{ */
/** Main initialization function for the solver. */
ExportFunction initialize;
ExportFunction shiftStates;
ExportFunction shiftControls;
ExportFunction getObjective;
ExportFunction initializeNodes;
/** @} */
/** \name Arrival cost related */
/** @{ */
ExportFunction updateArrivalCost;
ExportCholeskyDecomposition cholObjS;
ExportCholeskyDecomposition cholSAC;
ExportHouseholderQR acSolver;
ExportVariable acA, acb, acP, acTmp;
// acWL and acVL are assumed to be upper triangular matrices
ExportVariable acWL, acVL, acHx, acHu, acXx, acXu, acXTilde, acHTilde;
// Older stuff; TODO make this more unique
ExportVariable SAC, xAC, DxAC;
ExportFunction regularizeHessian;
ExportFunction regularization;
/** @} */
private:
returnValue setupResidualVariables();
returnValue setupObjectiveLinearTerms(const Objective& _objective);
};
/** Types of NLP/OCP solvers. */
enum ExportNLPType
{
GAUSS_NEWTON_CONDENSED,
GAUSS_NEWTON_CN2,
GAUSS_NEWTON_BLOCK_QPDUNES,
GAUSS_NEWTON_BLOCK_FORCES,
GAUSS_NEWTON_CN2_FACTORIZATION,
GAUSS_NEWTON_FORCES,
GAUSS_NEWTON_QPDUNES,
GAUSS_NEWTON_HPMPC,
GAUSS_NEWTON_GENERIC,
EXACT_HESSIAN_CN2,
EXACT_HESSIAN_QPDUNES
};
/** Factory for creation of exported NLP/OCP solvers. */
typedef ExportAlgorithmFactory<ExportNLPSolver, ExportNLPType> NLPSolverFactory;
/** Shared pointer to an NLP solver. */
typedef std::shared_ptr< ExportNLPSolver > ExportNLPSolverPtr;
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_NLP_SOLVER_HPP

View File

@ -0,0 +1,106 @@
/*
* 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/code_generation/export_qpdunes_interface.hpp
* \author Milan Vukov
* \date 2013 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_QPDUNES_INTERFACE_HPP
#define ACADO_TOOLKIT_EXPORT_QPDUNES_INTERFACE_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Interface generator for the qpDUNES QP solver
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportQpDunesInterface : public ExportTemplatedFile
{
public:
/** Default constructor.
*
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentstd::string std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportQpDunesInterface( const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportQpDunesInterface( )
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( const unsigned _maxIter,
const unsigned _printLevel,
const std::string& _HH,
const std::string& _g,
const std::string& _gN,
const std::string& _CC,
const std::string& _c,
const std::string& _DD,
const std::string& _lb0,
const std::string& _ub0,
const std::string& _lb,
const std::string& _ub,
const std::string& _lbA,
const std::string& _ubA,
const std::string& _primal,
const std::string& _lambda,
const std::string& _mu,
const std::vector< unsigned >& conDim,
const std::string& _initialStateFixed,
const std::string& _diagH,
const std::string& _diagHN,
const unsigned _NI,
const unsigned _NX,
const unsigned _NU
);
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_QPDUNES_INTERFACE_HPP

View File

@ -0,0 +1,116 @@
/*
* 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/code_generation/export_qpoases3_interface.hpp
* \author Milan Vukov, Joachim Ferreau
* \date 2012 - 2015
*/
#ifndef ACADO_TOOLKIT_EXPORT_QPOASES3_INTERFACE_HPP
#define ACADO_TOOLKIT_EXPORT_QPOASES3_INTERFACE_HPP
#include <acado/code_generation/export_templated_file.hpp>
#include <acado/code_generation/export_qpoases_interface.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for generating the glue code for interfacing qpOASES.
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*
* \note Based on code originally developed by Hans Joachim Ferreau and Boris Houska.
*/
class ExportQpOases3Interface : public ExportQpOasesInterface
{
public:
/** Default constructor.
*
* @param[in] _headerFileName Name of exported file for header file.
* @param[in] _sourceFileName Name of exported file for source file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportQpOases3Interface( const std::string& _headerFileName,
const std::string& _sourceFileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportQpOases3Interface()
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue configure( const std::string& _prefix,
const std::string& _solverDefine,
const int nvmax,
const int ncmax,
const int nwsrmax,
const std::string& _printLevel,
bool _useSinglePrecision,
const std::string& _commonHeader,
const std::string& _namespace,
const std::string& _primalSolution,
const std::string& _dualSolution,
const std::string& _sigma,
bool _hotstartQP,
bool _externalCholesky,
const std::string& _qpH,
const std::string& _qpR,
const std::string& _qpg,
const std::string& _qpA,
const std::string& _qplb,
const std::string& _qpub,
const std::string& _qplbA,
const std::string& _qpubA
);
/** Export the interface. */
virtual returnValue exportCode();
protected:
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_QPOASES3_INTERFACE_HPP

View File

@ -0,0 +1,116 @@
/*
* 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/code_generation/export_qpoases_interface.hpp
* \author Milan Vukov
* \date 2012 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_QPOASES_INTERFACE_HPP
#define ACADO_TOOLKIT_EXPORT_QPOASES_INTERFACE_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for generating the glue code for interfacing qpOASES.
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*
* \note Based on code originally developed by Hans Joachim Ferreau and Boris Houska.
*/
class ExportQpOasesInterface
{
public:
/** Default constructor.
*
* @param[in] _headerFileName Name of exported file for header file.
* @param[in] _sourceFileName Name of exported file for source file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportQpOasesInterface( const std::string& _headerFileName,
const std::string& _sourceFileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportQpOasesInterface()
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue configure( const std::string& _prefix,
const std::string& _solverDefine,
const int nvmax,
const int ncmax,
const int nwsrmax,
const std::string& _printLevel,
bool _useSinglePrecision,
const std::string& _commonHeader,
const std::string& _namespace,
const std::string& _primalSolution,
const std::string& _dualSolution,
const std::string& _sigma,
bool _hotstartQP,
bool _externalCholesky,
const std::string& _qpH,
const std::string& _qpR,
const std::string& _qpg,
const std::string& _qpA,
const std::string& _qplb,
const std::string& _qpub,
const std::string& _qplbA,
const std::string& _qpubA
);
/** Export the interface. */
virtual returnValue exportCode();
protected:
ExportTemplatedFile qpoHeader;
ExportTemplatedFile qpoSource;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_QPOASES_INTERFACE_HPP

View File

@ -0,0 +1,113 @@
/*
* 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/code_generation/export_simulink_interface.hpp
* \author Milan Vukov
* \date 2013 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_SIMULINK_INTERFACE_HPP
#define ACADO_TOOLKIT_EXPORT_SIMULINK_INTERFACE_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for generating the glue code and makefile
* for interfacing generated code and Simulink.
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportSimulinkInterface
{
public:
/** Default constructor.
*
* @param[in] _moduleName Module name for customization.
* @param[in] _modulePrefix Module prefix for customization.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportSimulinkInterface( const std::string& _makefileName,
const std::string& _wrapperHeaderFileName,
const std::string& _wrapperSourceFileName,
const std::string& _moduleName = "acado",
const std::string& _modulePrefix = "ACADO",
const std::string& _commonHeaderName = "",
const std::string& _realString = "double",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportSimulinkInterface()
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( unsigned N,
unsigned NX,
unsigned NDX,
unsigned NXA,
unsigned NU,
unsigned NP,
unsigned NY,
unsigned NYN,
bool _initialStateFixed,
unsigned _wMatrixType,
bool _hardcodedConstraints,
bool _useArrivalCost,
bool _compCovMatrix,
std::string _qpSolver
);
/** Export the interface. */
returnValue exportCode();
private:
ExportTemplatedFile makefile;
ExportTemplatedFile wrapperSource;
ExportTemplatedFile wrapperHeader;
std::string moduleName;
std::string modulePrefix;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_SIMULINK_INTERFACE_HPP

View File

@ -0,0 +1,106 @@
/*
* 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/code_generation/export_split_qpdunes_interface.hpp
* \author Milan Vukov, Rien Quirynen
* \date 2013 - 2014
*/
#ifndef ACADO_TOOLKIT_EXPORT_SPLIT_QPDUNES_INTERFACE_HPP
#define ACADO_TOOLKIT_EXPORT_SPLIT_QPDUNES_INTERFACE_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Interface generator for the qpDUNES QP solver
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportSplitQpDunesInterface : public ExportTemplatedFile
{
public:
/** Default constructor.
*
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentstd::string std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportSplitQpDunesInterface( const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportSplitQpDunesInterface( )
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( const unsigned _maxIter,
const unsigned _printLevel,
const std::string& _HH,
const std::string& _g,
const std::string& _gN,
const std::string& _CC,
const std::string& _c,
const std::string& _DD,
const std::string& _lb0,
const std::string& _ub0,
const std::string& _lb,
const std::string& _ub,
const std::string& _lbA,
const std::string& _ubA,
const std::string& _primal,
const std::string& _lambda,
const std::string& _mu,
const std::vector< unsigned >& conDim,
const std::string& _initialStateFixed,
const std::string& _diagH,
const std::string& _diagHN,
const unsigned _NI,
const unsigned _NX,
const unsigned _NU
);
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_SPLIT_QPDUNES_INTERFACE_HPP

View File

@ -0,0 +1,164 @@
/*
* 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/code_generation/export_statement.hpp
* \authors Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2010 - 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_STATEMENT_HPP
#define ACADO_TOOLKIT_EXPORT_STATEMENT_HPP
#include <acado/utils/acado_utils.hpp>
#include <memory>
BEGIN_NAMESPACE_ACADO
class ExportIndex;
class MemoryAllocator;
/**
* \brief Base class for all kind of statements to be exported by the code generation tool.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportStatement serves as a base class for all kind of statements to be exported
* by the code generation tool.
*
* \authors Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportStatement
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Shared pointer to a statement. */
typedef std::shared_ptr< ExportStatement > StatementPtr;
/** A vector of shared pointer statements. */
typedef std::vector< StatementPtr > StatementPtrArray;
/** Shared pointer to a memory allocator */
typedef std::shared_ptr< MemoryAllocator > MemoryAllocatorPtr;
/** Default constructor. */
ExportStatement( );
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportStatement( const ExportStatement& arg
);
/** Destructor. */
virtual ~ExportStatement( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportStatement& operator=( const ExportStatement& arg
);
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const = 0;
/** Exports data declaration of the statement into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Exports source code of the statement into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const = 0;
/** Acquire an index. */
virtual ExportStatement& acquire( ExportIndex& )
{
return *this;
}
/** Release an index. */
virtual ExportStatement& release( const ExportIndex& )
{
return *this;
}
/** Set a memory allocator. */
virtual ExportStatement& allocate( MemoryAllocatorPtr )
{
return *this;
}
public:
static std::string fcnPrefix;
static std::string varPrefix;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_STATEMENT_HPP
// end of file.

View File

@ -0,0 +1,312 @@
/*
* 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/code_generation/export_statement_block.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2010-2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_STATEMENT_BLOCK_HPP
#define ACADO_TOOLKIT_EXPORT_STATEMENT_BLOCK_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_statement.hpp>
#include <acado/code_generation/export_argument.hpp>
#include <vector>
BEGIN_NAMESPACE_ACADO
class ExportFunction;
class ExportAcadoFunction;
class ExportFunctionDeclaration;
class ExportVariable;
class ExportIndex;
class ExportDataDeclaration;
/**
* \brief Allows to export code for a block of statements.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportStatementBlock allows to export code for a block of statements.
*
* \authors Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportStatementBlock : public ExportStatement
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/**< Default Constructor.
*/
ExportStatementBlock( );
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportStatementBlock( const ExportStatementBlock& arg
);
/** Destructor.
*/
virtual ~ExportStatementBlock( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportStatementBlock& operator=( const ExportStatementBlock& rhs
);
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Adds a statement to the statement block.
*
* @param[in] _statement Statement to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addStatement( const ExportStatement& _statement
);
/** Adds a string statement to the statement block.
*
* @param[in] _statementString std::string statement to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addStatement( const std::string& _statementString
);
/** Adds a function to the statement block.
*
* @param[in] _function Function to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addFunction( const ExportFunction& _function
);
/** Adds a function call to the statement block.
*
* @param[in] _fName Name of function to be called.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addFunctionCall( const std::string& _fName,
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Adds a function call to the statement block.
*
* @param[in] _f Function to be called.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addFunctionCall( const ExportFunction& _f,
const ExportArgument& _argument1 = emptyConstExportArgument,
const ExportArgument& _argument2 = emptyConstExportArgument,
const ExportArgument& _argument3 = emptyConstExportArgument,
const ExportArgument& _argument4 = emptyConstExportArgument,
const ExportArgument& _argument5 = emptyConstExportArgument,
const ExportArgument& _argument6 = emptyConstExportArgument,
const ExportArgument& _argument7 = emptyConstExportArgument,
const ExportArgument& _argument8 = emptyConstExportArgument,
const ExportArgument& _argument9 = emptyConstExportArgument
);
/** Adds a variable declaration to the statement block.
*
* @param[in] _data Variable declaration to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addDeclaration( const ExportVariable& _data,
ExportStruct _dataStruct = ACADO_ANY
);
/** Adds an index declaration to the statement block.
*
* @param[in] _data Index declaration to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addDeclaration( const ExportIndex& _data,
ExportStruct _dataStruct = ACADO_ANY
);
/** Adds a function forward declaration to the statement block.
*
* @param[in] _f function forward declaration to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addDeclaration( const ExportFunction& _f
);
/** Adds a forward declaration of an ODE function to the statement block.
*
* @param[in] _f ODE function whose forward declaration is to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addDeclaration( const ExportAcadoFunction& _f
);
/** Adds a line break to the statement block.
*
* @param[in] num Number of line breaks to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addLinebreak( uint num = 1
);
/** Adds a comment to the statement block.
*
* @param[in] _comment Comment to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addComment( const std::string& _comment
);
/** Adds a comment preceded by a given number of blanks to the statement block.
*
* @param[in] _nBlanks Number of blanks.
* @param[in] _comment Comment to be added.
*
* \return SUCCESSFUL_RETURN
*/
returnValue addComment( uint _nBlanks,
const std::string& _comment
);
/** Returns number of statement within statement block.
*
* \return Number of statement within statement block
*/
uint getNumStatements( ) const;
/** Exports data declaration of the statement block into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement block.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportDataDeclaration( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Exports source code of the statement block into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export statement block.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
/** Removes all statements to yield an empty statement block.
*
* \return SUCCESSFUL_RETURN
*/
returnValue clear( );
/** Add a statement. */
friend ExportStatementBlock& operator<<(ExportStatementBlock& _block, const ExportStatement& _statement);
/** Add a string. */
friend ExportStatementBlock& operator<<(ExportStatementBlock& _block, const std::string& _statement);
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
//
// DATA MEMBERS:
//
protected:
/** Array containing all statements of the statement block. */
StatementPtrArray statements;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_STATEMENT_BLOCK_HPP
/*
* end of file
*/

View File

@ -0,0 +1,106 @@
/*
* 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/code_generation/export_statement_string.hpp
* \author Hans Joachim Ferreau, Boris Houska
* \date 2010-2011
*/
#ifndef ACADO_TOOLKIT_EXPORT_STATEMENT_STRING_HPP
#define ACADO_TOOLKIT_EXPORT_STATEMENT_STRING_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_statement.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export code writing a string.
*
* \ingroup AuxiliaryFunctionality
*
* The class ExportStatementstd::string allows to export code writing a string.
*
* \author Hans Joachim Ferreau, Boris Houska
*/
class ExportStatementString : public ExportStatement
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor which optionally takes the string to be exported.
*
* @param[in] _statementstd::string std::string to be exported.
*/
ExportStatementString( const std::string& _statementString = std::string()
);
/** Destructor.
*/
virtual ~ExportStatementString( );
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportStatement* clone( ) const;
/** Exports source code of the string into given file. Its appearance can
* can be adjusted by various options.
*
* @param[in] stream Name of file to be used to export string.
* @param[in] _realSstring std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue exportCode( std::ostream& stream,
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16
) const;
protected:
std::string statementString; /**< std::string to be exported. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_STATEMENT_STRING_HPP
// end of file.

View File

@ -0,0 +1,139 @@
/*
* 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/code_generation/export_templated_file.hpp
* \author Milan Vukov
* \date 2012 - 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_TEMPLATED_FILE_HPP
#define ACADO_TOOLKIT_EXPORT_TEMPLATED_FILE_HPP
#include <acado/code_generation/export_file.hpp>
#include <map>
BEGIN_NAMESPACE_ACADO
class ExportQpOasesInterface;
class ExportSimulinkInterface;
class ExportAuxiliaryFunctions;
/**
* \brief Allows export of template files.
*
* \ingroup AuxiliaryFunctionality
*
* \author Milan Vukov
*/
class ExportTemplatedFile : public ExportFile
{
public:
friend class ExportQpOasesInterface;
friend class ExportQpOases3Interface;
friend class ExportSimulinkInterface;
friend class ExportAuxiliaryFunctions;
friend class ExportHessianRegularization;
friend class ExportAuxiliarySimFunctions;
friend class OCPexport;
friend class SIMexport;
/** Default constructor.
*/
ExportTemplatedFile( );
/** Standard constructor.
*
* @param[in] _templateName Name of a template.
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*/
ExportTemplatedFile( const std::string& _templateName,
const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportTemplatedFile( )
{}
/** Default constructor.
*
* @param[in] _templateName Name of a template.
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( const std::string& _templateName,
const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue configure( )
{
return fillTemplate( );
}
protected:
/** Fill in the template. */
returnValue fillTemplate( );
/** Name of the template file. */
std::string templateName;
/** Dictionary used to fill in the template file. */
std::map< std::string, std::string > dictionary;
/** List of folders where templates are stored. */
std::string folders;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_TEMPLATED_FILE_HPP

View File

@ -0,0 +1,536 @@
/*
* 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/code_generation/export_variable.hpp
* \authors Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
#ifndef ACADO_TOOLKIT_EXPORT_VARIABLE_HPP
#define ACADO_TOOLKIT_EXPORT_VARIABLE_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_argument.hpp>
#include <acado/code_generation/export_index.hpp>
BEGIN_NAMESPACE_ACADO
class ExportArithmeticStatement;
class ExportVariableInternal;
/**
* \brief Defines a matrix-valued variable to be used for exporting code.
*
* \ingroup UserDataStructures
*
* The class ExportVariable defines a matrix-valued variable to be used for exporting
* code. Instances of this class can be used similar to usual DMatrix objects
* but offer additional functionality, e.g. they allow to export arithmetic
* expressions and they can be passed as argument to exported functions. By
* default, all entries of a ExportVariable are undefined, but each of its
* component can be set to a fixed value if known beforehand.
*
* \authors Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportVariable : public ExportArgument
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor. */
ExportVariable();
/** Constructor which takes the name, type string
* and dimensions of the variable.
*
* @param[in] _name Name of the argument.
* @param[in] _nRows Number of rows of the argument.
* @param[in] _nCols Number of columns of the argument.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
*/
ExportVariable( const std::string& _name,
uint _nRows,
uint _nCols,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callItByValue = false,
const std::string& _prefix = std::string()
);
/** Constructor which takes the name and type string of the variable.
* Moreover, it initializes the variable with the dimensions and the
* values of the given matrix.
*
* @param[in] _name Name of the argument.
* @param[in] _data DMatrix used for initialization.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
*/
ExportVariable( const std::string& _name,
const DMatrix& _data,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callItByValue = false,
const std::string& _prefix = std::string(),
bool _isGiven = true
);
/** Constructor which takes the name and type string of the variable.
* Moreover, it initializes the variable with the dimensions and the
* values of the given matrix.
*
* @param[in] _name Name of the argument.
* @param[in] _data Shared pointer to DMatrix used for initialization.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
*/
ExportVariable( const std::string& _name,
const DMatrixPtr& _data,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callItByValue = false,
const std::string& _prefix = std::string()
);
/** Constructor which takes the name and type string of the variable.
* Moreover, it initializes the variable with the dimensions of the matrix.
*
* @param[in] _nRows Name of the argument.
* @param[in] _nCols Name of the argument.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
*/
ExportVariable( unsigned _nRows,
unsigned _nCols,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callItByValue = false,
const std::string& _prefix = std::string()
);
/** \name Constructor which converts a given matrix/vector/scalar into an ExportVariable.
* @{ */
template<typename Derived>
ExportVariable( const Eigen::MatrixBase<Derived>& _data
)
{
simpleForward(DMatrix( _data ));
}
ExportVariable( const double _data /**< Scalar used for initialization */
);
/** @} */
/** Destructor.
*/
virtual ~ExportVariable( );
ExportVariable clone() const;
ExportVariableInternal* operator->();
const ExportVariableInternal* operator->() const;
/** Initializes variable with given name, type string
* and dimensions of the variable.
*
* @param[in] _name Name of the argument.
* @param[in] _nRows Number of rows of the argument.
* @param[in] _nCols Number of columns of the argument.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
*
* \return Reference to initialized object
*/
ExportVariable& setup( const std::string& _name,
uint _nRows = 1,
uint _nCols = 1,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callItByValue = false,
const std::string& _prefix = std::string()
);
/** Initializes variable with given name and type string of the variable.
* Moreover, the variable is initialized with the dimensions and the
* values of the given matrix.
*
* @param[in] _name Name of the argument.
* @param[in] _data DMatrix used for initialization.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
*
* \return Reference to initialized object
*/
ExportVariable& setup( const std::string& _name,
const DMatrix& _data,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callItByValue = false,
const std::string& _prefix = std::string(),
bool _isGiven = true
);
/** Returns value of given component.
*
* @param[in] rowIdx Row index of the component to be returned.
* @param[in] colIdx Column index of the component to be returned.
*
* \return SUCCESSFUL_RETURN
*/
double operator()( uint rowIdx,
uint colIdx
) const;
/** Returns value of given component.
*
* @param[in] totalIdx Memory location of the component to be returned.
*
* \return SUCCESSFUL_RETURN
*/
double operator()( uint totalIdx
) const;
/** Returns whether given component is set to zero.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return true iff given component is set to zero, \n
* false otherwise
*/
bool isZero( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Returns whether given component is set to one.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return true iff given component is set to one, \n
* false otherwise
*/
bool isOne( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Returns whether given component is set to a given value.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return true iff given component is set to a given value, \n
* false otherwise
*/
bool isGiven( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Returns whether all components of the variable are set to a given value.
*
* \return true iff all components of the variable are set to a given value, \n
* false otherwise
*/
bool isGiven( ) const;
/** Returns string containing the value of a given component. If its
* value is undefined, the string contains the address of the component.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return std::string containing the value of a given component
*/
const std::string get( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Returns number of rows of the variable.
*
* \return Number of rows of the variable
*/
virtual uint getNumRows( ) const;
/** Returns number of columns of the variable.
*
* \return Number of columns of the variable
*/
virtual uint getNumCols( ) const;
/** Returns total dimension of the variable.
*
* \return Total dimension of the variable
*/
virtual uint getDim( ) const;
/** Operator for adding two ExportVariables.
*
* @param[in] arg Variable to be added.
*
* \return Arithmetic statement containing the addition
*/
friend ExportArithmeticStatement operator+( const ExportVariable& arg1,
const ExportVariable& arg2
);
/** Operator for subtracting an ExportVariable from another.
*
* @param[in] arg Variable to be subtracted.
*
* \return Arithmetic statement containing the subtraction
*/
friend ExportArithmeticStatement operator-( const ExportVariable& arg1,
const ExportVariable& arg2
);
/** Operator for add-assigning an ExportVariable to another.
*
* @param[in] arg Variable to be add-assigned.
*
* \return Arithmetic statement containing the add-assignment
*/
friend ExportArithmeticStatement operator+=( const ExportVariable& arg1,
const ExportVariable& arg2
);
/** Operator for subtract-assigning an ExportVariables from another.
*
* @param[in] arg Variable to be subtract-assigned.
*
* \return Arithmetic statement containing the subtract-assignment
*/
friend ExportArithmeticStatement operator-=( const ExportVariable& arg1,
const ExportVariable& arg2
);
/** Operator for multiplying two ExportVariables.
*
* @param[in] arg Variable to be multiplied from the right.
*
* \return Arithmetic statement containing the multiplication
*/
friend ExportArithmeticStatement operator*( const ExportVariable& arg1,
const ExportVariable& arg2
);
/** Operator for multiplying an ExportVariable to the transposed on another.
*
* @param[in] arg Variable to be multiplied from the right.
*
* \return Arithmetic statement containing the multiplication with left-hand side variable transposed
*/
friend ExportArithmeticStatement operator^( const ExportVariable& arg1,
const ExportVariable& arg2
);
/** Operator for assigning an ExportVariable to another.
*
* @param[in] arg Variable to be assined.
*
* \return Arithmetic statement containing the assignment
*/
friend ExportArithmeticStatement operator==( const ExportVariable& arg1,
const ExportVariable& arg2
);
/** Operator for assigning an arithmetic statement to an ExportVariable.
*
* @param[in] arg Arithmetic statement to be assigned.
*
* \return Arithmetic statement containing the assignment
*/
ExportArithmeticStatement operator==( ExportArithmeticStatement arg
) const;
/** Operator for adding an arithmetic statement to an ExportVariable.
*
* @param[in] arg Arithmetic statement to be added.
*
* \return Arithmetic statement containing the addition
*/
ExportArithmeticStatement operator+( ExportArithmeticStatement arg
) const;
/** Operator for subtraction an arithmetic statement from an ExportVariable.
*
* @param[in] arg Arithmetic statement to be subtracted.
*
* \return Arithmetic statement containing the subtraction
*/
ExportArithmeticStatement operator-( ExportArithmeticStatement arg
) const;
/** Operator for add-assigning an arithmetic statement to an ExportVariable.
*
* @param[in] arg Arithmetic statement to be add-assigned.
*
* \return Arithmetic statement containing the add-assignment
*/
ExportArithmeticStatement operator+=( ExportArithmeticStatement arg
) const;
/** Operator for subtract-assigning an arithmetic statement from an ExportVariable.
*
* @param[in] arg Arithmetic statement to be subtract-assigned.
*
* \return Arithmetic statement containing the subtract-assignment
*/
ExportArithmeticStatement operator-=( ExportArithmeticStatement arg
) const;
/** Returns a copy of the variable with transposed components.
*
* \return Copy of the variable with transposed components
*/
ExportVariable getTranspose( ) const;
/** Returns a new variable containing only the given row of the variable.
*
* @param[in] idx Variable row index.
*
* \return New variable containing only the given row of the variable
*/
ExportVariable getRow( const ExportIndex& idx
) const;
/** Returns a new variable containing only the given column of the variable.
*
* @param[in] idx Variable column index.
*
* \return New variable containing only the given column of the variable
*/
ExportVariable getCol( const ExportIndex& idx
) const;
/** Returns a new variable containing only the given rows of the variable.
*
* @param[in] idx1 Variable index of first row of new variable.
* @param[in] idx2 Variable index following last row of new variable.
*
* \return New variable containing only the given rows of the variable
*/
ExportVariable getRows( const ExportIndex& idx1,
const ExportIndex& idx2
) const;
/** Returns a new variable containing only the given columns of the variable.
*
* @param[in] idx1 Variable index of first column of new variable.
* @param[in] idx2 Variable index following last column of new variable.
*
* \return New variable containing only the given columns of the variable
*/
ExportVariable getCols( const ExportIndex& idx1,
const ExportIndex& idx2
) const;
/** Returns a new variable containing only the given rows and columns of the variable.
*
* @param[in] rowIdx1 Variable index of first row of new variable.
* @param[in] rowIdx2 Variable index following last row of new variable.
* @param[in] colIdx1 Variable index of first column of new variable.
* @param[in] colIdx2 Variable index following last column of new variable.
*
* \return New variable containing only the given sub-matrix of the variable
*/
ExportVariable getSubMatrix( const ExportIndex& rowIdx1,
const ExportIndex& rowIdx2,
const ExportIndex& colIdx1,
const ExportIndex& colIdx2
) const;
/** Returns element at position (rowIdx, colIdx).
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return Element at position (rowIdx, colIdx)
*/
ExportVariable getElement( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Returns a copy of the variable that is transformed to a row vector.
*
* \return Copy of the variable that is transformed to a row vector
*/
ExportVariable makeRowVector( ) const;
/** Returns a copy of the variable that is transformed to a column vector.
*
* \return Copy of the variable that is transformed to a column vector
*/
ExportVariable makeColVector( ) const;
/** Returns whether variable is a vector.
*
* \return true iff variable is a vector, \n
* false otherwise
*/
bool isVector( ) const;
/** Returns the internal data matrix.
*
* \return Internal data matrix
*/
const DMatrix& getGivenMatrix( ) const;
/** Check whether the matrix is actually a submatrix. */
bool isSubMatrix() const;
/** Check whether the matrix is diagonal. */
bool isDiagonal() const;
/** Prints contents of variable to screen.
*
* \return SUCCESSFUL_RETURN
*/
returnValue print( ) const;
private:
void simpleForward(const DMatrix& _value);
};
static const ExportVariable emptyConstExportVariable;
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_VARIABLE_HPP

View File

@ -0,0 +1,349 @@
/*
* 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/code_generation/export_variable.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
#ifndef ACADO_TOOLKIT_EXPORT_VARIABLE_INTERNAL_HPP
#define ACADO_TOOLKIT_EXPORT_VARIABLE_INTERNAL_HPP
#include <acado/utils/acado_utils.hpp>
#include <acado/code_generation/export_argument_internal.hpp>
#include <acado/code_generation/export_index.hpp>
BEGIN_NAMESPACE_ACADO
class ExportArithmeticStatement;
/**
* \brief Defines a matrix-valued variable to be used for exporting code.
*
* \ingroup UserDataStructures
*
* The class ExportVariableInternal defines a matrix-valued variable to be used for exporting
* code. Instances of this class can be used similar to usual DMatrix objects
* but offer additional functionality, e.g. they allow to export arithmetic
* expressions and they can be passed as argument to exported functions. By
* default, all entries of a ExportVariableInternal are undefined, but each of its
* component can be set to a fixed value if known beforehand.
*
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
*/
class ExportVariableInternal : public ExportArgumentInternal
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*/
ExportVariableInternal( );
/** Constructor which takes the name and type string of the variable.
* Moreover, it initializes the variable with the dimensions and the
* values of the given matrix.
*
* @param[in] _name Name of the argument.
* @param[in] _data DMatrix used for initialization.
* @param[in] _type Data type of the argument.
* @param[in] _dataStruct Global data struct to which the argument belongs to (if any).
* @param[in] _callByValue Flag indicating whether argument it to be called by value.
*/
ExportVariableInternal( const std::string& _name,
const DMatrixPtr& _data,
ExportType _type = REAL,
ExportStruct _dataStruct = ACADO_LOCAL,
bool _callItByValue = false,
const std::string& _prefix = std::string()
);
/** Destructor.
*/
virtual ~ExportVariableInternal( );
/** Clone constructor (deep copy).
*
* \return Pointer to cloned object.
*/
virtual ExportVariableInternal* clone() const;
/** Returns whether given component is set to zero.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return true iff given component is set to zero, \n
* false otherwise
*/
bool isZero( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Returns whether given component is set to one.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return true iff given component is set to one, \n
* false otherwise
*/
bool isOne( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Returns whether given component is set to a given value.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return true iff given component is set to a given value, \n
* false otherwise
*/
bool isGiven( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
virtual bool isGiven() const;
/** Returns string containing the value of a given component. If its
* value is undefined, the string contains the address of the component.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
*
* \return std::string containing the value of a given component
*/
const std::string get( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Returns number of rows of the variable.
*
* \return Number of rows of the variable
*/
virtual uint getNumRows( ) const;
/** Returns number of columns of the variable.
*
* \return Number of columns of the variable
*/
virtual uint getNumCols( ) const;
/** Returns total dimension of the variable.
*
* \return Total dimension of the variable
*/
virtual uint getDim( ) const;
/** Returns a copy of the variable with transposed components.
*
* \return Copy of the variable with transposed components
*/
ExportVariable getTranspose( ) const;
/** Returns a new variable containing only the given row of the variable.
*
* @param[in] idx Variable row index.
*
* \return New variable containing only the given row of the variable
*/
ExportVariable getRow( const ExportIndex& idx
) const;
/** Returns a new variable containing only the given column of the variable.
*
* @param[in] idx Variable column index.
*
* \return New variable containing only the given column of the variable
*/
ExportVariable getCol( const ExportIndex& idx
) const;
/** Returns a new variable containing only the given rows of the variable.
*
* @param[in] idx1 Variable index of first row of new variable.
* @param[in] idx2 Variable index following last row of new variable.
*
* \return New variable containing only the given rows of the variable
*/
ExportVariable getRows( const ExportIndex& idx1,
const ExportIndex& idx2
) const;
/** Returns a new variable containing only the given columns of the variable.
*
* @param[in] idx1 Variable index of first column of new variable.
* @param[in] idx2 Variable index following last column of new variable.
*
* \return New variable containing only the given columns of the variable
*/
ExportVariable getCols( const ExportIndex& idx1,
const ExportIndex& idx2
) const;
/** Returns a new variable containing only the given rows and columns of the variable.
*
* @param[in] rowIdx1 Variable index of first row of new variable.
* @param[in] rowIdx2 Variable index following last row of new variable.
* @param[in] colIdx1 Variable index of first column of new variable.
* @param[in] colIdx2 Variable index following last column of new variable.
*
* \return New variable containing only the given sub-matrix of the variable
*/
ExportVariable getSubMatrix( const ExportIndex& _rowIdx1,
const ExportIndex& _rowIdx2,
const ExportIndex& _colIdx1,
const ExportIndex& _colIdx2
) const;
/** Returns a copy of the variable that is transformed to a row vector.
*
* \return Copy of the variable that is transformed to a row vector
*/
ExportVariable makeRowVector( ) const;
/** Returns a copy of the variable that is transformed to a column vector.
*
* \return Copy of the variable that is transformed to a column vector
*/
ExportVariable makeColVector( ) const;
/** Returns whether variable is a vector.
*
* \return true iff variable is a vector, \n
* false otherwise
*/
bool isVector( ) const;
/** Returns the internal data matrix.
*
* \return Internal data matrix
*/
const DMatrix& getGivenMatrix( ) const;
/** Prints contents of variable to screen.
*
* \return SUCCESSFUL_RETURN
*/
returnValue print( ) const;
/** Check whether the matrix is actually a submatrix. */
bool isSubMatrix() const;
/** Check whether the matrix is diagonal. */
bool isDiagonal() const;
//
// PROTECTED MEMBER FUNCTIONS:
//
protected:
/** Returns column dimension of the variable.
*
* \return Column dimension of the variable
*/
virtual uint getColDim( ) const;
/** Returns total index of given component within memory.
*
* @param[in] rowIdx Row index of the component.
* @param[in] colIdx Column index of the component.
*
* \return Total index of given component
*/
virtual ExportIndex getTotalIdx( const ExportIndex& rowIdx,
const ExportIndex& colIdx
) const;
/** Assigns offsets and dimensions of a sub-matrix. This function is used to
* access only a sub-matrix of the variable without copying its values to
* a new variable.
*
* @param[in] _rowOffset Variable index of first row of sub-matrix.
* @param[in] _colOffset Variable index of first column of sub-matrix.
* @param[in] _rowDim Row dimension of variable (as only the submatrix data is stored).
* @param[in] _colDim Column dimension of variable (as only the submatrix data is stored).
* @param[in] _nRows Number of rows of sub-matrix.
* @param[in] _nCols Number of columns of sub-matrix.
*
* \return SUCCESSFUL_RETURN, \n
* RET_INVALID_ARGUMENTS
*/
returnValue setSubmatrixOffsets( const ExportIndex& _rowOffset,
const ExportIndex& _colOffset,
unsigned _rowDim = 0,
unsigned _colDim = 0,
unsigned _nRows = 0,
unsigned _nCols = 0
);
/** Returns whether given component is set to given value.
*
* @param[in] rowIdx Variable row index of the component.
* @param[in] colIdx Variable column index of the component.
* @param[in] _value Value used for comparison.
*
* \return true iff given component is set to given value, \n
* false otherwise
*/
bool hasValue( const ExportIndex& _rowIdx,
const ExportIndex& _colIdx,
double _value
) const;
protected:
bool doAccessTransposed; /**< Flag indicating whether variable is to be accessed in a transposed manner. */
ExportIndex rowOffset; /**< Index of first row of a possible sub-matrix of the variable. */
ExportIndex colOffset; /**< Index of first column of a possible sub-matrix of the variable. */
unsigned rowDim; /**< Row dimension of variable (as only the submatrix data is stored). */
unsigned colDim; /**< Column dimension of variable (as only the submatrix data is stored). */
unsigned nRows; /**< Number of rows of a possible sub-matrix of the variable. */
unsigned nCols; /**< Number of columns of a possible sub-matrix of the variable. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_VARIABLE_INTERNAL_HPP
// end of file.

View File

@ -0,0 +1,95 @@
/*
* 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/code_generation/integrators/dirk3_export.hpp
* \author Rien Quirynen
* \date 2013
*/
#ifndef ACADO_TOOLKIT_DIRK3_EXPORT_HPP
#define ACADO_TOOLKIT_DIRK3_EXPORT_HPP
#include <acado/code_generation/integrators/dirk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored diagonally implicit 2-stage Runge-Kutta method of order 3 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class DiagonallyIRK3Export allows to export a tailored diagonally implicit 2-stage Runge-Kutta method of order 3
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class DiagonallyIRK3Export : public DiagonallyImplicitRKExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
DiagonallyIRK3Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
DiagonallyIRK3Export( const DiagonallyIRK3Export& arg
);
/** Destructor.
*/
virtual ~DiagonallyIRK3Export( );
protected:
};
IntegratorExport* createDiagonallyIRK3Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_DIRK3_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,95 @@
/*
* 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/code_generation/integrators/dirk4_export.hpp
* \author Rien Quirynen
* \date 2013
*/
#ifndef ACADO_TOOLKIT_DIRK4_EXPORT_HPP
#define ACADO_TOOLKIT_DIRK4_EXPORT_HPP
#include <acado/code_generation/integrators/dirk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored diagonally implicit 3-stage Runge-Kutta method of order 4 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class DiagonallyIRK4Export allows to export a tailored diagonally implicit 3-stage Runge-Kutta method of order 4
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class DiagonallyIRK4Export : public DiagonallyImplicitRKExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
DiagonallyIRK4Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
DiagonallyIRK4Export( const DiagonallyIRK4Export& arg
);
/** Destructor.
*/
virtual ~DiagonallyIRK4Export( );
protected:
};
IntegratorExport* createDiagonallyIRK4Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_DIRK4_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,95 @@
/*
* 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/code_generation/integrators/dirk5_export.hpp
* \author Rien Quirynen
* \date 2013
*/
#ifndef ACADO_TOOLKIT_DIRK5_EXPORT_HPP
#define ACADO_TOOLKIT_DIRK5_EXPORT_HPP
#include <acado/code_generation/integrators/dirk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored diagonally implicit 5-stage Runge-Kutta method of order 5 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class DiagonallyIRK5Export allows to export a tailored diagonally implicit 5-stage Runge-Kutta method of order 5
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class DiagonallyIRK5Export : public DiagonallyImplicitRKExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
DiagonallyIRK5Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
DiagonallyIRK5Export( const DiagonallyIRK5Export& arg
);
/** Destructor.
*/
virtual ~DiagonallyIRK5Export( );
protected:
};
IntegratorExport* createDiagonallyIRK5Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_DIRK5_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,308 @@
/*
* 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/code_generation/integrators/dirk_export.hpp
* \author Rien Quirynen
* \date 2013
*/
#ifndef ACADO_TOOLKIT_DIRK_EXPORT_HPP
#define ACADO_TOOLKIT_DIRK_EXPORT_HPP
#include <acado/code_generation/integrators/irk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored diagonally implicit Runge-Kutta integrator for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class DiagonallyImplicitRKExport allows to export a tailored diagonally implicit Runge-Kutta integrator
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class DiagonallyImplicitRKExport : public ForwardIRKExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
DiagonallyImplicitRKExport( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
DiagonallyImplicitRKExport( const DiagonallyImplicitRKExport& arg
);
/** Destructor.
*/
virtual ~DiagonallyImplicitRKExport( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
DiagonallyImplicitRKExport& operator=( const DiagonallyImplicitRKExport& arg
);
/** Exports the code needed to solve the system of collocation equations for the linear input system.
*
* @param[in] block The block to which the code will be exported.
* @param[in] A1 A constant matrix defining the equations of the linear input system.
* @param[in] B1 A constant matrix defining the equations of the linear input system.
* @param[in] Ah The variable containing the internal coefficients of the RK method, multiplied with the step size.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue solveInputSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& index3,
const ExportIndex& tmp_index,
const ExportVariable& Ah );
/** Precompute as much as possible for the linear input system and export the resulting definitions.
*
* @param[in] code The block to which the code will be exported.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue prepareInputSystem( ExportStatementBlock& code );
/** Exports the code needed to solve the system of collocation equations for the linear output system.
*
* @param[in] block The block to which the code will be exported.
* @param[in] Ah The variable containing the internal coefficients of the RK method, multiplied with the step size.
* @param[in] A3 A constant matrix defining the equations of the linear output system.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue solveOutputSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& index3,
const ExportIndex& tmp_index,
const ExportVariable& Ah,
bool DERIVATIVES = false );
/** Exports the code needed to compute the sensitivities of the states, defined by the linear output system.
*
* @param[in] block The block to which the code will be exported.
* @param[in] Ah The variable containing the internal coefficients of the RK method, multiplied with the step size.
* @param[in] Bh The variable containing the weights of the RK method, multiplied with the step size.
* @param[in] STATES True if the sensitivities with respect to a state are needed, false otherwise.
* @param[in] number This number defines the stage of the state with respect to which the sensitivities are computed.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue sensitivitiesOutputSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& index3,
const ExportIndex& index4,
const ExportIndex& tmp_index1,
const ExportIndex& tmp_index2,
const ExportVariable& Ah,
const ExportVariable& Bh,
bool STATES,
uint number );
/** Precompute as much as possible for the linear output system and export the resulting definitions.
*
* @param[in] code The block to which the code will be exported.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue prepareOutputSystem( ExportStatementBlock& code );
/** Forms a constant linear system matrix for the collocation equations, given a constant jacobian and mass matrix.
*
* @param[in] jacobian given constant Jacobian matrix
* @param[in] mass given constant mass matrix
*
* \return SUCCESSFUL_RETURN
*/
virtual DMatrix formMatrix( const DMatrix& mass, const DMatrix& jacobian );
/** Exports the code needed to solve the system of collocation equations for the nonlinear, fully implicit system.
*
* @param[in] block The block to which the code will be exported.
* @param[in] Ah The variable containing the internal coefficients of the RK method, multiplied with the step size.
* @param[in] det The variable that holds the determinant of the matrix in the linear system.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue solveImplicitSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& index3,
const ExportIndex& tmp_index,
const ExportVariable& Ah,
const ExportVariable& C,
const ExportVariable& det,
bool DERIVATIVES = false );
/** Exports the code needed to compute the sensitivities of the states defined by the nonlinear, fully implicit system.
*
* @param[in] block The block to which the code will be exported.
* @param[in] Ah The variable containing the internal coefficients of the RK method, multiplied with the step size.
* @param[in] Bh The variable containing the weights of the RK method, multiplied with the step size.
* @param[in] det The variable that holds the determinant of the matrix in the linear system.
* @param[in] STATES True if the sensitivities with respect to a state are needed, false otherwise.
* @param[in] number This number defines the stage of the state with respect to which the sensitivities are computed.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue sensitivitiesImplicitSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& index3,
const ExportIndex& tmp_index1,
const ExportIndex& tmp_index2,
const ExportVariable& Ah,
const ExportVariable& Bh,
const ExportVariable& det,
bool STATES,
uint number );
/** Exports the evaluation of the matrix of the linear system.
*
* @param[in] block The block to which the code will be exported.
* @param[in] index1 The loop index of the outer loop.
* @param[in] index2 The loop index of the inner loop.
* @param[in] tmp_index A temporary index to be used.
* @param[in] Ah The matrix A of the IRK method, multiplied by the step size h.
* @param[in] evaluateB True if the right-hand side of the linear system should also be evaluated, false otherwise.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue evaluateMatrix( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& tmp_index,
const ExportVariable& _rk_A,
const ExportVariable& Ah,
const ExportVariable& C,
bool evaluateB,
bool DERIVATIVES );
/** Exports the evaluation of the states at a specific stage.
*
* @param[in] block The block to which the code will be exported.
* @param[in] Ah The matrix A of the IRK method, multiplied by the step size h.
* @param[in] index The loop index, defining the stage.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue evaluateStatesImplicitSystem( ExportStatementBlock* block,
const ExportVariable& Ah,
const ExportVariable& C,
const ExportIndex& stage,
const ExportIndex& i,
const ExportIndex& j );
/** Exports the evaluation of the right-hand side of the linear system at a specific stage.
*
* @param[in] block The block to which the code will be exported.
* @param[in] index The loop index, defining the stage.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue evaluateRhsImplicitSystem( ExportStatementBlock* block,
const ExportIndex& stage );
/** Initializes export of a tailored integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
protected:
protected:
};
//
// Create the integrator
//
inline DiagonallyImplicitRKExport* createDiagonallyImplicitRKExport( UserInteraction* _userInteraction,
const std::string &_commonHeaderName )
{
int sensGen;
_userInteraction->get( DYNAMIC_SENSITIVITY, sensGen );
if ( (ExportSensitivityType)sensGen == FORWARD ) {
return new DiagonallyImplicitRKExport(_userInteraction, _commonHeaderName);
}
else {
ACADOERROR( RET_INVALID_OPTION );
return new DiagonallyImplicitRKExport(_userInteraction, _commonHeaderName);
}
}
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_DIRK_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,229 @@
/*
* 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/code_generation/integrators/discrete_export.hpp
* \author Rien Quirynen
* \date 2013
*/
#ifndef ACADO_TOOLKIT_DT_EXPORT_HPP
#define ACADO_TOOLKIT_DT_EXPORT_HPP
#include <acado/code_generation/integrators/integrator_export.hpp>
#include <acado/code_generation/export_algorithm_factory.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored discrete-time 'integrator' for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class DiscreteTimeExport allows to export a tailored discrete-time 'integrator'
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class DiscreteTimeExport : public IntegratorExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
DiscreteTimeExport( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
DiscreteTimeExport( const DiscreteTimeExport& arg
);
/** Destructor.
*/
virtual ~DiscreteTimeExport( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
DiscreteTimeExport& operator=( const DiscreteTimeExport& arg
);
/** Initializes export of a tailored integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Assigns Differential Equation to be used by the integrator.
*
* @param[in] rhs Right-hand side expression.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setDifferentialEquation( const Expression& rhs );
/** Sets a polynomial NARX model to be used by the integrator.
*
* @param[in] delay The delay for the states in the NARX model.
* @param[in] parms The parameters defining the polynomial NARX model.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setNARXmodel( const uint delay, const DMatrix& parms );
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param rhs The expressions corresponding the output functions. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<Expression> rhs );
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param _outputNames The names of the output functions. \n
* \param _diffs_outputNames The names of the functions, evaluating the derivatives of the outputs. \n
* \param _dims_output The dimensions of the output functions. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<std::string> _outputNames,
const std::vector<std::string> _diffs_outputNames,
const std::vector<uint> _dims_output );
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param _outputNames The names of the output functions. \n
* \param _diffs_outputNames The names of the functions, evaluating the derivatives of the outputs. \n
* \param _dims_output The dimensions of the output functions. \n
* \param _outputDependencies A separate dependency matrix for each output. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<std::string> _outputNames,
const std::vector<std::string> _diffs_outputNames,
const std::vector<uint> _dims_output,
const std::vector<DMatrix> _outputDependencies );
/** Adds all data declarations of the auto-generated integrator to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated integrator to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated integrator into the given directory.
*
* @param[in] code Code block containing the auto-generated integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
protected:
/** Returns the largest global export variable.
*
* \return SUCCESSFUL_RETURN
*/
ExportVariable getAuxVariable() const;
/** Copies all class members from given object.
*
* @param[in] arg Right-hand side object.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue copy( const DiscreteTimeExport& arg
);
protected:
ExportVariable rk_diffsTemp3;
};
IntegratorExport* createDiscreteTimeExport( UserInteraction* _userInteraction,
const std::string &_commonHeaderName );
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_DT_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,92 @@
/*
* 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/integrator/erk2_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_ERK2_EXPORT_HPP
#define ACADO_TOOLKIT_ERK2_EXPORT_HPP
#include <acado/code_generation/integrators/erk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored explicit Runge-Kutta integrator of order 2 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class ExplicitRungeKutta2Export allows to export a tailored explicit Runge-Kutta integrator of order 2
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class ExplicitRungeKutta2Export : public ExplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExplicitRungeKutta2Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExplicitRungeKutta2Export( const ExplicitRungeKutta2Export& arg
);
/** Destructor.
*/
virtual ~ExplicitRungeKutta2Export( );
protected:
};
IntegratorExport* createExplicitRungeKutta2Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_ERK2_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,95 @@
/*
* 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/integrator/erk3_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_ERK3_EXPORT_HPP
#define ACADO_TOOLKIT_ERK3_EXPORT_HPP
#include <acado/code_generation/integrators/erk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored explicit Runge-Kutta integrator of order 3 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class ExplicitRungeKutta3Export allows to export a tailored explicit Runge-Kutta integrator of order 3
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class ExplicitRungeKutta3Export : public ExplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExplicitRungeKutta3Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExplicitRungeKutta3Export( const ExplicitRungeKutta3Export& arg
);
/** Destructor.
*/
virtual ~ExplicitRungeKutta3Export( );
protected:
};
IntegratorExport* createExplicitRungeKutta3Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_ERK3_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,94 @@
/*
* 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/integrator/erk4_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_ERK4_EXPORT_HPP
#define ACADO_TOOLKIT_ERK4_EXPORT_HPP
#include <acado/code_generation/integrators/erk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored explicit Runge-Kutta integrator of order 4 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class ExplicitRungeKutta4Export allows to export a tailored explicit Runge-Kutta integrator of order 4
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class ExplicitRungeKutta4Export : public ExplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExplicitRungeKutta4Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExplicitRungeKutta4Export( const ExplicitRungeKutta4Export& arg
);
/** Destructor.
*/
virtual ~ExplicitRungeKutta4Export( );
protected:
};
IntegratorExport* createExplicitRungeKutta4Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_ERK4_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,146 @@
/*
* 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/integrators/erk_3sweep_export.hpp
* \author Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_ERK_3SWP_EXPORT_HPP
#define ACADO_TOOLKIT_ERK_3SWP_EXPORT_HPP
#include <acado/code_generation/integrators/erk_adjoint_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored explicit Runge-Kutta integrator with three-sweeps second order sensitivity propagation for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class ThreeSweepsERKExport allows to export a tailored explicit Runge-Kutta integrator with three-sweeps second order sensitivity propagation
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class ThreeSweepsERKExport : public AdjointERKExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ThreeSweepsERKExport( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ThreeSweepsERKExport( const ThreeSweepsERKExport& arg
);
/** Destructor.
*/
virtual ~ThreeSweepsERKExport( );
/** Assigns Differential Equation to be used by the integrator.
*
* @param[in] rhs Right-hand side expression.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setDifferentialEquation( const Expression& rhs );
/** Initializes export of a tailored integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated integrator to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Exports source code of the auto-generated integrator into the given directory.
*
* @param[in] code Code block containing the auto-generated integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
protected:
Expression returnLowerTriangular( const Expression& expr );
Expression symmetricDoubleProduct( const Expression& expr, const Expression& arg );
/** Returns the largest global export variable.
*
* \return SUCCESSFUL_RETURN
*/
ExportVariable getAuxVariable() const;
protected:
ExportAcadoFunction diffs_sweep3; /**< Module to export ODE. */
ExportVariable rk_backward_sweep; /**< Variable containing intermediate results of a backward sweep of the RK integrator. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_ERK_3SWP_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,137 @@
/*
* 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/integrators/erk_adjoint_export.hpp
* \author Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_ERK_ADJOINT_EXPORT_HPP
#define ACADO_TOOLKIT_ERK_ADJOINT_EXPORT_HPP
#include <acado/code_generation/integrators/erk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored explicit Runge-Kutta integrator with adjoint first order sensitivity propagation for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class AdjointERKExport allows to export a tailored explicit Runge-Kutta integrator with adjoint first order sensitivity propagation
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class AdjointERKExport : public ExplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
AdjointERKExport( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
AdjointERKExport( const AdjointERKExport& arg
);
/** Destructor.
*/
virtual ~AdjointERKExport( );
/** Assigns Differential Equation to be used by the integrator.
*
* @param[in] rhs Right-hand side expression.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setDifferentialEquation( const Expression& rhs );
/** Initializes export of a tailored integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Adds all data declarations of the auto-generated integrator to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Exports source code of the auto-generated integrator into the given directory.
*
* @param[in] code Code block containing the auto-generated integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
protected:
protected:
ExportVariable rk_forward_sweep; /**< Variable containing intermediate results of a forward sweep of the RK integrator. */
// ExportVariable seed_backward; /**< Variable containing the seed for a backward propagation of the RK integrator. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_ERK_ADJOINT_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,229 @@
/*
* 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/integrators/erk_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_ERK_EXPORT_HPP
#define ACADO_TOOLKIT_ERK_EXPORT_HPP
#include <acado/code_generation/integrators/rk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored explicit Runge-Kutta integrator for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class ExplicitRungeKuttaExport allows to export a tailored explicit Runge-Kutta integrator
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class ExplicitRungeKuttaExport : public RungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExplicitRungeKuttaExport( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExplicitRungeKuttaExport( const ExplicitRungeKuttaExport& arg
);
/** Destructor.
*/
virtual ~ExplicitRungeKuttaExport( );
/** Initializes export of a tailored integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
/** Assigns Differential Equation to be used by the integrator.
*
* @param[in] rhs Right-hand side expression.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setDifferentialEquation( const Expression& rhs );
/** .
*
* @param[in] .
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setLinearInput( const DMatrix& M1, const DMatrix& A1, const DMatrix& B1 );
/** .
*
* @param[in] .
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setLinearOutput( const DMatrix& M3, const DMatrix& A3, const Expression& rhs );
/** .
*
* @param[in] .
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setLinearOutput( const DMatrix& M3, const DMatrix& A3, const std::string& _rhs3, const std::string& _diffs_rhs3 );
/** Adds all data declarations of the auto-generated integrator to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const;
/** Adds all function (forward) declarations of the auto-generated integrator to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const;
/** Exports source code of the auto-generated integrator into the given directory.
*
* @param[in] code Code block containing the auto-generated integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
);
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param rhs The expressions corresponding the output functions. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<Expression> rhs );
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param _outputNames The names of the output functions. \n
* \param _diffs_outputNames The names of the functions, evaluating the derivatives of the outputs. \n
* \param _dims_output The dimensions of the output functions. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<std::string> _outputNames,
const std::vector<std::string> _diffs_outputNames,
const std::vector<uint> _dims_output );
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param _outputNames The names of the output functions. \n
* \param _diffs_outputNames The names of the functions, evaluating the derivatives of the outputs. \n
* \param _dims_output The dimensions of the output functions. \n
* \param _outputDependencies A separate dependency matrix for each output. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<std::string> _outputNames,
const std::vector<std::string> _diffs_outputNames,
const std::vector<uint> _dims_output,
const std::vector<DMatrix> _outputDependencies );
protected:
/** Returns the largest global export variable.
*
* \return SUCCESSFUL_RETURN
*/
virtual ExportVariable getAuxVariable() const;
protected:
};
CLOSE_NAMESPACE_ACADO
#include <acado/code_generation/integrators/lifted_erk_export.hpp>
#include <acado/code_generation/integrators/erk_adjoint_export.hpp>
#include <acado/code_generation/integrators/erk_fob_export.hpp>
#include <acado/code_generation/integrators/erk_3sweep_export.hpp>
#include <acado/code_generation/integrators/erk_export.ipp>
#endif // ACADO_TOOLKIT_ERK_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,73 @@
/*
* 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/code_generation/integrators/erk_export.ipp
* \author Rien Quirynen
* \date 2014
*/
BEGIN_NAMESPACE_ACADO
//
// Create the integrator
//
inline ExplicitRungeKuttaExport* createExplicitRungeKuttaExport( UserInteraction* _userInteraction,
const std::string &_commonHeaderName )
{
int sensGen;
_userInteraction->get( DYNAMIC_SENSITIVITY, sensGen );
int liftedGen;
_userInteraction->get( IMPLICIT_INTEGRATOR_MODE, liftedGen );
if ( (ImplicitIntegratorMode)liftedGen == LIFTED && ((ExportSensitivityType)sensGen == FORWARD || (ExportSensitivityType)sensGen == INEXACT) ) {
return new LiftedERKExport(_userInteraction, _commonHeaderName);
}
else if ( (ExportSensitivityType)sensGen == FORWARD || (ExportSensitivityType)sensGen == NO_SENSITIVITY ) {
return new ExplicitRungeKuttaExport(_userInteraction, _commonHeaderName);
}
else if( (ExportSensitivityType)sensGen == BACKWARD ) {
return new AdjointERKExport(_userInteraction, _commonHeaderName);
}
else if( (ExportSensitivityType)sensGen == FORWARD_OVER_BACKWARD || (ExportSensitivityType)sensGen == SYMMETRIC_FB ) {
return new ForwardOverBackwardERKExport(_userInteraction, _commonHeaderName);
}
else if( (ExportSensitivityType)sensGen == SYMMETRIC ) {
return new ThreeSweepsERKExport(_userInteraction, _commonHeaderName);
}
else {
ACADOERROR( RET_INVALID_OPTION );
return new ExplicitRungeKuttaExport(_userInteraction, _commonHeaderName);
}
}
CLOSE_NAMESPACE_ACADO
// end of file.

View File

@ -0,0 +1,115 @@
/*
* 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/integrators/erk_fob_export.hpp
* \author Rien Quirynen
* \date 2014
*/
#ifndef ACADO_TOOLKIT_ERK_FOB_EXPORT_HPP
#define ACADO_TOOLKIT_ERK_FOB_EXPORT_HPP
#include <acado/code_generation/integrators/erk_adjoint_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored explicit Runge-Kutta integrator with forward-over-backward second order sensitivity propagation for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class ForwardOverBackwardERKExport allows to export a tailored explicit Runge-Kutta integrator with forward-over-backward second order sensitivity propagation
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class ForwardOverBackwardERKExport : public AdjointERKExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ForwardOverBackwardERKExport( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ForwardOverBackwardERKExport( const ForwardOverBackwardERKExport& arg
);
/** Destructor.
*/
virtual ~ForwardOverBackwardERKExport( );
/** Assigns Differential Equation to be used by the integrator.
*
* @param[in] rhs Right-hand side expression.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setDifferentialEquation( const Expression& rhs );
/** Initializes export of a tailored integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( );
protected:
Expression returnLowerTriangular( const Expression& expr );
protected:
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_ERK_FOB_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,95 @@
/*
* 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/integrator/explicit_euler_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_EXPLICIT_EULER_EXPORT_HPP
#define ACADO_TOOLKIT_EXPLICIT_EULER_EXPORT_HPP
#include <acado/code_generation/integrators/erk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored explicit Euler method for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class ExplicitEulerExport allows to export a tailored explicit Euler method
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class ExplicitEulerExport : public ExplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
ExplicitEulerExport( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExplicitEulerExport( const ExplicitEulerExport& arg
);
/** Destructor.
*/
virtual ~ExplicitEulerExport( );
protected:
};
IntegratorExport* createExplicitEulerExport( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPLICIT_EULER_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,96 @@
/*
* 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/code_generation/integrators/export_auxiliary_sim_functions.hpp
* \author Rien Quirynen
* \date 2013
*/
#ifndef ACADO_TOOLKIT_EXPORT_AUXILIARY_SIM_FUNCTIONS_HPP
#define ACADO_TOOLKIT_EXPORT_AUXILIARY_SIM_FUNCTIONS_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief A class for generating some helper functions.
*
* \ingroup AuxiliaryFunctionality
*
* \author Rien Quirynen
*/
class ExportAuxiliarySimFunctions
{
public:
/** Default constructor.
*
* @param[in] _moduleName Module name for customization.
* @param[in] _modulePrefix Module prefix for customization.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportAuxiliarySimFunctions( const std::string& _headerFileName,
const std::string& _sourceFileName,
const std::string& _moduleName = "acado",
const std::string& _modulePrefix = "ACADO",
const std::string& _commonHeaderName = "",
const std::string& _realString = "double",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = std::string()
);
/** Destructor. */
virtual ~ExportAuxiliarySimFunctions()
{}
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( );
/** Export the interface. */
returnValue exportCode();
private:
ExportTemplatedFile source;
ExportTemplatedFile header;
std::string moduleName;
std::string modulePrefix;
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_AUXILIARY_SIM_FUNCTIONS_HPP

View File

@ -0,0 +1,112 @@
/*
* 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 ...
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_EXPORT_MATLAB_INTEGRATOR_HPP
#define ACADO_TOOLKIT_EXPORT_MATLAB_INTEGRATOR_HPP
#include <acado/code_generation/export_templated_file.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief ...
*
* \ingroup ...
*
* \author Rien Quirynen
*/
class ExportMatlabIntegrator : public ExportTemplatedFile
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _templateName Name of a template.
* @param[in] _fileName Name of exported file.
* @param[in] _commonHeaderName Name of common header file to be included.
* @param[in] _realString std::string to be used to declare real variables.
* @param[in] _intString std::string to be used to declare integer variables.
* @param[in] _precision Number of digits to be used for exporting real values.
* @param[in] _commentString std::string to be used for exporting comments.
*
* \return SUCCESSFUL_RETURN
*/
ExportMatlabIntegrator( const std::string& _templateName,
const std::string& _fileName,
const std::string& _commonHeaderName = "",
const std::string& _realString = "real_t",
const std::string& _intString = "int",
int _precision = 16,
const std::string& _commentString = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportMatlabIntegrator( const ExportMatlabIntegrator& arg
);
/** Destructor.
*/
virtual ~ExportMatlabIntegrator( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
ExportMatlabIntegrator& operator=( const ExportMatlabIntegrator& arg
);
/** Configure the template
*
* \return SUCCESSFUL_RETURN
*/
returnValue configure( const uint firstOrder, const uint online, const uint debugMode, const uint timingCalls, const uint numStages );
protected:
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_EXPORT_MATLAB_INTEGRATOR_HPP

View File

@ -0,0 +1,94 @@
/*
* 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/integrator/gauss_legendre2_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_GAUSS_LEG2_EXPORT_HPP
#define ACADO_TOOLKIT_GAUSS_LEG2_EXPORT_HPP
#include <acado/code_generation/integrators/irk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored Gauss-Legendre method of order 2 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class GaussLegendre2Export allows to export a tailored Gauss-Legendre method of order 2
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class GaussLegendre2Export : public ImplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
GaussLegendre2Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
GaussLegendre2Export( const GaussLegendre2Export& arg
);
/** Destructor.
*/
virtual ~GaussLegendre2Export( );
protected:
};
IntegratorExport* createGaussLegendre2Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_GAUSS_LEG2_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,95 @@
/*
* 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/integrator/gauss_legendre4_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_GAUSS_LEG4_EXPORT_HPP
#define ACADO_TOOLKIT_GAUSS_LEG4_EXPORT_HPP
#include <acado/code_generation/integrators/irk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored Gauss-Legendre method of order 4 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class GaussLegendre4Export allows to export a tailored Gauss-Legendre method of order 4
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class GaussLegendre4Export : public ImplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
GaussLegendre4Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
GaussLegendre4Export( const GaussLegendre4Export& arg
);
/** Destructor.
*/
virtual ~GaussLegendre4Export( );
protected:
};
IntegratorExport* createGaussLegendre4Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_GAUSS_LEG4_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,96 @@
/*
* 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/integrator/gauss_legendre6_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_GAUSS_LEG6_EXPORT_HPP
#define ACADO_TOOLKIT_GAUSS_LEG6_EXPORT_HPP
#include <acado/code_generation/integrators/irk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored Gauss-Legendre method of order 6 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class GaussLegendre6Export allows to export a tailored Gauss-Legendre method of order 6
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class GaussLegendre6Export : public ImplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
GaussLegendre6Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
GaussLegendre6Export( const GaussLegendre6Export& arg
);
/** Destructor.
*/
virtual ~GaussLegendre6Export( );
protected:
};
IntegratorExport* createGaussLegendre6Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_GAUSS_LEG6_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,94 @@
/*
* 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/integrator/gauss_legendre8_export.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_GAUSS_LEG8_EXPORT_HPP
#define ACADO_TOOLKIT_GAUSS_LEG8_EXPORT_HPP
#include <acado/code_generation/integrators/irk_export.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored Gauss-Legendre method of order 8 for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class GaussLegendre8Export allows to export a tailored Gauss-Legendre method of order 8
* for fast model predictive control.
*
* \author Rien Quirynen
*/
class GaussLegendre8Export : public ImplicitRungeKuttaExport
{
//
// PUBLIC MEMBER FUNCTIONS:
//
private:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
GaussLegendre8Export( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
GaussLegendre8Export( const GaussLegendre8Export& arg
);
/** Destructor.
*/
virtual ~GaussLegendre8Export( );
protected:
};
IntegratorExport* createGaussLegendre8Export( UserInteraction* _userInteraction,
const std::string &_commonHeaderName);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_GAUSS_LEG6_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,508 @@
/*
* 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/integrator/integrator_export.hpp
* \author Hans Joachim Ferreau, Boris Houska, Rien Quirynen
* \date 2010-2011
*/
#ifndef ACADO_TOOLKIT_INTEGRATOR_EXPORT_HPP
#define ACADO_TOOLKIT_INTEGRATOR_EXPORT_HPP
#include <acado/matrix_vector/matrix_vector.hpp>
#include <acado/code_generation/export_algorithm_factory.hpp>
#include <acado/ocp/model_data.hpp>
#include <acado/code_generation/integrators/integrator_export_types.hpp>
BEGIN_NAMESPACE_ACADO
/**
* \brief Allows to export a tailored integrator for fast model predictive control.
*
* \ingroup NumericalAlgorithms
*
* The class IntegratorExport allows to export a tailored integrator
* for fast model predictive control.
*
* \author Hans Joachim Ferreau, Boris Houska, Rien Quirynen
*/
class IntegratorExport : public ExportAlgorithm
{
//
// PUBLIC MEMBER FUNCTIONS:
//
public:
/** Default constructor.
*
* @param[in] _userInteraction Pointer to corresponding user interface.
* @param[in] _commonHeaderName Name of common header file to be included.
*/
IntegratorExport( UserInteraction* _userInteraction = 0,
const std::string& _commonHeaderName = ""
);
/** Copy constructor (deep copy).
*
* @param[in] arg Right-hand side object.
*/
IntegratorExport( const IntegratorExport& arg
);
/** Destructor.
*/
virtual ~IntegratorExport( );
/** Assignment operator (deep copy).
*
* @param[in] arg Right-hand side object.
*/
IntegratorExport& operator=( const IntegratorExport& arg
);
/** Initializes export of a tailored integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setup( ) = 0;
/** Assigns Differential Equation to be used by the integrator.
*
* @param[in] rhs Right-hand side expression.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setDifferentialEquation( const Expression& rhs ) = 0;
/** .
*
* @param[in] .
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setLinearInput( const DMatrix& M1, const DMatrix& A1, const DMatrix& B1 );
/** .
*
* @param[in] .
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setLinearOutput( const DMatrix& M3, const DMatrix& A3, const Expression& rhs );
/** .
*
* @param[in] .
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setNonlinearFeedback( const DMatrix& C, const Expression& feedb );
/** .
*
* @param[in] .
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setLinearOutput( const DMatrix& M3, const DMatrix& A3, const std::string& _rhs3, const std::string& _diffs_rhs3 );
/** Assigns the model to be used by the integrator.
*
* @param[in] _name_ODE Name of the function, evaluating the ODE right-hand side.
* @param[in] _name_diffs_ODE Name of the function, evaluating the derivatives of the ODE right-hand side.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setModel( const std::string& _name_ODE,
const std::string& _name_diffs_ODE );
/** Sets a polynomial NARX model to be used by the integrator.
*
* @param[in] delay The delay for the states in the NARX model.
* @param[in] parms The parameters defining the polynomial NARX model.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setNARXmodel( const uint delay, const DMatrix& parms ) = 0;
/** Passes all the necessary model data to the integrator.
*
* @param[in] data The model data.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setModelData( const ModelData& data );
/** Exports the code needed to update the sensitivities of the states, defined by the linear input system.
*
* @param[in] block The block to which the code will be exported.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue updateInputSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& tmp_index );
/** Exports the code needed to propagate the sensitivities of the states, defined by the linear input system.
*
* @param[in] block The block to which the code will be exported.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue propagateInputSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& index3,
const ExportIndex& tmp_index );
/** Exports the code needed to update the sensitivities of the states defined by the nonlinear, fully implicit system.
*
* @param[in] block The block to which the code will be exported.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue updateImplicitSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& tmp_index );
/** Exports the code needed to propagate the sensitivities of the states defined by the nonlinear, fully implicit system.
*
* @param[in] block The block to which the code will be exported.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue propagateImplicitSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& _index3,
const ExportIndex& tmp_index );
/** Exports the code needed to update the sensitivities of the states, defined by the linear output system.
*
* @param[in] block The block to which the code will be exported.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue updateOutputSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& tmp_index );
/** Exports the code needed to propagate the sensitivities of the states, defined by the linear output system.
*
* @param[in] block The block to which the code will be exported.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue propagateOutputSystem( ExportStatementBlock* block,
const ExportIndex& index1,
const ExportIndex& index2,
const ExportIndex& index3,
const ExportIndex& tmp_index );
/** Sets integration grid (this grid is expected to be non equidistant, otherwise use the other setGrid function).
*
* @param[in] _grid integration grid
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setGrid( const Grid& _grid );
/** Adds all data declarations of the auto-generated integrator to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
ExportStruct dataStruct = ACADO_ANY
) const = 0;
/** Adds all function (forward) declarations of the auto-generated integrator to given list of declarations.
*
* @param[in] declarations List of declarations.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
) const = 0;
/** Exports source code of the auto-generated integrator into the given directory.
*
* @param[in] code Code block containing the auto-generated integrator.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue getCode( ExportStatementBlock& code
) = 0;
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param rhs The expressions corresponding the output functions. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<Expression> rhs ) = 0;
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param _outputNames The names of the output functions. \n
* \param _diffs_outputNames The names of the functions, evaluating the derivatives of the outputs. \n
* \param _dims_output The dimensions of the output functions. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<std::string> _outputNames,
const std::vector<std::string> _diffs_outputNames,
const std::vector<uint> _dims_output ) = 0;
/** Sets up the output with the grids for the different output functions. \n
* \n
* \param outputGrids_ The vector containing a grid for each output function. \n
* \param _outputNames The names of the output functions. \n
* \param _diffs_outputNames The names of the functions, evaluating the derivatives of the outputs. \n
* \param _dims_output The dimensions of the output functions. \n
* \param _outputDependencies A separate dependency matrix for each output. \n
* \n
* \return SUCCESSFUL_RETURN
*/
virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
const std::vector<std::string> _outputNames,
const std::vector<std::string> _diffs_outputNames,
const std::vector<uint> _dims_output,
const std::vector<DMatrix> _outputDependencies ) = 0;
/** Returns the grid of the integrator. \n
*
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue getGrid( Grid& grid_ ) const;
/** Returns the number of integration steps along the prediction horizon. \n
*
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue getNumSteps( DVector& _numSteps ) const;
/** Returns the output expressions. \n
*
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue getOutputExpressions( std::vector<Expression>& outputExpressions_ ) const;
/** Returns the output grids. \n
*
* \return SUCCESSFUL_RETURN \n
*/
virtual returnValue getOutputGrids( std::vector<Grid>& outputGrids_ ) const;
/** Returns whether the grid is equidistant. \n
*
* \return true iff the grid is equidistant, false otherwise. \n
*/
virtual bool equidistantControlGrid( ) const;
const std::string getNameRHS() const;
const std::string getNameDiffsRHS() const;
virtual const std::string getNameFullRHS() const;
const std::string getNameOutputRHS() const;
const std::string getNameOutputDiffs() const;
const std::string getNameOUTPUT( uint index ) const;
const std::string getNameDiffsOUTPUT( uint index ) const;
uint getDimOUTPUT( uint index ) const;
protected:
/** .
*
* @param[in] A3 .
*
* \return SUCCESSFUL_RETURN
*/
DMatrix expandOutputMatrix( const DMatrix& A3 );
/** Copies all class members from given object.
*
* @param[in] arg Right-hand side object.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue copy( const IntegratorExport& arg
);
/** Frees internal dynamic memory to yield an empty function.
*
* \return SUCCESSFUL_RETURN
*/
virtual returnValue clear( );
/** Get the index of the integration interval, corresponding a certain time.
*
* @param[in] time The time.
*
* \return The index of the integration interval.
*/
uint getIntegrationInterval( double time );
/** Returns the largest global export variable.
*
* \return SUCCESSFUL_RETURN
*/
virtual ExportVariable getAuxVariable() const = 0;
protected:
uint NX1;
uint NX2;
uint NX3;
uint NDX3;
uint NXA3;
uint diffsDim; /**< This is the total number of sensitivities needed. */
uint inputDim; /**< This is the dimension of the input to the integrator. */
bool timeDependant;
DMatrix M11, A11, B11;
DMatrix A33, M33;
bool exportRhs; /**< True if the right-hand side and their derivatives should be exported too. */
bool crsFormat; /**< True if the CRS format is used for the jacobian of output functions. */
Grid grid; /**< Evaluation grid along the prediction horizon. */
DVector numSteps; /**< The number of integration steps per shooting interval. */
ExportFunction fullRhs; /**< Function that evaluates the full right-hand side. */
ExportVariable rhs_in;
ExportVariable rhs_out;
ExportFunction integrate; /**< Function that integrates the exported ODE. */
ExportAcadoFunction rhs; /**< Module to export ODE. */
ExportAcadoFunction diffs_rhs; /**< Module to export the evaluation of the derivatives of the ordinary differential equations. */
ExportAcadoFunction lin_input;
ExportAcadoFunction rhs3;
ExportAcadoFunction diffs_rhs3;
ExportVariable error_code; /**< Variable containing the error code, returned by the integrator. */
ExportVariable reset_int; /**< Variable containing the number of the current integration step. */
ExportVariable rk_index; /**< Variable containing the number of the current shooting interval. */
ExportVariable rk_ttt; /**< Variable containing the integration time. */
ExportVariable rk_xxx; /**< Variable containing the current integrator state. */
ExportVariable rk_eta; /**< Variable containing the inputs or the results of the integrator. */
ExportVariable rk_diffsPrev1;
ExportVariable rk_diffsNew1;
ExportVariable rk_diffsPrev2; /**< Variable containing the sensitivities from the previous integration step. */
ExportVariable rk_diffsNew2; /**< Variable containing the derivatives wrt the previous values. */
ExportVariable rk_diffsTemp2; /**< Variable containing intermediate results of evaluations of the derivatives of the differential equations (ordinary and algebraic). */
ExportVariable rk_diffsNew3;
ExportVariable rk_diffsPrev3;
DifferentialState x; /**< The differential states in the model. */
DifferentialStateDerivative dx; /**< The differential state derivatives in the model. */
AlgebraicState z; /**< The algebraic states in the model. */
Control u; /**< The control inputs in the model. */
OnlineData od; /**< The "online" data values in the model. */
std::vector<Grid> outputGrids; /**< A separate grid for each output. */
std::vector<Expression> outputExpressions; /**< A separate expression for each output. */
std::vector<DMatrix> outputDependencies; /**< A separate dependency matrix for each output. */
std::vector<ExportAcadoFunction> outputs; /**< Module to export output functions. */
std::vector<ExportAcadoFunction> diffs_outputs; /**< Module to export the evaluation of the derivatives of the output functions. */
std::vector<uint> num_outputs; /**< A separate dimension for each output. */
};
/** Factory for creation of exported integrators.*/
typedef ExportAlgorithmFactory<IntegratorExport, ExportIntegratorType> IntegratorExportFactory;
/** Shared pointer to an integrator. */
typedef std::shared_ptr< IntegratorExport > IntegratorExportPtr;
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_INTEGRATOR_EXPORT_HPP
// end of file.

View File

@ -0,0 +1,77 @@
/*
* 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/integrator/integrator_export_types.hpp
* \author Hans Joachim Ferreau, Boris Houska, Rien Quirynen, Milan Vukov
* \date 2010-2014
*/
#ifndef ACADO_TOOLKIT_INTEGRATOR_EXPORT_TYPES_HPP
#define ACADO_TOOLKIT_INTEGRATOR_EXPORT_TYPES_HPP
#include <acado/utils/acado_namespace_macros.hpp>
BEGIN_NAMESPACE_ACADO
/** Summarizes all available integrators for code generation. */
enum ExportIntegratorType{
INT_EX_EULER, /**< Explicit Euler method. */
INT_RK2, /**< Explicit Runge-Kutta integrator of order 2. */
INT_RK3, /**< Explicit Runge-Kutta integrator of order 3. */
INT_RK4, /**< Explicit Runge-Kutta integrator of order 4. */
INT_IRK_GL2, /**< Gauss-Legendre integrator of order 2 (Continuous output Implicit Runge-Kutta). */
INT_IRK_GL4, /**< Gauss-Legendre integrator of order 4 (Continuous output Implicit Runge-Kutta). */
INT_IRK_GL6, /**< Gauss-Legendre integrator of order 6 (Continuous output Implicit Runge-Kutta). */
INT_IRK_GL8, /**< Gauss-Legendre integrator of order 8 (Continuous output Implicit Runge-Kutta). */
INT_IRK_RIIA1, /**< Radau IIA integrator of order 1 (Continuous output Implicit Runge-Kutta). */
INT_IRK_RIIA3, /**< Radau IIA integrator of order 3 (Continuous output Implicit Runge-Kutta). */
INT_IRK_RIIA5, /**< Radau IIA integrator of order 5 (Continuous output Implicit Runge-Kutta). */
INT_DIRK3, /**< Diagonally Implicit 2-stage Runge-Kutta integrator of order 3 (Continuous output). */
INT_DIRK4, /**< Diagonally Implicit 3-stage Runge-Kutta integrator of order 4 (Continuous output). */
INT_DIRK5, /**< Diagonally Implicit 5-stage Runge-Kutta integrator of order 5 (Continuous output). */
INT_DT, /**< An algorithm which handles the simulation and sensitivity generation for a discrete time state-space model. */
INT_NARX /**< An algorithm which handles the simulation and sensitivity generation for a NARX model. */
};
/** Summarizes all possible sensitivity generation types for exported integrators. */
enum ExportSensitivityType{
NO_SENSITIVITY, /**< No sensitivities are computed, if possible. */
FORWARD, /**< Sensitivities are computed in forward mode. */
BACKWARD, /**< Sensitivities are computed in backward mode. */
FORWARD_OVER_BACKWARD, /**< Sensitivities (first and second order) are computed. */
SYMMETRIC, /**< Sensitivities (first and second order) are computed. */
SYMMETRIC_FB, /**< Sensitivities (first and second order) are computed. */
INEXACT /**< Inexact sensitivities are computed by Newton iterations. */
};
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_INTEGRATOR_EXPORT_TYPES_HPP

View File

@ -0,0 +1,59 @@
/*
* 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/code_generation/integrators/integrator_generation.hpp
* \author Rien Quirynen
* \date 2012
*/
#ifndef ACADO_TOOLKIT_INTEGRATOR_GENERATION_HPP
#define ACADO_TOOLKIT_INTEGRATOR_GENERATION_HPP
// LIST OF HEADER FILES:
// -----------------------------------------------------
#include <acado/code_generation/integrators/integrator_export.hpp>
#include <acado/code_generation/integrators/rk_export.hpp>
#include <acado/code_generation/integrators/erk_export.hpp>
#include <acado/code_generation/integrators/explicit_euler_export.hpp>
#include <acado/code_generation/integrators/erk2_export.hpp>
#include <acado/code_generation/integrators/erk3_export.hpp>
#include <acado/code_generation/integrators/erk4_export.hpp>
#include <acado/code_generation/integrators/irk_export.hpp>
#include <acado/code_generation/integrators/gauss_legendre2_export.hpp>
#include <acado/code_generation/integrators/gauss_legendre4_export.hpp>
#include <acado/code_generation/integrators/gauss_legendre6_export.hpp>
#include <acado/code_generation/integrators/gauss_legendre8_export.hpp>
#include <acado/code_generation/integrators/radau_IIA1_export.hpp>
#include <acado/code_generation/integrators/radau_IIA3_export.hpp>
#include <acado/code_generation/integrators/radau_IIA5_export.hpp>
// -----------------------------------------------------
#endif // ACADO_TOOLKIT_INTEGRATOR_GENERATION_HPP

Some files were not shown because too many files have changed in this diff Show More