00001 #ifndef XCS_h
00002 #define XCS_h
00003
00004 #include "../Algorithm.h"
00005 #include "../bitstring/BitString.h"
00006
00007 #include <set>
00008
00009 #include "XCSParams.h"
00010 #include "Classifier.h"
00011 #include "ClassifierParams.h"
00012 #include "Environment.h"
00013 #include <fstream>
00014 #include <string>
00015
00016
00017
00018
00019
00029 class XCS : public Algorithm
00030 {
00031 public:
00032 XCS();
00033 bool advanceGeneration(StateP state, DemeP deme);
00034 bool initialize(StateP state);
00035 void registerParameters(StateP state);
00036
00037 protected:
00038 SelectionOperatorP selRandomOp, selWorstOp, selFitPropOp;
00039
00040 private:
00041 void test (DemeP deme);
00042
00043 unsigned long long int time;
00044 std::vector<ClassifierP> populationSet;
00045 EnvironmentP environment;
00046 XCSParamsP params;
00047
00048
00049 std::vector<ClassifierP> generateMatchSet(StateP state, DemeP deme, GenotypeP input);
00050 ClassifierP cover (StateP state, DemeP deme, GenotypeP input, std::vector<ClassifierP> matchSet);
00051 std::map<int, double> generatePA(std::vector<ClassifierP> matchSet);
00052 int selectActionId(StateP state, std::map<int, double> PA);
00053 std::vector<ClassifierP> generateActionSet(std::vector<ClassifierP> matchSet, int actionId);
00054 void updateActionSet(std::vector<ClassifierP> actionSet, DemeP deme, double reward, StateP state);
00055 void runGA(std::vector<ClassifierP> actionSet, GenotypeP input, DemeP deme, StateP state);
00056
00057 void printPopulation();
00058 std::pair<int, double> getMaxFromPA(std::map<int, double> PA);
00059 std::set<int> getActionsFromMs (std::vector<ClassifierP> matchSet);
00060 double getAsTimeSum(std::vector<ClassifierP> as);
00061
00062 void deleteFromPopulation(StateP state, DemeP deme);
00063 void actionSetSubsumption(std::vector<ClassifierP> *actionSet, DemeP deme, StateP state);
00064 void removeFromPopSet(ClassifierP cl, DemeP deme);
00065 };
00066 typedef boost::shared_ptr<XCS> XCSP;
00067
00068 #endif
00069