GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: unittest/factory/solver.cpp Lines: 52 62 83.9 %
Date: 2024-02-13 11:12:33 Branches: 29 55 52.7 %

Line Branch Exec Source
1
///////////////////////////////////////////////////////////////////////////////
2
// BSD 3-Clause License
3
//
4
// Copyright (C) 2019-2020, LAAS-CNRS, New York University,
5
//                          Max Planck Gesellschaft, University of Edinburgh
6
// Copyright note valid unless otherwise stated in individual files.
7
// All rights reserved.
8
///////////////////////////////////////////////////////////////////////////////
9
10
#include "solver.hpp"
11
12
#include "crocoddyl/core/solvers/box-ddp.hpp"
13
#include "crocoddyl/core/solvers/box-fddp.hpp"
14
#include "crocoddyl/core/solvers/ddp.hpp"
15
#include "crocoddyl/core/solvers/fddp.hpp"
16
#ifdef CROCODDYL_WITH_IPOPT
17
#include "crocoddyl/core/solvers/ipopt.hpp"
18
#endif
19
#include "crocoddyl/core/utils/exception.hpp"
20
21
namespace crocoddyl {
22
namespace unittest {
23
24
const std::vector<SolverTypes::Type> SolverTypes::all(SolverTypes::init_all());
25
26
15
std::ostream& operator<<(std::ostream& os, SolverTypes::Type type) {
27


15
  switch (type) {
28
    case SolverTypes::SolverKKT:
29
      os << "SolverKKT";
30
      break;
31
3
    case SolverTypes::SolverDDP:
32
3
      os << "SolverDDP";
33
3
      break;
34
3
    case SolverTypes::SolverFDDP:
35
3
      os << "SolverFDDP";
36
3
      break;
37
3
    case SolverTypes::SolverBoxDDP:
38
3
      os << "SolverBoxDDP";
39
3
      break;
40
3
    case SolverTypes::SolverBoxFDDP:
41
3
      os << "SolverBoxFDDP";
42
3
      break;
43
#ifdef CROCODDYL_WITH_IPOPT
44
3
    case SolverTypes::SolverIpopt:
45
3
      os << "SolverIpopt";
46
3
      break;
47
#endif
48
    case SolverTypes::NbSolverTypes:
49
      os << "NbSolverTypes";
50
      break;
51
    default:
52
      break;
53
  }
54
15
  return os;
55
}
56
57
25
SolverFactory::SolverFactory() {}
58
59
25
SolverFactory::~SolverFactory() {}
60
61
40
boost::shared_ptr<crocoddyl::SolverAbstract> SolverFactory::create(
62
    SolverTypes::Type solver_type, ActionModelTypes::Type action_type,
63
    size_t T) const {
64
40
  boost::shared_ptr<crocoddyl::SolverAbstract> solver;
65
  boost::shared_ptr<crocoddyl::ActionModelAbstract> model =
66

80
      ActionModelFactory().create(action_type);
67
  boost::shared_ptr<crocoddyl::ActionModelAbstract> model2 =
68

80
      ActionModelFactory().create(action_type, true);
69
  std::vector<boost::shared_ptr<crocoddyl::ActionModelAbstract> >
70
80
      running_models;
71
40
  const size_t halfway = T / 2;
72
240
  for (size_t i = 0; i < halfway; ++i) {
73
200
    running_models.push_back(model);
74
  }
75
240
  for (size_t i = 0; i < T - halfway; ++i) {
76
200
    running_models.push_back(model2);
77
  }
78
79
  boost::shared_ptr<crocoddyl::ShootingProblem> problem =
80
40
      boost::make_shared<crocoddyl::ShootingProblem>(model->get_state()->zero(),
81
80
                                                     running_models, model);
82
83

40
  switch (solver_type) {
84
25
    case SolverTypes::SolverKKT:
85
25
      solver = boost::make_shared<crocoddyl::SolverKKT>(problem);
86
25
      break;
87
3
    case SolverTypes::SolverDDP:
88
3
      solver = boost::make_shared<crocoddyl::SolverDDP>(problem);
89
3
      break;
90
3
    case SolverTypes::SolverFDDP:
91
3
      solver = boost::make_shared<crocoddyl::SolverFDDP>(problem);
92
3
      break;
93
3
    case SolverTypes::SolverBoxDDP:
94
3
      solver = boost::make_shared<crocoddyl::SolverBoxDDP>(problem);
95
3
      break;
96
3
    case SolverTypes::SolverBoxFDDP:
97
3
      solver = boost::make_shared<crocoddyl::SolverBoxFDDP>(problem);
98
3
      break;
99
#ifdef CROCODDYL_WITH_IPOPT
100
3
    case SolverTypes::SolverIpopt:
101
3
      solver = boost::make_shared<crocoddyl::SolverIpopt>(problem);
102
3
      break;
103
#endif
104
    default:
105
      throw_pretty(__FILE__ ": Wrong SolverTypes::Type given");
106
      break;
107
  }
108
80
  return solver;
109
}
110
111
}  // namespace unittest
112
}  // namespace crocoddyl