bring over phonelibs minus frida-gum and qsml
parent
6abffe0ede
commit
da6863f427
|
@ -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')
|
|
@ -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 )
|
||||
{}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
libacado_toolkit_s.so.1
|
|
@ -0,0 +1 @@
|
|||
libacado_toolkit_s.so.1.2.2beta
|
Binary file not shown.
|
@ -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
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
||||
*/
|
||||
|
|
@ -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
|
||||
*/
|
||||
|
|
@ -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
|
||||
*/
|
|
@ -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
|
||||
*/
|
|
@ -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
|
||||
*/
|
|
@ -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
|
||||
*/
|
|
@ -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
|
||||
*/
|
|
@ -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
|
||||
*/
|
|
@ -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
|
||||
*/
|
|
@ -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
|
||||
*/
|
|
@ -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
|
||||
*/
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
||||
*/
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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
|
||||
*/
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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
|
||||
*/
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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
Loading…
Reference in New Issue