33#ifndef DART_OPTIMIZER_FUNCTION_HPP_
34#define DART_OPTIMIZER_FUNCTION_HPP_
50 explicit Function(
const std::string& _name =
"function");
56 virtual void setName(
const std::string& _newName);
59 const std::string&
getName()
const;
62 virtual double eval(
const Eigen::VectorXd& _x) = 0;
66 Eigen::Map<Eigen::VectorXd> _grad);
73 void evalGradient(
const Eigen::VectorXd& _x, Eigen::VectorXd& _grad);
77 const Eigen::VectorXd& _x,
78 Eigen::Map<Eigen::VectorXd, Eigen::RowMajor> _Hess);
90typedef std::function<void(
const Eigen::VectorXd&,
93typedef std::function<void(
94 const Eigen::VectorXd&,
104 explicit ModularFunction(
const std::string& _name =
"modular_function");
111 double eval(
const Eigen::VectorXd& _x)
override;
116 Eigen::Map<Eigen::VectorXd> _grad)
override;
121 const Eigen::VectorXd& _x,
122 Eigen::Map<Eigen::VectorXd, Eigen::RowMajor> _Hess)
override;
163 explicit NullFunction(
const std::string& _name =
"null_function");
169 double eval(
const Eigen::VectorXd&)
override;
174 Eigen::Map<Eigen::VectorXd> _grad)
override;
179 const Eigen::VectorXd& _x,
180 Eigen::Map<Eigen::VectorXd, Eigen::RowMajor> _Hess)
override;
195 Eigen::Map<Eigen::VectorXd>& _f,
196 Eigen::Map<Eigen::MatrixXd>& _grad) = 0;
class Function
Definition Function.hpp:47
virtual void setName(const std::string &_newName)
Set the name of this Function.
Definition Function.cpp:54
std::string mName
Name of this function.
Definition Function.hpp:82
virtual double eval(const Eigen::VectorXd &_x)=0
Evaluate and return the objective function at the point x.
virtual ~Function()
Destructor.
Definition Function.cpp:48
const std::string & getName() const
Get the name of this Function.
Definition Function.cpp:60
virtual void evalHessian(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd, Eigen::RowMajor > _Hess)
Evaluate and return the objective function at the point x.
Definition Function.cpp:81
virtual void evalGradient(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd > _grad)
Evaluate and return the objective function at the point x.
Definition Function.cpp:66
ModularFunction uses C++11 std::function to allow you to easily swap out the cost function,...
Definition Function.hpp:101
void clearCostFunction(bool _printWarning=true)
Replace the cost function with a constant-zero function.
Definition Function.cpp:131
HessianFunction mHessianFunction
Storage for the Hessian function.
Definition Function.hpp:155
void evalHessian(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd, Eigen::RowMajor > _Hess) override
evalHessian() will now call whatever HessianFunction you set using setHessianFunction()
Definition Function.cpp:118
CostFunction mCostFunction
Storage for the cost function.
Definition Function.hpp:149
void clearGradientFunction()
Replace the gradient function with the default evalGradient() of the base Function class.
Definition Function.cpp:151
void clearHessianFunction()
Replace the Hessian function with the default evalHessian() of the base Function class.
Definition Function.cpp:167
virtual ~ModularFunction()
Destructor.
Definition Function.cpp:99
double eval(const Eigen::VectorXd &_x) override
eval() will now call whatever CostFunction you set using setCostFunction()
Definition Function.cpp:105
void evalGradient(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd > _grad) override
evalGradient() will now call whatever GradientFunction you set using setGradientFunction()
Definition Function.cpp:111
GradientFunction mGradientFunction
Storage for the gradient function.
Definition Function.hpp:152
void setGradientFunction(GradientFunction _gradient)
Set the function that gets called by evalGradient()
Definition Function.cpp:145
void setCostFunction(CostFunction _cost)
Set the function that gets called by eval()
Definition Function.cpp:125
void setHessianFunction(HessianFunction _hessian)
Set the function that gets called by evalHessian()
Definition Function.cpp:161
class MultiFunction
Definition Function.hpp:185
virtual void operator()(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd > &_f, Eigen::Map< Eigen::MatrixXd > &_grad)=0
Operator ()
virtual ~MultiFunction()
Destructor.
Definition Function.cpp:219
MultiFunction()
Constructor.
Definition Function.cpp:213
NullFunction is a constant-zero Function.
Definition Function.hpp:160
void evalHessian(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd, Eigen::RowMajor > _Hess) override
evalHessian() will always set _Hess to a zero matrix that matches the dimensionality of _x
Definition Function.cpp:204
void evalGradient(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd > _grad) override
evalGradient will always set _grad to a zero vector that matches the dimensionality of _x
Definition Function.cpp:196
virtual ~NullFunction()
Destructor.
Definition Function.cpp:184
double eval(const Eigen::VectorXd &) override
eval() will always return exactly zero
Definition Function.cpp:190
std::shared_ptr< Function > FunctionPtr
Definition Function.hpp:86
std::function< void(const Eigen::VectorXd &, Eigen::Map< Eigen::VectorXd >)> GradientFunction
Definition Function.hpp:91
std::function< void(const Eigen::VectorXd &, Eigen::Map< Eigen::VectorXd, Eigen::RowMajor >)> HessianFunction
Definition Function.hpp:95
std::function< double(const Eigen::VectorXd &)> CostFunction
Definition Function.hpp:88
Definition BulletCollisionDetector.cpp:63