-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbicycle.hh
132 lines (100 loc) · 3.18 KB
/
bicycle.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* Code by Chris Mansley
*/
#ifndef BICYCLE_HH
#define BICYCLE_HH
/* Definition dependencies */
#include "domain.hh"
/*!
*
*/
class Bicycle: public Domain
{
public:
/** Constructor */
Bicycle(double gamma);
/** Destructor */
~Bicycle() { logfile.close(); }
/** Simulate an interaction with the environment */
SARS *simulate(State s, Action a)
{
/* Simulate step */
SARS *sars = step(s,a);
/* Track samples */
numSamples++;
/* Log samples */
logfile << *sars << std::endl;
return sars;
}
/** Perform an interaction with the environment */
SARS *step(State s, Action a);
/** Get starting state from domain */
State getInitialState( ) { return initialState; }
/** Get discount factor for domain */
double getDiscountFactor( ) { return gamma; }
/** Get maximum range for action features */
std::vector<double> getMaximumActionRange( ) { return maxActionRange; }
/** Get minimum range for action features */
std::vector<double> getMinimumActionRange( ) { return minActionRange; }
/** Get maximum range for state features */
std::vector<double> getMaximumStateRange( ) { return maxStateRange; }
/** Get maximum range for state features */
std::vector<double> getMinimumStateRange( ) { return minStateRange; }
/** Get number of state dimensions */
int getStateDimension( ) { return stateDimension; }
/** Get number of action dimensions */
int getActionDimension( ) { return actionDimension; }
/** Set domain parameters */ /* This is ugly? */
void setParam(double d, int i) { noise = d; }
/** Get maximum reward */
double getRmax( ) { return rmax; }
/** Get minimum reward */
double getRmin( ) { return rmin; }
private:
/** Store starting state */
State initialState;
/** Domain Parameters */
std::vector<double> maxStateRange;
std::vector<double> minStateRange;
std::vector<double> maxActionRange;
std::vector<double> minActionRange;
int stateDimension;
int actionDimension;
static const double rmin = 0;
static const double rmax = 1;
/** Domain Properties */
double gamma;
/** Logging */
std::ofstream logfile;
/** Domain Specific */
static const double dt;
double noise;
static const double v;
static const double g;
static const double dCM;
static const double c;
static const double h;
static const double Mc;
static const double Md;
static const double Mp;
static const double M;
static const double R;
static const double sigma_dot;
static const double I_bike;
static const double I_dc;
static const double I_dv;
static const double I_dl;
static const double l;
static const double mypi;
static const double x_goal;
static const double y_goal;
static const double radius_goal;
/** Domain Helpers */
double sign(double x);
double calc_dist_to_goal(double xf, double xb, double yf, double yb);
double calc_angle_to_goal(double xf, double xb, double yf, double yb);
double orig_calc_angle_to_goal(double xf, double xb, double yf, double yb);
void dynamics(State &nextstate, double *reward, double *endsim, State &istate, Action &action, int to_do, double *maxnoise);
inline double sqr(double x) { return x*x; }
};
#endif // DI_HH