00001 #ifndef C__TAXIDOMAIN_H
00002 #define C__TAXIDOMAIN_H
00003
00004 #include "cgridworldmodel.h"
00005 #include "cagent.h"
00006 #include "caction.h"
00007 #include "cdiscretizer.h"
00008 #include "crewardfunction.h"
00009
00010
00011 #include <vector>
00012
00013 #define PICKUPACTION 32
00014 #define PUTDOWNACTION 64
00015
00016 class CTaxiDomain : public CGridWorldModel
00017 {
00018 protected:
00019 std::vector<std::pair<int, int> *> *targetXYValues;
00020
00021 virtual void initTargetVector();
00022 public:
00023
00024 CTaxiDomain(char* filename);
00025 virtual ~CTaxiDomain();
00026
00027 virtual void load(FILE *stream);
00028
00029 int getTargetPositionX(int numTarget);
00030
00031 int getTargetPositionY(int numTarget);
00032
00033 int getNumTargets() {return targetXYValues->size();};
00034
00035 double getReward(CStateCollection *, CAction *, CStateCollection *);
00036
00037 virtual void transitionFunction(CState *oldstate, CAction *action, CState *newState, CActionData *data = NULL);
00038
00039 virtual bool isResetState(CState *state);
00040
00041 virtual void getResetState(CState *resetState);
00042
00043
00044 };
00045
00046 class CPickupAction : public CPrimitiveAction
00047 {
00048 public:
00049 CPickupAction(){addType(PICKUPACTION);};
00050 };
00051
00052 class CPutdownAction : public CPrimitiveAction
00053 {
00054 public:
00055 CPutdownAction(){addType(PUTDOWNACTION);};
00056 };
00057
00058 class CTaxiHierarchicalBehaviour : public CHierarchicalSemiMarkovDecisionProcess, public CRewardFunction
00059 {
00060 protected:
00061 int target;
00062 CTaxiDomain *model;
00063
00064 public:
00065 CTaxiHierarchicalBehaviour(CEpisode *currentEpisode, int target, CTaxiDomain *taximodel);
00066 ~CTaxiHierarchicalBehaviour();
00067
00068 virtual bool isFinished(CStateCollection *state, CStateCollection *newState);
00069 virtual double getReward(CStateCollection *oldState, CAction *action, CStateCollection *newState);
00070 };
00071
00072 class CTaxiIsTargetDiscreteState : public CAbstractStateDiscretizer
00073 {
00074 protected:
00075 CTaxiDomain *model;
00076 public:
00077 CTaxiIsTargetDiscreteState(CTaxiDomain *model);
00078
00079 virtual unsigned int getDiscreteStateNumber(CStateCollection *stateCol);
00080
00081 };
00082
00083
00084 #endif