00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _ROBOT_CONTROL_KINEMATICS_OPTIMIZER_
00026 #define _ROBOT_CONTROL_KINEMATICS_OPTIMIZER_
00027
00028 #include <robot/control/kinematics/kinematics>
00029
00030 #include <base/ReferencedObject>
00031
00032
00033 namespace robot {
00034 namespace control {
00035 namespace kinematics {
00036
00037
00038
00039
00040
00041 class Optimizer : public base::ReferencedObject
00042 {
00043 public:
00044
00045 class Objective : public base::ReferencedObject
00046 {
00047 public:
00048 enum ObjectiveType { Linear, NonLinear };
00049
00050 virtual ObjectiveType getObjectiveType() const = 0;
00051
00052 Real Q(const Vector& x, const Vector& a) { return evaluate(x,a); }
00053
00054 virtual Real evaluate(const Vector& x, const Vector& a) const = 0;
00055 };
00056
00057
00058 class Constraints : public base::ReferencedObject
00059 {
00060 public:
00061 enum ConstraintsType { Linear, NonLinear };
00062 enum ConstraintType { Equality, Inequality };
00063
00064 virtual ConstraintsType getConstraintsType() const = 0;
00065 virtual ConstraintType getConstraintType(Int constraint) const = 0;
00066 virtual Int numConstraints() const = 0;
00067 virtual Int numEqualityConstraints() const = 0;
00068 virtual Int numInequalityConstraints() const = 0;
00069 Int size() const { return numConstraints(); }
00070
00071 virtual Real evaluate(Int constraint, const Vector& x, const Vector& a) const = 0;
00072 virtual Vector evaluate(const Vector& x, const Vector& a) const = 0;
00073
00074 Real g(Int i, const Vector& x, const Vector& a) const { return evaluate(i,x,a); }
00075 Vector g(const Vector& x, const Vector& a) const { return evaluate(x,a); }
00076
00077 virtual String toString() const
00078 { return String(); }
00079
00080 };
00081
00082
00083 virtual Vector optimize(ref<const Objective> objective, ref<const Constraints> constraints) const = 0;
00084
00085
00086 };
00087
00088 inline std::ostream& operator<<(std::ostream& out, const Optimizer::Constraints& cs)
00089 { out << cs.toString(); return out; }
00090
00091
00092
00093 }
00094 }
00095 }
00096
00097 #endif