Files

230 lines
18 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1400" height="1850" viewBox="0 0 1400 1850" font-family="sans-serif">
<rect width="1400" height="1850" fill="white"/>
<text x="700" y="32" text-anchor="middle" font-size="21" font-weight="bold">SAC-LSTM campaign dashboard - live run (current only)</text>
<text x="700" y="56" text-anchor="middle" font-size="12" fill="#555">generated 2026-08-24 12:15:51 - auto-reloads every 60 s (open this file in Chrome)</text>
<text x="70" y="100" font-size="15" font-weight="bold">Test matches - win % vs opponents</text>
<text x="70" y="115" font-size="11" fill="#555">raw dots = single test matches, thick = rolling-mean-10</text>
<text x="70" y="133" font-size="12" font-style="italic" fill="#555">What: How often the bot wins against each opponent in test battles.</text>
<text x="70" y="149" font-size="12" font-style="italic" fill="#555">Axes: X = training progress (match number); Y = win rate, 0-100%.</text>
<text x="70" y="165" font-size="12" font-style="italic" fill="#555">Better: higher is better.</text>
<line x1="70" y1="784.0" x2="697" y2="784.0" stroke="#dddddd"/>
<line x1="70" y1="664.0" x2="697" y2="664.0" stroke="#dddddd"/>
<line x1="70" y1="544.0" x2="697" y2="544.0" stroke="#dddddd"/>
<line x1="70" y1="424.0" x2="697" y2="424.0" stroke="#dddddd"/>
<line x1="70" y1="304.0" x2="697" y2="304.0" stroke="#dddddd"/>
<line x1="70" y1="184.0" x2="697" y2="184.0" stroke="#dddddd"/>
<line x1="70" y1="784" x2="697" y2="784" stroke="black"/>
<line x1="70" y1="784" x2="70" y2="184" stroke="black"/>
<line x1="70.0" y1="784" x2="70.0" y2="788" stroke="black"/>
<text x="70.0" y="801" text-anchor="middle" font-size="11">1</text>
<line x1="697.0" y1="784" x2="697.0" y2="788" stroke="black"/>
<text x="697.0" y="801" text-anchor="middle" font-size="11">2</text>
<line x1="66" y1="784.0" x2="70" y2="784.0" stroke="black"/>
<text x="63" y="788.0" text-anchor="end" font-size="11">0</text>
<line x1="66" y1="664.0" x2="70" y2="664.0" stroke="black"/>
<text x="63" y="668.0" text-anchor="end" font-size="11">20</text>
<line x1="66" y1="544.0" x2="70" y2="544.0" stroke="black"/>
<text x="63" y="548.0" text-anchor="end" font-size="11">40</text>
<line x1="66" y1="424.0" x2="70" y2="424.0" stroke="black"/>
<text x="63" y="428.0" text-anchor="end" font-size="11">60</text>
<line x1="66" y1="304.0" x2="70" y2="304.0" stroke="black"/>
<text x="63" y="308.0" text-anchor="end" font-size="11">80</text>
<line x1="66" y1="184.0" x2="70" y2="184.0" stroke="black"/>
<text x="63" y="188.0" text-anchor="end" font-size="11">100</text>
<text x="383" y="817" text-anchor="middle" font-size="12">test match number (each opponent)</text>
<text x="16" y="484" text-anchor="middle" font-size="12" transform="rotate(-90 16 484)">win rate (%)</text>
<circle cx="70.0" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="697.0" cy="784.0" r="2" fill="#d62728" opacity="0.25"/>
<polyline points="70.0,784.0 697.0,784.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<circle cx="70.0" cy="784.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="697.0" cy="184.0" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="70.0,784.0 697.0,484.0" fill="none" stroke="#1f77b4" stroke-width="3.5" opacity="1.0"/>
<circle cx="70.0" cy="724.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="697.0" cy="784.0" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="70.0,724.0 697.0,754.0" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<line x1="82" y1="836" x2="110" y2="836" stroke="#d62728" stroke-width="3"/>
<text x="116" y="840" font-size="12">Corners - 2 evals</text>
<line x1="82" y1="854" x2="110" y2="854" stroke="#1f77b4" stroke-width="3"/>
<text x="116" y="858" font-size="12">Crazy - 2 evals</text>
<line x1="82" y1="872" x2="110" y2="872" stroke="#2ca02c" stroke-width="3"/>
<text x="116" y="876" font-size="12">Target - 2 evals</text>
<text x="747" y="100" font-size="15" font-weight="bold">Training losses (log) &amp; alpha (linear)</text>
<text x="747" y="115" font-size="11" fill="#555">training_metrics.jsonl - big early spikes are normal</text>
<text x="747" y="133" font-size="12" font-style="italic" fill="#555">What: How well the brain is learning: losses should fall; alpha sets explore/exploit.</text>
<text x="747" y="149" font-size="12" font-style="italic" fill="#555">Axes: X = training progress; left Y (log) = losses; right Y (linear) = alpha.</text>
<text x="747" y="165" font-size="12" font-style="italic" fill="#555">Better: lower losses = better; alpha falls over time as the bot gets confident.</text>
<line x1="747" y1="784.0" x2="1329" y2="784.0" stroke="#dddddd"/>
<line x1="747" y1="634.0" x2="1329" y2="634.0" stroke="#dddddd"/>
<line x1="747" y1="484.0" x2="1329" y2="484.0" stroke="#dddddd"/>
<line x1="747" y1="334.0" x2="1329" y2="334.0" stroke="#dddddd"/>
<line x1="747" y1="184.0" x2="1329" y2="184.0" stroke="#dddddd"/>
<line x1="747" y1="784" x2="1329" y2="784" stroke="black"/>
<line x1="747" y1="784" x2="747" y2="184" stroke="black"/>
<line x1="747.0" y1="784" x2="747.0" y2="788" stroke="black"/>
<text x="747.0" y="801" text-anchor="middle" font-size="11">1</text>
<line x1="892.5" y1="784" x2="892.5" y2="788" stroke="black"/>
<text x="892.5" y="801" text-anchor="middle" font-size="11">2</text>
<line x1="1038.0" y1="784" x2="1038.0" y2="788" stroke="black"/>
<text x="1038.0" y="801" text-anchor="middle" font-size="11">4</text>
<line x1="1183.5" y1="784" x2="1183.5" y2="788" stroke="black"/>
<text x="1183.5" y="801" text-anchor="middle" font-size="11">5</text>
<line x1="1329.0" y1="784" x2="1329.0" y2="788" stroke="black"/>
<text x="1329.0" y="801" text-anchor="middle" font-size="11">6</text>
<line x1="743" y1="784.0" x2="747" y2="784.0" stroke="black"/>
<text x="740" y="788.0" text-anchor="end" font-size="11">0.01</text>
<line x1="743" y1="634.0" x2="747" y2="634.0" stroke="black"/>
<text x="740" y="638.0" text-anchor="end" font-size="11">0.1</text>
<line x1="743" y1="484.0" x2="747" y2="484.0" stroke="black"/>
<text x="740" y="488.0" text-anchor="end" font-size="11">1</text>
<line x1="743" y1="334.0" x2="747" y2="334.0" stroke="black"/>
<text x="740" y="338.0" text-anchor="end" font-size="11">10</text>
<line x1="743" y1="184.0" x2="747" y2="184.0" stroke="black"/>
<text x="740" y="188.0" text-anchor="end" font-size="11">100</text>
<text x="1038" y="817" text-anchor="middle" font-size="12">metric line number</text>
<text x="16" y="484" text-anchor="middle" font-size="12" transform="rotate(-90 16 484)">loss (log)</text>
<polyline points="747.0,357.9 863.4,677.5 979.8,539.5 1096.2,560.5 1212.6,408.6 1329.0,434.1" fill="none" stroke="#1f77b4" stroke-width="1.8" opacity="1.0"/>
<polyline points="747.0,314.8 863.4,317.5 979.8,308.2 1096.2,305.6 1212.6,281.0 1329.0,282.6" fill="none" stroke="#ff7f0e" stroke-width="1.8" opacity="1.0"/>
<line x1="747" y1="784.0" x2="1329" y2="784.0" stroke="#e9dcf5"/>
<line x1="747" y1="634.0" x2="1329" y2="634.0" stroke="#e9dcf5"/>
<line x1="747" y1="484.0" x2="1329" y2="484.0" stroke="#e9dcf5"/>
<line x1="747" y1="334.0" x2="1329" y2="334.0" stroke="#e9dcf5"/>
<line x1="747" y1="184.0" x2="1329" y2="184.0" stroke="#e9dcf5"/>
<line x1="1329" y1="784" x2="1329" y2="184" stroke="#9467bd"/>
<line x1="1329" y1="784.0" x2="1333" y2="784.0" stroke="#9467bd"/>
<text x="1336" y="788.0" font-size="11" fill="#9467bd">0</text>
<line x1="1329" y1="634.0" x2="1333" y2="634.0" stroke="#9467bd"/>
<text x="1336" y="638.0" font-size="11" fill="#9467bd">0.25</text>
<line x1="1329" y1="484.0" x2="1333" y2="484.0" stroke="#9467bd"/>
<text x="1336" y="488.0" font-size="11" fill="#9467bd">0.5</text>
<line x1="1329" y1="334.0" x2="1333" y2="334.0" stroke="#9467bd"/>
<text x="1336" y="338.0" font-size="11" fill="#9467bd">0.75</text>
<line x1="1329" y1="184.0" x2="1333" y2="184.0" stroke="#9467bd"/>
<text x="1336" y="188.0" font-size="11" fill="#9467bd">1</text>
<text x="1346" y="484" text-anchor="middle" font-size="12" fill="#9467bd" transform="rotate(90 1346 484)">alpha</text>
<polyline points="747.0,198.8 863.4,198.2 979.8,197.6 1096.2,196.7 1212.6,195.1 1329.0,194.2" fill="none" stroke="#9467bd" stroke-width="1.8" opacity="1.0"/>
<line x1="759" y1="836" x2="787" y2="836" stroke="#1f77b4" stroke-width="3"/>
<text x="793" y="840" font-size="12">critic_loss</text>
<line x1="759" y1="854" x2="787" y2="854" stroke="#ff7f0e" stroke-width="3"/>
<text x="793" y="858" font-size="12">|actor_loss|</text>
<line x1="759" y1="872" x2="787" y2="872" stroke="#9467bd" stroke-width="3"/>
<text x="793" y="876" font-size="12">alpha</text>
<text x="70" y="940" font-size="15" font-weight="bold">Throughput - games per hour</text>
<text x="70" y="955" font-size="11" fill="#555">method: training_metrics.jsonl 'epoch' deltas; 1 row = one 10-game chunk</text>
<text x="70" y="973" font-size="12" font-style="italic" fill="#555">What: How many games per hour the bot trains (its learning speed).</text>
<text x="70" y="989" font-size="12" font-style="italic" fill="#555">Axes: X = training progress (10-game chunks); Y = games per hour.</text>
<text x="70" y="1005" font-size="12" font-style="italic" fill="#555">Better: higher = faster learning; a steady line beats a spiky one.</text>
<line x1="70" y1="1494.0" x2="697" y2="1494.0" stroke="#dddddd"/>
<line x1="70" y1="1376.5" x2="697" y2="1376.5" stroke="#dddddd"/>
<line x1="70" y1="1259.0" x2="697" y2="1259.0" stroke="#dddddd"/>
<line x1="70" y1="1141.5" x2="697" y2="1141.5" stroke="#dddddd"/>
<line x1="70" y1="1024.0" x2="697" y2="1024.0" stroke="#dddddd"/>
<line x1="70" y1="1494" x2="697" y2="1494" stroke="black"/>
<line x1="70" y1="1494" x2="70" y2="1024" stroke="black"/>
<line x1="70.0" y1="1494" x2="70.0" y2="1498" stroke="black"/>
<text x="70.0" y="1511" text-anchor="middle" font-size="11">1</text>
<line x1="226.8" y1="1494" x2="226.8" y2="1498" stroke="black"/>
<text x="226.8" y="1511" text-anchor="middle" font-size="11">2</text>
<line x1="383.5" y1="1494" x2="383.5" y2="1498" stroke="black"/>
<text x="383.5" y="1511" text-anchor="middle" font-size="11">3</text>
<line x1="540.2" y1="1494" x2="540.2" y2="1498" stroke="black"/>
<text x="540.2" y="1511" text-anchor="middle" font-size="11">4</text>
<line x1="697.0" y1="1494" x2="697.0" y2="1498" stroke="black"/>
<text x="697.0" y="1511" text-anchor="middle" font-size="11">5</text>
<line x1="66" y1="1494.0" x2="70" y2="1494.0" stroke="black"/>
<text x="63" y="1498.0" text-anchor="end" font-size="11">0</text>
<line x1="66" y1="1376.5" x2="70" y2="1376.5" stroke="black"/>
<text x="63" y="1380.5" text-anchor="end" font-size="11">1083</text>
<line x1="66" y1="1259.0" x2="70" y2="1259.0" stroke="black"/>
<text x="63" y="1263.0" text-anchor="end" font-size="11">2166</text>
<line x1="66" y1="1141.5" x2="70" y2="1141.5" stroke="black"/>
<text x="63" y="1145.5" text-anchor="end" font-size="11">3249</text>
<line x1="66" y1="1024.0" x2="70" y2="1024.0" stroke="black"/>
<text x="63" y="1028.0" text-anchor="end" font-size="11">4332</text>
<text x="383" y="1527" text-anchor="middle" font-size="12">chunk interval (10-game chunks)</text>
<text x="16" y="1259" text-anchor="middle" font-size="12" transform="rotate(-90 16 1259)">games / hour</text>
<circle cx="70.0" cy="1066.7" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="226.8" cy="1467.5" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="383.5" cy="1105.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="540.2" cy="1474.6" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<circle cx="697.0" cy="1161.4" r="1.6" fill="#7f7f7f" opacity="0.25"/>
<polyline points="70.0,1066.7 226.8,1467.5 226.8,1105.4 540.2,1474.6 540.2,1161.4" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<text x="747" y="940" font-size="15" font-weight="bold">Max score per eval cycle</text>
<text x="747" y="955" font-size="11" fill="#555">campaign_v4_stdout.log - max of the 10 deterministic round scores per eval</text>
<text x="747" y="973" font-size="12" font-style="italic" fill="#555">What: Best single-round score the bot managed in each test cycle.</text>
<text x="747" y="989" font-size="12" font-style="italic" fill="#555">Axes: X = eval cycle number; Y = best score achieved.</text>
<text x="747" y="1005" font-size="12" font-style="italic" fill="#555">Better: higher is better; a rising trend means the bot is improving.</text>
<line x1="747" y1="1494.0" x2="1375" y2="1494.0" stroke="#dddddd"/>
<line x1="747" y1="1376.5" x2="1375" y2="1376.5" stroke="#dddddd"/>
<line x1="747" y1="1259.0" x2="1375" y2="1259.0" stroke="#dddddd"/>
<line x1="747" y1="1141.5" x2="1375" y2="1141.5" stroke="#dddddd"/>
<line x1="747" y1="1024.0" x2="1375" y2="1024.0" stroke="#dddddd"/>
<line x1="747" y1="1494" x2="1375" y2="1494" stroke="black"/>
<line x1="747" y1="1494" x2="747" y2="1024" stroke="black"/>
<line x1="747.0" y1="1494" x2="747.0" y2="1498" stroke="black"/>
<text x="747.0" y="1511" text-anchor="middle" font-size="11">1</text>
<line x1="1375.0" y1="1494" x2="1375.0" y2="1498" stroke="black"/>
<text x="1375.0" y="1511" text-anchor="middle" font-size="11">2</text>
<line x1="743" y1="1494.0" x2="747" y2="1494.0" stroke="black"/>
<text x="740" y="1498.0" text-anchor="end" font-size="11">0</text>
<line x1="743" y1="1376.5" x2="747" y2="1376.5" stroke="black"/>
<text x="740" y="1380.5" text-anchor="end" font-size="11">19</text>
<line x1="743" y1="1259.0" x2="747" y2="1259.0" stroke="black"/>
<text x="740" y="1263.0" text-anchor="end" font-size="11">38</text>
<line x1="743" y1="1141.5" x2="747" y2="1141.5" stroke="black"/>
<text x="740" y="1145.5" text-anchor="end" font-size="11">58</text>
<line x1="743" y1="1024.0" x2="747" y2="1024.0" stroke="black"/>
<text x="740" y="1028.0" text-anchor="end" font-size="11">77</text>
<text x="1061" y="1527" text-anchor="middle" font-size="12">eval cycle number</text>
<text x="16" y="1259" text-anchor="middle" font-size="12" transform="rotate(-90 16 1259)">best single-round score</text>
<circle cx="747.0" cy="1127.8" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1375.0" cy="1127.8" r="2" fill="#d62728" opacity="0.25"/>
<polyline points="747.0,1127.8 1375.0,1127.8" fill="none" stroke="#d62728" stroke-width="2.5" opacity="1.0"/>
<circle cx="747.0" cy="1085.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1375.0" cy="1066.7" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="747.0,1085.0 1375.0,1066.7" fill="none" stroke="#1f77b4" stroke-width="2.5" opacity="1.0"/>
<circle cx="747.0" cy="1127.8" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1375.0" cy="1341.4" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="747.0,1127.8 1375.0,1341.4" fill="none" stroke="#2ca02c" stroke-width="2.5" opacity="1.0"/>
<polyline points="747.0,1085.0 1375.0,1066.7" fill="none" stroke="#555555" stroke-width="2.5" opacity="1.0" stroke-dasharray="6 4"/>
<line x1="759" y1="1546" x2="787" y2="1546" stroke="#d62728" stroke-width="3"/>
<text x="793" y="1550" font-size="12">Corners - 2 evals</text>
<line x1="759" y1="1564" x2="787" y2="1564" stroke="#1f77b4" stroke-width="3"/>
<text x="793" y="1568" font-size="12">Crazy - 2 evals</text>
<line x1="759" y1="1582" x2="787" y2="1582" stroke="#2ca02c" stroke-width="3"/>
<text x="793" y="1586" font-size="12">Target - 2 evals</text>
<line x1="759" y1="1600" x2="787" y2="1600" stroke="#555555" stroke-width="3"/>
<text x="793" y="1604" font-size="12">combined max</text>
<rect x="0" y="1645" width="1400" height="205" fill="#f2f2f2"/>
<text x="16" y="1666" font-size="15" font-weight="bold">Reading the signs</text>
<text x="1384" y="1665" text-anchor="end" font-size="11" fill="#666">Regenerate anytime: python3 tools/plot_progress.py</text>
<text x="16" y="1688" font-size="13" font-weight="bold">Healthy patterns ✅</text>
<text x="16" y="1706" font-size="12">• Both critic and actor losses trending down over time</text>
<text x="16" y="1720" font-size="12">• Alpha decaying slowly from ~1.0,</text>
<text x="16" y="1734" font-size="12"> then plateauing — this is normal</text>
<text x="16" y="1748" font-size="12">• Win rates appearing and increasing in the eval panel</text>
<text x="16" y="1762" font-size="12">• Max scores rising in the max-score panel</text>
<text x="16" y="1776" font-size="12">• Alpha plateauing is NOT a problem — it means</text>
<text x="16" y="1790" font-size="12"> exploration level is stable</text>
<text x="500" y="1688" font-size="13" font-weight="bold">Warning signs ⚠️</text>
<text x="500" y="1706" font-size="12">• Losses exploding (suddenly jumping to</text>
<text x="500" y="1720" font-size="12"> millions or billions)</text>
<text x="500" y="1734" font-size="12">• Win rates staying at 0% for a long time</text>
<text x="500" y="1748" font-size="12"> after the first ~20 eval cycles</text>
<text x="500" y="1762" font-size="12">• Alpha reaching 0 — bot stops exploring entirely</text>
<text x="500" y="1776" font-size="12"> (gets stuck)</text>
<text x="500" y="1790" font-size="12">• Max scores flatlining (no improvement</text>
<text x="500" y="1804" font-size="12"> over many eval cycles)</text>
<text x="500" y="1818" font-size="12">• Any single loss value above 1e6</text>
<text x="985" y="1688" font-size="13" font-weight="bold">What each metric means (brief)</text>
<text x="985" y="1706" font-size="12">• Critic loss: how wrong the bot's value</text>
<text x="985" y="1720" font-size="12"> estimates are — should go down</text>
<text x="985" y="1734" font-size="12">• Actor loss: how well the bot's action policy</text>
<text x="985" y="1748" font-size="12"> is doing — should go down overall</text>
<text x="985" y="1762" font-size="12"> (some bumps are normal)</text>
<text x="985" y="1776" font-size="12">• Alpha: exploration-exploitation tradeoff — starts</text>
<text x="985" y="1790" font-size="12"> high, settles at a positive value (NOT zero)</text>
<text x="985" y="1804" font-size="12">• Max score: best score achieved per eval cycle —</text>
<text x="985" y="1818" font-size="12"> rising trend = learning</text>
<script type="text/javascript"><![CDATA[ setTimeout(function(){ location.reload(); }, 60000); ]]></script>
</svg>