crocoddyl  1.8.1
Contact RObot COntrol by Differential DYnamic programming Library (Crocoddyl)
callbacks.cpp
1 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019, LAAS-CNRS
5 // Copyright note valid unless otherwise stated in individual files.
6 // All rights reserved.
8 
9 #include "crocoddyl/core/utils/callbacks.hpp"
10 
11 namespace crocoddyl {
12 
13 CallbackVerbose::CallbackVerbose(VerboseLevel level) : CallbackAbstract(), level(level) {}
14 
15 CallbackVerbose::~CallbackVerbose() {}
16 
18  if (solver.get_iter() % 10 == 0) {
19  switch (level) {
20  case _1: {
21  std::cout << "iter \t cost \t stop \t grad \t xreg";
22  std::cout << " \t ureg \t step \t feas\n";
23  break;
24  }
25  case _2: {
26  std::cout << "iter \t cost \t stop \t grad \t xreg";
27  std::cout << " \t ureg \t step \t feas \tdV-exp \t dV\n";
28  break;
29  }
30  default: {
31  std::cout << "iter \t cost \t stop \t grad \t xreg";
32  std::cout << " \t ureg \t step \t feas\n";
33  }
34  }
35  }
36 
37  switch (level) {
38  case _1: {
39  std::cout << std::setw(4) << solver.get_iter() << " ";
40  std::cout << std::scientific << std::setprecision(5) << solver.get_cost() << " ";
41  std::cout << solver.get_stop() << " " << -solver.get_d()[1] << " ";
42  std::cout << solver.get_xreg() << " " << solver.get_ureg() << " ";
43  std::cout << std::fixed << std::setprecision(4) << solver.get_steplength() << " ";
44  std::cout << solver.get_is_feasible() << '\n';
45  break;
46  }
47  case _2: {
48  std::cout << std::setw(4) << solver.get_iter() << " ";
49  std::cout << std::scientific << std::setprecision(5) << solver.get_cost() << " ";
50  std::cout << solver.get_stop() << " " << -solver.get_d()[1] << " ";
51  std::cout << solver.get_xreg() << " " << solver.get_ureg() << " ";
52  std::cout << std::fixed << std::setprecision(4) << solver.get_steplength() << " ";
53  std::cout << solver.get_is_feasible() << " ";
54  std::cout << std::scientific << std::setprecision(5) << solver.get_dVexp() << " ";
55  std::cout << solver.get_dV() << '\n';
56  break;
57  }
58  default: {
59  std::cout << std::setw(4) << solver.get_iter() << " ";
60  std::cout << std::scientific << std::setprecision(5) << solver.get_cost() << " ";
61  std::cout << solver.get_stop() << " " << -solver.get_d()[1] << " ";
62  std::cout << solver.get_xreg() << " " << solver.get_ureg() << " ";
63  std::cout << std::fixed << std::setprecision(4) << solver.get_steplength() << " ";
64  std::cout << solver.get_is_feasible() << '\n';
65  }
66  }
67  std::cout << std::flush;
68 }
69 
70 } // namespace crocoddyl
std::size_t get_iter() const
Return the number of iterations performed by the solver.
double get_stop() const
Return the value computed by stoppingCriteria()
double get_dVexp() const
Return the expected cost reduction.
double get_xreg() const
Return the state regularization value.
double get_cost() const
Return the total cost.
Abstract class for optimal control solvers.
Definition: solver-base.hpp:50
bool get_is_feasible() const
Return the feasibility status of the trajectory.
double get_dV() const
Return the cost reduction.
virtual void operator()(SolverAbstract &solver)
Run the callback function given a solver.
Definition: callbacks.cpp:17
const Eigen::Vector2d & get_d() const
Return the LQ approximation of the expected improvement.
double get_ureg() const
Return the control regularization value.
double get_steplength() const
Return the step length.