Actual source code: taoappobject.h

      1: #ifndef TAOPROBLEMOBJECT_H
      2: #define TAOPROBLEMOBJECT_H

      4: /**
      5:     An abstract class representing an optimization application.  The
      6:     methods in this class will be called by the optimization solver.
      7: **/

      9: #include "tao_basictypes.h"

     11: class TaoVec;
     12: class TaoIndexSet;
     13: class TaoMat;
     14: class TaoLinearSolver;

     16: class TaoApplication {
     17:
     18:  public:
     19:
     20:   virtual ~TaoApplication(){};
     21:
     22:   /* This method is really important and used frequently */
     23:   virtual int EvaluateObjectiveAndGradient(TaoVec *, double *, TaoVec *);

     25:   /* This method not often used, except by direct search methods  */
     26:   virtual int EvaluateObjectiveFunction(TaoVec *, double *);

     28:   /* This method not often used  */
     29:   virtual int EvaluateGradient(TaoVec *, TaoVec *);

     31:   /* This method is used only by some solvers */
     32:   virtual int EvaluateHessian(TaoVec *, TaoMat *);

     34:   /* This method is used only by some solvers */
     35:   virtual int EvaluateVariableBounds(TaoVec *, TaoVec *);

     37:   /* This method is optional, but it can improve performance */
     38:   virtual int InitializeVariables(TaoVec *);

     40:   /* These methods are important, the first one is mandatory */
     41:   virtual int GetVariableVector(TaoVec **);
     42:   virtual int GetHessianMatrix(TaoMat **);

     44:   /* This method may be used in LMVM methods  */
     45:   virtual int HessianSolve(TaoVec *, TaoVec*,TaoTruth *);

     47:   /* This method is also important for some solvers */
     48:   virtual int GetLinearSolver(TaoMat *, int, TaoLinearSolver **);

     50:   /* Used currently for complementarity, and least squares solvers */
     51:   virtual int EvaluateConstraints(TaoVec *, TaoVec *);
     52:   virtual int EvaluateJacobian(TaoVec *, TaoMat *);
     53:   virtual int GetJacobianMatrix(TaoMat **);
     54:   virtual int GetConstraintVector(TaoVec**);

     56:   /* This method is called only by OOQP */
     57:   virtual int GetInequalityConstraints(TaoVec**, TaoMat **, TaoVec **);

     59:   /* This method is called at each iteration of a TAO solver. Optional, but useful */
     60:   virtual int Monitor();
     61:   virtual int Monitor2(TaoVec*,TaoVec*,TaoVec*,TaoTruth*);

     63:   /* Difficult and rarely used. */
     64:   virtual int CreateATDAMatrix(TaoMat*, TaoVec*,TaoVec*, TaoMat**);

     66: };

     68: #endif