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 __CPENDULUMMODEL_H
00033 #define __CPENDULUMMODEL_H
00034
00035 #include "cqtconfig.h"
00036
00037 #ifndef M_PI
00038 #define M_PI 3.14159265358979323846
00039 #endif
00040
00041 #include "ctransitionfunction.h"
00042 #include "crewardfunction.h"
00043 #include "cagentlistener.h"
00044
00045 #ifdef RL_TOOLBOX_USE_QT
00046 #include "cqtmodelvisualizer.h"
00047 #endif
00048
00049 class CPendulumModel : public CLinearActionContinuousTimeTransitionFunction
00050 {
00051 protected:
00052 virtual void doSimulationStep(CState *state, double timestep, CAction *action, CActionData *data);
00053
00054 public:
00055 double uMax;
00056 double dPhiMax;
00057 double g;
00058 double mass;
00059 double length;
00060 double mu;
00061
00062 CPendulumModel(double dt, double uMax = 5, double dPhiMax = 10, double length = 1, double mass = 1, double mu = 1.0, double g = 9.81);
00063 ~CPendulumModel();
00064
00065 virtual Matrix *getB(CState *state);
00066 virtual ColumnVector *getA(CState *state);
00067
00068 virtual bool isFailedState(CState *state);
00069
00070
00071
00072 virtual void getResetState(CState *resetState);
00073
00074 virtual void setParameter(string paramName, double value);
00075
00076 };
00077
00078 class CPendulumRewardFunction : public CStateReward
00079 {
00080 public:
00081 double rewardFactor;
00082 CPendulumRewardFunction(CPendulumModel *model);
00083
00084 virtual double getStateReward(CState *state);
00085 virtual void getInputDerivation(CState *modelState, ColumnVector *targetState);
00086
00087 };
00088
00089 class CPendulumUpTimeCalculator : public CSemiMDPListener
00090 {
00091 protected:
00092 double phi_up;
00093 double dt;
00094 int up_steps;
00095 public:
00096 CPendulumUpTimeCalculator(double phi_up, double dt);
00097
00098 virtual void nextStep(CStateCollection *oldState, CAction *action, CStateCollection *nextState);
00099 virtual void newEpisode();
00100
00101 double getUpTime();
00102 int getUpSteps();
00103 };
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 #ifdef RL_TOOLBOX_USE_QT
00119
00120 class CQTPendulumVisualizer : public CQTModelVisualizer
00121 {
00122 protected:
00123 double phi;
00124 double dphi;
00125
00126 CPendulumModel *pendModel;
00127
00128 virtual void doDrawState( QPainter *painter);
00129
00130 public:
00131 CQTPendulumVisualizer(CPendulumModel *pendModel, QWidget *parent=0, const char *name=0);
00132
00133 virtual void newDrawState(CStateCollection *state);
00134 };
00135
00136 #endif
00137
00138 #endif