17 #ifndef OPTIMIZATION__OPTIMIZATION_PROBLEM_HPP_ 18 #define OPTIMIZATION__OPTIMIZATION_PROBLEM_HPP_ 37 namespace optimization
45 template<
typename Derived,
typename DomainValueT,
int NumJacobianColsT,
int NumVarsT>
49 static constexpr
auto NumJacobianCols = NumJacobianColsT;
50 static constexpr
auto NumVars = NumVarsT;
53 using Jacobian = Eigen::Matrix<Value, NumVars, NumJacobianCols>;
54 using Hessian = Eigen::Matrix<Value, NumVars, NumVars>;
63 return this->impl().score_(x);
71 this->impl().jacobian_(x, out);
79 this->impl().hessian_(x, out);
107 template<
typename Derived,
typename DomainValueT,
int NumJacobianColsT,
int NumVarsT,
108 typename ComparatorT>
110 Expression<CachedExpression<Derived, DomainValueT,
111 NumJacobianColsT, NumVarsT, ComparatorT>,
112 DomainValueT, NumJacobianColsT, NumVarsT>
115 static constexpr
auto NumJacobianCols = NumJacobianColsT;
116 static constexpr
auto NumVars = NumVarsT;
119 using Jacobian = Eigen::Matrix<Value, NumVars, NumJacobianCols>;
120 using Hessian = Eigen::Matrix<Value, NumVars, NumVars>;
121 using JacobianRef = Eigen::Ref<Eigen::Matrix<Value, NumVars, NumJacobianCols>>;
122 using HessianRef = Eigen::Ref<Eigen::Matrix<Value, NumVars, NumVars>>;
125 : m_score{0.0}, m_jacobian(Jacobian::Zero()), m_hessian{Hessian::Zero()},
126 m_cache_state(comparator) {}
157 m_cache_state.update(x, mode);
159 static_cast<Derived *
>(
this)->evaluate_(x, mode);
170 m_jacobian = jacobian;
197 template<
typename Derived,
typename DomainValueT,
int NumJacobianColsT,
int NumVarsT,
198 typename ObjectiveT,
typename EqualityConstraintsT,
typename InequalityConstraintsT>
206 template<
typename Derived,
207 typename ... EqualityConstraints,
208 typename ... InequalityConstraints,
209 typename ObjectiveT,
typename DomainValueT,
int NumJacobianColsT,
int NumVarsT>
212 std::tuple<EqualityConstraints...>,
213 std::tuple<InequalityConstraints...>>
214 :
public Expression<Derived, DomainValueT, NumJacobianColsT, NumVarsT>
217 using EqualityConstraintsT = std::tuple<EqualityConstraints...>;
220 using Jacobian = Eigen::Matrix<Value, NumVarsT, NumJacobianColsT>;
221 using Hessian = Eigen::Matrix<Value, NumVarsT, NumVarsT>;
224 static constexpr
bool8_t is_unconstrained{(std::tuple_size<EqualityConstraintsT>::value == 0U) &&
225 (std::tuple_size<InequalityConstraintsT>::value == 0U)};
228 ObjectiveT && objective,
229 EqualityConstraintsT && eq_constraints,
232 : m_objective(std::forward<ObjectiveT>(objective)),
233 m_equality_constraints(std::forward<EqualityConstraintsT>(eq_constraints)),
238 template<
typename ... Args,
typename Dummy = void,
typename = std::enable_if_t<
239 is_unconstrained, Dummy>>
243 : m_objective(std::forward<Args>(args)...)
247 template<
bool8_t enabled = is_unconstrained>
248 typename std::enable_if_t<enabled, Value>
score_(
const DomainValueT &
x)
250 return m_objective(x);
253 template<
bool8_t enabled = is_unconstrained>
254 typename std::enable_if_t<!enabled, Value>
score_(
const DomainValueT &
x)
256 return opt_impl()->score_opt_(x);
259 template<
bool8_t enabled = is_unconstrained>
262 m_objective.jacobian(x, out);
265 template<
bool8_t enabled = is_unconstrained>
268 opt_impl()->jacobian_opt_(x, out);
271 template<
bool8_t enabled = is_unconstrained>
274 m_objective.hessian(x, out);
277 template<
bool8_t enabled = is_unconstrained>
280 opt_impl()->hessian_opt_(x, out);
283 template<
bool8_t enabled = is_unconstrained>
285 const DomainValueT &
x,
288 m_objective.evaluate(x, mode);
291 template<
bool8_t enabled = is_unconstrained>
292 typename std::enable_if_t<!enabled, void>
evaluate(
293 const DomainValueT &
x,
296 opt_impl()->evaluate_(x, mode);
307 return m_equality_constraints;
312 return m_inequality_constraints;
318 return static_cast<Derived *
>(
this);
321 ObjectiveT m_objective;
322 EqualityConstraintsT m_equality_constraints;
331 template<
typename ObjectiveT,
typename DomainValueT,
int NumVarsT>
334 DomainValueT, 1U, NumVarsT, ObjectiveT, std::tuple<>, std::tuple<>>
336 using OptimizationProblem<UnconstrainedOptimizationProblem<ObjectiveT, DomainValueT, NumVarsT>,
344 #endif // OPTIMIZATION__OPTIMIZATION_PROBLEM_HPP_ Definition: common/optimization/include/optimization/utils.hpp:108
std::enable_if_t< enabled, Value > score_(const DomainValueT &x)
Definition: optimization_problem.hpp:248
double float64_t
Definition: types.hpp:37
Definition: common/optimization/include/optimization/utils.hpp:38
ComputeMode & set_hessian() noexcept
Definition: utils.cpp:41
void evaluate(const DomainValue &x, const ComputeMode &mode)
Definition: optimization_problem.hpp:90
Definition: optimization_problem.hpp:46
std::enable_if_t< enabled, void > jacobian_(const DomainValueT &x, JacobianRef out)
Definition: optimization_problem.hpp:260
void hessian_(const DomainValue &x, HessianRef out)
Definition: optimization_problem.hpp:144
class OPTIMIZATION_PUBLIC OptimizationProblem
Definition: optimization_problem.hpp:199
EigenPose< Real > DomainValue
Definition: optimization_problem.hpp:51
void jacobian(const DomainValue &x, JacobianRef out)
Definition: optimization_problem.hpp:69
ObjectiveT & objective()
Definition: optimization_problem.hpp:300
std::enable_if_t< enabled, void > evaluate(const DomainValueT &x, const ComputeMode &mode)
Definition: optimization_problem.hpp:284
bool bool8_t
Definition: types.hpp:33
CachedExpression(const ComparatorT &comparator=ComparatorT())
Definition: optimization_problem.hpp:124
autoware::common::types::float64_t Value
Definition: optimization_problem.hpp:52
Definition: optimization_problem.hpp:332
void evaluate(const DomainValue &x, const ComputeMode &mode)
Definition: optimization_problem.hpp:152
This file includes common type definition.
bool8_t score() const noexcept
Definition: utils.cpp:47
std::enable_if_t<!enabled, void > evaluate(const DomainValueT &x, const ComputeMode &mode)
Definition: optimization_problem.hpp:292
Value score_(const DomainValue &x)
Definition: optimization_problem.hpp:128
InequalityConstraintsT & inequality_constraints()
Definition: optimization_problem.hpp:310
Eigen::Ref< Hessian > HessianRef
Definition: optimization_problem.hpp:56
Eigen::Matrix< Value, NumVars, NumVars > Hessian
Definition: optimization_problem.hpp:54
std::enable_if_t< enabled, void > hessian_(const DomainValueT &x, HessianRef out)
Definition: optimization_problem.hpp:272
This file includes common helper functions.
DifferentialState x
Definition: kinematic_bicycle.snippet.hpp:28
Definition: optimization_problem.hpp:109
ComputeMode & set_jacobian() noexcept
Definition: utils.cpp:36
void set_hessian(const HessianRef &hessian)
Definition: optimization_problem.hpp:173
bool8_t jacobian() const noexcept
Definition: utils.cpp:48
void set_score(Value score)
Definition: optimization_problem.hpp:163
OptimizationProblem(ObjectiveT &&objective, EqualityConstraintsT &&eq_constraints, InequalityConstraintsT &&ineq_constraints)
Definition: optimization_problem.hpp:227
std::enable_if_t<!enabled, Value > score_(const DomainValueT &x)
Definition: optimization_problem.hpp:254
std::enable_if_t<!enabled, void > jacobian_(const DomainValueT &x, JacobianRef out)
Definition: optimization_problem.hpp:266
bool8_t hessian() const noexcept
Definition: utils.cpp:49
void jacobian_(const DomainValue &x, JacobianRef out)
Definition: optimization_problem.hpp:136
ComputeMode & set_score() noexcept
Definition: utils.cpp:31
std::enable_if_t<!enabled, void > hessian_(const DomainValueT &x, HessianRef out)
Definition: optimization_problem.hpp:278
std::tuple< InequalityConstraints... > InequalityConstraintsT
Definition: optimization_problem.hpp:218
OptimizationProblem(Args &&... args)
Definition: optimization_problem.hpp:240
Eigen::Ref< Jacobian > JacobianRef
Definition: optimization_problem.hpp:55
Value operator()(const DomainValue &x)
Definition: optimization_problem.hpp:61
void set_jacobian(const JacobianRef &jacobian)
Definition: optimization_problem.hpp:168
void hessian(const DomainValue &x, HessianRef out)
Definition: optimization_problem.hpp:77
EqualityConstraintsT & equality_constraints()
Definition: optimization_problem.hpp:305
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24
Eigen::Matrix< Value, NumVars, NumJacobianCols > Jacobian
Definition: optimization_problem.hpp:53