Actual source code: taoapp_ga.h

      1: //File taoapp_ga.h

      3: /**************************************************************

      5: Author: Limin Zhang, Ph.D.
      6:         Mathematics Department
      7:         Columbia Basin College
      8:         Pasco, WA 99301
      9:         Limin.Zhang@cbc2.org

     11: Mentor: Jarek Naplocha, Ph.D.
     12:         Environmental Molecular Science Laboratory
     13:         Pacific Northwest National Laboratory
     14:         Richland, WA 99352

     16: Date: 7/22/2002

     18: Purpose:
     19:       to design and implement an applicaton interface
     20: between TAO and global arrays.

     22: Revise histroy:

     24: 8/9/02
     25:         To get rid of Petsc calls and marcos.
     26:
     27: **************************************************************/

     29: #ifndef TAOGAAPP_H
     30: #define TAOGAAPP_H

     32:  #include taoappobject.h
     33: #include "taovec_ga.h"
     34: #include "taomat_ga.h"

     37: #ifndef MAX_TAO_MONITORS
     38: #define MAX_TAO_MONITORS 5
     39: #endif

     41: class TaoGAApplication: public TaoApplication{

     43:  protected:

     45:  public:
     46:   TaoGAApplication(MPI_Comm comm);
     47:   ~TaoGAApplication();

     49:   MPI_Comm comm;

     51:   /* Function Evaluation */
     52:   TaoVecGa *taox;    /* The Variable Vector */
     53:   GAVec V;
     54:   void *usrfctx;
     55:   virtual int GetVariableVector(TaoVec **);
     56:   int  (*computeumfunction)(TaoGAApplication*,GAVec,double*,void*);
     57:   virtual int EvaluateObjectiveFunction(TaoVec *xx, double *ff);

     59:   /* Gradient Evaluation */
     60:   void *usrgctx;
     61:   int  (*computegradient)(TaoGAApplication*,GAVec,GAVec,void*);
     62:   virtual int EvaluateGradient(TaoVec *xx, TaoVec *gg);

     64:   /* Function and Gradient */
     65:   void *usrfgctx;
     66:   int  (*computefunctiongradient)(TaoGAApplication*,GAVec,double*,GAVec,void*);
     67:   int EvaluateObjectiveAndGradient(TaoVec *xx, double *ff, TaoVec *gg);

     69:   /* Hessian Evaluation */
     70:   GAMat  HesMat;
     71:   TaoMatGa *taoh;    /* The Hessian Matrix */
     72:   void *usrhctx;
     73:   virtual int GetHessianMatrix(TaoMat **HH);
     74:   int  (*computehessian)(TaoGAApplication*,GAVec,GAMat,void*);
     75:   virtual int EvaluateHessian(TaoVec *xx, TaoMat *HH);

     77:   /* Set Variable Bounds */
     78:   TaoVecGa *taoxl;   /* The Lower Bounds on the Variable Vector */
     79:   TaoVecGa *taoxu;   /* The Upper Bounds on the Variable Vector */

     81:   virtual int EvaluateVariableBounds(TaoVec *xxll, TaoVec *xxuu);
     82:   void *usrvbctx;
     83:   int (*computebounds)(TaoGAApplication*, GAVec, GAVec, void*);

     85:   virtual int InitializeVariables(TaoVec *x);

     87:   /* Monitoring */
     88:   int numbermonitors;                                        // # of monitors
     89:   int (*monitor[MAX_TAO_MONITORS])(TaoGAApplication*, void*);// monitor routines
     90:   void *monitorcontext[MAX_TAO_MONITORS];                    // monitor contexts

     93: };

     96: // C stubs
     97: typedef TaoGAApplication* TAO_GA_APPLICATION;
     98: int TaoGAApplicationCreate(MPI_Comm comm, TAO_GA_APPLICATION* newapp);
     99: int TaoGAAppDestroy(TAO_GA_APPLICATION gaapp);
    100: int TaoGAAppSetObjectiveRoutine(TAO_GA_APPLICATION gaapp, GAVec X,
    101:                                 int (*func)(TAO_GA_APPLICATION,GAVec,double*,void*),void *ctx);
    102: int TaoGAAppSetGradientRoutine(TAO_GA_APPLICATION gaapp,
    103:                                int (*grad)(TAO_GA_APPLICATION,GAVec,GAVec,void*),void *ctx);
    104: int TaoGAAppSetObjectiveAndGradientRoutine(TAO_GA_APPLICATION gaapp,
    105:                                            int (*funcgrad)(TAO_GA_APPLICATION,GAVec,double*,GAVec, void*),
    106:                                            void *ctx);
    107: int TaoGAAppSetHessianRoutine(TAO_GA_APPLICATION gaapp,
    108:                               int (*hess)(TAO_GA_APPLICATION, GAVec, GAMat,void*),void *ctx);
    109: int TaoGAAppSetVariableVec(TAO_GA_APPLICATION gaapp, GAVec X);
    110: int TaoGAAppSetInitialSolutionVec(TAO_GA_APPLICATION gaapp, GAVec X0);
    111: int TaoGAAppSetVariableBoundsRoutine(TAO_GA_APPLICATION gaapp,
    112:                                      int (*func)(TAO_GA_APPLICATION, GAVec, GAVec, void*), void *ctx);
    113: int TaoSolveGAApplication(TAO_GA_APPLICATION gaapp, TAO_SOLVER tao);
    114: int TaoSetupGAApplicationSolver(TAO_GA_APPLICATION gaapp, TAO_SOLVER tao);
    115: int TaoGAAppSetMonitor(TAO_GA_APPLICATION gaapp, int (*mymonitor)(TAO_GA_APPLICATION, void*), void *mctx);
    116: int TaoGAAppMonitor(TAO_GA_APPLICATION gaapp);
    117: #endif