00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef C_STATEMODIFIER_H
00033 #define C_STATEMODIFIER_H
00034
00035 #ifndef M_PI
00036 #define M_PI 3.14159265358979323846
00037 #endif
00038
00039 #include <list>
00040 #include "cstateproperties.h"
00041 #include <newmat/newmat.h>
00042
00043 class CStateCollection;
00044 class CStateCollectionImpl;
00045 class CState;
00046
00047 class CDataSet;
00048 class CDataSet1D;
00049 class CFeatureVFunction;
00051
00062 class CStateModifier : public CStateProperties
00063 {
00064 protected:
00065 bool changeState;
00066
00067 CStateModifier();
00068
00069 std::list<CStateCollectionImpl *> *stateCollections;
00070
00071 virtual void registerStateCollection(CStateCollectionImpl *stateCollection);
00072 virtual void removeStateCollection(CStateCollectionImpl *stateCollection);
00073
00074 virtual void stateChanged();
00075
00076
00077 friend class CStateCollectionImpl;
00078 public:
00080 CStateModifier(unsigned int numContinuousStates, unsigned int numDiscreteStates);
00081 virtual ~CStateModifier();
00082
00084 virtual void getModifiedState(CStateCollection *originalState, CState *modifiedState) = 0;
00085
00086
00087 };
00088
00090
00093 class CNeuralNetworkStateModifier : public CStateModifier
00094 {
00095 protected:
00096 CStateProperties *originalState;
00097 unsigned int *dimensions;
00098 unsigned int numDim;
00099
00100 ColumnVector *input_mean;
00101 ColumnVector *input_std;
00102
00103 ColumnVector *buffVector;
00104
00105 virtual void preprocessInput(ColumnVector *input, ColumnVector *norm_input);
00106
00108 static int getNumInitContinuousStates(CStateProperties *properties, unsigned int *dimensions,unsigned int numDim);
00109 public:
00110 bool normValues;
00111
00112 CNeuralNetworkStateModifier(CStateProperties *originalState);
00113 CNeuralNetworkStateModifier(CStateProperties *originalState, unsigned int *dimensions, unsigned int numDim);
00114 ~CNeuralNetworkStateModifier();
00115
00117
00120 virtual void getModifiedState(CStateCollection *originalState, CState *modifiedState);
00121
00122 void setPreprocessing(ColumnVector *input_mean, ColumnVector *input_std);
00123 };
00124
00126
00135 class CFeatureCalculator : public CStateModifier
00136 {
00137 protected:
00139
00142 void normalizeFeatures(CState *featState);
00143
00144 unsigned int numFeatures;
00145 unsigned int numActiveFeatures;
00146
00147 CFeatureCalculator();
00148
00150 void initFeatureCalculator(unsigned int numFeatures, unsigned int numActiveFeatures);
00151
00152 CStateProperties *originalState;
00153 public:
00154 CFeatureCalculator(unsigned int numFeatures, unsigned int numActiveFeatures);
00155 virtual ~CFeatureCalculator() {};
00156
00157 virtual unsigned int getNumFeatures();
00158 virtual unsigned int getNumActiveFeatures();
00159
00160 virtual unsigned int getDiscreteStateSize(unsigned int i);
00161 virtual unsigned int getDiscreteStateSize();
00162
00163 virtual double getMin(unsigned int i);
00164 virtual double getMax(unsigned int i);
00165
00167
00170 CStateProperties *getOriginalState() {return originalState;};
00171 void setOriginalState(CStateProperties *originalState) {this->originalState = originalState;};
00172 };
00173
00174 class CNewFeatureCalculator
00175 {
00176 public:
00177 virtual ~CNewFeatureCalculator() {};
00178
00179 virtual CFeatureCalculator * getFeatureCalculator(CFeatureVFunction *vFunction, CDataSet *inputData, CDataSet1D *outputData) = 0;
00180 };
00181
00183
00186 class CStateMultiModifier
00187 {
00188 protected:
00189 std::list<CState *> *states;
00190 std::list<CStateModifier *> *modifiers;
00191 public:
00192 CStateMultiModifier();
00193 virtual ~CStateMultiModifier();
00194
00195 virtual void addStateModifier(CStateModifier *featCalc);
00196
00197 std::list<CStateModifier *> *getStateModifiers();
00198 };
00199
00200 class CStateVariablesChooser : public CStateModifier
00201 {
00202 protected:
00203 unsigned int *contStatesInd;
00204 unsigned int *discStatesInd;
00205
00206 CStateProperties *originalState;
00207 public:
00208 CStateVariablesChooser(unsigned int numContStates, unsigned int *contStatesInd, unsigned int numDiscStates, unsigned int *discStatesInd, CStateProperties *originalState = NULL);
00209
00210 ~CStateVariablesChooser();
00211
00212
00213 virtual void getModifiedState(CStateCollection *originalState, CState *modifiedState);
00214 };
00215
00216 #endif
00217