1 #ifndef SimTK_SIMMATH_OPTIMIZER_H_
2 #define SimTK_SIMMATH_OPTIMIZER_H_
50 numEqualityConstraints(0),
51 numInequalityConstraints(0),
52 numLinearEqualityConstraints(0),
53 numLinearInequalityConstraints(0),
61 setNumParameters(nParameters);
73 virtual int objectiveFunc (
const Vector& parameters,
74 bool new_parameters,
Real& f )
const {
80 virtual int gradientFunc (
const Vector ¶meters,
81 bool new_parameters,
Vector &gradient )
const {
86 virtual int constraintFunc (
const Vector & parameters,
87 bool new_parameters,
Vector & constraints )
const {
92 virtual int constraintJacobian (
const Vector& parameters,
93 bool new_parameters,
Matrix& jac )
const {
98 virtual int hessian (
const Vector ¶meters,
99 bool new_parameters,
Vector &gradient)
const {
105 if( nParameters < 1 ) {
106 const char* where =
" OptimizerSystem Constructor";
107 const char* szName =
"number of parameters";
110 numParameters = nParameters;
116 const char* where =
" OptimizerSystem setNumEqualityConstraints";
117 const char* szName =
"number of equality constraints";
120 numEqualityConstraints = n;
126 const char* where =
" OptimizerSystem setNumInequalityConstraints";
127 const char* szName =
"number of inequality constraints";
130 numInequalityConstraints = n;
135 if( n < 0 || n > numEqualityConstraints ) {
136 const char* where =
" OptimizerSystem setNumLinearEqualityConstraints";
137 const char* szName =
"number of linear equality constraints";
140 numLinearEqualityConstraints = n;
145 if( n < 0 || n > numInequalityConstraints ) {
146 const char* where =
" OptimizerSystem setNumLinearInequalityConstraints";
147 const char* szName =
"number of linear inequality constraints";
150 numLinearInequalityConstraints = n;
155 if( upper.
size() != numParameters && upper.
size() != 0) {
156 const char* where =
" OptimizerSystem setParamtersLimits";
157 const char* szName =
"upper limits length";
160 if( lower.
size() != numParameters && lower.
size() != 0 ) {
161 const char* where =
" OptimizerSystem setParamtersLimits";
162 const char* szName =
"lower limits length";
172 if( upper.
size() == 0 ) {
175 lowerLimits =
new Vector( lower );
176 upperLimits =
new Vector( upper );
205 *lower = &(*lowerLimits)[0];
206 *upper = &(*upperLimits)[0];
211 int numEqualityConstraints;
212 int numInequalityConstraints;
213 int numLinearEqualityConstraints;
214 int numLinearInequalityConstraints;
251 void setConvergenceTolerance(
Real accuracy );
254 void setConstraintTolerance(
Real tolerance);
262 void setMaxIterations(
int iter );
265 void setLimitedMemoryHistory(
int history );
267 void setDiagnosticsLevel(
int level );
273 bool setAdvancedStrOption(
const char *option,
const char *value );
275 bool setAdvancedRealOption(
const char *option,
const Real value );
277 bool setAdvancedIntOption(
const char *option,
const int value );
279 bool setAdvancedBoolOption(
const char *option,
const bool value );
315 void useNumericalGradient(
bool flag,
329 void useNumericalJacobian(
bool flag,
339 bool isUsingNumericalGradient()
const;
341 bool isUsingNumericalJacobian()
const;
343 Real getEstimatedAccuracyOfObjective()
const;
345 Real getEstimatedAccuracyOfConstraints()
const;
354 const OptimizerRep& getRep()
const {assert(rep);
return *rep;}
365 #endif //SimTK_SIMMATH_OPTIMIZER_H_