{"item":"eight-output","batch":"e02-residual-head","status":"done (replica only; no contract, no engine seeds used)","credit":"Replica (replica2.py), Gaussian filter, fee rule and qm tables by Taylor (gtmcknight), github.com/gtmcknight/amm-sim @4812a6382311624e1506aca131ca35c378f930d9 research/solved. qt1 (QMRef), TwoComp (TC) and COMBO are IdentityMD items built on them; HEAD8 adds only a residual fee head on COMBO.","hashes":{"source_commit":"4812a6382311624e1506aca131ca35c378f930d9 (codeload tarball of that sha; GitHub API commit lookup returned that sha, author Taylor McKnight)","artifacts_sha256_eq_url_suffix":{"qt1":"8a6e303b662e1a5ea9bb47f31acedd3988ef65b3ddb66d074517aa59ad41ca40","TC":"d3c849db2ac31e567b57e52b80b86e8c24c842e5b4125b9d75c78e3cb07115b9","COMBO":"d360bea6c8c982717b7b43a8069a87013169c89ee3e4da25622db4d880b936d4","QMS1":"17d249ab0c33fc44931d9b105cf3f9e3846a560bd518b67310c2a56defacdecc"},"extracted":{"qmref.py":"1dfc9b7a3c2237ff7a93dd9f0af54b9bdab16f2ce0a7eb00784cb4432598db92","twocomp.py":"9d3c1833321493fb51bbde4e1b4dabc2f8978bd6d774ee2af8dc8aed13f0f0af","combo.py":"c5b711a0b4fb4783e8879a484bf87a427171f4a11aa5eb5ec3513c24ead1a796","blob.bin":"3ac7cb8811ecfb6a17f499aa4e9b70dd55f7fb6432b3aec3b904e11a3dece38e","qt1 Strategy.sol (fence + trailing newline, 42,990 B)":"c68887cff61180e12ba2b1ceb333edf76a830f91f63b5d775a8806fb9ec08aca"},"all_match_published":true,"replica2.py":"6e37b4e61e1ffa5ffb1e43912ddb8659105989aa986eb48fcd1d7608f8dca685","head.py (frozen)":"59c01d85aff6c712b65bf84f98068c6088e7aca47ce12b7b23ef7255292396c3","drive.py":"1c30173a4fa6a2fa0a08eb8999d988bd941e55c903f10f78051024eaacc9e2a2","FROZEN_W.json":"6aa54280e9b31560d0fb9134e122a2b923a032083bc457c526774729448206d9"},"gates_output":{"gate_P":"PASS: unmodified python3 -I gates.py printed all 12 README values to 6dp","table":["10000  448.261189  443.455598  443.522608  443.663520","10001  576.779199  571.463409  571.623551  571.977293","10002  531.886497  525.168028  525.865859  526.411631"],"QMRef_10000_10002":[443.101741,571.454483,525.908441],"COMBO_10000_10002":[444.19533,572.172682,526.27476],"HEAD8_zero_weights_10000_10002":[444.19533,572.172682,526.27476],"note":"zero-output head reproduces COMBO exactly; QMRef matches brief"},"frozen_spec":{"name":"HEAD8","base":"COMBO (combo.py unmodified; HEAD8 copies Combo.on_trade statement for statement and only adds bookkeeping + correction)","inputs":["mrel = sgn*(m - ln sp_prev)*1e4 (belief mean rel. to own pre-trade spot)","sd = sqrt(v)*1e4","pi (arb prob. of the step first trade, carried through the step)","w = sgn*(ln s - m)*1e4","R = sgn*(ln s2h - m)*1e4","phase (0/1/2 inferred)","size = log1p(|ln(s/sp_prev)|*1e4)","silent = log1p(min(dt-1,12)) on first trade, else 0"],"sgn":"+1 on isBuy else -1; outputs (d1,d2) map to (bid,ask) on isBuy and (ask,bid) otherwise (mirror-equivariant)","normalization":{"MU":[-36.3,11.6,0.57,17.7,-3.6,0.83,2.49,0.14],"SD":[77.2,6.9,0.37,83.0,44.0,0.73,0.96,0.36],"clip":3.0,"derived_from":"COMBO callbacks of choose seeds 64000..64007 (88,411 callbacks)"},"hidden":"8 tanh units, h=tanh(U xn + c); U[k][i]=gauss(0,1)/sqrt(8), c[k]=0.5*gauss(0,1), drawn in that order from random.Random(20261109) (U rows first, then c)","output":"d1=CAP*tanh(W[0:8].h+W[8]), d2=CAP*tanh(W[9:17].h+W[17]), CAP=8 bps; fee += d*1e-4 then clamp [0,0.1]; corrected fees are stored (they are the fees in force and feed the filter)","W_frozen":[-0.026618487,-0.070207473,-0.010260029,-0.039506307,-0.031319086,-0.024026954,-0.010362795,-0.026501258,-0.092376172,0.065727168,-0.0234922,0.048898344,0.025732963,-0.003616139,-0.0396233,-0.007869716,0.004707838,0.044162589],"W_exact":"state FROZEN_W.json, sha256 6aa54280e9b31560d0fb9134e122a2b923a032083bc457c526774729448206d9 (W_frozen above is that list rounded to 9dp)"},"training":{"optimizer":"sep-CMA-ES (diagonal covariance, c1/cmu scaled by (n+2)/3), pure stdlib, n=18, lambda=12, mu=6 log weights, mean initialized at zero (zero candidate = COMBO)","rng":"random.Random(7) for CMA samples","fitness":"mean over a 256-seed block of edge(candidate) - edge(COMBO), common randomness: all 12 candidates + current mean on the same block; blocks rotate b=gen%4 over 64000..64255,64256..64511,64512..64767,64768..65023","run_A_failed":{"sigma0":0.3,"note":"every candidate lost (best -0.73..-1.68 per block); mean drifted negative; discarded, not used for selection","curve":[{"gen":0,"block":0,"seeds":[64000,64255],"evals_cum":3328,"gain_best":-0.732366,"gain_median":-3.917267,"gain_mean_prev":0.0,"sigma_next":0.284669,"sec":172.5},{"gen":1,"block":1,"seeds":[64256,64511],"evals_cum":6656,"gain_best":-1.529407,"gain_median":-3.260857,"gain_mean_prev":-0.653163,"sigma_next":0.269916,"sec":167.1},{"gen":2,"block":2,"seeds":[64512,64767],"evals_cum":9984,"gain_best":-1.679274,"gain_median":-2.738728,"gain_mean_prev":-0.887967,"sigma_next":0.254736,"sec":176.5},{"gen":3,"block":3,"seeds":[64768,65023],"evals_cum":13312,"gain_best":-1.245402,"gain_median":-3.184869,"gain_mean_prev":-0.770495,"sigma_next":0.238222,"sec":175.7}]},"run_B_used":{"sigma0":0.04,"curve":[{"gen":0,"block":0,"seeds":[64000,64255],"evals_cum":3328,"gain_best":0.032026,"gain_median":-0.190062,"gain_mean_prev":0.0,"sigma_next":0.037527,"sec":171.0},{"gen":1,"block":1,"seeds":[64256,64511],"evals_cum":6656,"gain_best":-0.009091,"gain_median":-0.083055,"gain_mean_prev":0.019938,"sigma_next":0.036128,"sec":177.0},{"gen":2,"block":2,"seeds":[64512,64767],"evals_cum":9984,"gain_best":0.072319,"gain_median":-0.021768,"gain_mean_prev":0.07401,"sigma_next":0.034778,"sec":179.6},{"gen":3,"block":3,"seeds":[64768,65023],"evals_cum":13312,"gain_best":0.045594,"gain_median":-0.076297,"gain_mean_prev":0.032338,"sigma_next":0.0337,"sec":178.3},{"gen":4,"block":0,"seeds":[64000,64255],"evals_cum":16640,"gain_best":0.080823,"gain_median":0.020506,"gain_mean_prev":0.086387,"sigma_next":0.032949,"sec":176.5},{"gen":5,"block":1,"seeds":[64256,64511],"evals_cum":19968,"gain_best":0.047185,"gain_median":-0.009928,"gain_mean_prev":0.061586,"sigma_next":0.031939,"sec":181.1}],"note":"gain_mean_prev = gain of the mean entering that gen on that block (an out-of-sample-block check of the previous update); generations capped at 6 to reserve full choose + report"},"evaluations":{"run_A":13312,"run_B":19968,"full_choose_candidates":2048}},"selection":{"window":"choose 64000..65023 only","candidates":{"zero (COMBO)":{"mean_diff":0.0},"M4 (CMA mean after gen 3)":{"n":1024,"mean_diff":0.065918,"se":0.013024},"M6 (CMA mean after gen 5)":{"n":1024,"mean_diff":0.08072,"se":0.01255}},"chosen":"M6","frozen_before_report":true},"choose":{"HEAD8-COMBO":{"n":1024,"mean_diff":0.08072,"se":0.01255,"worst5":[[64455,-1.224699],[64338,-1.089525],[64326,-1.047485],[64785,-1.047369],[64513,-1.026503]],"wins":602,"sum_d":82.657115,"sum_d2":171.670161},"HEAD8-qt1":{"n":1024,"mean_diff":0.690379,"se":0.018802,"worst5":[[64101,-1.961383],[64458,-1.140229],[64761,-1.12136],[64322,-0.852814],[64021,-0.801659]],"wins":897,"sum_d":706.948233,"sum_d2":858.404515},"COMBO-qt1":{"n":1024,"mean_diff":0.609659,"se":0.019397,"worst5":[[64101,-2.776983],[64845,-1.163868],[64374,-1.023434],[64795,-0.983171],[64555,-0.946189]],"wins":875,"sum_d":624.291118,"sum_d2":774.74475}},"report":{"HEAD8-COMBO":{"n":2048,"mean_diff":0.076499,"se":0.008473,"worst5":[[11311,-1.833278],[12015,-1.779181],[10841,-1.331887],[10256,-1.202205],[10401,-1.186789]],"wins":1220,"sum_d":156.669144,"sum_d2":312.919956},"HEAD8-qt1":{"n":2048,"mean_diff":0.673867,"se":0.013783,"worst5":[[10146,-3.499643],[11808,-1.659541],[10401,-1.599965],[10930,-1.475635],[11062,-1.41168]],"wins":1802,"sum_d":1380.079518,"sum_d2":1726.392737},"COMBO-qt1":{"n":2048,"mean_diff":0.597368,"se":0.013384,"worst5":[[10146,-3.552497],[11062,-2.334849],[11808,-1.822178],[10519,-1.782691],[11376,-1.750296]],"wins":1753,"sum_d":1223.410374,"sum_d2":1481.843224},"mean_edge":{"HEAD8":533.936715,"COMBO":533.860217,"qt1":533.262848},"sec":282.7},"seed_coverage":{"choose":"64000..65023 complete (1024): COMBO, qt1, M4, M6 each once; training blocks inside","report":"10000..12047 complete (2048), scored once for qt1, COMBO, HEAD8 after freezing; nothing selected/tuned on it","other":"none; no engine seeds consumed"},"headline":"HEAD8 report 10000..12047: +0.076499 se 0.008473 over COMBO; +0.673867 se 0.013783 over qt1 (COMBO itself +0.597368 over qt1 on the same seeds). Replica units, not board scores; the increment over COMBO is small (+0.08).","findings":["A learned bounded residual on COMBO fees gives a small, significant gain: +0.0807 se 0.0126 on choose, +0.0765 se 0.0085 on report (1220/2048 seeds won).","Step size matters: sigma0=0.3 (corrections of several bps) lost 0.7-4 edge per candidate; sigma0=0.04 improved monotonically on fresh blocks.","Training was budget-capped at 6 generations (1092 head evals per block-gen); the curve was still rising, so more generations might add more; not measured.","The head does not attack the arb/retail call directly; it corrects fees given the filter outputs, so the ~2.7 flag gap remains largely open.","Invariance: 3000 fixed callbacks from seed 10000 replayed 3x with random arb/p/s2/j and random init() args: identical fees (True)."],"runtime":{"machine":"10 logical CPUs, Pool(10) spawn","per_gen_sec":"~175","report_sec":282.7,"python":"CPython 3.9.6 (macOS, stdlib only); brief env was Linux 3.12 for COMBO","total_training_min":"~35 (A: 4 gens, B: 6 gens)"},"limitations":["Replica only; no Solidity, no gas, no engine seeds. Gas of an 8x8 tanh head on top of COMBO is unmeasured (COMBO was already near the 245k limit by estimate).","COMBO-qt1 recomputed here on report = 0.597368 vs published 0.597391 (mean edges differ in the 6th significant decimal: COMBO 533.860217 vs 533.860222, qt1 533.262848 vs 533.262831), likely float/libm differences CPython 3.9 macOS vs 3.12 Linux; 10000..10002 match at 6dp. All pairs here are computed on this machine with the same interpreter.","sep-CMA (diagonal), not full-covariance CMA-ES.","Normalization constants come from 8 choose seeds (inside choose window)."],"commands":["curl -sSL https://codeload.github.com/gtmcknight/amm-sim/tar.gz/4812a6382311624e1506aca131ca35c378f930d9 | tar -xz  # research/solved","(cd research/solved && python3 -I gates.py)","fetch 4 artifacts from api.imdnotdead.fun/artifacts/<sha>; extract: qmref.py = first ```python fence after \"## Python reference\" in qt1 + \"\\n\"; twocomp.py = first ```python fence after \"## Code\" in TC + \"\\n\"; combo.py = same in COMBO + \"\\n\"; blob.bin = base64 of first ``` fence after \"## Data\" in QMS1","copy research/solved/replica2.py beside them; decode head.py, drive.py below","python3 -I drive.py base","python3 -I drive.py cma 2   # x3 (state/cma.json, state/curve.jsonl); SIG0=0.04 in drive.py","python3 -I drive.py evalW M6 \"$(cat state/M6.json)\"  # and M4","cp state/M6.json state/FROZEN_W.json; python3 -I drive.py report; python3 -I drive.py choose_qt1"],"source_zlib_b64":{"head.py":"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","drive.py":"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"},"versions":{"python":"3.9.6","deps":"none (stdlib)"}}