33 #ifndef DART_OPTIMIZATION_FUNCTION_HPP_ 34 #define DART_OPTIMIZATION_FUNCTION_HPP_ 40 #include <Eigen/Dense> 43 namespace optimization {
49 explicit Function(
const std::string& _name =
"function");
55 virtual void setName(
const std::string& newName);
58 const std::string&
getName()
const;
61 virtual double eval(
const Eigen::VectorXd& x) = 0;
65 const Eigen::VectorXd& _x, Eigen::Map<Eigen::VectorXd> _grad);
72 void evalGradient(
const Eigen::VectorXd& _x, Eigen::VectorXd& _grad);
76 const Eigen::VectorXd& _x,
77 Eigen::Map<Eigen::VectorXd, Eigen::RowMajor> _Hess);
84 typedef std::shared_ptr<Function> FunctionPtr;
85 typedef std::unique_ptr<Function> UniqueFunctionPtr;
87 typedef std::function<double(const Eigen::VectorXd&)> CostFunction;
89 typedef std::function<void(const Eigen::VectorXd&, Eigen::Map<Eigen::VectorXd>)>
92 typedef std::function<void(
93 const Eigen::VectorXd&, Eigen::Map<Eigen::VectorXd, Eigen::RowMajor>)>
103 explicit ModularFunction(
const std::string& _name =
"modular_function");
110 double eval(
const Eigen::VectorXd& _x)
override;
115 const Eigen::VectorXd& _x, Eigen::Map<Eigen::VectorXd> _grad)
override;
120 const Eigen::VectorXd& _x,
121 Eigen::Map<Eigen::VectorXd, Eigen::RowMajor> _Hess)
override;
124 void setCostFunction(CostFunction _cost);
128 void clearCostFunction(
bool _printWarning =
true);
131 void setGradientFunction(GradientFunction _gradient);
136 void clearGradientFunction();
139 void setHessianFunction(HessianFunction _hessian);
144 void clearHessianFunction();
162 explicit NullFunction(
const std::string& _name =
"null_function");
168 double eval(
const Eigen::VectorXd&)
override;
173 const Eigen::VectorXd& _x, Eigen::Map<Eigen::VectorXd> _grad)
override;
178 const Eigen::VectorXd& _x,
179 Eigen::Map<Eigen::VectorXd, Eigen::RowMajor> _Hess)
override;
193 virtual void operator()(
194 const Eigen::VectorXd& _x,
195 Eigen::Map<Eigen::VectorXd>& _f,
196 Eigen::Map<Eigen::MatrixXd>& _grad)
203 #endif // DART_OPTIMIZATION_FUNCTION_HPP_ std::string mName
Name of this function.
Definition: Function.hpp:81
class MultiFunction
Definition: Function.hpp:183
GradientFunction mGradientFunction
Storage for the gradient function.
Definition: Function.hpp:151
virtual void evalGradient(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd > _grad)
Evaluates and returns the objective function at the point x.
Definition: Function.cpp:65
NullFunction is a constant-zero Function.
Definition: Function.hpp:158
ModularFunction uses C++11 std::function to allow you to easily swap out the cost function...
Definition: Function.hpp:99
const std::string & getName() const
Returns the name of this Function.
Definition: Function.cpp:59
virtual void setName(const std::string &newName)
Sets the name of this Function.
Definition: Function.cpp:53
virtual void evalHessian(const Eigen::VectorXd &_x, Eigen::Map< Eigen::VectorXd, Eigen::RowMajor > _Hess)
Evaluates and return the objective function at the point x.
Definition: Function.cpp:80
Definition: Aspect.cpp:40
CostFunction mCostFunction
Storage for the cost function.
Definition: Function.hpp:148
HessianFunction mHessianFunction
Storage for the Hessian function.
Definition: Function.hpp:154
Definition: Function.hpp:45
virtual double eval(const Eigen::VectorXd &x)=0
Evaluates and returns the objective function at the point x.
Function(const std::string &_name="function")
Constructor.
Definition: Function.cpp:41
virtual ~Function()
Destructor.
Definition: Function.cpp:47