GenSetBase.h

00001 #ifndef GenSetBase_h
00002 #define GenSetBase_h
00003 //------------------------------------------------------------------------
00004 // Generating Set Class - for use with OptGSS
00005 //------------------------------------------------------------------------
00006 
00007 /*------------------------------------------------------------------------
00008  Copyright (c) 2003,
00009  Ricardo Oliva (raoliva@lbl.gov)
00010  Lawrence Berkeley National Laboratory
00011  ------------------------------------------------------------------------*/
00012 
00013 #ifdef HAVE_CONFIG_H
00014 #include "OPT++_config.h"
00015 #endif
00016 
00017 #define WANT_MATH
00018 
00019 #include <string>
00020 #include <iostream>
00021 #ifdef HAVE_STD
00022 #include <cfloat>
00023 #include <cstdlib>
00024 #else
00025 #include <float.h>
00026 #include <stdlib.h>
00027 #endif
00028 
00029 #include "newmatap.h"
00030 
00031 using std::cerr;
00032 using std::string;
00033 
00034 namespace OPTPP {
00035 
00036 class GenSetBase {  // Generating Set Base Class
00037 
00038  protected:
00039   int  Vdim;
00040 
00041   int  Size;
00042   int  nAct;
00043 
00044   NEWMAT::ColumnVector ActiveIDs;
00045   NEWMAT::ColumnVector InactiveIDs;
00046 
00047  public:
00048   virtual string classnm() { return "GenSetBase";}; 
00049 
00050   // default constructor;
00051   GenSetBase() : Vdim(0),  Size(0), nAct(0) {};
00052 
00053   // Constructor with specific vector-size
00054   GenSetBase(int n) : Vdim(n), Size(0), nAct(0) {};
00055 
00057   virtual ~GenSetBase() {;}  
00058 
00059   // Basic init method -- call after default constr.
00060   void init(int vd) { Vdim = vd; }
00061 
00062   // Basic set/get methods
00063   void setSize(int s) { Size = s; }
00064   void setVdim(int n) { Vdim = n; }
00065   int size() { return Size; }
00066   int vdim() { return Vdim; }
00067 
00068   //--
00069   // Generating Methods
00070   //--
00071 
00072   // -- wrt ALL Directions --
00073 
00074   //  virtual NEWMAT::ColumnVector generate(int i);
00076 
00077   //  virtual void generate(int i, NEWMAT::ColumnVector& y);
00079 
00080   //  virtual NEWMAT::ColumnVector generate(int i, double a, NEWMAT::ColumnVector& x);
00082   
00083   virtual void generate(int i, double a, NEWMAT::ColumnVector &x, 
00084     NEWMAT::ColumnVector &y) = 0;  
00086 
00087   // -- wrt ACTIVE Directions --
00088   /*
00089   virtual 
00090     NEWMAT::ColumnVector generateActive(int i)
00091     { return generate(activeID(i)); }
00092 
00093   virtual 
00094     void generateActive(int i, NEWMAT::ColumnVector& y) 
00095     { generate(activeID(i), y); }
00096 
00097   virtual 
00098     NEWMAT::ColumnVector generateActive(int i, double s, NEWMAT::ColumnVector& x)
00099     { return generate(activeID(i), s, x); }
00100   */
00101   virtual void generateActive(int i, double s, NEWMAT::ColumnVector &x, 
00102     NEWMAT::ColumnVector &y)
00103     { generate(activeID(i), s, x, y); }
00104 
00105   // -- wrt INACTIVE Directions --
00106   /*
00107   virtual 
00108     NEWMAT::ColumnVector generateInactive(int i)
00110     { 
00111       NEWMAT::ColumnVector v; 
00112       v = generate(inactiveID(i)); 
00113       return v; 
00114     }
00115 
00116   virtual 
00117     void generateInactive(int i, NEWMAT::ColumnVector& y)
00119     { generate(inactiveID(i), y); }
00120 
00121   virtual 
00122     NEWMAT::ColumnVector generateInactive(int i, double s, NEWMAT::ColumnVector& x)
00124     { return generate(inactiveID(i), s, x); }
00125   */
00126   virtual 
00127     void generateInactive(int i, double s, NEWMAT::ColumnVector &x, NEWMAT::ColumnVector &y)
00129     { generate(inactiveID(i), s, x, y); }
00130 
00131   //--
00132   // Pruning methods
00133   //--
00134   virtual void initActive() {  
00135     // call this in constructor of derived class 
00136     // after size of derived class has been set
00137     if (Size==0) { 
00138       cerr << "!!! ERROR: GenSetBase::initActive() called when size==0\n";
00139       return;
00140     }
00141     nAct = Size;
00142     ActiveIDs.ReSize(Size);
00143     for (int i=1; i<=Size; i++) ActiveIDs(i) = i; 
00144     InactiveIDs.ReSize(Size); 
00145     InactiveIDs = 0;
00146   }
00147 
00148   virtual int nActive() { return nAct; }
00149   virtual int nInactive() { return (Size - nAct); }
00150   virtual int activeID(int j) { return static_cast<int>(ActiveIDs(j)); }
00151   virtual int inactiveID(int j) { return static_cast<int>(InactiveIDs(j)); }
00152 
00153   virtual int init(){ return 0;}    
00154   virtual int init(NEWMAT::ColumnVector& pV){ return 0;}    
00155 
00156   virtual int update(){ return 0;}    
00157   virtual int update(NEWMAT::ColumnVector& pV){return 0;}        
00158 
00159   virtual bool prunes(){return false;} 
00161 
00162   bool   generateAll(NEWMAT::Matrix& M, NEWMAT::ColumnVector& X, double Delta=1.0);
00163   NEWMAT::Matrix generateAll(NEWMAT::ColumnVector& X, double D=1.0) {
00164     NEWMAT::Matrix M(Vdim,Size);
00165     generateAll(M,X,D);
00166     return M;
00167   }
00168   NEWMAT::Matrix generateAll(double Delta=1.0) {
00169     NEWMAT::ColumnVector X(Vdim);
00170     X = 0;
00171     return generateAll(X,Delta); 
00172   }
00173 
00174   bool   generateAllActive(NEWMAT::Matrix& M, NEWMAT::ColumnVector& X, double Delta=1.0);
00175   NEWMAT::Matrix generateAllActive(NEWMAT::ColumnVector& X, double D=1.0) {
00176     int n = nActive();
00177     int m = Vdim;
00178     NEWMAT::Matrix M(m,n);
00179     generateAllActive(M,X,D);
00180     return M;
00181   }
00182   NEWMAT::Matrix generateAllActive(double Delta=1.0) {
00183     NEWMAT::ColumnVector X(Vdim);
00184     X = 0;
00185     return generateAllActive(X,Delta); 
00186   }
00187 
00188   NEWMAT::Matrix pllMesh(int P, NEWMAT::ColumnVector& xc, NEWMAT::ColumnVector& xn, double d=0.0);
00189 
00190 }; // end of GenSetBase class
00191 
00192 } // namespace OPTPP
00193 
00194 #endif
Generated on Mon Jan 24 12:04:37 2011 for FASTlib by  doxygen 1.6.3