GenSetBase.h
00001 #ifndef GenSetBase_h
00002 #define GenSetBase_h
00003
00004
00005
00006
00007
00008
00009
00010
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 {
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
00051 GenSetBase() : Vdim(0), Size(0), nAct(0) {};
00052
00053
00054 GenSetBase(int n) : Vdim(n), Size(0), nAct(0) {};
00055
00057 virtual ~GenSetBase() {;}
00058
00059
00060 void init(int vd) { Vdim = vd; }
00061
00062
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
00070
00071
00072
00073
00074
00076
00077
00079
00080
00082
00083 virtual void generate(int i, double a, NEWMAT::ColumnVector &x,
00084 NEWMAT::ColumnVector &y) = 0;
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
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
00106
00107
00108
00110
00111
00112
00113
00114
00115
00116
00117
00119
00120
00121
00122
00124
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
00133
00134 virtual void initActive() {
00135
00136
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 };
00191
00192 }
00193
00194 #endif