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_EPISODE_H
00033 #define C_EPISODE_H
00034
00035 #include <vector>
00036 #include <vector>
00037 #include <map>
00038
00039 #include "chistory.h"
00040 #include "cagentlistener.h"
00041
00042 class CState;
00043 class CStateProperties;
00044 class CStateCollection;
00045 class CStateCollectionList;
00046 class CStateModifier;
00047 class CStateList;
00048 class CAction;
00049 class CActionList;
00050 class CActionDataSet;
00051
00053
00061 class CEpisode : public CSemiMDPListener, public CStepHistory
00062 {
00063 protected:
00064
00066 bool autoNewEpisode;
00067
00069 CStateCollectionList *stateCollectionList;
00071 CActionList *actionList;
00072 public:
00074 CEpisode(CStateProperties *properties, CActionSet *actions, bool autoNewEpisode = true);
00076
00077 CEpisode(CStateProperties *properties, CActionSet *actions, std::list<CStateModifier *> *modifiers, bool autoNewEpisode = true);
00078 virtual ~CEpisode();
00079
00082 virtual void nextStep(CStateCollection *oldState, CAction *action, CStateCollection *newState );
00083
00085 virtual void newEpisode();
00086
00087 CStateList *getStateList(CStateProperties *properties);
00088
00090 void getStateCollection(int index, CStateCollectionImpl *stateCollection);
00092 void getState(int index, CState *state);
00093
00095 virtual void addStateModifier(CStateModifier *modifier);
00097 virtual void removeStateModifier(CStateModifier *modifier);
00098
00100 CAction *getAction(unsigned int num, CActionDataSet *dataSet = NULL);
00101
00103
00104 void saveBIN(FILE *stream);
00106
00107 void loadBIN(FILE *stream);
00108
00110
00111 virtual void saveData(FILE *stream);
00113
00114 virtual void loadData(FILE *stream);
00115
00117 virtual int getNumSteps();
00118
00120 virtual void getStep(int num, CStep *step);
00121
00122 virtual int getNumStateCollections();
00123
00124 virtual void resetData();
00125 };
00126
00127
00128
00129
00130 #endif
00131
00132