-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathStatistics.py
80 lines (68 loc) · 2.47 KB
/
Statistics.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
import csv
import time
import numpy as np
class Statistics:
def __init__(self, fileName = 'breakout.csv'):
print('Write the header of %s: ' % fileName)
self.csvFile = open(fileName, 'w', newline = '')
self.csvWriter = csv.writer(self.csvFile)
self.csvWriter.writerow((
'epoch',
'phase',
'numSteps',
'numGames',
'averageReward',
'minReward',
'maxReward',
'averageLoss',
'lastEpsilon',
'epochTime'
))
self.csvFile.flush()
def reset(self):
self.epochStartTime = time.clock()
self.numSteps = 0
self.numGames = 0
self.gameReward = 0
self.averageReward = 0.
self.minReward = 123456789
self.maxReward = -123456789
self.averageLoss = 0.
self.lastEpsilon = 1.
def statistics(self, action, reward, isTerminal, epsilon):
self.gameReward += reward
self.numSteps += 1
self.lastEpsilon = epsilon
if isTerminal:
self.numGames += 1
self.averageReward += (self.gameReward - self.averageReward) / self.numGames
self.minReward = min(self.minReward, self.gameReward)
self.maxReward = max(self.maxReward, self.gameReward)
self.gameReward = 0
def lossStatistics(self, loss):
self.averageLoss += (loss - self.averageLoss) / self.numSteps
def write(self, epoch, phase):
currentTime = time.clock()
epochTime = currentTime - self.epochStartTime
if self.numGames == 0:
self.numGames == 1
self.averageReward = self.gameReward
self.minReward = self.gameReward
self.maxReward = self.gameReward
self.csvWriter.writerow((
epoch,
phase,
self.numSteps,
self.numGames,
self.averageReward,
self.minReward,
self.maxReward,
self.averageLoss,
self.lastEpsilon,
epochTime
))
self.csvFile.flush()
print('epoch: %d, phase: %s, numSteps: %d, numGames: %d, averageReward: %f, minReward: %d, maxReward: %d, averageLoss: %f, lastEpsilon: %f, epochTime %fs' %
(epoch, phase, self.numSteps, self.numGames, self.averageReward, self.minReward, self.maxReward, self.averageLoss, self.lastEpsilon, epochTime))
def close(self):
self.csvFile.close()