PANOC-ALM  quadratic-penalty
Nonconvex constrained optimization
CasADiFunctionWrapper.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <casadi/core/function.hpp>
4 
5 #include <panoc-alm/util/vec.hpp>
6 
7 #include <cassert>
8 #include <vector>
9 
12 
15 template <size_t N_in, size_t N_out>
17  public:
18  CasADiFunctionEvaluator(casadi::Function &&f)
19  : fun(std::move(f)), iwork(fun.sz_iw()), dwork(fun.sz_w()) {
20  assert(N_in == fun.n_in());
21  assert(N_out == fun.n_out());
22  }
23 
24  protected:
25  void operator()(const double *const *in, double *const *out) const {
26  fun(const_cast<const double **>(in), const_cast<double **>(out),
27  iwork.data(), dwork.data(), 0);
28  }
29 
30  public:
31  void operator()(const double *const (&in)[N_in],
32  double *const (&out)[N_out]) const {
33  this->operator()(&in[0], &out[0]);
34  }
35 
36  private:
37  casadi::Function fun;
38  mutable std::vector<casadi_int> iwork;
39  mutable std::vector<double> dwork;
40 };
41 
44  public:
45  CasADiFun_1Vi1So(casadi::Function &&f) : fun(std::move(f)) {}
46 
47  double operator()(pa::crvec x) const {
48  double out;
49  fun({x.data()}, {&out});
50  return out;
51  }
52 
53  private:
55 };
56 
59  public:
60  CasADiFun_2Vi1So(casadi::Function &&f) : fun(std::move(f)) {}
61 
62  double operator()(pa::crvec x, pa::crvec p) const {
63  double out;
64  fun({x.data(), p.data()}, {&out});
65  return out;
66  }
67 
68  private:
70 };
71 
74  public:
75  CasADiFun_1Vi1Vo(casadi::Function &&f) : fun(std::move(f)) {}
76 
77  void operator()(pa::crvec in, pa::rvec out) const {
78  fun({in.data()}, {out.data()});
79  }
80 
81  private:
83 };
84 
87  public:
88  CasADiFun_2Vi1Vo(casadi::Function &&f) : fun(std::move(f)) {}
89 
90  void operator()(pa::crvec in1, pa::crvec in2, pa::rvec out) const {
91  fun({in1.data(), in2.data()}, {out.data()});
92  }
93 
94  private:
96 };
97 
100  public:
101  CasADiFun_2Vi1Mo(casadi::Function &&f) : fun(std::move(f)) {}
102 
103  void operator()(pa::crvec in1, pa::crvec in2, pa::rmat out) const {
104  fun({in1.data(), in2.data()}, {out.data()});
105  }
106 
107  private:
109 };
110 
113  public:
114  CasADiFun_3Vi1Mo(casadi::Function &&f) : fun(std::move(f)) {}
115 
117  pa::rmat out) const {
118  fun({in1.data(), in2.data(), in3.data()}, {out.data()});
119  }
120 
121  private:
123 };
124 
127  public:
128  CasADiFun_3Vi1Vo(casadi::Function &&f) : fun(std::move(f)) {}
129 
131  pa::rvec out) const {
132  fun({in1.data(), in2.data(), in3.data()}, {out.data()});
133  }
134 
135  private:
137 };
138 
141  public:
142  CasADiFun_4Vi1Vo(casadi::Function &&f) : fun(std::move(f)) {}
143 
145  pa::rvec out) const {
146  fun({in1.data(), in2.data(), in3.data(), in4.data()}, {out.data()});
147  }
148 
149  private:
151 };
152 
CasADiFun_3Vi1Vo::operator()
void operator()(pa::crvec in1, pa::crvec in2, pa::crvec in3, pa::rvec out) const
Definition: CasADiFunctionWrapper.hpp:130
CasADiFun_2Vi1Vo::operator()
void operator()(pa::crvec in1, pa::crvec in2, pa::rvec out) const
Definition: CasADiFunctionWrapper.hpp:90
CasADiFun_1Vi1Vo::operator()
void operator()(pa::crvec in, pa::rvec out) const
Definition: CasADiFunctionWrapper.hpp:77
pa::rvec
Eigen::Ref< vec > rvec
Default type for mutable references to vectors.
Definition: vec.hpp:16
CasADiFun_3Vi1Mo::operator()
void operator()(pa::crvec in1, pa::crvec in2, pa::crvec in3, pa::rmat out) const
Definition: CasADiFunctionWrapper.hpp:116
CasADiFun_3Vi1Vo
Wrapper for CasADiFunctionEvaluator with 3 vector inputs, 1 vector output.
Definition: CasADiFunctionWrapper.hpp:126
CasADiFun_2Vi1Mo::operator()
void operator()(pa::crvec in1, pa::crvec in2, pa::rmat out) const
Definition: CasADiFunctionWrapper.hpp:103
pa::rmat
Eigen::Ref< mat > rmat
Default type for mutable references to matrices.
Definition: vec.hpp:22
CasADiFun_1Vi1So
Wrapper for CasADiFunctionEvaluator with 1 vector input, scalar output.
Definition: CasADiFunctionWrapper.hpp:43
CasADiFun_2Vi1Mo::fun
CasADiFunctionEvaluator< 2, 1 > fun
Definition: CasADiFunctionWrapper.hpp:108
CasADiFun_1Vi1Vo::fun
CasADiFunctionEvaluator< 1, 1 > fun
Definition: CasADiFunctionWrapper.hpp:82
panocpy.test.f
f
Definition: test.py:49
CasADiFunctionEvaluator::fun
casadi::Function fun
Definition: CasADiFunctionWrapper.hpp:37
CasADiFun_2Vi1Vo
Wrapper for CasADiFunctionEvaluator with 2 vector inputs, 1 vector output.
Definition: CasADiFunctionWrapper.hpp:86
CasADiFunctionEvaluator::dwork
std::vector< double > dwork
Definition: CasADiFunctionWrapper.hpp:39
panocpy.test.x
x
Definition: test.py:40
CasADiFun_2Vi1So::fun
CasADiFunctionEvaluator< 2, 1 > fun
Definition: CasADiFunctionWrapper.hpp:69
CasADiFunctionEvaluator::CasADiFunctionEvaluator
CasADiFunctionEvaluator(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:18
CasADiFun_1Vi1So::operator()
double operator()(pa::crvec x) const
Definition: CasADiFunctionWrapper.hpp:47
CasADiFunctionEvaluator::operator()
void operator()(const double *const *in, double *const *out) const
Definition: CasADiFunctionWrapper.hpp:25
pa::crvec
Eigen::Ref< const vec > crvec
Default type for immutable references to vectors.
Definition: vec.hpp:18
CasADiFun_2Vi1So::operator()
double operator()(pa::crvec x, pa::crvec p) const
Definition: CasADiFunctionWrapper.hpp:62
CasADiFun_1Vi1Vo::CasADiFun_1Vi1Vo
CasADiFun_1Vi1Vo(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:75
CasADiFunctionEvaluator
Class for evaluating CasADi functions, allocating the necessary workspace storage in advance for allo...
Definition: CasADiFunctionWrapper.hpp:16
CasADiFun_4Vi1Vo::operator()
void operator()(pa::crvec in1, pa::crvec in2, pa::crvec in3, pa::crvec in4, pa::rvec out) const
Definition: CasADiFunctionWrapper.hpp:144
CasADiFun_3Vi1Vo::fun
CasADiFunctionEvaluator< 3, 1 > fun
Definition: CasADiFunctionWrapper.hpp:136
CasADiFun_4Vi1Vo
Wrapper for CasADiFunctionEvaluator with 4 vector inputs, 1 vector output.
Definition: CasADiFunctionWrapper.hpp:140
CasADiFun_2Vi1So::CasADiFun_2Vi1So
CasADiFun_2Vi1So(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:60
CasADiFun_2Vi1So
Wrapper for CasADiFunctionEvaluator with 2 vector inputs, scalar output.
Definition: CasADiFunctionWrapper.hpp:58
CasADiFun_2Vi1Vo::CasADiFun_2Vi1Vo
CasADiFun_2Vi1Vo(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:88
CasADiFun_3Vi1Vo::CasADiFun_3Vi1Vo
CasADiFun_3Vi1Vo(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:128
vec.hpp
panocpy.test.p
p
Definition: test.py:57
CasADiFun_4Vi1Vo::CasADiFun_4Vi1Vo
CasADiFun_4Vi1Vo(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:142
CasADiFun_1Vi1So::fun
CasADiFunctionEvaluator< 1, 1 > fun
Definition: CasADiFunctionWrapper.hpp:54
CasADiFunctionEvaluator::iwork
std::vector< casadi_int > iwork
Definition: CasADiFunctionWrapper.hpp:38
CasADiFun_2Vi1Mo::CasADiFun_2Vi1Mo
CasADiFun_2Vi1Mo(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:101
CasADiFun_3Vi1Mo
Wrapper for CasADiFunctionEvaluator with 3 vector inputs, 1 matrix output.
Definition: CasADiFunctionWrapper.hpp:112
CasADiFun_4Vi1Vo::fun
CasADiFunctionEvaluator< 4, 1 > fun
Definition: CasADiFunctionWrapper.hpp:150
CasADiFun_1Vi1Vo
Wrapper for CasADiFunctionEvaluator with 1 vector input, 1 vector output.
Definition: CasADiFunctionWrapper.hpp:73
CasADiFunctionEvaluator::operator()
void operator()(const double *const (&in)[N_in], double *const (&out)[N_out]) const
Definition: CasADiFunctionWrapper.hpp:31
CasADiFun_1Vi1So::CasADiFun_1Vi1So
CasADiFun_1Vi1So(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:45
CasADiFun_2Vi1Vo::fun
CasADiFunctionEvaluator< 2, 1 > fun
Definition: CasADiFunctionWrapper.hpp:95
CasADiFun_3Vi1Mo::fun
CasADiFunctionEvaluator< 3, 1 > fun
Definition: CasADiFunctionWrapper.hpp:122
CasADiFun_3Vi1Mo::CasADiFun_3Vi1Mo
CasADiFun_3Vi1Mo(casadi::Function &&f)
Definition: CasADiFunctionWrapper.hpp:114
CasADiFun_2Vi1Mo
Wrapper for CasADiFunctionEvaluator with 2 vector inputs, 1 matrix output.
Definition: CasADiFunctionWrapper.hpp:99