-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhoot.cc
85 lines (70 loc) · 1.55 KB
/
hoot.cc
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
/*
* Code by Chris Mansley
*/
#include <iostream>
#include <cmath>
#include "hoot.hh"
/*
*
*/
HOOT::HOOT(Domain *d, Chopper *c, double epsilon) : MCPlanner(d, c, epsilon)
{
}
/*
*
*/
void HOOT::initialize(std::string filename)
{
}
/*
*
*/
void HOOT::reset()
{
/* Clear all HOOs before clearing pointers */
for(boost::unordered_map<std::vector<int>, HOO*>::const_iterator it = HOOS.begin(); it != HOOS.end(); ++it) {
it->second->clear();
delete it->second;
}
HOOS.clear();
}
void HOOT::print(State s)
{
/* Create vector of ints for state, action and depth */
std::vector<int> sd = chopper->discretizeState(s);
sd.push_back(0);
HOOS[sd]->print();
}
/*
*
*/
void HOOT::updateValue(int depth, SARS *sars, double qvalue)
{
/* Create vector of ints for state, action and depth */
std::vector<int> sd = chopper->discretizeState(sars->s);
sd.push_back(depth);
/* Scale down into zero-one action space*/
Action a = chopper->scaledownAction(sars->a);
/* Insert value into HOO tree */
HOOS[sd]->insertAction(a, qvalue);
}
/*
*
*/
Action HOOT::selectAction(State s, int depth, bool greedy)
{
/* Create vector of ints for state, action and depth */
std::vector<int> sd = chopper->discretizeState(s);
sd.push_back(depth);
/* Pick action using HOO */
Action a;
if(HOOS.find(sd) != HOOS.end()) {
a = HOOS[sd]->queryAction(greedy);
} else {
HOOS[sd] = new HOO(domain, chopper);
a = HOOS[sd]->queryAction(greedy);
}
/* Convert back to original action space */
Action b = chopper->scaleupAction(a);
return b;
}