1 #ifndef SimTK_SIMMATH_OPTIMIZER_H_ 
    2 #define SimTK_SIMMATH_OPTIMIZER_H_ 
   74                         numEqualityConstraints(0),
 
   75                         numInequalityConstraints(0),
 
   76                         numLinearEqualityConstraints(0),
 
   77                         numLinearInequalityConstraints(0),
 
   85         setNumParameters(nParameters);
 
   99                                  bool new_parameters, 
Real& f )
 const {
 
  106                                  bool new_parameters, 
Vector &gradient )
 const  {
 
  112                                  bool new_parameters, 
Vector & constraints )
 const {
 
  118                                   bool new_parameters, 
Matrix& jac )
 const {
 
  124                                  bool new_parameters, 
Vector &gradient)
 const {
 
  130        if(   nParameters < 1 ) {
 
  131            const char* where = 
" OptimizerSystem  Constructor";
 
  132            const char* szName = 
"number of parameters";
 
  135            numParameters = nParameters;
 
  141            const char* where = 
" OptimizerSystem  setNumEqualityConstraints";
 
  142            const char* szName = 
"number of equality constraints";
 
  145            numEqualityConstraints = n;
 
  151            const char* where = 
" OptimizerSystem  setNumInequalityConstraints";
 
  152            const char* szName = 
"number of inequality constraints";
 
  155            numInequalityConstraints = n;
 
  160        if( n < 0 || n > numEqualityConstraints ) {
 
  161            const char* where = 
" OptimizerSystem  setNumLinearEqualityConstraints";
 
  162            const char* szName = 
"number of linear equality constraints";
 
  165            numLinearEqualityConstraints = n;
 
  170        if( n < 0 || n > numInequalityConstraints ) {
 
  171            const char* where = 
" OptimizerSystem  setNumLinearInequalityConstraints";
 
  172            const char* szName = 
"number of linear inequality constraints";
 
  175            numLinearInequalityConstraints = n;
 
  180        if(   upper.
size() != numParameters  && upper.
size() != 0) {
 
  181            const char* where = 
" OptimizerSystem  setParametersLimits";
 
  182            const char* szName = 
"upper limits length";
 
  185        if(   lower.
size() != numParameters  && lower.
size() != 0 ) {
 
  186            const char* where = 
" OptimizerSystem  setParametersLimits";
 
  187            const char* szName = 
"lower limits length";
 
  197        if( upper.
size() == 0 ) {
 
  200           lowerLimits = 
new Vector( lower );
 
  201           upperLimits = 
new Vector( upper );
 
  230         *lower = &(*lowerLimits)[0];
 
  231         *upper = &(*upperLimits)[0];
 
  236    int numEqualityConstraints;
 
  237    int numInequalityConstraints;
 
  238    int numLinearEqualityConstraints;
 
  239    int numLinearInequalityConstraints;
 
  538     const OptimizerRep& getRep()
 const {assert(rep); 
return *rep;}
 
  539     OptimizerRep&       updRep()       {assert(rep); 
return *rep;}
 
This is the header file that user code should include to pick up the SimTK Simmath numerical differen...
 
#define SimTK_THROW2(exc, a1, a2)
Definition: Exception.h:327
 
#define SimTK_THROW5(exc, a1, a2, a3, a4, a5)
Definition: Exception.h:333
 
#define SimTK_THROW3(exc, a1, a2, a3)
Definition: Exception.h:329
 
#define SimTK_THROW4(exc, a1, a2, a3, a4)
Definition: Exception.h:331
 
Includes internal headers providing declarations for the basic SimTK Core classes,...
 
This is the header file that every Simmath compilation unit should include first.
 
#define SimTK_SIMMATH_EXPORT
Definition: SimTKmath/include/simmath/internal/common.h:64
 
Method
Definition: Differentiator.h:92
 
Definition: SimTKmath/include/simmath/internal/common.h:123
 
Definition: Exception.h:180
 
Definition: Exception.h:196
 
Definition: Exception.h:257
 
Definition: Exception.h:212
 
Abstract class which defines an objective/cost function which is optimized by and Optimizer object.
Definition: Optimizer.h:71
 
void setNumEqualityConstraints(const int n)
Sets the number of equality constraints.
Definition: Optimizer.h:139
 
void getParameterLimits(Real **lower, Real **upper) const
Returns the limits on the allowed values of each parameter, as an array of lower bounds and an array ...
Definition: Optimizer.h:229
 
int getNumConstraints() const
Returns the total number of constraints.
Definition: Optimizer.h:210
 
virtual int hessian(const Vector ¶meters, bool new_parameters, Vector &gradient) const
Computes Hessian of the objective function; return 0 when successful.
Definition: Optimizer.h:123
 
void setNumParameters(const int nParameters)
Sets the number of parameters in the objective function.
Definition: Optimizer.h:129
 
int getNumLinearEqualityConstraints() const
Returns the number of linear equality constraints.
Definition: Optimizer.h:216
 
int getNumLinearInequalityConstraints() const
Returns the number of linear inequality constraints.
Definition: Optimizer.h:220
 
int getNumInequalityConstraints() const
Returns the number of inequality constraints.
Definition: Optimizer.h:214
 
void setNumInequalityConstraints(const int n)
Sets the number of inequality constraints.
Definition: Optimizer.h:149
 
void setNumLinearEqualityConstraints(const int n)
Sets the number of lineaer equality constraints.
Definition: Optimizer.h:159
 
void setNumLinearInequalityConstraints(const int n)
Sets the number of lineaer inequality constraints.
Definition: Optimizer.h:169
 
OptimizerSystem()
Definition: Optimizer.h:73
 
virtual int constraintJacobian(const Vector ¶meters, bool new_parameters, Matrix &jac) const
Computes Jacobian of the constraints; return 0 when successful.
Definition: Optimizer.h:117
 
void setParameterLimits(const Vector &lower, const Vector &upper)
Set the upper and lower bounds on the parameters.
Definition: Optimizer.h:179
 
virtual ~OptimizerSystem()
Definition: Optimizer.h:88
 
bool getHasLimits() const
Returns true if there are limits on the parameters.
Definition: Optimizer.h:225
 
int getNumEqualityConstraints() const
Returns the number of equality constraints.
Definition: Optimizer.h:212
 
OptimizerSystem(int nParameters)
Definition: Optimizer.h:83
 
virtual int gradientFunc(const Vector ¶meters, bool new_parameters, Vector &gradient) const
Computes the gradient of the objective function; return 0 when successful.
Definition: Optimizer.h:105
 
virtual int constraintFunc(const Vector ¶meters, bool new_parameters, Vector &constraints) const
Computes the value of the constraints; return 0 when successful.
Definition: Optimizer.h:111
 
int getNumNonlinearInequalityConstraints() const
Returns the number of linear inequality constraints.
Definition: Optimizer.h:222
 
int getNumParameters() const
Returns the number of parameters, that is, the number of variables that the Optimizer may adjust whil...
Definition: Optimizer.h:208
 
int getNumNonlinearEqualityConstraints() const
Returns the number of nonlinear equality constraints.
Definition: Optimizer.h:218
 
virtual int objectiveFunc(const Vector ¶meters, bool new_parameters, Real &f) const
Objective/cost function which is to be optimized; return 0 when successful.
Definition: Optimizer.h:98
 
Definition: OptimizerRep.h:63
 
API for SimTK Simmath's optimizers.
Definition: Optimizer.h:421
 
void setOptimizerSystem(const OptimizerSystem &sys)
 
bool setAdvancedVectorOption(const char *option, const Vector value)
Set the value of an advanced option specified by an Vector value.
 
Real getEstimatedAccuracyOfObjective() const
Return the estimated accuracy last specified in useNumericalGradient().
 
Real getEstimatedAccuracyOfConstraints() const
Return the estimated accuracy last specified in useNumericalJacobian().
 
static bool isAlgorithmAvailable(OptimizerAlgorithm algorithm)
BestAvailable, UnknownAlgorithm, and UserSuppliedAlgorithm are treated as never available.
 
void setConstraintTolerance(Real tolerance)
Sets the absolute tolerance used to determine whether constraint violation is acceptable.
 
bool setAdvancedBoolOption(const char *option, const bool value)
Set the value of an advanced option specified by an boolean value.
 
Real optimize(Vector &)
Compute optimization.
 
Optimizer(const OptimizerSystem &sys)
 
void setConvergenceTolerance(Real accuracy)
Sets the relative accuracy used determine if the problem has converged.
 
void setOptimizerSystem(const OptimizerSystem &sys, OptimizerAlgorithm algorithm)
 
Differentiator::Method getDifferentiatorMethod() const
Return the differentiation method last supplied in a call to setDifferentiatorMethod(),...
 
bool isUsingNumericalGradient() const
Indicate whether the Optimizer is currently set to use a numerical gradient.
 
const OptimizerSystem & getOptimizerSystem() const
Return a reference to the OptimizerSystem currently associated with this Optimizer.
 
void useNumericalGradient(bool flag, Real estimatedAccuracyOfObjective=SignificantReal)
Enable numerical calculation of gradient, with optional estimation of the accuracy to which the objec...
 
bool setAdvancedIntOption(const char *option, const int value)
Set the value of an advanced option specified by an integer value.
 
void setMaxIterations(int iter)
Set the maximum number of iterations allowed of the optimization method's outer stepping loop.
 
bool setAdvancedRealOption(const char *option, const Real value)
Set the value of an advanced option specified by a real value.
 
bool setAdvancedStrOption(const char *option, const char *value)
Set the value of an advanced option specified by a string.
 
OptimizerAlgorithm getAlgorithm() const
Return the algorithm used for the optimization.
 
void setLimitedMemoryHistory(int history)
Set the maximum number of previous hessians used in a limited memory hessian approximation.
 
Optimizer(const OptimizerSystem &sys, OptimizerAlgorithm algorithm)
 
void setDiagnosticsLevel(int level)
Set the level of debugging info displayed.
 
bool isUsingNumericalJacobian() const
Indicate whether the Optimizer is currently set to use a numerical Jacobian.
 
void setDifferentiatorMethod(Differentiator::Method method)
Set which numerical differentiation algorithm is to be used for the next useNumericalGradient() or us...
 
void useNumericalJacobian(bool flag, Real estimatedAccuracyOfConstraints=SignificantReal)
Enable numerical calculation of the constraint Jacobian, with optional estimation of the accuracy to ...
 
int size() const
Definition: VectorBase.h:396
 
Vector_< Real > Vector
Variable-size column vector of Real elements; abbreviation for Vector_<Real>.
Definition: BigMatrix.h:1477
 
const Real SignificantReal
SignificantReal is the smallest value that we consider to be clearly distinct from roundoff error whe...
 
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
 
OptimizerAlgorithm
The available Optimizer algorithms.
Definition: Optimizer.h:40
 
@ InteriorPoint
IpOpt algorithm (https://projects.coin-or.org/ipopt); gradient descent.
Definition: Optimizer.h:45
 
@ CMAES
Covariance matrix adaptation, evolution strategy (https://github.com/cma-es/c-cmaes); this is a rando...
Definition: Optimizer.h:60
 
@ UserSuppliedOptimizerAlgorithm
An algorithm that is implemented outside of Simmath.
Definition: Optimizer.h:63
 
@ BestAvailable
Simmath will select best Optimizer based on problem type.
Definition: Optimizer.h:42
 
@ LBFGS
Limited-memory Broyden-Fletcher-Goldfarb-Shanno algorithm; gradient descent.
Definition: Optimizer.h:48
 
@ LBFGSB
LBFGS with simple bound constraints; gradient descent.
Definition: Optimizer.h:51
 
@ UnknownOptimizerAlgorithm
Definition: Optimizer.h:61
 
@ CFSQP
C implementation of sequential quadratic programming (requires external library: ftp://frcatel....
Definition: Optimizer.h:56
 
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:607