-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnoita_ml_report.html
More file actions
163 lines (155 loc) · 22.4 KB
/
Copy pathnoita_ml_report.html
File metadata and controls
163 lines (155 loc) · 22.4 KB
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Noita RL — ML Analysis</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.0/chart.umd.min.js"></script>
<style>
* { margin:0; padding:0; box-sizing:border-box; }
body { background:#0d1117; color:#e6edf3; font-family:'Courier New',monospace; padding:24px; }
h1 { font-size:1.6rem; color:#58a6ff; margin-bottom:4px; }
.subtitle { color:#7d8590; margin-bottom:28px; font-size:0.9rem; }
.grid { display:grid; grid-template-columns:1fr 1fr; gap:20px; margin-bottom:20px; }
.grid-3 { display:grid; grid-template-columns:1fr 1fr 1fr; gap:20px; margin-bottom:20px; }
.card { background:#161b22; border:1px solid #30363d; border-radius:10px; padding:20px; }
.card h2 { font-size:0.95rem; color:#8b949e; margin-bottom:14px; text-transform:uppercase; letter-spacing:.06em; }
.metric { font-size:2rem; font-weight:bold; color:#58a6ff; }
.metric-label { font-size:0.78rem; color:#7d8590; margin-top:2px; }
.badge { display:inline-block; padding:2px 8px; border-radius:4px; font-size:0.78rem; margin-top:6px; }
.badge-green { background:#1a3a1f; color:#3fb950; border:1px solid #3fb950; }
.badge-yellow { background:#332b00; color:#e3b341; border:1px solid #e3b341; }
.badge-red { background:#3a1a1a; color:#f78166; border:1px solid #f78166; }
.insight { background:#0d1117; border-left:3px solid #58a6ff; padding:10px 14px; border-radius:0 6px 6px 0; margin-top:10px; font-size:0.85rem; line-height:1.6; }
.insight.warn { border-color:#e3b341; }
canvas { max-height:260px; }
.full { grid-column:1/-1; }
.model-row { display:flex; justify-content:space-between; align-items:center; padding:7px 0; border-bottom:1px solid #21262d; font-size:0.88rem; }
.model-row:last-child { border-bottom:none; }
.val { color:#3fb950; font-weight:bold; }
.val-warn { color:#e3b341; }
.fi-bar-wrap { margin:6px 0; }
.fi-label { font-size:0.8rem; color:#8b949e; display:flex; justify-content:space-between; }
.fi-bar { height:10px; border-radius:4px; margin:2px 0; background:#58a6ff; }
</style>
</head>
<body>
<h1>🎮 Noita RL Agent — ML Analysis Report</h1>
<p class="subtitle">4 638 эпизодов · 1147 episodes · 748,768 global steps · GBM + Random Forest</p>
<div class="grid-3">
<div class="card">
<h2>Всего эпизодов</h2>
<div class="metric">4,638</div>
<div class="metric-label">episodes logged</div>
<div class="badge badge-green">DEAD: 2199 TRUNC: 2439</div>
</div>
<div class="card">
<h2>Reward regression</h2>
<div class="metric">R² 0.904</div>
<div class="metric-label">5-fold CV · MAE = 6.5 pts</div>
<div class="badge badge-green">GBM · 300 trees</div>
</div>
<div class="card">
<h2>Crash detector</h2>
<div class="metric">AUC 0.992</div>
<div class="metric-label">reward < 5 · F1 = 0.722</div>
<div class="badge badge-green">RF · balanced classes</div>
</div>
</div>
<div class="grid">
<div class="card full">
<h2>Кривая обучения — rolling reward (window=30)</h2>
<canvas id="lcChart"></canvas>
</div>
</div>
<div class="grid">
<div class="card">
<h2>Feature importance — reward regression</h2>
<div class="fi-bar-wrap"><div class="fi-label"><span>max_depth</span><span>0.575</span></div><div class="fi-bar" style="width:57.5%;background:#58a6ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>visited_chunks</span><span>0.181</span></div><div class="fi-bar" style="width:18.1%;background:#58a6ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>max_spawn_distance</span><span>0.166</span></div><div class="fi-bar" style="width:16.6%;background:#58a6ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>kills</span><span>0.031</span></div><div class="fi-bar" style="width:3.1%;background:#d2a8ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>length</span><span>0.017</span></div><div class="fi-bar" style="width:1.7%;background:#d2a8ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>run_time_s</span><span>0.015</span></div><div class="fi-bar" style="width:1.5%;background:#d2a8ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>max_x</span><span>0.015</span></div><div class="fi-bar" style="width:1.5%;background:#d2a8ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>total_damage</span><span>0.000</span></div><div class="fi-bar" style="width:0.0%;background:#d2a8ff"></div></div>
<div class="insight">
<b>max_depth</b> объясняет 57.5% дисперсии — глубина спуска важнее горизонтального расстояния.
Агент, уходящий глубже, стабильно собирает больше chunk-бонусов.
</div>
</div>
<div class="card">
<h2>Feature importance — crash detector</h2>
<div class="fi-bar-wrap"><div class="fi-label"><span>max_depth</span><span>0.353</span></div><div class="fi-bar" style="width:35.3%;background:#f78166"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>max_spawn_distance</span><span>0.290</span></div><div class="fi-bar" style="width:29.0%;background:#f78166"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>visited_chunks</span><span>0.174</span></div><div class="fi-bar" style="width:17.4%;background:#f78166"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>kills</span><span>0.074</span></div><div class="fi-bar" style="width:7.4%;background:#d2a8ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>max_x</span><span>0.049</span></div><div class="fi-bar" style="width:4.9%;background:#d2a8ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>length</span><span>0.031</span></div><div class="fi-bar" style="width:3.1%;background:#d2a8ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>run_time_s</span><span>0.023</span></div><div class="fi-bar" style="width:2.3%;background:#d2a8ff"></div></div><div class="fi-bar-wrap"><div class="fi-label"><span>total_damage</span><span>0.006</span></div><div class="fi-bar" style="width:0.6%;background:#d2a8ff"></div></div>
<div class="insight warn">
Краши (reward < 5) — это <b>телепорт-смерть у поверхности</b>: max_depth ≈ −75 (поверхность) + низкое spawn_distance.
Агент попадает в "вырожденный" эпизод, не дойдя до шахт.
</div>
</div>
</div>
<div class="grid">
<div class="card">
<h2>Прогресс по квартилям (mean reward)</h2>
<canvas id="quartChart" style="max-height:200px"></canvas>
<div class="insight">
Q2–Q3 — пик производительности (~50–53). Q4 просаживается до 43 — возможный регресс или смена seed.
</div>
</div>
<div class="card">
<h2>Ключевые находки</h2>
<div class="model-row"><span>Корр. visited_chunks↔reward</span><span class="val">r = 0.832</span></div>
<div class="model-row"><span>Корр. max_depth↔reward</span><span class="val">r = 0.726</span></div>
<div class="model-row"><span>Доля "crash" эпизодов (<5)</span><span class="val-warn">10.5%</span></div>
<div class="model-row"><span>Доля высоких (>60)</span><span class="val">27.3%</span></div>
<div class="model-row"><span>DEAD vs TRUNC: data leakage</span><span class="val-warn">total_damage ≡ outcome</span></div>
<div class="model-row"><span>Биодальность reward</span><span class="val">~5–20 vs ~60–90</span></div>
<div class="insight warn">
⚠ DEAD/TRUNC классификатор (acc=99.8%) — это <b>data leakage</b>: total_damage=1.0 iff DEAD.
Реально интересная задача — регрессия reward и детектор краша.
</div>
</div>
</div>
<script>
const eps = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31];
const rews = [11.67, 15.27, 48.71, 5.89, -1.41, 21.36, 8.8, 1.93, 74.62, 5.49, 32.02, 34.69, 2.76, 2.96, 3.47, 17.26, 6.91, 1.78, -1.5, 25.57, 26.45, 69.19, 24.89, 15.79, 2.8, 22.99, 9.24, 8.08, 18.26, 44.16, 100.3, 7.04, 7.73, 18.14, 125.01, 21.92, 8.57, -0.01, 2.56, 10.53, 7.81, 13.99, -5.01, 2.11, 2.27, 17.0, 73.44, 19.88, 17.83, 88.06, 16.59, 4.19, 9.11, 15.59, 15.75, 13.9, 13.12, 9.72, 1.75, -3.7, 1.49, 9.94, 9.43, 5.7, 21.12, 3.65, 13.87, 17.73, 92.27, 0.14, 54.65, 20.82, 35.65, 31.37, 45.25, 71.47, 9.94, 24.52, 28.19, 37.18, -6.02, 11.77, 8.61, 8.47, 86.97, -3.31, 2.5, 8.2, -1.05, 112.43, 13.53, 17.25, 19.55, 103.86, 17.89, 17.06, 16.85, 4.92, 7.03, 13.53, 41.0, 14.6, 16.85, 18.66, 5.24, 10.12, 15.52, 7.67, -2.18, 2.42, 67.1, 12.74, 6.62, 24.95, 80.37, 88.59, 5.12, 23.0, 44.56, 24.95, 40.55, 10.62, 9.17, 97.73, 56.23, 9.06, 15.83, 22.26, 18.72, 12.28, 41.9, 28.14, 16.14, 36.41, 23.84, 41.38, 72.24, -2.0, 4.57, 3.67, -5.35, 8.26, 13.11, 21.06, 93.5, -1.37, -3.24, 100.03, 7.62, 3.16, 13.37, 29.88, 53.64, 5.39, 8.58, 74.65, 21.27, 59.57, 6.51, 13.55, 25.76, 29.24, 14.86, 33.75, -1.16, -5.66, 15.71, 3.22, 9.18, 66.91, 5.61, 1.13, 27.66, 3.17, 23.23, 129.01, 76.56, 8.8, 9.38, 36.35, 7.89, 19.29, 73.26, 9.46, 10.91, 15.47, 20.64, 19.99, -0.43, 40.23, 21.18, 51.3, 22.94, 8.93, 38.2, 44.46, 40.13, 15.5, 6.05, 74.39, 3.78, 65.51, 33.78, -1.25, 9.45, 65.17, 38.86, 18.37, 13.01, 16.12, 8.86, -5.38, 8.3, 32.21, 21.33, 24.2, 82.39, -4.99, 43.29, 8.99, 12.54, 21.7, 18.22, 7.05, 33.14, 8.81, 16.83, 4.87, 17.24, 69.29, 84.05, 14.94, -1.75, 10.12, -5.37, 21.92, 12.32, 14.59, 7.23, 15.05, 37.13, 28.19, 57.79, 62.02, 15.35, 13.61, 5.94, 23.86, 8.38, 8.08, 35.12, 24.24, 3.35, 1.95, 15.53, 16.87, 71.4, 75.42, 1.88, 32.62, 8.19, 9.2, 6.78, 9.9, 10.15, 15.22, 35.42, 22.04, 57.65, -5.42, 65.76, 88.26, 65.2, 3.38, 8.59, 15.93, 47.38, -3.98, 3.25, 45.04, 15.4, 8.2, -1.18, 67.55, 27.75, 82.02, 38.73, 16.22, 15.96, 7.5, 41.75, 7.0, 21.51, 15.97, 7.88, 19.95, -3.78, 65.13, 76.8, 13.37, 13.57, 35.42, 4.31, 48.06, 57.07, 44.01, 11.11, 5.21, 36.67, 62.63, -1.37, 35.15, 63.81, 15.03, -4.12, 27.16, 7.06, 16.17, 8.71, -5.56, 8.95, 46.14, 5.45, 36.59, 16.14, 39.91, -0.89, 102.88, 65.07, 22.78, 15.59, 110.49, 10.4, 0.08, -2.6, 60.31, 20.98, 10.78, -0.04, 33.51, 9.06, 51.31, 20.47, 57.8, 107.14, 0.68, 37.5, -3.94, 17.94, 13.43, -0.09, 21.64, 9.6, 15.56, 27.7, 15.75, 133.13, -0.86, 103.87, 7.47, 25.52, 12.32, 8.23, 1.99, 16.15, 15.63, 12.75, 36.36, 100.17, 61.02, 6.01, 9.55, 88.75, -5.59, 64.49, 3.51, 7.19, 26.93, 102.21, 45.31, 0.19, 5.91, 6.37, 10.07, 87.03, 15.07, 17.24, 10.12, 24.71, 97.25, 7.57, 20.12, 18.37, -1.41, 11.61, 94.48, 53.54, 7.27, -5.43, 20.51, 37.25, -0.77, 28.93, -1.14, 7.61, 16.97, 12.27, 38.23, 15.4, 191.62, 90.18, 25.16, 13.48, 18.66, 6.46, 63.95, 89.09, 24.45, 21.03, 3.06, 9.04, 1.46, 177.29, 17.0, 63.64, 45.98, 8.4, 40.61, 11.14, 69.87, -0.1, 36.43, -5.39, 15.31, 8.44, 23.48, 12.15, 95.67, 156.07, 4.91, 44.96, 60.54, -1.94, 30.87, 14.98, 35.69, 10.62, 158.79, -0.56, 4.65, 34.65, 41.29, 6.8, 15.75, 39.66, -1.54, 126.41, 40.63, 8.85, 161.0, 4.22, 7.73, 36.38, 26.55, 2.4, -0.1, 16.64, 117.93, 1.28, 14.15, 44.8, 62.78, 69.17, 116.2, 82.88, 9.07, 98.5, 5.57, 1.46, 17.55, 5.41, 38.18, 12.25, 38.79, 19.33, -1.38, 40.29, 20.64, 118.29, 42.39, 39.74, -1.25, 13.86, 7.96, -5.38, 89.7, 22.17, 0.2, 10.4, 7.62];
const roll = [null, null, null, null, 16.03, 16.91, 15.76, 14.03, 20.76, 19.23, 20.4, 21.59, 20.14, 18.91, 17.88, 17.84, 17.2, 16.34, 15.4, 15.91, 16.41, 18.81, 19.08, 18.94, 18.29, 18.48, 18.13, 17.77, 17.79, 18.67, 21.62, 21.35, 19.98, 20.39, 24.61, 24.62, 24.62, 24.55, 22.15, 22.32, 21.51, 20.82, 20.56, 20.53, 20.49, 20.49, 22.7, 23.31, 23.95, 26.03, 25.71, 23.54, 23.01, 23.01, 23.44, 23.13, 23.26, 23.32, 22.77, 21.17, 17.88, 17.98, 18.03, 17.62, 14.16, 13.55, 13.72, 14.31, 17.3, 16.96, 18.52, 18.75, 20.1, 21.08, 22.51, 24.33, 22.21, 22.36, 22.71, 21.01, 20.26, 20.51, 20.5, 20.26, 22.63, 22.06, 21.7, 21.65, 21.56, 25.43, 25.83, 26.08, 26.41, 29.69, 29.58, 30.03, 30.12, 29.7, 26.86, 27.3, 26.85, 26.64, 26.01, 25.59, 24.26, 22.21, 22.4, 21.84, 20.82, 19.66, 22.1, 22.13, 22.07, 22.62, 22.4, 25.46, 25.55, 26.04, 27.56, 24.65, 25.55, 25.32, 24.98, 24.77, 26.05, 25.79, 25.75, 26.33, 26.72, 26.68, 26.71, 27.16, 27.13, 27.73, 28.35, 29.39, 31.28, 30.96, 31.18, 31.22, 28.81, 28.66, 28.88, 28.75, 29.18, 26.19, 25.91, 28.47, 27.24, 26.52, 25.61, 26.25, 27.74, 24.66, 23.07, 25.26, 25.44, 26.68, 26.27, 26.32, 25.78, 25.81, 25.77, 25.68, 24.85, 23.28, 21.4, 21.57, 21.73, 23.83, 24.2, 23.96, 24.45, 23.85, 21.51, 25.85, 28.51, 25.47, 25.53, 26.64, 26.45, 26.1, 26.75, 26.89, 26.97, 25.0, 24.97, 23.66, 23.42, 24.31, 24.16, 24.9, 25.16, 24.34, 25.65, 27.32, 28.13, 28.54, 28.44, 28.69, 28.63, 30.77, 30.98, 30.83, 30.37, 28.24, 26.99, 27.31, 27.43, 26.75, 26.79, 25.96, 23.8, 24.56, 24.9, 25.19, 27.25, 26.42, 27.88, 26.84, 26.55, 25.56, 25.4, 25.34, 25.17, 23.98, 23.21, 22.85, 23.23, 23.06, 25.73, 24.05, 22.86, 23.24, 22.75, 21.31, 20.42, 20.29, 20.1, 20.07, 21.01, 22.13, 23.78, 24.77, 24.57, 24.22, 21.67, 22.63, 21.47, 21.44, 22.19, 22.28, 21.78, 21.61, 21.02, 21.29, 23.11, 25.46, 24.95, 23.73, 21.2, 21.01, 21.29, 21.29, 21.8, 21.58, 22.35, 22.6, 24.28, 23.6, 24.55, 26.55, 26.8, 24.84, 24.62, 24.7, 26.08, 25.15, 24.98, 26.21, 25.55, 25.02, 24.87, 27.05, 27.46, 29.63, 28.54, 26.57, 27.04, 26.2, 27.32, 27.25, 27.74, 27.94, 27.87, 28.02, 26.72, 28.15, 28.79, 29.42, 27.68, 25.92, 23.89, 25.38, 26.99, 27.93, 26.72, 27.03, 28.14, 28.73, 28.17, 29.07, 31.23, 29.48, 28.42, 26.59, 25.53, 25.53, 25.29, 24.86, 23.76, 25.07, 24.53, 25.22, 25.49, 26.16, 26.26, 27.51, 27.12, 27.44, 27.5, 30.01, 30.21, 28.61, 26.62, 27.16, 27.49, 27.68, 26.46, 25.48, 25.83, 26.37, 24.93, 26.35, 30.06, 29.18, 30.19, 29.52, 29.83, 30.46, 30.16, 29.34, 29.48, 28.78, 29.17, 28.36, 32.83, 29.37, 30.67, 30.16, 30.49, 27.21, 27.14, 27.21, 27.83, 26.34, 26.07, 26.92, 30.26, 31.18, 31.08, 29.68, 31.96, 29.85, 28.42, 28.52, 27.51, 28.54, 31.35, 32.41, 32.42, 31.89, 31.79, 31.6, 33.58, 33.56, 29.69, 30.06, 27.42, 30.41, 29.82, 30.08, 30.41, 30.3, 30.15, 32.78, 34.14, 33.17, 29.65, 28.3, 29.34, 28.99, 27.0, 27.15, 25.25, 25.7, 25.87, 26.25, 23.35, 28.23, 31.23, 31.87, 32.11, 32.4, 29.71, 31.34, 33.74, 34.21, 34.09, 30.95, 31.0, 30.38, 35.67, 36.29, 38.02, 36.41, 34.9, 36.01, 36.56, 38.21, 36.97, 38.21, 37.06, 37.61, 37.64, 37.85, 37.85, 39.77, 44.45, 38.23, 36.72, 37.9, 37.39, 37.8, 38.08, 37.14, 34.52, 39.0, 38.28, 38.33, 39.19, 40.51, 34.83, 34.79, 33.99, 32.41, 36.34, 36.34, 36.26, 39.3, 39.45, 38.49, 39.88, 40.26, 40.06, 39.27, 39.42, 40.16, 35.0, 35.31, 35.3, 35.38, 37.75, 40.59, 42.86, 41.97, 44.9, 39.79, 39.86, 40.29, 39.31, 39.21, 39.39, 40.16, 39.48, 39.49, 36.62, 35.95, 39.6, 35.65, 36.83, 36.53, 35.78, 35.16, 34.9, 37.89, 38.08, 34.15, 34.46, 34.24];
const dr = ["TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "DEAD", "DEAD", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "TRUNC", "DEAD", "TRUNC", "TRUNC", "DEAD", "TRUNC", "DEAD", "TRUNC", "TRUNC"];
const deadPts = eps.map((e,i)=>{return {x:e, y:rews[i]}}).filter((_,i)=>dr[i]==='DEAD');
const truncPts = eps.map((e,i)=>{return {x:e, y:rews[i]}}).filter((_,i)=>dr[i]==='TRUNC');
const rollPts = eps.map((e,i)=>{return {x:e, y:roll[i]}}).filter(p=>p.y!==null);
const lcCtx = document.getElementById('lcChart').getContext('2d');
new Chart(lcCtx, {
type:'scatter',
data:{
datasets:[
{label:'DEAD', data:deadPts, backgroundColor:'rgba(247,129,102,0.25)', pointRadius:2.5, pointHoverRadius:4},
{label:'TRUNC', data:truncPts, backgroundColor:'rgba(63,185,80,0.25)', pointRadius:2.5, pointHoverRadius:4},
{label:'Rolling mean', data:rollPts, type:'line', borderColor:'#58a6ff', borderWidth:2.5,
pointRadius:0, tension:0.4, fill:false}
]
},
options:{
responsive:true, maintainAspectRatio:true,
plugins:{legend:{labels:{color:'#e6edf3',font:{family:'Courier New'}}}},
scales:{
x:{title:{display:true,text:'Episode',color:'#7d8590'},ticks:{color:'#7d8590'},grid:{color:'#21262d'}},
y:{title:{display:true,text:'Reward',color:'#7d8590'},ticks:{color:'#7d8590'},grid:{color:'#21262d'}}
}
}
});
const qCtx = document.getElementById('quartChart').getContext('2d');
new Chart(qCtx, {
type:'bar',
data:{
labels:['Q1 (early)','Q2','Q3','Q4 (late)'],
datasets:[{
label:'Mean reward',
data:[34.8, 50.3, 53.1, 43.2],
backgroundColor:['rgba(247,129,102,0.75)','rgba(210,168,255,0.75)','rgba(88,166,255,0.75)','rgba(63,185,80,0.75)'],
borderRadius:5
}]
},
options:{
responsive:true, maintainAspectRatio:true,
plugins:{legend:{display:false}},
scales:{
x:{ticks:{color:'#7d8590'},grid:{color:'#21262d'}},
y:{ticks:{color:'#7d8590'},grid:{color:'#21262d'},title:{display:true,text:'Mean reward',color:'#7d8590'}}
}
}
});
</script>
</body>
</html>