-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathcore.py
89 lines (71 loc) · 2.5 KB
/
core.py
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
"""
This will hold all the Core Reporting Structures
"""
"""
METAFLOW REPORTING STRUCTURES
"""
class ModelAnalytics():
def __init__(self):
self.simulation_analytics = []
self.reward_function = None # see RewardFunctions in SimulationEnvironment.RewardFunctions
self.training_analytics = SimulationAnalytics()
self.input_states = None
self.episode_length = None
self.warmup = None
self.num_episodes = None
self.collect_gradients = None
class StoredModel():
def __init__(self):
self.model = None
self.reward_function = None # see RewardFunctions in SimulationEnvironment.RewardFunctions
self.training_analytics = SimulationAnalytics()
self.input_states = None
self.model_args = None
self.episode_length = None
self.warmup = None
self.num_episodes = None
self.collect_gradients = None
class SimulationAnalytics():
def __init__(self):
self.analytics = None # RLMetrics
self.simulation_environment = None # Simulation Environment Name
class EpisodeRewardBuffer():
def __init__(self,rewards = [],completed = False):
self.rewards = rewards
self.completed = completed
def add(self,reward):
self.rewards.append(reward)
@property
def total(self):
return sum(self.rewards)
def to_json(self):
return {
'rewards':self.rewards,
'completed':self.completed
}
class RLMetrics():
def __init__(self,episiode_rewards = []):
self.episode_rewards = episiode_rewards # [EpisodeRewardBuffer]
def get_new_reward_buffer(self):
buffer = EpisodeRewardBuffer()
self.episode_rewards.append(buffer)
return buffer
def __len__(self):
return len(self.episode_rewards)
@property
def total_reward(self):
return sum([e.total for e in self.episode_rewards])
def to_json(self):
return [e.to_json() for e in self.episode_rewards]
def __str__(self):
total_rewards = sum([e.total for e in self.episode_rewards])
print_args = {
'total_rewards' : str(total_rewards),
'num_episodes':str(len(self.episode_rewards)),
'avg_reward':str(total_rewards/len(self.episode_rewards))
}
return '''
Total Rewards : {total_rewards}
Number of Episodes : {num_episodes}
Average Reward/Episode : {avg_reward}
'''.format(**print_args)