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 __CACROBOT_H
00033 #define __CACROBOT_H
00034
00035 #include "cqtconfig.h"
00036
00037 #include "ctransitionfunction.h"
00038 #include "crewardfunction.h"
00039 #include "ril_debug.h"
00040
00041 #ifdef RL_TOOLBOX_USE_QT
00042 #include "cqtmodelvisualizer.h"
00043 #endif
00044
00045 class CAcroBotModel : public CLinearActionContinuousTimeTransitionFunction
00046 {
00047 protected:
00048 virtual void doSimulationStep(CState *state, double timestep, CAction *action, CActionData *data);
00049
00050 public:
00051 double uMax;
00052 double g;
00053 double mass1;
00054 double mass2;
00055 double length1;
00056 double length2;
00057 double mu_1;
00058 double mu_2;
00059
00060 CAcroBotModel(double dt, double uMax = 2, double length1 = 0.5, double length2 = 0.5, double mass1 = 1.0, double mass2 = 1.0, double mu_1 = 0.05, double mu_2 = 0.05, double g = 9.8);
00061 virtual ~CAcroBotModel();
00062
00063 virtual Matrix *getB(CState *state);
00064 virtual ColumnVector *getA(CState *state);
00065
00066
00067 virtual bool isFailedState(CState *state);
00068
00069 virtual void getResetState(CState *state);
00070 };
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 class CAcroBotRewardFunction : public CStateReward
00092 {
00093 protected:
00094 CAcroBotModel *model;
00095 public:
00096 CAcroBotRewardFunction(CAcroBotModel *model, double segmentFactor = 0.5);
00097 virtual ~CAcroBotRewardFunction(){};
00098
00099 double segmentFactor;
00100 bool useHeighPeak;
00101
00102 double power;
00103
00104 virtual double getStateReward(CState *state);
00105 virtual void getInputDerivation(CState *modelState, ColumnVector *targetState);
00106
00107 };
00108
00109 class CAcroBotHeightRewardFunction : public CStateReward
00110 {
00111 protected:
00112 CAcroBotModel *model;
00113 bool useHeighPeak;
00114 public:
00115 CAcroBotHeightRewardFunction(CAcroBotModel *model);
00116 virtual ~CAcroBotHeightRewardFunction() {};
00117
00118 virtual double getStateReward(CState *state);
00119 virtual void getInputDerivation(CState *modelState, ColumnVector *targetState);
00120
00121 };
00122
00123 class CAcroBotVelocityRewardFunction : public CStateReward
00124 {
00125 protected:
00126 CAcroBotModel *model;
00127 public:
00128 bool invertVelocity;
00129
00130 CAcroBotVelocityRewardFunction(CAcroBotModel *model);
00131 virtual ~CAcroBotVelocityRewardFunction(){};
00132
00133 virtual double getStateReward(CState *state);
00134 virtual void getInputDerivation(CState *modelState, ColumnVector *targetState);
00135 };
00136
00137 class CAcroBotExpRewardFunction : public CStateReward
00138 {
00139 protected:
00140 CAcroBotModel *model;
00141 public:
00142 double expFactor;
00143
00144 CAcroBotExpRewardFunction(CAcroBotModel *model, double expFactor = 10.0);
00145 virtual ~CAcroBotExpRewardFunction(){};
00146
00147 virtual double getStateReward(CState *state);
00148 virtual void getInputDerivation(CState *modelState, ColumnVector *targetState);
00149 };
00150
00151 #ifdef RL_TOOLBOX_USE_QT
00152
00153 class CQTAcroBotVisualizer : public CQTModelVisualizer
00154 {
00155 protected:
00156 double phi1;
00157 double dphi1;
00158 double phi2;
00159 double dphi2;
00160
00161 CAcroBotModel *acroModel;
00162
00163 virtual void doDrawState( QPainter *painter);
00164
00165 public:
00166 CQTAcroBotVisualizer( CAcroBotModel *acroModel, QWidget *parent=0, const char *name=0);
00167 virtual ~CQTAcroBotVisualizer() {};
00168
00169 virtual void newDrawState(CStateCollection *state);
00170 };
00171
00172 #endif
00173
00174 #endif
00175
00176