fix(SAC_LSTM_Bot): atomic+validated SVG output for progress graphs

This commit is contained in:
2026-08-23 10:06:05 +02:00
parent f3ac0888bb
commit 002a568c7e
3 changed files with 302 additions and 263 deletions
+251 -237
View File
@@ -11,20 +11,20 @@
<text x="70" y="62" font-size="11" fill="#555">win % per test match — thick line = trend</text> <text x="70" y="62" font-size="11" fill="#555">win % per test match — thick line = trend</text>
<line x1="64" y1="388" x2="1176" y2="388" stroke="black"/> <line x1="64" y1="388" x2="1176" y2="388" stroke="black"/>
<line x1="64" y1="388" x2="64" y2="78" stroke="black"/> <line x1="64" y1="388" x2="64" y2="78" stroke="black"/>
<line x1="1040.8" y1="388" x2="1040.8" y2="392" stroke="black"/> <line x1="1047.7" y1="388" x2="1047.7" y2="392" stroke="black"/>
<text x="1040.8" y="405" text-anchor="middle" font-size="11">10</text> <text x="1047.7" y="405" text-anchor="middle" font-size="11">10</text>
<line x1="890.5" y1="388" x2="890.5" y2="392" stroke="black"/> <line x1="905.1" y1="388" x2="905.1" y2="392" stroke="black"/>
<text x="890.5" y="405" text-anchor="middle" font-size="11">20</text> <text x="905.1" y="405" text-anchor="middle" font-size="11">20</text>
<line x1="740.2" y1="388" x2="740.2" y2="392" stroke="black"/> <line x1="762.6" y1="388" x2="762.6" y2="392" stroke="black"/>
<text x="740.2" y="405" text-anchor="middle" font-size="11">30</text> <text x="762.6" y="405" text-anchor="middle" font-size="11">30</text>
<line x1="589.9" y1="388" x2="589.9" y2="392" stroke="black"/> <line x1="620.0" y1="388" x2="620.0" y2="392" stroke="black"/>
<text x="589.9" y="405" text-anchor="middle" font-size="11">40</text> <text x="620.0" y="405" text-anchor="middle" font-size="11">40</text>
<line x1="439.7" y1="388" x2="439.7" y2="392" stroke="black"/> <line x1="477.4" y1="388" x2="477.4" y2="392" stroke="black"/>
<text x="439.7" y="405" text-anchor="middle" font-size="11">50</text> <text x="477.4" y="405" text-anchor="middle" font-size="11">50</text>
<line x1="289.4" y1="388" x2="289.4" y2="392" stroke="black"/> <line x1="334.9" y1="388" x2="334.9" y2="392" stroke="black"/>
<text x="289.4" y="405" text-anchor="middle" font-size="11">60</text> <text x="334.9" y="405" text-anchor="middle" font-size="11">60</text>
<line x1="139.1" y1="388" x2="139.1" y2="392" stroke="black"/> <line x1="192.3" y1="388" x2="192.3" y2="392" stroke="black"/>
<text x="139.1" y="405" text-anchor="middle" font-size="11">70</text> <text x="192.3" y="405" text-anchor="middle" font-size="11">70</text>
<line x1="60" y1="388.0" x2="64" y2="388.0" stroke="black"/> <line x1="60" y1="388.0" x2="64" y2="388.0" stroke="black"/>
<text x="57" y="392.0" text-anchor="end" font-size="11">0</text> <text x="57" y="392.0" text-anchor="end" font-size="11">0</text>
<line x1="60" y1="326.0" x2="64" y2="326.0" stroke="black"/> <line x1="60" y1="326.0" x2="64" y2="326.0" stroke="black"/>
@@ -40,237 +40,250 @@
<text x="620" y="421" text-anchor="middle" font-size="12">eval number</text> <text x="620" y="421" text-anchor="middle" font-size="12">eval number</text>
<text x="16" y="233" text-anchor="middle" font-size="12" transform="rotate(-90 16 233)">win rate (%)</text> <text x="16" y="233" text-anchor="middle" font-size="12" transform="rotate(-90 16 233)">win rate (%)</text>
<circle cx="1176.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1176.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1161.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1161.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1145.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1147.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1130.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1133.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1115.9" cy="171.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1119.0" cy="171.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1100.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1104.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1085.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1090.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1070.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1076.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1055.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1061.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1040.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1047.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1025.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1033.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1010.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1019.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="995.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="1004.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="980.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="990.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="965.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="976.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="950.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="962.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="935.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="947.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="920.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="933.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="905.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="919.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="890.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="905.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="875.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="890.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="860.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="876.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="845.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="862.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="830.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="848.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="815.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="833.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="800.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="819.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="785.3" cy="109.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="805.3" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="770.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="791.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="755.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="776.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="740.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="762.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="725.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="748.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="710.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="734.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="695.1" cy="109.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="719.8" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="680.1" cy="109.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="705.5" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="665.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="691.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="650.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="677.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="635.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="662.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="648.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="634.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="620.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="620.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="605.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="605.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="589.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="591.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="574.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="577.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="559.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="563.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="544.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="548.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="529.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="534.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="514.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="520.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="499.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="505.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="484.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="491.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="469.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="477.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="454.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="463.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="439.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="448.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="424.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="434.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="409.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="420.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="394.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="406.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="379.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="391.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="364.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="377.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="349.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="363.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="334.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="349.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="319.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="334.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="304.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="320.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="289.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="306.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="274.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="292.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="259.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="277.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="244.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="263.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="229.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="249.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="214.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="235.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="199.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="220.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="184.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="206.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="169.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="192.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="154.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="178.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="139.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="163.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="124.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="149.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="109.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="135.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="94.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="121.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="79.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="106.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="92.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="78.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="64.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/> <circle cx="64.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.0,78.0 1145.9,78.0 1130.9,78.0 1115.9,96.6 1100.9,93.5 1085.8,91.3 1070.8,89.6 1055.8,88.3 1040.8,87.3 1025.7,87.3 1010.7,87.3 995.7,87.3 980.6,87.3 965.6,78.0 950.6,78.0 935.6,78.0 920.5,78.0 905.5,78.0 890.5,78.0 875.5,78.0 860.4,78.0 845.4,78.0 830.4,78.0 815.4,78.0 800.3,78.0 785.3,81.1 770.3,81.1 755.2,81.1 740.2,81.1 725.2,81.1 710.2,81.1 695.1,84.2 680.1,87.3 665.1,87.3 650.1,87.3 635.0,84.2 620.0,84.2 605.0,84.2 589.9,84.2 574.9,84.2 559.9,84.2 544.9,81.1 529.8,78.0 514.8,78.0 499.8,78.0 484.8,78.0 469.7,78.0 454.7,78.0 439.7,78.0 424.6,78.0 409.6,78.0 394.6,78.0 379.6,78.0 364.5,78.0 349.5,78.0 334.5,78.0 319.5,78.0 304.4,78.0 289.4,78.0 274.4,78.0 259.4,78.0 244.3,78.0 229.3,78.0 214.3,78.0 199.2,78.0 184.2,78.0 169.2,78.0 154.2,78.0 139.1,78.0 124.1,78.0 109.1,78.0 94.1,78.0 79.0,78.0 64.0,78.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/> <polyline points="1176.0,78.0 1161.7,78.0 1147.5,78.0 1133.2,78.0 1119.0,96.6 1104.7,93.5 1090.5,91.3 1076.2,89.6 1061.9,88.3 1047.7,87.3 1033.4,87.3 1019.2,87.3 1004.9,87.3 990.7,87.3 976.4,78.0 962.2,78.0 947.9,78.0 933.6,78.0 919.4,78.0 905.1,78.0 890.9,78.0 876.6,78.0 862.4,78.0 848.1,78.0 833.8,78.0 819.6,78.0 805.3,81.1 791.1,81.1 776.8,81.1 762.6,81.1 748.3,81.1 734.1,81.1 719.8,84.2 705.5,87.3 691.3,87.3 677.0,87.3 662.8,84.2 648.5,84.2 634.3,84.2 620.0,84.2 605.7,84.2 591.5,84.2 577.2,81.1 563.0,78.0 548.7,78.0 534.5,78.0 520.2,78.0 505.9,78.0 491.7,78.0 477.4,78.0 463.2,78.0 448.9,78.0 434.7,78.0 420.4,78.0 406.2,78.0 391.9,78.0 377.6,78.0 363.4,78.0 349.1,78.0 334.9,78.0 320.6,78.0 306.4,78.0 292.1,78.0 277.8,78.0 263.6,78.0 249.3,78.0 235.1,78.0 220.8,78.0 206.6,78.0 192.3,78.0 178.1,78.0 163.8,78.0 149.5,78.0 135.3,78.0 121.0,78.0 106.8,78.0 92.5,78.0 78.3,78.0 64.0,78.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<circle cx="1176.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1176.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1161.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1161.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1145.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1147.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1130.9" cy="357.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1133.2" cy="357.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1115.9" cy="202.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1119.0" cy="202.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1100.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1104.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1085.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1090.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1070.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1076.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1055.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1061.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1040.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1047.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1025.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1033.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1010.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1019.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="995.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="1004.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="980.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="990.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="965.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="976.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="950.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="962.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="935.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="947.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="920.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="933.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="905.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="919.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="890.5" cy="264.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="905.1" cy="264.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="875.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="890.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="860.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="876.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="845.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="862.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="830.4" cy="388.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="848.1" cy="388.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="815.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="833.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="800.3" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="819.6" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="785.3" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="805.3" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="770.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="791.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="755.2" cy="388.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="776.8" cy="388.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="740.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="762.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="725.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="748.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="710.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="734.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="695.1" cy="171.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="719.8" cy="171.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="680.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="705.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="665.1" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="691.3" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="650.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="677.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="635.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="662.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="648.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="634.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="620.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="620.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="605.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="605.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="589.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="591.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="574.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="577.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="559.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="563.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="544.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="548.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="529.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="534.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="514.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="520.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="499.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="505.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="484.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="491.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="469.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="477.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="454.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="463.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="439.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="448.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="424.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="434.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="409.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="420.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="394.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="406.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="379.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="391.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="364.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="377.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="349.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="363.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="334.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="349.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="319.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="334.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="304.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="320.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="289.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="306.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="274.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="292.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="259.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="277.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="244.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="263.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="229.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="249.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="214.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="235.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="199.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="220.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="184.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="206.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="169.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="192.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="154.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="178.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="139.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="163.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="124.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="149.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="109.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="135.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="94.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="121.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="79.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/> <circle cx="106.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.0,78.0 1145.9,78.0 1130.9,147.8 1115.9,158.6 1100.9,145.2 1085.8,135.6 1070.8,128.4 1055.8,122.8 1040.8,118.3 1025.7,118.3 1010.7,118.3 995.7,118.3 980.6,90.4 965.6,78.0 950.6,78.0 935.6,78.0 920.5,78.0 905.5,78.0 890.5,96.6 875.5,96.6 860.4,96.6 845.4,96.6 830.4,127.6 815.4,127.6 800.3,133.8 785.3,140.0 770.3,140.0 755.2,171.0 740.2,152.4 725.2,152.4 710.2,152.4 695.1,161.7 680.1,130.7 665.1,136.9 650.1,130.7 635.0,124.5 620.0,124.5 605.0,93.5 589.9,93.5 574.9,93.5 559.9,93.5 544.9,84.2 529.8,84.2 514.8,78.0 499.8,78.0 484.8,78.0 469.7,78.0 454.7,78.0 439.7,78.0 424.6,78.0 409.6,78.0 394.6,78.0 379.6,78.0 364.5,78.0 349.5,78.0 334.5,78.0 319.5,78.0 304.4,78.0 289.4,78.0 274.4,78.0 259.4,78.0 244.3,78.0 229.3,78.0 214.3,78.0 199.2,78.0 184.2,78.0 169.2,78.0 154.2,78.0 139.1,78.0 124.1,78.0 109.1,78.0 94.1,78.0 79.0,78.0" fill="none" stroke="#1f77b4" stroke-width="3.5" opacity="1.0"/> <circle cx="92.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="78.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="64.0" cy="171.0" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.7,78.0 1147.5,78.0 1133.2,147.8 1119.0,158.6 1104.7,145.2 1090.5,135.6 1076.2,128.4 1061.9,122.8 1047.7,118.3 1033.4,118.3 1019.2,118.3 1004.9,118.3 990.7,90.4 976.4,78.0 962.2,78.0 947.9,78.0 933.6,78.0 919.4,78.0 905.1,96.6 890.9,96.6 876.6,96.6 862.4,96.6 848.1,127.6 833.8,127.6 819.6,133.8 805.3,140.0 791.1,140.0 776.8,171.0 762.6,152.4 748.3,152.4 734.1,152.4 719.8,161.7 705.5,130.7 691.3,136.9 677.0,130.7 662.8,124.5 648.5,124.5 634.3,93.5 620.0,93.5 605.7,93.5 591.5,93.5 577.2,84.2 563.0,84.2 548.7,78.0 534.5,78.0 520.2,78.0 505.9,78.0 491.7,78.0 477.4,78.0 463.2,78.0 448.9,78.0 434.7,78.0 420.4,78.0 406.2,78.0 391.9,78.0 377.6,78.0 363.4,78.0 349.1,78.0 334.9,78.0 320.6,78.0 306.4,78.0 292.1,78.0 277.8,78.0 263.6,78.0 249.3,78.0 235.1,78.0 220.8,78.0 206.6,78.0 192.3,78.0 178.1,78.0 163.8,78.0 149.5,78.0 135.3,78.0 121.0,78.0 106.8,78.0 92.5,78.0 78.3,78.0 64.0,87.3" fill="none" stroke="#1f77b4" stroke-width="3.5" opacity="1.0"/>
<circle cx="1176.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1176.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1161.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1161.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1145.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1147.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1130.9" cy="140.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1133.2" cy="140.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1115.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1119.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1100.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1104.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1085.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1090.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1070.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1076.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1055.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1061.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1040.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1047.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1025.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1033.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1010.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1019.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="995.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="1004.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="980.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="990.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="965.6" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="976.4" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="950.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="962.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="935.6" cy="326.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="947.9" cy="326.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="920.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="933.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="905.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="919.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="890.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="905.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="875.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="890.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="860.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="876.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="845.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="862.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="830.4" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="848.1" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="815.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="833.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="800.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="819.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="785.3" cy="264.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="805.3" cy="264.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="770.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="791.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="755.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="776.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="740.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="762.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="725.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="748.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="710.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="734.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="695.1" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="719.8" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="680.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="705.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="665.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="691.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="650.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="677.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="635.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="662.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="648.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="634.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="620.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="620.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="605.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="605.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="589.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="591.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="574.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="577.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="559.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="563.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="544.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="548.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="529.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="534.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="514.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="520.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="499.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="505.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="484.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="491.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="469.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="477.4" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="454.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="463.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="439.7" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="448.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="424.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="434.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="409.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="420.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="394.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="406.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="379.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="391.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="364.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="377.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="349.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="363.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="334.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="349.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="319.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="334.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="304.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="320.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="289.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="306.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="274.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="292.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="259.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="277.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="244.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="263.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="229.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="249.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="214.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="235.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="199.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="220.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="184.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="206.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="169.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="192.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="154.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="178.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="139.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="163.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="124.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="149.5" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="109.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="135.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="94.1" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="121.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="79.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/> <circle cx="106.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.0,78.0 1145.9,78.0 1130.9,93.5 1115.9,90.4 1100.9,88.3 1085.8,86.9 1070.8,85.8 1055.8,84.9 1040.8,84.2 1025.7,84.2 1010.7,84.2 995.7,84.2 980.6,78.0 965.6,81.1 950.6,81.1 935.6,105.9 920.5,105.9 905.5,105.9 890.5,105.9 875.5,105.9 860.4,105.9 845.4,105.9 830.4,109.0 815.4,105.9 800.3,105.9 785.3,99.7 770.3,99.7 755.2,99.7 740.2,99.7 725.2,99.7 710.2,99.7 695.1,102.8 680.1,99.7 665.1,99.7 650.1,99.7 635.0,81.1 620.0,81.1 605.0,81.1 589.9,81.1 574.9,81.1 559.9,81.1 544.9,78.0 529.8,78.0 514.8,78.0 499.8,78.0 484.8,78.0 469.7,78.0 454.7,78.0 439.7,81.1 424.6,81.1 409.6,81.1 394.6,81.1 379.6,81.1 364.5,81.1 349.5,81.1 334.5,81.1 319.5,81.1 304.4,81.1 289.4,78.0 274.4,78.0 259.4,78.0 244.3,78.0 229.3,78.0 214.3,78.0 199.2,78.0 184.2,78.0 169.2,78.0 154.2,78.0 139.1,78.0 124.1,78.0 109.1,78.0 94.1,81.1 79.0,81.1" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/> <circle cx="92.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="78.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.7,78.0 1147.5,78.0 1133.2,93.5 1119.0,90.4 1104.7,88.3 1090.5,86.9 1076.2,85.8 1061.9,84.9 1047.7,84.2 1033.4,84.2 1019.2,84.2 1004.9,84.2 990.7,78.0 976.4,81.1 962.2,81.1 947.9,105.9 933.6,105.9 919.4,105.9 905.1,105.9 890.9,105.9 876.6,105.9 862.4,105.9 848.1,109.0 833.8,105.9 819.6,105.9 805.3,99.7 791.1,99.7 776.8,99.7 762.6,99.7 748.3,99.7 734.1,99.7 719.8,102.8 705.5,99.7 691.3,99.7 677.0,99.7 662.8,81.1 648.5,81.1 634.3,81.1 620.0,81.1 605.7,81.1 591.5,81.1 577.2,78.0 563.0,78.0 548.7,78.0 534.5,78.0 520.2,78.0 505.9,78.0 491.7,78.0 477.4,81.1 463.2,81.1 448.9,81.1 434.7,81.1 420.4,81.1 406.2,81.1 391.9,81.1 377.6,81.1 363.4,81.1 349.1,81.1 334.9,78.0 320.6,78.0 306.4,78.0 292.1,78.0 277.8,78.0 263.6,78.0 249.3,78.0 235.1,78.0 220.8,78.0 206.6,78.0 192.3,78.0 178.1,78.0 163.8,78.0 149.5,81.1 135.3,81.1 121.0,81.1 106.8,81.1 92.5,81.1 78.3,81.1" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<line x1="76" y1="92" x2="104" y2="92" stroke="#d62728" stroke-width="3"/> <line x1="76" y1="92" x2="104" y2="92" stroke="#d62728" stroke-width="3"/>
<text x="110" y="96" font-size="12">Corners — 75 evals</text> <text x="110" y="96" font-size="12">Corners — 79 evals</text>
<line x1="76" y1="110" x2="104" y2="110" stroke="#1f77b4" stroke-width="3"/> <line x1="76" y1="110" x2="104" y2="110" stroke="#1f77b4" stroke-width="3"/>
<text x="110" y="114" font-size="12">Crazy — 74 evals</text> <text x="110" y="114" font-size="12">Crazy — 79 evals</text>
<line x1="76" y1="128" x2="104" y2="128" stroke="#2ca02c" stroke-width="3"/> <line x1="76" y1="128" x2="104" y2="128" stroke="#2ca02c" stroke-width="3"/>
<text x="110" y="132" font-size="12">Target — 74 evals</text> <text x="110" y="132" font-size="12">Target — 78 evals</text>
<line x1="64" y1="472.0" x2="1176" y2="472.0" stroke="#dddddd"/> <line x1="64" y1="472.0" x2="1176" y2="472.0" stroke="#dddddd"/>
<line x1="64" y1="534.0" x2="1176" y2="534.0" stroke="#dddddd"/> <line x1="64" y1="534.0" x2="1176" y2="534.0" stroke="#dddddd"/>
<line x1="64" y1="596.0" x2="1176" y2="596.0" stroke="#dddddd"/> <line x1="64" y1="596.0" x2="1176" y2="596.0" stroke="#dddddd"/>
@@ -307,8 +320,9 @@
<text x="620" y="815" text-anchor="middle" font-size="12">fraction of run (start → end)</text> <text x="620" y="815" text-anchor="middle" font-size="12">fraction of run (start → end)</text>
<text x="16" y="627" text-anchor="middle" font-size="12" transform="rotate(-90 16 627)">win rate (%)</text> <text x="16" y="627" text-anchor="middle" font-size="12" transform="rotate(-90 16 627)">win rate (%)</text>
<polyline points="77.9,473.9 105.7,476.7 133.5,484.2 161.3,508.6 189.1,499.2 216.9,494.5 244.7,495.5 272.5,492.3 300.3,505.9 328.1,489.4 355.9,491.4 383.7,514.6 411.5,495.2 439.3,492.3 467.1,503.0 494.9,491.4 522.7,497.2 550.5,502.0 578.3,504.0 606.1,495.2 633.9,507.8 661.7,510.8 689.5,494.3 717.3,481.7 745.1,511.7 772.9,501.1 800.7,502.0 828.5,492.3 856.3,489.4 884.1,500.1 911.9,477.8 939.7,492.3 967.5,491.4 995.3,519.5 1023.1,502.0 1050.9,490.4 1078.7,487.5 1106.5,490.4 1134.3,490.4 1162.1,496.2" fill="none" stroke="#999999" stroke-width="1.5" opacity="1.0"/> <polyline points="77.9,473.9 105.7,476.7 133.5,484.2 161.3,508.6 189.1,499.2 216.9,494.5 244.7,495.5 272.5,492.3 300.3,505.9 328.1,489.4 355.9,491.4 383.7,514.6 411.5,495.2 439.3,492.3 467.1,503.0 494.9,491.4 522.7,497.2 550.5,502.0 578.3,504.0 606.1,495.2 633.9,507.8 661.7,510.8 689.5,494.3 717.3,481.7 745.1,511.7 772.9,501.1 800.7,502.0 828.5,492.3 856.3,489.4 884.1,500.1 911.9,477.8 939.7,492.3 967.5,491.4 995.3,519.5 1023.1,502.0 1050.9,490.4 1078.7,487.5 1106.5,490.4 1134.3,490.4 1162.1,496.2" fill="none" stroke="#999999" stroke-width="1.5" opacity="1.0"/>
<polyline points="78.8,472.0 93.7,472.0 108.5,472.0 123.3,472.0 138.1,490.6 153.0,487.5 167.8,485.3 182.6,483.6 197.4,482.3 212.3,481.3 227.1,481.3 241.9,481.3 256.7,481.3 271.6,481.3 286.4,472.0 301.2,472.0 316.1,472.0 330.9,472.0 345.7,472.0 360.5,472.0 375.4,472.0 390.2,472.0 405.0,472.0 419.8,472.0 434.7,472.0 449.5,472.0 464.3,475.1 479.1,475.1 494.0,475.1 508.8,475.1 523.6,475.1 538.5,475.1 553.3,478.2 568.1,481.3 582.9,481.3 597.8,481.3 612.6,478.2 627.4,478.2 642.2,478.2 657.1,478.2 671.9,478.2 686.7,478.2 701.5,475.1 716.4,472.0 731.2,472.0 746.0,472.0 760.9,472.0 775.7,472.0 790.5,472.0 805.3,472.0 820.2,472.0 835.0,472.0 849.8,472.0 864.6,472.0 879.5,472.0 894.3,472.0 909.1,472.0 923.9,472.0 938.8,472.0 953.6,472.0 968.4,472.0 983.3,472.0 998.1,472.0 1012.9,472.0 1027.7,472.0 1042.6,472.0 1057.4,472.0 1072.2,472.0 1087.0,472.0 1101.9,472.0 1116.7,472.0 1131.5,472.0 1146.3,472.0 1161.2,472.0 1176.0,472.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/> <polyline points="78.1,472.0 92.2,472.0 106.2,472.0 120.3,472.0 134.4,490.6 148.5,487.5 162.5,485.3 176.6,483.6 190.7,482.3 204.8,481.3 218.8,481.3 232.9,481.3 247.0,481.3 261.1,481.3 275.1,472.0 289.2,472.0 303.3,472.0 317.4,472.0 331.4,472.0 345.5,472.0 359.6,472.0 373.7,472.0 387.7,472.0 401.8,472.0 415.9,472.0 430.0,472.0 444.1,475.1 458.1,475.1 472.2,475.1 486.3,475.1 500.4,475.1 514.4,475.1 528.5,478.2 542.6,481.3 556.7,481.3 570.7,481.3 584.8,478.2 598.9,478.2 613.0,478.2 627.0,478.2 641.1,478.2 655.2,478.2 669.3,475.1 683.3,472.0 697.4,472.0 711.5,472.0 725.6,472.0 739.6,472.0 753.7,472.0 767.8,472.0 781.9,472.0 795.9,472.0 810.0,472.0 824.1,472.0 838.2,472.0 852.3,472.0 866.3,472.0 880.4,472.0 894.5,472.0 908.6,472.0 922.6,472.0 936.7,472.0 950.8,472.0 964.9,472.0 978.9,472.0 993.0,472.0 1007.1,472.0 1021.2,472.0 1035.2,472.0 1049.3,472.0 1063.4,472.0 1077.5,472.0 1091.5,472.0 1105.6,472.0 1119.7,472.0 1133.8,472.0 1147.8,472.0 1161.9,472.0 1176.0,472.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<line x1="76" y1="486" x2="104" y2="486" stroke="#999999" stroke-width="3"/> <line x1="76" y1="486" x2="104" y2="486" stroke="#999999" stroke-width="3"/>
<text x="110" y="490" font-size="12">Run 1 (old) — 1287 evals in 40 buckets</text> <text x="110" y="490" font-size="12">Run 1 (old) — 1287 evals in 40 buckets</text>
<line x1="76" y1="504" x2="104" y2="504" stroke="#d62728" stroke-width="3"/> <line x1="76" y1="504" x2="104" y2="504" stroke="#d62728" stroke-width="3"/>
<text x="110" y="508" font-size="12">Run 3 trend (rolling-10)</text> <text x="110" y="508" font-size="12">Run 3 trend (rolling-10)</text>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

+20 -20
View File
@@ -7,13 +7,13 @@
<line x1="70.0" y1="250" x2="70.0" y2="254" stroke="black"/> <line x1="70.0" y1="250" x2="70.0" y2="254" stroke="black"/>
<text x="70.0" y="267" text-anchor="middle" font-size="11">1</text> <text x="70.0" y="267" text-anchor="middle" font-size="11">1</text>
<line x1="297.5" y1="250" x2="297.5" y2="254" stroke="black"/> <line x1="297.5" y1="250" x2="297.5" y2="254" stroke="black"/>
<text x="297.5" y="267" text-anchor="middle" font-size="11">25</text> <text x="297.5" y="267" text-anchor="middle" font-size="11">41</text>
<line x1="525.0" y1="250" x2="525.0" y2="254" stroke="black"/> <line x1="525.0" y1="250" x2="525.0" y2="254" stroke="black"/>
<text x="525.0" y="267" text-anchor="middle" font-size="11">48</text> <text x="525.0" y="267" text-anchor="middle" font-size="11">81</text>
<line x1="752.5" y1="250" x2="752.5" y2="254" stroke="black"/> <line x1="752.5" y1="250" x2="752.5" y2="254" stroke="black"/>
<text x="752.5" y="267" text-anchor="middle" font-size="11">72</text> <text x="752.5" y="267" text-anchor="middle" font-size="11">121</text>
<line x1="980.0" y1="250" x2="980.0" y2="254" stroke="black"/> <line x1="980.0" y1="250" x2="980.0" y2="254" stroke="black"/>
<text x="980.0" y="267" text-anchor="middle" font-size="11">96</text> <text x="980.0" y="267" text-anchor="middle" font-size="11">161</text>
<line x1="66" y1="250.0" x2="70" y2="250.0" stroke="black"/> <line x1="66" y1="250.0" x2="70" y2="250.0" stroke="black"/>
<text x="63" y="254.0" text-anchor="end" font-size="11">0.1</text> <text x="63" y="254.0" text-anchor="end" font-size="11">0.1</text>
<line x1="66" y1="197.5" x2="70" y2="197.5" stroke="black"/> <line x1="66" y1="197.5" x2="70" y2="197.5" stroke="black"/>
@@ -26,46 +26,46 @@
<text x="63" y="44.0" text-anchor="end" font-size="11">1e+17</text> <text x="63" y="44.0" text-anchor="end" font-size="11">1e+17</text>
<text x="525" y="283" text-anchor="middle" font-size="12"></text> <text x="525" y="283" text-anchor="middle" font-size="12"></text>
<text x="16" y="145" text-anchor="middle" font-size="12" transform="rotate(-90 16 145)">critic_loss</text> <text x="16" y="145" text-anchor="middle" font-size="12" transform="rotate(-90 16 145)">critic_loss</text>
<polyline points="70.0,67.6 79.6,66.5 89.2,67.9 98.7,70.0 108.3,72.6 117.9,74.1 127.5,73.1 137.1,71.4 146.6,240.6 156.2,65.5 165.8,55.6 175.4,61.7 184.9,67.4 194.5,71.4 204.1,74.2 213.7,74.9 223.3,75.7 232.8,75.9 242.4,76.9 252.0,76.5 261.6,75.5 271.2,74.8 280.7,185.2 290.3,70.5 299.9,68.6 309.5,67.4 319.1,202.4 328.6,60.3 338.2,60.4 347.8,59.0 357.4,59.7 366.9,58.6 376.5,56.8 386.1,55.7 395.7,56.0 405.3,55.9 414.8,50.4 424.4,50.9 434.0,53.5 443.6,48.3 453.2,45.7 462.7,240.6 472.3,240.6 481.9,56.2 491.5,59.1 501.1,63.5 510.6,65.0 520.2,240.6 529.8,68.4 539.4,70.5 548.9,185.8 558.5,71.7 568.1,72.8 577.7,69.0 587.3,62.6 596.8,56.9 606.4,63.6 616.0,240.6 625.6,240.6 635.2,73.5 644.7,74.7 654.3,73.7 663.9,73.7 673.5,240.6 683.1,73.7 692.6,74.6 702.2,72.8 711.8,70.5 721.4,72.5 730.9,70.7 740.5,73.1 750.1,69.5 759.7,67.9 769.3,67.1 778.8,64.0 788.4,53.5 798.0,184.6 807.6,63.5 817.2,114.6 826.7,161.5 836.3,197.0 845.9,204.7 855.5,205.0 865.1,205.3 874.6,205.5 884.2,205.6 893.8,205.7 903.4,205.6 912.9,206.0 922.5,206.2 932.1,206.4 941.7,206.5 951.3,206.8 960.8,207.0 970.4,240.5 980.0,240.5" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/> <polyline points="70.0,67.6 75.7,66.5 81.4,67.9 87.1,70.0 92.8,72.6 98.4,74.1 104.1,73.1 109.8,71.4 115.5,240.6 121.2,65.5 126.9,55.6 132.6,61.7 138.2,67.4 143.9,71.4 149.6,74.2 155.3,74.9 161.0,75.7 166.7,75.9 172.4,76.9 178.1,76.5 183.8,75.5 189.4,74.8 195.1,185.2 200.8,70.5 206.5,68.6 212.2,67.4 217.9,202.4 223.6,60.3 229.2,60.4 234.9,59.0 240.6,59.7 246.3,58.6 252.0,56.8 257.7,55.7 263.4,56.0 269.1,55.9 274.8,50.4 280.4,50.9 286.1,53.5 291.8,48.3 297.5,45.7 303.2,240.6 308.9,240.6 314.6,56.2 320.2,59.1 325.9,63.5 331.6,65.0 337.3,240.6 343.0,68.4 348.7,70.5 354.4,185.8 360.1,71.7 365.8,72.8 371.4,69.0 377.1,62.6 382.8,56.9 388.5,63.6 394.2,240.6 399.9,240.6 405.6,73.5 411.2,74.7 416.9,73.7 422.6,73.7 428.3,240.6 434.0,73.7 439.7,74.6 445.4,72.8 451.1,70.5 456.8,72.5 462.4,70.7 468.1,73.1 473.8,69.5 479.5,67.9 485.2,67.1 490.9,64.0 496.6,53.5 502.2,184.6 507.9,63.5 513.6,114.6 519.3,161.5 525.0,197.0 530.7,204.7 536.4,205.0 542.1,205.3 547.8,205.5 553.4,205.6 559.1,205.7 564.8,205.6 570.5,206.0 576.2,206.2 581.9,206.4 587.6,206.5 593.2,206.8 598.9,207.0 604.6,240.5 610.3,240.5 616.0,240.5 621.7,240.5 627.4,207.8 633.1,208.1 638.8,208.2 644.4,208.4 650.1,208.6 655.8,208.8 661.5,209.0 667.2,209.2 672.9,209.4 678.6,209.7 684.2,209.9 689.9,210.3 695.6,210.5 701.3,210.7 707.0,210.9 712.7,211.1 718.4,211.3 724.1,211.5 729.8,211.7 735.4,212.0 741.1,240.5 746.8,212.3 752.5,212.5 758.2,212.6 763.9,212.8 769.6,213.0 775.2,213.3 780.9,213.4 786.6,213.5 792.3,213.7 798.0,213.8 803.7,214.0 809.4,213.9 815.1,214.3 820.8,214.5 826.4,240.4 832.1,214.8 837.8,214.9 843.5,215.1 849.2,240.4 854.9,215.4 860.6,215.6 866.2,215.7 871.9,215.9 877.6,216.0 883.3,216.2 889.0,216.4 894.7,216.6 900.4,240.4 906.1,216.9 911.8,240.4 917.4,217.3 923.1,217.4 928.8,217.6 934.5,217.7 940.2,217.9 945.9,218.0 951.6,218.1 957.2,218.2 962.9,218.4 968.6,218.6 974.3,218.7 980.0,218.7" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<text x="76" y="321" font-size="13" font-weight="bold">actor_loss |abs| (log scale)</text> <text x="76" y="321" font-size="13" font-weight="bold">actor_loss |abs| (log scale)</text>
<line x1="70" y1="515" x2="980" y2="515" stroke="black"/> <line x1="70" y1="515" x2="980" y2="515" stroke="black"/>
<line x1="70" y1="515" x2="70" y2="305" stroke="black"/> <line x1="70" y1="515" x2="70" y2="305" stroke="black"/>
<line x1="70.0" y1="515" x2="70.0" y2="519" stroke="black"/> <line x1="70.0" y1="515" x2="70.0" y2="519" stroke="black"/>
<text x="70.0" y="532" text-anchor="middle" font-size="11">1</text> <text x="70.0" y="532" text-anchor="middle" font-size="11">1</text>
<line x1="297.5" y1="515" x2="297.5" y2="519" stroke="black"/> <line x1="297.5" y1="515" x2="297.5" y2="519" stroke="black"/>
<text x="297.5" y="532" text-anchor="middle" font-size="11">25</text> <text x="297.5" y="532" text-anchor="middle" font-size="11">41</text>
<line x1="525.0" y1="515" x2="525.0" y2="519" stroke="black"/> <line x1="525.0" y1="515" x2="525.0" y2="519" stroke="black"/>
<text x="525.0" y="532" text-anchor="middle" font-size="11">48</text> <text x="525.0" y="532" text-anchor="middle" font-size="11">81</text>
<line x1="752.5" y1="515" x2="752.5" y2="519" stroke="black"/> <line x1="752.5" y1="515" x2="752.5" y2="519" stroke="black"/>
<text x="752.5" y="532" text-anchor="middle" font-size="11">72</text> <text x="752.5" y="532" text-anchor="middle" font-size="11">121</text>
<line x1="980.0" y1="515" x2="980.0" y2="519" stroke="black"/> <line x1="980.0" y1="515" x2="980.0" y2="519" stroke="black"/>
<text x="980.0" y="532" text-anchor="middle" font-size="11">96</text> <text x="980.0" y="532" text-anchor="middle" font-size="11">161</text>
<line x1="66" y1="515.0" x2="70" y2="515.0" stroke="black"/> <line x1="66" y1="515.0" x2="70" y2="515.0" stroke="black"/>
<text x="63" y="519.0" text-anchor="end" font-size="11">1</text> <text x="63" y="519.0" text-anchor="end" font-size="11">1</text>
<line x1="66" y1="462.5" x2="70" y2="462.5" stroke="black"/> <line x1="66" y1="462.5" x2="70" y2="462.5" stroke="black"/>
<text x="63" y="466.5" text-anchor="end" font-size="11">56.2</text> <text x="63" y="466.5" text-anchor="end" font-size="11">100</text>
<line x1="66" y1="410.0" x2="70" y2="410.0" stroke="black"/> <line x1="66" y1="410.0" x2="70" y2="410.0" stroke="black"/>
<text x="63" y="414.0" text-anchor="end" font-size="11">3.16e+03</text> <text x="63" y="414.0" text-anchor="end" font-size="11">1e+04</text>
<line x1="66" y1="357.5" x2="70" y2="357.5" stroke="black"/> <line x1="66" y1="357.5" x2="70" y2="357.5" stroke="black"/>
<text x="63" y="361.5" text-anchor="end" font-size="11">1.78e+05</text> <text x="63" y="361.5" text-anchor="end" font-size="11">1e+06</text>
<line x1="66" y1="305.0" x2="70" y2="305.0" stroke="black"/> <line x1="66" y1="305.0" x2="70" y2="305.0" stroke="black"/>
<text x="63" y="309.0" text-anchor="end" font-size="11">1e+07</text> <text x="63" y="309.0" text-anchor="end" font-size="11">1e+08</text>
<text x="525" y="548" text-anchor="middle" font-size="12"></text> <text x="525" y="548" text-anchor="middle" font-size="12"></text>
<text x="16" y="410" text-anchor="middle" font-size="12" transform="rotate(-90 16 410)">|actor_loss|</text> <text x="16" y="410" text-anchor="middle" font-size="12" transform="rotate(-90 16 410)">|actor_loss|</text>
<polyline points="70.0,320.3 79.6,325.2 89.2,327.4 98.7,330.1 108.3,333.3 117.9,335.0 127.5,333.9 137.1,332.2 146.6,328.2 156.2,325.3 165.8,318.1 175.4,313.9 184.9,325.2 194.5,331.1 204.1,334.8 213.7,337.2 223.3,338.1 232.8,338.6 242.4,339.7 252.0,340.5 261.6,340.3 271.2,340.1 280.7,339.5 290.3,339.3 299.9,338.2 309.5,337.7 319.1,335.9 328.6,335.6 338.2,332.5 347.8,331.0 357.4,329.6 366.9,329.0 376.5,329.3 386.1,329.7 395.7,327.8 405.3,327.5 414.8,329.1 424.4,329.6 434.0,327.7 443.6,330.3 453.2,331.0 462.7,332.4 472.3,335.8 481.9,338.6 491.5,339.7 501.1,341.4 510.6,342.5 520.2,344.1 529.8,345.3 539.4,346.6 548.9,347.7 558.5,348.6 568.1,349.3 577.7,348.9 587.3,348.7 596.8,347.9 606.4,346.7 616.0,344.9 625.6,342.6 635.2,341.6 644.7,340.5 654.3,339.6 663.9,339.5 673.5,340.3 683.1,341.3 692.6,340.4 702.2,341.3 711.8,342.4 721.4,341.3 730.9,341.7 740.5,340.4 750.1,342.0 759.7,342.5 769.3,342.2 778.8,342.7 788.4,344.5 798.0,347.4 807.6,347.7 817.2,385.3 826.7,446.3 836.3,492.0 845.9,501.9 855.5,502.3 865.1,502.7 874.6,502.9 884.2,503.0 893.8,503.2 903.4,503.4 912.9,503.6 922.5,503.8 932.1,504.0 941.7,504.2 951.3,504.6 960.8,504.9 970.4,505.0 980.0,505.2" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/> <polyline points="70.0,318.4 75.7,322.7 81.4,324.6 87.1,326.9 92.8,329.8 98.4,331.2 104.1,330.3 109.8,328.8 115.5,325.3 121.2,322.8 126.9,316.5 132.6,312.8 138.2,322.7 143.9,327.9 149.6,331.0 155.3,333.1 161.0,334.0 166.7,334.4 172.4,335.4 178.1,336.1 183.8,335.9 189.4,335.7 195.1,335.2 200.8,335.1 206.5,334.0 212.2,333.6 217.9,332.0 223.6,331.8 229.2,329.1 234.9,327.7 240.6,326.5 246.3,326.0 252.0,326.2 257.7,326.6 263.4,324.9 269.1,324.7 274.8,326.1 280.4,326.5 286.1,324.9 291.8,327.1 297.5,327.8 303.2,329.0 308.9,332.0 314.6,334.4 320.2,335.4 325.9,336.9 331.6,337.8 337.3,339.3 343.0,340.2 348.7,341.4 354.4,342.3 360.1,343.1 365.8,343.8 371.4,343.4 377.1,343.2 382.8,342.6 388.5,341.5 394.2,339.9 399.9,337.9 405.6,337.0 411.2,336.0 416.9,335.3 422.6,335.2 428.3,335.9 434.0,336.8 439.7,335.9 445.4,336.7 451.1,337.7 456.8,336.8 462.4,337.1 468.1,336.0 473.8,337.4 479.5,337.8 485.2,337.6 490.9,338.0 496.6,339.6 502.2,342.1 507.9,342.4 513.6,375.3 519.3,428.6 525.0,468.6 530.7,477.3 536.4,477.6 542.1,478.0 547.8,478.1 553.4,478.3 559.1,478.4 564.8,478.6 570.5,478.7 576.2,479.0 581.9,479.2 587.6,479.3 593.2,479.7 598.9,479.9 604.6,480.0 610.3,480.2 616.0,480.3 621.7,480.6 627.4,480.8 633.1,481.1 638.8,481.2 644.4,481.4 650.1,481.7 655.8,481.9 661.5,482.1 667.2,482.4 672.9,482.6 678.6,482.9 684.2,483.1 689.9,483.6 695.6,483.8 701.3,484.1 707.0,484.3 712.7,484.5 718.4,484.7 724.1,485.0 729.8,485.2 735.4,485.4 741.1,485.7 746.8,485.9 752.5,486.0 758.2,486.2 763.9,486.4 769.6,486.6 775.2,486.9 780.9,487.1 786.6,487.2 792.3,487.4 798.0,487.6 803.7,487.8 809.4,487.9 815.1,488.1 820.8,488.3 826.4,488.5 832.1,488.6 837.8,488.8 843.5,489.0 849.2,489.2 854.9,489.4 860.6,489.5 866.2,489.7 871.9,489.9 877.6,490.0 883.3,490.2 889.0,490.4 894.7,490.6 900.4,490.8 906.1,491.0 911.8,491.2 917.4,491.4 923.1,491.6 928.8,491.8 934.5,491.9 940.2,492.1 945.9,492.2 951.6,492.4 957.2,492.5 962.9,492.7 968.6,492.9 974.3,493.1 980.0,493.2" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<text x="76" y="586" font-size="13" font-weight="bold">alpha (temperature)</text> <text x="76" y="586" font-size="13" font-weight="bold">alpha (temperature)</text>
<line x1="70" y1="780" x2="980" y2="780" stroke="black"/> <line x1="70" y1="780" x2="980" y2="780" stroke="black"/>
<line x1="70" y1="780" x2="70" y2="570" stroke="black"/> <line x1="70" y1="780" x2="70" y2="570" stroke="black"/>
<line x1="70.0" y1="780" x2="70.0" y2="784" stroke="black"/> <line x1="70.0" y1="780" x2="70.0" y2="784" stroke="black"/>
<text x="70.0" y="797" text-anchor="middle" font-size="11">1</text> <text x="70.0" y="797" text-anchor="middle" font-size="11">1</text>
<line x1="297.5" y1="780" x2="297.5" y2="784" stroke="black"/> <line x1="297.5" y1="780" x2="297.5" y2="784" stroke="black"/>
<text x="297.5" y="797" text-anchor="middle" font-size="11">25</text> <text x="297.5" y="797" text-anchor="middle" font-size="11">41</text>
<line x1="525.0" y1="780" x2="525.0" y2="784" stroke="black"/> <line x1="525.0" y1="780" x2="525.0" y2="784" stroke="black"/>
<text x="525.0" y="797" text-anchor="middle" font-size="11">48</text> <text x="525.0" y="797" text-anchor="middle" font-size="11">81</text>
<line x1="752.5" y1="780" x2="752.5" y2="784" stroke="black"/> <line x1="752.5" y1="780" x2="752.5" y2="784" stroke="black"/>
<text x="752.5" y="797" text-anchor="middle" font-size="11">72</text> <text x="752.5" y="797" text-anchor="middle" font-size="11">121</text>
<line x1="980.0" y1="780" x2="980.0" y2="784" stroke="black"/> <line x1="980.0" y1="780" x2="980.0" y2="784" stroke="black"/>
<text x="980.0" y="797" text-anchor="middle" font-size="11">96</text> <text x="980.0" y="797" text-anchor="middle" font-size="11">161</text>
<line x1="66" y1="780.0" x2="70" y2="780.0" stroke="black"/> <line x1="66" y1="780.0" x2="70" y2="780.0" stroke="black"/>
<text x="63" y="784.0" text-anchor="end" font-size="11">0</text> <text x="63" y="784.0" text-anchor="end" font-size="11">0</text>
<line x1="66" y1="727.5" x2="70" y2="727.5" stroke="black"/> <line x1="66" y1="727.5" x2="70" y2="727.5" stroke="black"/>
@@ -78,6 +78,6 @@
<text x="63" y="574.0" text-anchor="end" font-size="11">1.01</text> <text x="63" y="574.0" text-anchor="end" font-size="11">1.01</text>
<text x="525" y="813" text-anchor="middle" font-size="12"></text> <text x="525" y="813" text-anchor="middle" font-size="12"></text>
<text x="16" y="675" text-anchor="middle" font-size="12" transform="rotate(-90 16 675)">alpha</text> <text x="16" y="675" text-anchor="middle" font-size="12" transform="rotate(-90 16 675)">alpha</text>
<polyline points="70.0,778.3 79.6,778.1 89.2,778.0 98.7,777.8 108.3,777.5 117.9,777.1 127.5,777.0 137.1,776.8 146.6,776.6 156.2,776.5 165.8,776.2 175.4,775.8 184.9,775.7 194.5,776.0 204.1,776.2 213.7,776.5 223.3,776.7 232.8,777.0 242.4,777.3 252.0,777.5 261.6,777.8 271.2,778.0 280.7,778.3 290.3,778.5 299.9,778.8 309.5,778.9 319.1,779.3 328.6,779.4 338.2,779.2 347.8,779.1 357.4,778.9 366.9,778.8 376.5,778.6 386.1,778.4 395.7,778.2 405.3,778.0 414.8,777.6 424.4,777.4 434.0,777.1 443.6,776.9 453.2,776.6 462.7,776.4 472.3,776.3 481.9,776.5 491.5,776.6 501.1,776.8 510.6,776.9 520.2,777.1 529.8,777.3 539.4,777.5 548.9,777.8 558.5,778.0 568.1,778.2 577.7,778.4 587.3,778.8 596.8,779.1 606.4,779.3 616.0,779.8 625.6,780.0 635.2,779.8 644.7,779.6 654.3,779.4 663.9,779.1 673.5,778.9 683.1,778.4 692.6,778.2 702.2,777.9 711.8,777.7 721.4,777.4 730.9,777.3 740.5,777.1 750.1,776.8 759.7,776.6 769.3,776.5 778.8,776.5 788.4,776.7 798.0,777.2 807.6,777.4 817.2,777.5 826.7,777.3 836.3,777.0 845.9,776.9 855.5,776.6 865.1,776.2 874.6,776.1 884.2,776.0 893.8,775.9 903.4,775.6 912.9,775.5 922.5,775.3 932.1,775.0 941.7,774.8 951.3,774.5 960.8,774.2 970.4,774.1 980.0,774.0" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/> <polyline points="70.0,778.3 75.7,778.1 81.4,778.0 87.1,777.8 92.8,777.5 98.4,777.1 104.1,777.0 109.8,776.8 115.5,776.6 121.2,776.5 126.9,776.2 132.6,775.8 138.2,775.7 143.9,776.0 149.6,776.2 155.3,776.5 161.0,776.7 166.7,777.0 172.4,777.3 178.1,777.5 183.8,777.8 189.4,778.0 195.1,778.3 200.8,778.5 206.5,778.8 212.2,778.9 217.9,779.3 223.6,779.4 229.2,779.2 234.9,779.1 240.6,778.9 246.3,778.8 252.0,778.6 257.7,778.4 263.4,778.2 269.1,778.0 274.8,777.6 280.4,777.4 286.1,777.1 291.8,776.9 297.5,776.6 303.2,776.4 308.9,776.3 314.6,776.5 320.2,776.6 325.9,776.8 331.6,776.9 337.3,777.1 343.0,777.3 348.7,777.5 354.4,777.8 360.1,778.0 365.8,778.2 371.4,778.4 377.1,778.8 382.8,779.1 388.5,779.3 394.2,779.8 399.9,780.0 405.6,779.8 411.2,779.6 416.9,779.4 422.6,779.1 428.3,778.9 434.0,778.4 439.7,778.2 445.4,777.9 451.1,777.7 456.8,777.4 462.4,777.3 468.1,777.1 473.8,776.8 479.5,776.6 485.2,776.5 490.9,776.5 496.6,776.7 502.2,777.2 507.9,777.4 513.6,777.5 519.3,777.3 525.0,777.0 530.7,776.9 536.4,776.6 542.1,776.2 547.8,776.1 553.4,776.0 559.1,775.9 564.8,775.6 570.5,775.5 576.2,775.3 581.9,775.0 587.6,774.8 593.2,774.5 598.9,774.2 604.6,774.1 610.3,774.0 616.0,773.8 621.7,773.6 627.4,773.4 633.1,773.1 638.8,773.0 644.4,772.7 650.1,772.5 655.8,772.3 661.5,772.0 667.2,771.8 672.9,771.5 678.6,771.3 684.2,771.0 689.9,770.6 695.6,770.4 701.3,770.1 707.0,770.0 712.7,769.7 718.4,769.5 724.1,769.3 729.8,769.1 735.4,768.8 741.1,768.6 746.8,768.4 752.5,768.2 758.2,768.1 763.9,767.8 769.6,767.6 775.2,767.2 780.9,766.9 786.6,766.7 792.3,766.5 798.0,766.3 803.7,766.0 809.4,765.8 815.1,765.6 820.8,765.3 826.4,765.1 832.1,764.9 837.8,764.7 843.5,764.3 849.2,764.1 854.9,763.9 860.6,763.8 866.2,763.5 871.9,763.3 877.6,763.1 883.3,762.8 889.0,762.6 894.7,762.4 900.4,762.1 906.1,761.9 911.8,761.7 917.4,761.4 923.1,761.2 928.8,761.0 934.5,760.8 940.2,760.6 945.9,760.5 951.6,760.3 957.2,760.1 962.9,759.9 968.6,759.7 974.3,759.4 980.0,759.2" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<text x="525" y="817" text-anchor="middle" font-size="12">metric line number (96 rows)</text> <text x="525" y="817" text-anchor="middle" font-size="12">metric line number (161 rows)</text>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

+31 -6
View File
@@ -15,9 +15,11 @@ All args optional; defaults relative to the SAC_LSTM_Bot/ root (parent of tools/
""" """
import json import json
import math import math
import os
import re import re
import sys import sys
import tempfile import tempfile
import xml.etree.ElementTree as ET
from pathlib import Path from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent ROOT = Path(__file__).resolve().parent.parent
@@ -80,6 +82,22 @@ def esc(s):
return str(s).replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;") return str(s).replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
def write_svg(path, text):
"""Validate the finished SVG, then atomically swap it into place.
Readers never see partial output; an invalid render aborts without
touching the previous good file."""
try:
ET.fromstring(text)
except ET.ParseError as e:
print(f"[error] {path.name}: generated SVG invalid, keeping old file ({e})")
return False
tmp = path.with_name(path.name + ".tmp")
tmp.write_text(text)
os.replace(tmp, path)
return True
def svg_open(w, h, title): def svg_open(w, h, title):
return (f'<svg xmlns="http://www.w3.org/2000/svg" width="{w}" height="{h}" ' return (f'<svg xmlns="http://www.w3.org/2000/svg" width="{w}" height="{h}" '
f'viewBox="0 0 {w} {h}" font-family="sans-serif">\n' f'viewBox="0 0 {w} {h}" font-family="sans-serif">\n'
@@ -238,8 +256,8 @@ def graph_eval(series_v2, series_v1, out):
items_b.append((COLORS["Corners"], f"Run 3 trend (rolling-{TREND_WINDOW})")) items_b.append((COLORS["Corners"], f"Run 3 trend (rolling-{TREND_WINDOW})"))
s += legend(items_b, x0 + 12, y1b + 14) s += legend(items_b, x0 + 12, y1b + 14)
out.write_text(s) s += "</svg>\n"
return 1 return 1 if write_svg(out, s) else 0
# ---------- graph 2: loss curves ---------- # ---------- graph 2: loss curves ----------
@@ -319,8 +337,7 @@ def graph_losses(rows, out):
fixed_range=(0, max(1.0, max(alpha)))) fixed_range=(0, max(1.0, max(alpha))))
s += (f'<text x="{x0 + (x1 - x0) // 2}" y="{H - 8}" text-anchor="middle" ' s += (f'<text x="{x0 + (x1 - x0) // 2}" y="{H - 8}" text-anchor="middle" '
f'font-size="12">metric line number ({n} rows)</text>\n</svg>\n') f'font-size="12">metric line number ({n} rows)</text>\n</svg>\n')
out.write_text(s) return 1 if write_svg(out, s) else 0
return 1
# ---------- selftest ---------- # ---------- selftest ----------
@@ -351,6 +368,8 @@ def selftest():
ok = graph_losses(rows, td / "g2.svg") and graph_eval(ser, {"Corners": [0, 10]}, td / "g1.svg") ok = graph_losses(rows, td / "g2.svg") and graph_eval(ser, {"Corners": [0, 10]}, td / "g1.svg")
assert ok and (td / "g1.svg").stat().st_size > 500 assert ok and (td / "g1.svg").stat().st_size > 500
g1 = (td / "g1.svg").read_text() g1 = (td / "g1.svg").read_text()
ET.fromstring(g1) # whole doc must parse -> closing tag present
ET.fromstring((td / "g2.svg").read_text())
assert 'width="1200"' in g1, "canvas must be >=1200 wide" assert 'width="1200"' in g1, "canvas must be >=1200 wide"
assert g1.count("<circle") == sum(len(v) for v in ser.values()) # one dot per raw eval assert g1.count("<circle") == sum(len(v) for v in ser.values()) # one dot per raw eval
n_trend = sum(1 for v in ser.values() if len(v) >= 2) + 2 # trends + v1 buckets + v3 trend n_trend = sum(1 for v in ser.values() if len(v) >= 2) + 2 # trends + v1 buckets + v3 trend
@@ -377,11 +396,17 @@ def main():
series_v1 = parse_eval_series(v1log) series_v1 = parse_eval_series(v1log)
print(f"[info] v1 evals parsed: " + print(f"[info] v1 evals parsed: " +
", ".join(f"{k}={len(v)}" for k, v in sorted(series_v1.items())) or "(none)") ", ".join(f"{k}={len(v)}" for k, v in sorted(series_v1.items())) or "(none)")
made += graph_eval(series_v2, series_v1, outdir / "graph_eval_winrates.svg") try:
made += graph_eval(series_v2, series_v1, outdir / "graph_eval_winrates.svg")
except Exception as e:
print(f"[error] win-rate graph failed (loss graph still attempted): {e}")
rows = parse_metrics(metrics) rows = parse_metrics(metrics)
print(f"[info] metric rows parsed: {len(rows)}") print(f"[info] metric rows parsed: {len(rows)}")
made += graph_losses(rows, outdir / "graph_losses.svg") try:
made += graph_losses(rows, outdir / "graph_losses.svg")
except Exception as e:
print(f"[error] loss graph failed: {e}")
if made: if made:
print(f"[done] {made} graph(s) written to {outdir}") print(f"[done] {made} graph(s) written to {outdir}")