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 CAGENTLOGGER_H
00033 #define CAGENTLOGGER_H
00034
00035 #include "cagentlistener.h"
00036 #include "cepisodehistory.h"
00037 #include "cbaseobjects.h"
00038
00039 #include <stdio.h>
00040 #include <list>
00041
00042 class CEpisode;
00043 class CStateModifier;
00045
00056 class CAgentLogger: public CSemiMDPListener, public CEpisodeHistory
00057 {
00058 protected:
00060 char filename[512];
00062 FILE* file;
00063
00064 char loadFileName[512];
00065 std::list<CStateModifier *> *loadModifiers;
00067 int holdMemory;
00068
00070 std::list<CEpisode *> *episodes;
00072 CEpisode *currentEpisode;
00073
00074 void init();
00075 public:
00077 CAgentLogger(CStateProperties *model, CActionSet *actions, char* autoSavefile, int holdMemory);
00079 CAgentLogger(CStateProperties *model, CActionSet *actions);
00081 CAgentLogger(char *loadFile, CStateProperties *model, CActionSet *actions, std::list<CStateModifier *> *modifiers);
00082
00083 virtual ~CAgentLogger();
00084
00086 virtual void nextStep(CStateCollection *oldState, CAction *action, CStateCollection *nextState);
00088 virtual void newEpisode();
00089
00091 void setAutoSaveFile(char *filename);
00092
00094 virtual void saveBIN(FILE *stream);
00096 virtual void saveData(FILE *stream);
00098
00099 void loadBIN(FILE *stream, std::list<CStateModifier *> *modifiers, int episodes = -1);
00101
00102 virtual void loadData(FILE *stream, int episodes = -1);
00103 virtual void loadData(FILE *stream);
00104
00106 virtual int getNumEpisodes();
00107
00109 virtual void addStateModifier(CStateModifier *modifier);
00111 virtual void removeStateModifier(CStateModifier *modifier);
00112
00114 virtual CEpisode* getCurrentEpisode();
00115
00117 virtual CEpisode* getEpisode(int index);
00118
00120 void clearAutoSaveFile();
00121
00122 void setLoadDataFile(char *loadData, std::list<CStateModifier *> *modifiers = NULL);
00123
00125
00126 virtual void resetData();
00127 };
00128
00130
00135 class CEpisodeOutput : public CSemiMDPRewardListener, public CActionObject, public CStateObject
00136 {
00137 protected:
00138 FILE *stream;
00139
00140 int nEpisodes;
00141 int nSteps;
00142
00143 public:
00144 CEpisodeOutput(CStateProperties *featCalc, CRewardFunction *rewardFunction, CActionSet *actions, FILE *output);
00145 virtual ~CEpisodeOutput();
00146
00147 virtual void nextStep(CStateCollection *oldState, CAction *action, double reward, CStateCollection *nextState);
00148 virtual void intermediateStep(CStateCollection *oldState, CAction *action, double reward, CStateCollection *nextState);
00149 virtual void newEpisode();
00150 };
00151
00152 class CEpisodeMatlabOutput : public CSemiMDPRewardListener, public CActionObject, public CStateObject
00153 {
00154 protected:
00155 FILE *stream;
00156
00157
00158 int nSteps;
00159
00160 public:
00161 int nEpisodes;
00162
00163 CEpisodeMatlabOutput(CStateProperties *featCalc, CRewardFunction *rewardFunction, CActionSet *actions, FILE *output);
00164 virtual ~CEpisodeMatlabOutput();
00165
00166 virtual void nextStep(CStateCollection *oldState, CAction *action, double reward, CStateCollection *nextState);
00167 virtual void newEpisode();
00168
00169 void setOutputFile(FILE *stream);
00170 };
00171
00173
00176 class CEpisodeOutputStateChanged : public CEpisodeOutput
00177 {
00178 public:
00179 CEpisodeOutputStateChanged(CStateProperties *featCalc, CRewardFunction *rewardFunction, CActionSet *actions, FILE *output);
00180 virtual ~CEpisodeOutputStateChanged() {};
00181
00182 virtual void nextStep(CStateCollection *oldState, CAction *action, double reward, CStateCollection *nextState);
00183 };
00184
00185 class CStateOutput : public CSemiMDPListener, public CStateObject
00186 {
00187 protected:
00188 FILE *stream;
00189
00190 public:
00191 CStateOutput(CStateProperties *featCalc, FILE *output);
00192 virtual ~CStateOutput();
00193
00194 virtual void nextStep(CStateCollection *oldState, CAction *action, CStateCollection *nextState);
00195 };
00196
00197 class CActionOutput : public CSemiMDPListener, public CActionObject
00198 {
00199 protected:
00200 FILE *stream;
00201
00202 public:
00203 CActionOutput(CActionSet *actions, FILE *output);
00204 virtual ~CActionOutput();
00205
00206 virtual void nextStep(CStateCollection *oldState, CAction *action, CStateCollection *nextState);
00207 };
00208
00209 #endif