finite_differences_variable_grid.h
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement
4  *
5  * Copyright (c) 2020,
6  * TU Dortmund - Institute of Control Theory and Systems Engineering.
7  * All rights reserved.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  *
22  * Authors: Christoph Rösmann
23  *********************************************************************/
24 
25 #ifndef SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_STRUCTURED_OCP_DISCRETIZATION_GRIDS_FINITE_DIFFERENCES_VARIABLE_GRID_H_
26 #define SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_STRUCTURED_OCP_DISCRETIZATION_GRIDS_FINITE_DIFFERENCES_VARIABLE_GRID_H_
27 
29 
30 #include <memory>
31 
32 namespace corbo {
33 
34 class FiniteDifferencesVariableGrid : public FiniteDifferencesGrid
35 {
36  public:
37  using Ptr = std::shared_ptr<FiniteDifferencesVariableGrid>;
38  using UPtr = std::unique_ptr<FiniteDifferencesVariableGrid>;
39 
41 
43  virtual ~FiniteDifferencesVariableGrid() = default;
44 
46  DiscretizationGridInterface::Ptr getInstance() const override { return std::make_shared<FiniteDifferencesVariableGrid>(); }
47 
49  static Factory<DiscretizationGridInterface>& getFactory() { return Factory<DiscretizationGridInterface>::instance(); }
50 
51  void setDtBounds(double dt_lb, double dt_ub);
52  void setNmin(int n_min) { _n_min = n_min; }
54  void setGridAdaptTimeBasedSingleStep(int n_max, double dt_hyst_ratio = 0.1, bool adapt_first_iter = false);
55  void setGridAdaptTimeBasedAggressiveEstimate(int n_max, double dt_hyst_ratio = 0.1, bool adapt_first_iter = false);
56  void setGridAdaptSimpleShrinkingHorizon(bool adapt_first_iter = false);
57 
58 #ifdef MESSAGE_SUPPORT
59  void fromMessage(const messages::FiniteDifferencesVariableGrid& message, std::stringstream* issues);
60  void toMessage(messages::FiniteDifferencesVariableGrid& message) const;
61 
62  void fromMessage(const messages::DiscretizationGrid& message, std::stringstream* issues) override
63  {
64  fromMessage(message.finite_differences_variable_grid(), issues);
65  }
66  void toMessage(messages::DiscretizationGrid& message) const override { toMessage(*message.mutable_finite_differences_variable_grid()); }
67 #endif
68 
69  protected:
70  bool isDtFixedIntended() const override { return false; }
71 
72  bool adaptGrid(bool new_run, NlpFunctions& nlp_fun) override;
73  bool adaptGridTimeBasedSingleStep(NlpFunctions& nlp_fun);
74  bool adaptGridTimeBasedAggressiveEstimate(NlpFunctions& nlp_fun);
75  bool adaptGridSimpleShrinkingHorizon(NlpFunctions& nlp_fun);
76 
77  bool isMovingHorizonWarmStartActive() const override { return false; }
78  bool isGridAdaptActive() const override { return true; }
79 
80  // auto resize stuff
82  int _n_max = 1000;
83  double _dt_hyst_ratio = 0.1;
84  int _n_min = 2;
85  bool _adapt_first_iter = false;
86 };
87 
89 
90 } // namespace corbo
91 
92 #endif // SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_STRUCTURED_OCP_DISCRETIZATION_GRIDS_FINITE_DIFFERENCES_VARIABLE_GRID_H_
corbo::FiniteDifferencesVariableGrid::FiniteDifferencesVariableGrid
FiniteDifferencesVariableGrid()=default
corbo::FiniteDifferencesVariableGrid::isDtFixedIntended
bool isDtFixedIntended() const override
Definition: finite_differences_variable_grid.h:114
finite_differences_grid.h
corbo::FiniteDifferencesVariableGrid::_n_min
int _n_min
Definition: finite_differences_variable_grid.h:128
corbo::FiniteDifferencesVariableGrid
Definition: finite_differences_variable_grid.h:56
corbo::FiniteDifferencesVariableGrid::GridAdaptStrategy
GridAdaptStrategy
Definition: finite_differences_variable_grid.h:84
corbo::FiniteDifferencesVariableGrid::setGridAdaptTimeBasedAggressiveEstimate
void setGridAdaptTimeBasedAggressiveEstimate(int n_max, double dt_hyst_ratio=0.1, bool adapt_first_iter=false)
Definition: finite_differences_variable_grid.cpp:74
corbo::FiniteDifferencesVariableGrid::setGridAdaptTimeBasedSingleStep
void setGridAdaptTimeBasedSingleStep(int n_max, double dt_hyst_ratio=0.1, bool adapt_first_iter=false)
Definition: finite_differences_variable_grid.cpp:66
corbo::FiniteDifferencesVariableGrid::_n_max
int _n_max
Definition: finite_differences_variable_grid.h:126
corbo::FiniteDifferencesVariableGrid::adaptGridTimeBasedSingleStep
bool adaptGridTimeBasedSingleStep(NlpFunctions &nlp_fun)
Definition: finite_differences_variable_grid.cpp:123
corbo::FiniteDifferencesVariableGrid::_dt_hyst_ratio
double _dt_hyst_ratio
Definition: finite_differences_variable_grid.h:127
corbo
Definition: communication/include/corbo-communication/utilities.h:37
corbo::FiniteDifferencesVariableGrid::_grid_adapt
GridAdaptStrategy _grid_adapt
Definition: finite_differences_variable_grid.h:125
corbo::FiniteDifferencesVariableGrid::Ptr
std::shared_ptr< FiniteDifferencesVariableGrid > Ptr
Definition: finite_differences_variable_grid.h:81
corbo::FiniteDifferencesVariableGrid::isMovingHorizonWarmStartActive
bool isMovingHorizonWarmStartActive() const override
Definition: finite_differences_variable_grid.h:121
corbo::FiniteDifferencesVariableGrid::setDtBounds
void setDtBounds(double dt_lb, double dt_ub)
Definition: finite_differences_variable_grid.cpp:60
FACTORY_REGISTER_DISCRETIZATION_GRID
#define FACTORY_REGISTER_DISCRETIZATION_GRID(type)
Definition: discretization_grid_interface.h:196
corbo::FiniteDifferencesVariableGrid::GridAdaptStrategy::TimeBasedSingleStep
@ TimeBasedSingleStep
corbo::DiscretizationGridInterface::Ptr
std::shared_ptr< DiscretizationGridInterface > Ptr
Definition: discretization_grid_interface.h:107
corbo::Factory::instance
static Factory & instance()
< Retrieve static instance of the factory
Definition: factory.h:116
corbo::FiniteDifferencesVariableGrid::adaptGridSimpleShrinkingHorizon
bool adaptGridSimpleShrinkingHorizon(NlpFunctions &nlp_fun)
Definition: finite_differences_variable_grid.cpp:176
corbo::FiniteDifferencesVariableGrid::getInstance
DiscretizationGridInterface::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
Definition: finite_differences_variable_grid.h:90
corbo::FiniteDifferencesVariableGrid::GridAdaptStrategy::TimeBasedAggressiveEstimate
@ TimeBasedAggressiveEstimate
corbo::FiniteDifferencesVariableGrid::GridAdaptStrategy::SimpleShrinkingHorizon
@ SimpleShrinkingHorizon
corbo::FiniteDifferencesVariableGrid::setGridAdaptSimpleShrinkingHorizon
void setGridAdaptSimpleShrinkingHorizon(bool adapt_first_iter=false)
Definition: finite_differences_variable_grid.cpp:82
corbo::FiniteDifferencesVariableGrid::setNmin
void setNmin(int n_min)
Definition: finite_differences_variable_grid.h:96
corbo::FiniteDifferencesVariableGrid::isGridAdaptActive
bool isGridAdaptActive() const override
Definition: finite_differences_variable_grid.h:122
corbo::FiniteDifferencesVariableGrid::~FiniteDifferencesVariableGrid
virtual ~FiniteDifferencesVariableGrid()=default
corbo::FiniteDifferencesVariableGrid::getFactory
static Factory< DiscretizationGridInterface > & getFactory()
Get access to the associated factory.
Definition: finite_differences_variable_grid.h:93
corbo::FiniteDifferencesVariableGrid::UPtr
std::unique_ptr< FiniteDifferencesVariableGrid > UPtr
Definition: finite_differences_variable_grid.h:82
corbo::FiniteDifferencesVariableGrid::adaptGridTimeBasedAggressiveEstimate
bool adaptGridTimeBasedAggressiveEstimate(NlpFunctions &nlp_fun)
Definition: finite_differences_variable_grid.cpp:147
corbo::FiniteDifferencesVariableGrid::disableGridAdaptation
void disableGridAdaptation()
Definition: finite_differences_variable_grid.h:97
corbo::FiniteDifferencesVariableGrid::adaptGrid
bool adaptGrid(bool new_run, NlpFunctions &nlp_fun) override
Definition: finite_differences_variable_grid.cpp:88
corbo::FiniteDifferencesVariableGrid::_adapt_first_iter
bool _adapt_first_iter
Definition: finite_differences_variable_grid.h:129
corbo::FiniteDifferencesVariableGrid::GridAdaptStrategy::NoGridAdapt
@ NoGridAdapt


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:45