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 CLINEARFAFEATURE_H
00033 #define CLINEARFAFEATURE_H
00034
00035 #include "cstatemodifier.h"
00036
00037 #include <map>
00038
00039 class CState;
00040 class CStateCollection;
00041
00043
00048 class CFeatureOperatorOr : public CStateMultiModifier, public CFeatureCalculator
00049 {
00050 protected:
00051 std::map<CStateModifier *, double> *featureFactors;
00052 public:
00054 CFeatureOperatorOr();
00055 virtual ~CFeatureOperatorOr();
00056
00058
00061 virtual void getModifiedState(CStateCollection *state, CState *modifiedState);
00063
00066 virtual void addStateModifier(CStateModifier *featCalc, double factor = 1.0);
00067
00069
00072 virtual void initFeatureOperator();
00073
00075 CStateModifier *getStateModifier(int feature);
00076
00078
00079 };
00080
00082
00088 class CFeatureOperatorAnd : public CStateMultiModifier, public CFeatureCalculator
00089 {
00090 protected:
00091 public:
00092 CFeatureOperatorAnd();
00093
00095
00096 virtual void getModifiedState(CStateCollection *state, CState *modifiedState);
00097
00099
00102 virtual void addStateModifier(CStateModifier *featCalc);
00103
00105
00108 virtual void initFeatureOperator();
00109
00111
00112 };
00113
00114
00116
00123 class CGridFeatureCalculator : public CFeatureCalculator
00124 {
00125 protected:
00126 unsigned int *partitions;
00127 unsigned int *dimensions;
00128 double *offsets;
00129
00130 unsigned int numDim;
00131
00132 unsigned int *dimensionSize;
00133
00134 double *gridScale;
00135
00136 public:
00137
00141 CGridFeatureCalculator(unsigned int numDim, unsigned int dimensions[], unsigned int partitions[], double offsets[], unsigned int numActiveFeatures);
00142 ~CGridFeatureCalculator();
00143
00144 void setGridScale(int dimension, double scale);
00145
00147 int unsigned getNumDimensions();
00148
00150 int unsigned getFeatureIndex(int position[]);
00151
00153 virtual void getFeaturePosition(unsigned int feature, ColumnVector *position);
00154
00156 virtual unsigned int getActiveFeature(CState *state);
00157
00159 virtual void getSingleActiveFeature(CState *state, unsigned int *activeFeature);
00160
00162 virtual void getModifiedState(CStateCollection *state, CState *featState) = 0;
00163 };
00164
00165
00167
00170 class CTilingFeatureCalculator : public CGridFeatureCalculator
00171 {
00172
00173 public:
00174 CTilingFeatureCalculator(unsigned int numDim, unsigned int dimensions[], unsigned int partitions[], double offsets[]);
00175 ~CTilingFeatureCalculator();
00176
00178 virtual void getModifiedState(CStateCollection *state, CState *featState);
00179 };
00180
00182
00186 class CLinearMultiFeatureCalculator : public CGridFeatureCalculator
00187 {
00188 protected:
00189 unsigned int *areaSize;
00190 unsigned int areaNumPart;
00191
00192 ColumnVector *activePosition;
00193 ColumnVector *featurePosition;
00194 unsigned int *actualPartition;
00195 unsigned int *singleStateFeatures;
00196
00198
00201 virtual double getFeatureFactor(CState *state, ColumnVector *featPos) = 0;
00203
00207 virtual void initAreaSize();
00208
00210
00213 virtual void calcNumActiveFeatures();
00214 public:
00216 CLinearMultiFeatureCalculator(unsigned int numDim, unsigned int dimensions[], unsigned int partitions[], double offsets[], unsigned int numFeatures);
00217 ~CLinearMultiFeatureCalculator();
00218
00220
00222 virtual void getModifiedState(CStateCollection *state, CState *featState);
00223 };
00224
00226
00233 class CRBFFeatureCalculator : public CLinearMultiFeatureCalculator
00234 {
00235 protected:
00236 double *sigma;
00237 double sigmaMaxSize;
00238
00240 virtual double getFeatureFactor(CState *state, ColumnVector *featPos);
00242
00245 virtual void initAreaSize();
00246
00247 public:
00248 CRBFFeatureCalculator(unsigned int numDim, unsigned int dimensions[], unsigned int partitions[], double offsets[], double sigma[]);
00249 CRBFFeatureCalculator(unsigned int numDim, unsigned int dimensions[], unsigned int partitions[], double offsets[], double sigma[], unsigned int areaSize[]);
00250
00251 ~CRBFFeatureCalculator();
00252
00254
00255 };
00256
00257 class CLinearInterpolationFeatureCalculator : public CLinearMultiFeatureCalculator
00258 {
00259 virtual double getFeatureFactor(CState *state, ColumnVector *featPos);
00260
00261 virtual void initAreaSize();
00262
00263 public:
00264 CLinearInterpolationFeatureCalculator(unsigned int numDim, unsigned int dimensions[], unsigned int partitions[], double offsets[]);
00265 ~CLinearInterpolationFeatureCalculator();
00266
00267 };
00268
00270
00277 class CSingleStateFeatureCalculator : public CFeatureCalculator
00278 {
00279 protected:
00280 int dimension;
00281 int numPartitions;
00282 double *partitions;
00283
00285
00288 virtual double getFeatureFactor(int partition, double contState, double difference) = 0;
00289 public:
00291
00294 CSingleStateFeatureCalculator(int dimension, int numPartitions, double *partitions, int numActiveFeatures);
00295 virtual ~CSingleStateFeatureCalculator();
00296
00298
00299 virtual void getModifiedState(CStateCollection *state, CState *featState);
00300 };
00301
00303
00307 class CSingleStateRBFFeatureCalculator : public CSingleStateFeatureCalculator
00308 {
00309 protected:
00310
00311
00313 virtual double getFeatureFactor(int partition, double difference, double nextPart);
00314 public:
00315 CSingleStateRBFFeatureCalculator(int dimension, int numPartitions, double *partitions, int numActiveFeatures);
00316
00317
00319
00320
00321 };
00322
00323
00325
00329 class CSingleStateLinearInterpolationFeatureCalculator : public CSingleStateFeatureCalculator
00330 {
00331 protected:
00332 virtual double getFeatureFactor(int partition, double difference, double nextPart);
00333 public:
00334 CSingleStateLinearInterpolationFeatureCalculator(int dimension, int numPartitions, double *partitions);
00335 ~CSingleStateLinearInterpolationFeatureCalculator();
00336 };
00337
00338 class CFeatureStateNNInput : public CStateModifier
00339 {
00340 protected:
00341 CFeatureCalculator *featureStateCalc;
00342 CState *featureState;
00343 public:
00344 CFeatureStateNNInput(CFeatureCalculator *featureStateCalc);
00345 ~CFeatureStateNNInput();
00346
00347
00348 virtual void getModifiedState(CStateCollection *state, CState *featState);
00349 };
00350
00351 #endif
00352
00353
00354