From da4a971ca99e81894e86a35a521bbef9ba081d3f Mon Sep 17 00:00:00 2001 From: Davide Cappellini Date: Sat, 26 Sep 2026 00:35:44 +0200 Subject: [PATCH] =?UTF-8?q?MELEE=20A/B:=20BitBrain=20vs=20shipped=20Patter?= =?UTF-8?q?n=20rack=20=E2=80=94=20repo's=20first=20melee=20measurement=20(?= =?UTF-8?q?null)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds common_libs/tests/measure_melee_bitbrain_ab.nim (+ .sh driver, .py analyzer, committed per-run fixtures) and docs/melee_bitbrain_ab.md. Experiment: 4-bot Free-For-All (ModularBot + WaveSurfer + PatternMover + RandomMover), 4 arms x 16 runs x 7 rounds, frozen ModularBot from git archive HEAD (commit 0f5cfe3, binary 11bba27), shipped tfil movement in every run. Arms differ only in the gun rack: pattern (shipped), bb_round, bb_ret, bb_learn. Result: NOT DETECTABLE. Score (server round score = damage + survival bonus) differs by -63..+33 pts (perm p=0.16-0.71) against an MDE of 151 (~5.1%). Every arm finishes rank 1. Round wins hint BitBrain's way (112/112 and 111/112 vs 109/112) but p=0.225 (MW 0.080), half the 0.40-win MDE. Liveness proven: rack boot lines flip (rack active melee = PATTERN / BITBRAIN), every run faced 3 distinct targets and ~66-69 target changes, and the bb arms logged one [bb-reset] reason=target_change per switch. The melee premise was exercised; the fast adaptation bought no measurable score edge at this sample. --- common_libs/tests/analyze_melee_ab.py | 215 ++++++ .../fixtures/melee_bitbrain_ab/analysis.json | 665 ++++++++++++++++++ .../melee_bitbrain_ab/analysis_report.txt | 69 ++ .../melee_bitbrain_ab/bb_learn/run1.json | 1 + .../melee_bitbrain_ab/bb_learn/run10.json | 1 + .../melee_bitbrain_ab/bb_learn/run11.json | 1 + .../melee_bitbrain_ab/bb_learn/run12.json | 1 + .../melee_bitbrain_ab/bb_learn/run13.json | 1 + .../melee_bitbrain_ab/bb_learn/run14.json | 1 + .../melee_bitbrain_ab/bb_learn/run15.json | 1 + .../melee_bitbrain_ab/bb_learn/run16.json | 1 + .../melee_bitbrain_ab/bb_learn/run2.json | 1 + .../melee_bitbrain_ab/bb_learn/run3.json | 1 + .../melee_bitbrain_ab/bb_learn/run4.json | 1 + .../melee_bitbrain_ab/bb_learn/run5.json | 1 + .../melee_bitbrain_ab/bb_learn/run6.json | 1 + .../melee_bitbrain_ab/bb_learn/run7.json | 1 + .../melee_bitbrain_ab/bb_learn/run8.json | 1 + .../melee_bitbrain_ab/bb_learn/run9.json | 1 + .../melee_bitbrain_ab/bb_ret/run1.json | 1 + .../melee_bitbrain_ab/bb_ret/run10.json | 1 + .../melee_bitbrain_ab/bb_ret/run11.json | 1 + .../melee_bitbrain_ab/bb_ret/run12.json | 1 + .../melee_bitbrain_ab/bb_ret/run13.json | 1 + .../melee_bitbrain_ab/bb_ret/run14.json | 1 + .../melee_bitbrain_ab/bb_ret/run15.json | 1 + .../melee_bitbrain_ab/bb_ret/run16.json | 1 + .../melee_bitbrain_ab/bb_ret/run2.json | 1 + .../melee_bitbrain_ab/bb_ret/run3.json | 1 + .../melee_bitbrain_ab/bb_ret/run4.json | 1 + .../melee_bitbrain_ab/bb_ret/run5.json | 1 + .../melee_bitbrain_ab/bb_ret/run6.json | 1 + .../melee_bitbrain_ab/bb_ret/run7.json | 1 + .../melee_bitbrain_ab/bb_ret/run8.json | 1 + .../melee_bitbrain_ab/bb_ret/run9.json | 1 + .../melee_bitbrain_ab/bb_round/run1.json | 1 + .../melee_bitbrain_ab/bb_round/run10.json | 1 + .../melee_bitbrain_ab/bb_round/run11.json | 1 + .../melee_bitbrain_ab/bb_round/run12.json | 1 + .../melee_bitbrain_ab/bb_round/run13.json | 1 + .../melee_bitbrain_ab/bb_round/run14.json | 1 + .../melee_bitbrain_ab/bb_round/run15.json | 1 + .../melee_bitbrain_ab/bb_round/run16.json | 1 + .../melee_bitbrain_ab/bb_round/run2.json | 1 + .../melee_bitbrain_ab/bb_round/run3.json | 1 + .../melee_bitbrain_ab/bb_round/run4.json | 1 + .../melee_bitbrain_ab/bb_round/run5.json | 1 + .../melee_bitbrain_ab/bb_round/run6.json | 1 + .../melee_bitbrain_ab/bb_round/run7.json | 1 + .../melee_bitbrain_ab/bb_round/run8.json | 1 + .../melee_bitbrain_ab/bb_round/run9.json | 1 + .../melee_bitbrain_ab/pattern/run1.json | 1 + .../melee_bitbrain_ab/pattern/run10.json | 1 + .../melee_bitbrain_ab/pattern/run11.json | 1 + .../melee_bitbrain_ab/pattern/run12.json | 1 + .../melee_bitbrain_ab/pattern/run13.json | 1 + .../melee_bitbrain_ab/pattern/run14.json | 1 + .../melee_bitbrain_ab/pattern/run15.json | 1 + .../melee_bitbrain_ab/pattern/run16.json | 1 + .../melee_bitbrain_ab/pattern/run2.json | 1 + .../melee_bitbrain_ab/pattern/run3.json | 1 + .../melee_bitbrain_ab/pattern/run4.json | 1 + .../melee_bitbrain_ab/pattern/run5.json | 1 + .../melee_bitbrain_ab/pattern/run6.json | 1 + .../melee_bitbrain_ab/pattern/run7.json | 1 + .../melee_bitbrain_ab/pattern/run8.json | 1 + .../melee_bitbrain_ab/pattern/run9.json | 1 + .../tests/measure_melee_bitbrain_ab.nim | 404 +++++++++++ common_libs/tests/run_melee_bitbrain_ab.sh | 64 ++ docs/melee_bitbrain_ab.md | 262 +++++++ 70 files changed, 1743 insertions(+) create mode 100644 common_libs/tests/analyze_melee_ab.py create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/analysis.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/analysis_report.txt create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run1.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run10.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run11.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run12.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run13.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run14.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run15.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run16.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run2.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run3.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run4.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run5.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run6.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run7.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run8.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run9.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run1.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run10.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run11.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run12.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run13.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run14.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run15.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run16.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run2.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run3.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run4.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run5.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run6.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run7.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run8.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run9.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run1.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run10.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run11.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run12.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run13.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run14.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run15.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run16.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run2.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run3.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run4.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run5.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run6.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run7.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run8.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run9.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run1.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run10.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run11.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run12.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run13.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run14.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run15.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run16.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run2.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run3.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run4.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run5.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run6.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run7.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run8.json create mode 100644 common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run9.json create mode 100644 common_libs/tests/measure_melee_bitbrain_ab.nim create mode 100755 common_libs/tests/run_melee_bitbrain_ab.sh create mode 100644 docs/melee_bitbrain_ab.md diff --git a/common_libs/tests/analyze_melee_ab.py b/common_libs/tests/analyze_melee_ab.py new file mode 100644 index 0000000..6230dcd --- /dev/null +++ b/common_libs/tests/analyze_melee_ab.py @@ -0,0 +1,215 @@ +#!/usr/bin/env python3 +"""analyze_melee_ab.py — analyze a melee A/B session produced by +common_libs/tests/measure_melee_bitbrain_ab.nim (+ run_melee_bitbrain_ab.sh). + + python3 common_libs/tests/analyze_melee_ab.py [--reference ARM] + +Melee scoring caveat: a round score (and the run `totalScore`) is the SERVER's +round score = damage dealt + the survival bonus; it is not raw damage. Per-round +placement is the 1..N rank in that round. `firstPlaces` is the count of rounds +won (rank 1) and `survivalCount` the total ticks survived. + +Statistics are reused verbatim from tools/ab/ab_analyze.py (MC permutation test ++ Mann-Whitney U + MDE), so the melee numbers use the same machinery as the 1v1 +A/Bs. All tests are two-sided on PER-RUN values. +""" +import glob +import importlib.util +import json +import math +import os +import statistics +import sys + +REPO = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +_AB = os.path.join(REPO, "tools", "ab", "ab_analyze.py") +_spec = importlib.util.spec_from_file_location("ab_analyze", _AB) +ab = importlib.util.module_from_spec(_spec) +_spec.loader.exec_module(ab) + + +def load_runs(outdir, arm): + runs = [] + for p in sorted(glob.glob(os.path.join(outdir, arm, "run*.json"))): + try: + d = json.load(open(p)) + except (OSError, json.JSONDecodeError): + continue + if not d.get("ok"): + continue + mb = d.get("modularbot", {}) + pr = d.get("perRound", []) + ranks = [r["rank"] for r in pr] + runs.append({ + "run": d["run"], + "wins": mb.get("firstPlaces", 0), + "rounds": d.get("rounds", len(pr)), + "score": mb.get("totalScore", 0), + "survival": mb.get("survivalCount", 0), + "rank": mb.get("rank", 0), + "mean_rank": (sum(ranks) / len(ranks)) if ranks else float("nan"), + "field_score": sum(f.get("totalScore", 0) for f in d.get("field", [])), + "live": d.get("live", {}), + }) + return runs + + +def score_share(r): + tot = r["score"] + r["field_score"] + return r["score"] / tot if tot else float("nan") + + +def fmt(xs, width=5): + return " ".join(f"{x:>{width}g}" for x in xs) + + +def main(): + args = sys.argv[1:] + if not args: + print(__doc__) + return 2 + outdir = args[0] + reference = "pattern" + if "--reference" in args: + reference = args[args.index("--reference") + 1] + arms = [d for d in sorted(os.listdir(outdir)) + if os.path.isdir(os.path.join(outdir, d)) and load_runs(outdir, d)] + if reference not in arms: + print(f"ERROR: reference '{reference}' not among {arms}", file=sys.stderr) + return 2 + + data = {a: load_runs(outdir, a) for a in arms} + + print(f"# melee A/B session: {outdir}") + print(f"# arms: {', '.join(arms)} reference: {reference}") + # commit / binary sha + anyj = glob.glob(os.path.join(outdir, reference, "run*.json")) + if anyj: + d0 = json.load(open(sorted(anyj)[0])) + print(f"# commit={d0.get('commit')} binary_sha256={d0.get('binary_sha256')}") + print() + + print("ARM SUMMARY (melee: score=server round score dmg+survival bonus)") + hdr = (f"{'arm':<10} {'runs':>4} {'wins/rd':>9} {'score':>8} " + f"{'surv':>7} {'rank':>5} {'meanrank':>9} {'score share':>11} " + f"{'targets':>8} {'tchanges':>9}") + print(hdr) + print("-" * len(hdr)) + for a in arms: + rs = data[a] + n = len(rs) + wins = sum(r["wins"] for r in rs) + rounds = sum(r["rounds"] for r in rs) + sc = statistics.mean(r["score"] for r in rs) + sv = statistics.mean(r["survival"] for r in rs) + rk = statistics.mean(r["rank"] for r in rs) + mr = statistics.mean(r["mean_rank"] for r in rs) + ss = statistics.mean(score_share(r) for r in rs) + tg = statistics.mean(r["live"].get("distinct_targets", 0) for r in rs) + tc = statistics.mean(r["live"].get("target_changes", 0) for r in rs) + print(f"{a:<10} {n:>4} {str(wins)+'/'+str(rounds):>9} {sc:>8.0f} " + f"{sv:>7.0f} {rk:>5.2f} {mr:>9.3f} {ss*100:>10.1f}% " + f"{tg:>8.2f} {tc:>9.2f}") + + print("\nPER-RUN VALUES (never just the mean)") + for a in arms: + rs = data[a] + print(f" {a:<10} wins: " + " ".join(f"r{r['run']}={r['wins']}" for r in rs)) + print(f" {'':<10} score: " + " ".join(f"r{r['run']}={r['score']}" for r in rs)) + print(f" {'':<10} surv: " + " ".join(f"r{r['run']}={r['survival']}" for r in rs)) + print(f" {'':<10} mrank: " + " ".join(f"r{r['run']}={r['mean_rank']:.2f}" for r in rs)) + + metrics = [("score", "score"), ("survival", "survival"), + ("wins", "wins"), ("mean_rank", "mean_rank"), + ("rank", "rank"), ("score_share", "__share__")] + + def vals(a, key, f): + if key == "__share__": + return [score_share(r) for r in data[a]] + return [r[key] for r in data[a]] + + print("\nPAIRWISE PERMUTATION TEST (per-run) + MANN-WHITNEY CROSS-CHECK") + print(f" perm: exact when C(n,na) <= {ab.EXACT_CAP:,}; else Monte-Carlo " + f"{ab.MC_DRAWS:,} draws seed={ab.MC_SEED:#x}") + hdr = (f"{'metric':<12} {'A':<10} {'B':<10} {'diff(A-B)':>11} " + f"{'perm p':>9} {'method':<12} {'MW p':>9} {'MW U':>8}") + print(hdr) + print("-" * len(hdr)) + for label, key in metrics: + for a in arms: + if a == reference: + continue + xa = vals(reference, key, None) + xb = vals(a, key, None) + res = ab.perm_test(xa, xb) + mw = ab.mannwhitney_p(xa, xb) + if res is None: + continue + mstr = ("exact" if res["method"] == "exact" + else f"MC/B={res['draws']:,}") + mwp = f"{mw[0]:.4f}" if mw else "n/a" + mwu = f"{mw[1]:.1f}" if mw else "n/a" + print(f"{label:<12} {reference:<10} {a:<10} {res['signed']:>+11.4f} " + f"{res['p']:>9.4f} {mstr:<12} {mwp:>9} {mwu:>8}") + + print("\nMINIMUM DETECTABLE EFFECT (two-sample, alpha=0.05 two-sided, " + "80% power; MDE = 2.8016*sd*sqrt(2/n))") + print(f"{'metric':<12} {'n/arm':>6} {'sd(ref)':>9} {'MDE':>10} {'ref mean':>10}") + print("-" * 52) + for label, key in [("score", "score"), ("survival", "survival"), + ("wins", "wins"), ("mean_rank", "mean_rank")]: + xa = vals(reference, key, None) + if len(xa) < 2: + continue + sd = statistics.stdev(xa) + mde = ab.min_detectable_effect(sd, len(xa)) + print(f"{label:<12} {len(xa):>6} {sd:>9.2f} {mde:>10.2f} {statistics.mean(xa):>10.3f}") + + print("\nLIVENESS (per arm, from the bot's own boot report + log)") + print(f"{'arm':<10} {'rack_melee':>11} {'mem':>9} {'targets':>8} " + f"{'tchanges':>9} {'bb-reset':>9} {'OK':>4}") + for a in arms: + rs = data[a] + racks = {r["live"].get("rack_active_melee", "?") for r in rs} + mems = {r["live"].get("env_TR_BITBRAIN_MEM", "?") for r in rs} + tgt = statistics.mean(r["live"].get("distinct_targets", 0) for r in rs) + tch = statistics.mean(r["live"].get("target_changes", 0) for r in rs) + rst = statistics.mean(r["live"].get("bb_reset_target_change", 0) for r in rs) + if a == reference: + ok = all(r["live"].get("rack_active_melee") == "PATTERN" + and r["live"].get("env_TR_RACK_BITBRAIN") == "off" + and r["live"].get("bb_reset_target_change", -1) == 0 + for r in rs) + else: + ok = all(r["live"].get("rack_active_melee") == "BITBRAIN" + and r["live"].get("env_TR_RACK_PATTERN") == "off" + and r["live"].get("env_TR_RACK_BITBRAIN") == "melee" + and r["live"].get("bb_reset_target_change", 0) > 0 + for r in rs) + print(f"{a:<10} {','.join(sorted(racks)):>11} {','.join(sorted(mems)):>9} " + f"{tgt:>8.2f} {tch:>9.2f} {rst:>9.2f} {'yes' if ok else 'NO':>4}") + + # machine-readable dump for the doc + dump = {"reference": reference, "arms": {}} + for a in arms: + rs = data[a] + dump["arms"][a] = { + "n": len(rs), + "wins": [r["wins"] for r in rs], + "rounds": [r["rounds"] for r in rs], + "score": [r["score"] for r in rs], + "survival": [r["survival"] for r in rs], + "mean_rank": [round(r["mean_rank"], 4) for r in rs], + "rack_melee": [r["live"].get("rack_active_melee") for r in rs], + "target_changes": [r["live"].get("target_changes") for r in rs], + "distinct_targets": [r["live"].get("distinct_targets") for r in rs], + "bb_reset": [r["live"].get("bb_reset_target_change") for r in rs], + } + with open(os.path.join(outdir, "analysis.json"), "w") as fh: + json.dump(dump, fh, indent=1) + print(f"\n# machine-readable: {os.path.join(outdir, 'analysis.json')}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/analysis.json b/common_libs/tests/fixtures/melee_bitbrain_ab/analysis.json new file mode 100644 index 0000000..7be0fd6 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/analysis.json @@ -0,0 +1,665 @@ +{ + "reference": "pattern", + "arms": { + "bb_learn": { + "n": 16, + "wins": [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ], + "rounds": [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ], + "score": [ + 2883, + 2757, + 2906, + 3145, + 2911, + 3068, + 2758, + 2715, + 3107, + 2848, + 3190, + 2912, + 2859, + 3092, + 2907, + 3066 + ], + "survival": [ + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050 + ], + "mean_rank": [ + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "rack_melee": [ + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN" + ], + "target_changes": [ + 63, + 68, + 68, + 72, + 80, + 55, + 58, + 77, + 78, + 72, + 66, + 62, + 62, + 64, + 60, + 63 + ], + "distinct_targets": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "bb_reset": [ + 63, + 68, + 68, + 72, + 80, + 55, + 58, + 77, + 78, + 72, + 66, + 62, + 62, + 64, + 60, + 63 + ] + }, + "bb_ret": { + "n": 16, + "wins": [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ], + "rounds": [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ], + "score": [ + 2891, + 2770, + 2792, + 2934, + 2943, + 2890, + 2817, + 2999, + 2994, + 2913, + 2920, + 2890, + 3011, + 2945, + 2943, + 2802 + ], + "survival": [ + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1000, + 1050, + 1050, + 1050, + 1050 + ], + "mean_rank": [ + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "rack_melee": [ + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN" + ], + "target_changes": [ + 60, + 67, + 73, + 54, + 63, + 70, + 83, + 65, + 73, + 71, + 55, + 82, + 74, + 84, + 56, + 59 + ], + "distinct_targets": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "bb_reset": [ + 62, + 67, + 73, + 54, + 63, + 70, + 83, + 65, + 73, + 71, + 55, + 82, + 74, + 84, + 56, + 59 + ] + }, + "bb_round": { + "n": 16, + "wins": [ + 7, + 6, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ], + "rounds": [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ], + "score": [ + 3040, + 2944, + 3125, + 3110, + 3037, + 2993, + 2985, + 2842, + 2835, + 3045, + 3180, + 2952, + 3126, + 2927, + 3021, + 2804 + ], + "survival": [ + 1050, + 900, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 1050, + 950 + ], + "mean_rank": [ + 1.0, + 1.1429, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "rack_melee": [ + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN", + "BITBRAIN" + ], + "target_changes": [ + 62, + 60, + 81, + 62, + 69, + 61, + 73, + 70, + 67, + 63, + 66, + 70, + 71, + 75, + 83, + 67 + ], + "distinct_targets": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "bb_reset": [ + 62, + 60, + 81, + 62, + 69, + 61, + 73, + 70, + 67, + 63, + 66, + 70, + 71, + 75, + 83, + 67 + ] + }, + "pattern": { + "n": 16, + "wins": [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 7 + ], + "rounds": [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ], + "score": [ + 3082, + 2795, + 2897, + 2915, + 3176, + 2922, + 2860, + 2878, + 3261, + 2957, + 3106, + 2869, + 3194, + 2728, + 2869, + 2931 + ], + "survival": [ + 1050, + 1050, + 1050, + 1050, + 1050, + 950, + 1050, + 1050, + 1050, + 1000, + 1050, + 1050, + 1050, + 900, + 1050, + 1050 + ], + "mean_rank": [ + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "rack_melee": [ + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN", + "PATTERN" + ], + "target_changes": [ + 66, + 56, + 73, + 77, + 53, + 67, + 67, + 69, + 79, + 67, + 51, + 51, + 67, + 64, + 81, + 75 + ], + "distinct_targets": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "bb_reset": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + } +} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/analysis_report.txt b/common_libs/tests/fixtures/melee_bitbrain_ab/analysis_report.txt new file mode 100644 index 0000000..52958ee --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/analysis_report.txt @@ -0,0 +1,69 @@ +# melee A/B session: common_libs/tests/fixtures/melee_bitbrain_ab +# arms: bb_learn, bb_ret, bb_round, pattern reference: pattern +# commit=0f5cfe37b24952ae07fee0a7db526317ae127e6c binary_sha256=11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca + +ARM SUMMARY (melee: score=server round score dmg+survival bonus) +arm runs wins/rd score surv rank meanrank score share targets tchanges +----------------------------------------------------------------------------------------- +bb_learn 16 112/112 2945 1050 1.00 1.000 60.2% 3.00 66.75 +bb_ret 16 112/112 2903 1047 1.00 1.000 59.4% 3.00 68.06 +bb_round 16 111/112 2998 1034 1.00 1.009 60.8% 3.00 68.75 +pattern 16 109/112 2965 1031 1.00 1.000 59.5% 3.00 66.44 + +PER-RUN VALUES (never just the mean) + bb_learn wins: r1=7 r10=7 r11=7 r12=7 r13=7 r14=7 r15=7 r16=7 r2=7 r3=7 r4=7 r5=7 r6=7 r7=7 r8=7 r9=7 + score: r1=2883 r10=2757 r11=2906 r12=3145 r13=2911 r14=3068 r15=2758 r16=2715 r2=3107 r3=2848 r4=3190 r5=2912 r6=2859 r7=3092 r8=2907 r9=3066 + surv: r1=1050 r10=1050 r11=1050 r12=1050 r13=1050 r14=1050 r15=1050 r16=1050 r2=1050 r3=1050 r4=1050 r5=1050 r6=1050 r7=1050 r8=1050 r9=1050 + mrank: r1=1.00 r10=1.00 r11=1.00 r12=1.00 r13=1.00 r14=1.00 r15=1.00 r16=1.00 r2=1.00 r3=1.00 r4=1.00 r5=1.00 r6=1.00 r7=1.00 r8=1.00 r9=1.00 + bb_ret wins: r1=7 r10=7 r11=7 r12=7 r13=7 r14=7 r15=7 r16=7 r2=7 r3=7 r4=7 r5=7 r6=7 r7=7 r8=7 r9=7 + score: r1=2891 r10=2770 r11=2792 r12=2934 r13=2943 r14=2890 r15=2817 r16=2999 r2=2994 r3=2913 r4=2920 r5=2890 r6=3011 r7=2945 r8=2943 r9=2802 + surv: r1=1050 r10=1050 r11=1050 r12=1050 r13=1050 r14=1050 r15=1050 r16=1050 r2=1050 r3=1050 r4=1050 r5=1000 r6=1050 r7=1050 r8=1050 r9=1050 + mrank: r1=1.00 r10=1.00 r11=1.00 r12=1.00 r13=1.00 r14=1.00 r15=1.00 r16=1.00 r2=1.00 r3=1.00 r4=1.00 r5=1.00 r6=1.00 r7=1.00 r8=1.00 r9=1.00 + bb_round wins: r1=7 r10=6 r11=7 r12=7 r13=7 r14=7 r15=7 r16=7 r2=7 r3=7 r4=7 r5=7 r6=7 r7=7 r8=7 r9=7 + score: r1=3040 r10=2944 r11=3125 r12=3110 r13=3037 r14=2993 r15=2985 r16=2842 r2=2835 r3=3045 r4=3180 r5=2952 r6=3126 r7=2927 r8=3021 r9=2804 + surv: r1=1050 r10=900 r11=1050 r12=1050 r13=1050 r14=1050 r15=1050 r16=1050 r2=1050 r3=1050 r4=1050 r5=1050 r6=1050 r7=1050 r8=1050 r9=950 + mrank: r1=1.00 r10=1.14 r11=1.00 r12=1.00 r13=1.00 r14=1.00 r15=1.00 r16=1.00 r2=1.00 r3=1.00 r4=1.00 r5=1.00 r6=1.00 r7=1.00 r8=1.00 r9=1.00 + pattern wins: r1=7 r10=7 r11=7 r12=7 r13=7 r14=7 r15=7 r16=7 r2=7 r3=6 r4=7 r5=6 r6=7 r7=6 r8=7 r9=7 + score: r1=3082 r10=2795 r11=2897 r12=2915 r13=3176 r14=2922 r15=2860 r16=2878 r2=3261 r3=2957 r4=3106 r5=2869 r6=3194 r7=2728 r8=2869 r9=2931 + surv: r1=1050 r10=1050 r11=1050 r12=1050 r13=1050 r14=950 r15=1050 r16=1050 r2=1050 r3=1000 r4=1050 r5=1050 r6=1050 r7=900 r8=1050 r9=1050 + mrank: r1=1.00 r10=1.00 r11=1.00 r12=1.00 r13=1.00 r14=1.00 r15=1.00 r16=1.00 r2=1.00 r3=1.00 r4=1.00 r5=1.00 r6=1.00 r7=1.00 r8=1.00 r9=1.00 + +PAIRWISE PERMUTATION TEST (per-run) + MANN-WHITNEY CROSS-CHECK + perm: exact when C(n,na) <= 20,000,000; else Monte-Carlo 1,000,000 draws seed=0x5eed5eed +metric A B diff(A-B) perm p method MW p MW U +---------------------------------------------------------------------------------------- +score pattern bb_learn +19.7500 0.7117 MC/B=1,000,000 0.6109 114.0 +score pattern bb_ret +61.6250 0.1594 MC/B=1,000,000 0.5590 112.0 +score pattern bb_round -32.8750 0.4900 MC/B=1,000,000 0.3365 102.0 +survival pattern bb_learn -18.7500 0.2254 MC/B=1,000,000 0.0800 104.0 +survival pattern bb_ret -15.6250 0.3507 MC/B=1,000,000 0.2791 111.0 +survival pattern bb_round -3.1250 1.0000 MC/B=1,000,000 0.6982 121.0 +wins pattern bb_learn -0.1875 0.2251 MC/B=1,000,000 0.0795 104.0 +wins pattern bb_ret -0.1875 0.2251 MC/B=1,000,000 0.0795 104.0 +wins pattern bb_round -0.1250 0.5984 MC/B=1,000,000 0.3080 112.0 +mean_rank pattern bb_learn +0.0000 1.0000 MC/B=1,000,000 1.0000 128.0 +mean_rank pattern bb_ret +0.0000 1.0000 MC/B=1,000,000 1.0000 128.0 +mean_rank pattern bb_round -0.0089 1.0000 MC/B=1,000,000 0.3485 120.0 +rank pattern bb_learn +0.0000 1.0000 MC/B=1,000,000 1.0000 128.0 +rank pattern bb_ret +0.0000 1.0000 MC/B=1,000,000 1.0000 128.0 +rank pattern bb_round +0.0000 1.0000 MC/B=1,000,000 1.0000 128.0 +score_share pattern bb_learn -0.0071 0.5082 MC/B=1,000,000 0.6109 114.0 +score_share pattern bb_ret +0.0012 0.9046 MC/B=1,000,000 0.8653 123.0 +score_share pattern bb_round -0.0128 0.2908 MC/B=1,000,000 0.2662 98.0 + +MINIMUM DETECTABLE EFFECT (two-sample, alpha=0.05 two-sided, 80% power; MDE = 2.8016*sd*sqrt(2/n)) +metric n/arm sd(ref) MDE ref mean +---------------------------------------------------- +score 16 152.85 151.40 2965.000 +survival 16 44.25 43.83 1031.250 +wins 16 0.40 0.40 6.812 +mean_rank 16 0.00 0.00 1.000 + +LIVENESS (per arm, from the bot's own boot report + log) +arm rack_melee mem targets tchanges bb-reset OK +bb_learn BITBRAIN decay 3.00 66.75 66.75 yes +bb_ret BITBRAIN retained 3.00 68.06 68.19 yes +bb_round BITBRAIN perRound 3.00 68.75 68.75 yes +pattern PATTERN perRound 3.00 66.44 0.00 yes + +# machine-readable: common_libs/tests/fixtures/melee_bitbrain_ab/analysis.json diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run1.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run1.json new file mode 100644 index 0000000..9f6afe9 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run1.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":1,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2883,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":1016,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":550,"rank":3,"firstPlaces":0,"survivalCount":250},{"name":"RandomMover","totalScore":460,"rank":4,"firstPlaces":0,"survivalCount":350}],"perRound":[{"round":1,"score":377,"rank":1,"survived":true},{"round":2,"score":836,"rank":1,"survived":true},{"round":3,"score":1178,"rank":1,"survived":true},{"round":4,"score":1548,"rank":1,"survived":true},{"round":5,"score":1929,"rank":1,"survived":true},{"round":6,"score":2393,"rank":1,"survived":true},{"round":7,"score":2883,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":82,"distinct_targets":3,"target_changes":63,"bb_reset_target_change":63,"bb_lines":14,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run10.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run10.json new file mode 100644 index 0000000..73110a0 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run10.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":10,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2757,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":933,"rank":2,"firstPlaces":0,"survivalCount":500},{"name":"RandomMover","totalScore":570,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":530,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":404,"rank":1,"survived":true},{"round":2,"score":823,"rank":1,"survived":true},{"round":3,"score":1122,"rank":1,"survived":true},{"round":4,"score":1595,"rank":1,"survived":true},{"round":5,"score":1974,"rank":1,"survived":true},{"round":6,"score":2359,"rank":1,"survived":true},{"round":7,"score":2757,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":81,"distinct_targets":3,"target_changes":68,"bb_reset_target_change":68,"bb_lines":28,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run11.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run11.json new file mode 100644 index 0000000..f76799b --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run11.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":11,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2906,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":694,"rank":2,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":678,"rank":3,"firstPlaces":0,"survivalCount":500},{"name":"PatternMover","totalScore":439,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":438,"rank":1,"survived":true},{"round":2,"score":870,"rank":1,"survived":true},{"round":3,"score":1284,"rank":1,"survived":true},{"round":4,"score":1708,"rank":1,"survived":true},{"round":5,"score":2062,"rank":1,"survived":true},{"round":6,"score":2532,"rank":1,"survived":true},{"round":7,"score":2906,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":79,"distinct_targets":3,"target_changes":68,"bb_reset_target_change":68,"bb_lines":25,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run12.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run12.json new file mode 100644 index 0000000..6179a95 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run12.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":12,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3145,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"RandomMover","totalScore":690,"rank":2,"firstPlaces":0,"survivalCount":500},{"name":"WaveSurfer","totalScore":648,"rank":3,"firstPlaces":0,"survivalCount":250},{"name":"PatternMover","totalScore":547,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":460,"rank":1,"survived":true},{"round":2,"score":858,"rank":1,"survived":true},{"round":3,"score":1293,"rank":1,"survived":true},{"round":4,"score":1778,"rank":1,"survived":true},{"round":5,"score":2227,"rank":1,"survived":true},{"round":6,"score":2698,"rank":1,"survived":true},{"round":7,"score":3145,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":82,"distinct_targets":3,"target_changes":72,"bb_reset_target_change":72,"bb_lines":17,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run13.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run13.json new file mode 100644 index 0000000..8058291 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run13.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":13,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2911,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":814,"rank":2,"firstPlaces":0,"survivalCount":250},{"name":"PatternMover","totalScore":644,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":563,"rank":4,"firstPlaces":0,"survivalCount":400}],"perRound":[{"round":1,"score":399,"rank":1,"survived":true},{"round":2,"score":841,"rank":1,"survived":true},{"round":3,"score":1233,"rank":1,"survived":true},{"round":4,"score":1635,"rank":1,"survived":true},{"round":5,"score":2106,"rank":1,"survived":true},{"round":6,"score":2521,"rank":1,"survived":true},{"round":7,"score":2911,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":93,"distinct_targets":3,"target_changes":80,"bb_reset_target_change":80,"bb_lines":10,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run14.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run14.json new file mode 100644 index 0000000..607ef6f --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run14.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":14,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3068,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":694,"rank":2,"firstPlaces":0,"survivalCount":250},{"name":"RandomMover","totalScore":636,"rank":3,"firstPlaces":0,"survivalCount":500},{"name":"PatternMover","totalScore":553,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":450,"rank":1,"survived":true},{"round":2,"score":855,"rank":1,"survived":true},{"round":3,"score":1409,"rank":1,"survived":true},{"round":4,"score":1797,"rank":1,"survived":true},{"round":5,"score":2235,"rank":1,"survived":true},{"round":6,"score":2645,"rank":1,"survived":true},{"round":7,"score":3068,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":12,"config_lines":70,"distinct_targets":3,"target_changes":55,"bb_reset_target_change":55,"bb_lines":20,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run15.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run15.json new file mode 100644 index 0000000..7ac7f25 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run15.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":15,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2758,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":765,"rank":2,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":666,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"PatternMover","totalScore":635,"rank":4,"firstPlaces":0,"survivalCount":350}],"perRound":[{"round":1,"score":387,"rank":1,"survived":true},{"round":2,"score":709,"rank":1,"survived":true},{"round":3,"score":1100,"rank":1,"survived":true},{"round":4,"score":1554,"rank":1,"survived":true},{"round":5,"score":1909,"rank":1,"survived":true},{"round":6,"score":2321,"rank":1,"survived":true},{"round":7,"score":2758,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":69,"distinct_targets":3,"target_changes":58,"bb_reset_target_change":58,"bb_lines":39,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run16.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run16.json new file mode 100644 index 0000000..b75a4b8 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run16.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":16,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2715,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"RandomMover","totalScore":803,"rank":2,"firstPlaces":0,"survivalCount":500},{"name":"WaveSurfer","totalScore":665,"rank":3,"firstPlaces":0,"survivalCount":300},{"name":"PatternMover","totalScore":491,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":368,"rank":1,"survived":true},{"round":2,"score":751,"rank":1,"survived":true},{"round":3,"score":1173,"rank":1,"survived":true},{"round":4,"score":1551,"rank":1,"survived":true},{"round":5,"score":1985,"rank":1,"survived":true},{"round":6,"score":2356,"rank":1,"survived":true},{"round":7,"score":2715,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":95,"distinct_targets":3,"target_changes":77,"bb_reset_target_change":77,"bb_lines":36,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run2.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run2.json new file mode 100644 index 0000000..9a56459 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run2.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":2,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3107,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":738,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"PatternMover","totalScore":486,"rank":3,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":479,"rank":4,"firstPlaces":0,"survivalCount":350}],"perRound":[{"round":1,"score":462,"rank":1,"survived":true},{"round":2,"score":881,"rank":1,"survived":true},{"round":3,"score":1392,"rank":1,"survived":true},{"round":4,"score":1829,"rank":1,"survived":true},{"round":5,"score":2327,"rank":1,"survived":true},{"round":6,"score":2719,"rank":1,"survived":true},{"round":7,"score":3107,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":8,"config_lines":90,"distinct_targets":3,"target_changes":78,"bb_reset_target_change":78,"bb_lines":26,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run3.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run3.json new file mode 100644 index 0000000..d0bf165 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run3.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":3,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2848,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"RandomMover","totalScore":684,"rank":2,"firstPlaces":0,"survivalCount":550},{"name":"WaveSurfer","totalScore":634,"rank":3,"firstPlaces":0,"survivalCount":150},{"name":"PatternMover","totalScore":580,"rank":4,"firstPlaces":0,"survivalCount":350}],"perRound":[{"round":1,"score":497,"rank":1,"survived":true},{"round":2,"score":935,"rank":1,"survived":true},{"round":3,"score":1286,"rank":1,"survived":true},{"round":4,"score":1635,"rank":1,"survived":true},{"round":5,"score":2041,"rank":1,"survived":true},{"round":6,"score":2417,"rank":1,"survived":true},{"round":7,"score":2848,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":8,"config_lines":90,"distinct_targets":3,"target_changes":72,"bb_reset_target_change":72,"bb_lines":16,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run4.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run4.json new file mode 100644 index 0000000..1224aeb --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run4.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":4,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3190,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":984,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":648,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":391,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":453,"rank":1,"survived":true},{"round":2,"score":905,"rank":1,"survived":true},{"round":3,"score":1366,"rank":1,"survived":true},{"round":4,"score":1868,"rank":1,"survived":true},{"round":5,"score":2211,"rank":1,"survived":true},{"round":6,"score":2670,"rank":1,"survived":true},{"round":7,"score":3190,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":8,"config_lines":79,"distinct_targets":3,"target_changes":66,"bb_reset_target_change":66,"bb_lines":13,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run5.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run5.json new file mode 100644 index 0000000..f6d4bbf --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run5.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":5,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2912,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":713,"rank":2,"firstPlaces":0,"survivalCount":100},{"name":"RandomMover","totalScore":709,"rank":3,"firstPlaces":0,"survivalCount":550},{"name":"PatternMover","totalScore":690,"rank":4,"firstPlaces":0,"survivalCount":400}],"perRound":[{"round":1,"score":393,"rank":1,"survived":true},{"round":2,"score":726,"rank":1,"survived":true},{"round":3,"score":1126,"rank":1,"survived":true},{"round":4,"score":1564,"rank":1,"survived":true},{"round":5,"score":2062,"rank":1,"survived":true},{"round":6,"score":2467,"rank":1,"survived":true},{"round":7,"score":2912,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":12,"config_lines":78,"distinct_targets":3,"target_changes":62,"bb_reset_target_change":62,"bb_lines":5,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run6.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run6.json new file mode 100644 index 0000000..bd86c76 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run6.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":6,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2859,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":1033,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":634,"rank":3,"firstPlaces":0,"survivalCount":250},{"name":"RandomMover","totalScore":579,"rank":4,"firstPlaces":0,"survivalCount":350}],"perRound":[{"round":1,"score":511,"rank":1,"survived":true},{"round":2,"score":932,"rank":1,"survived":true},{"round":3,"score":1271,"rank":1,"survived":true},{"round":4,"score":1689,"rank":1,"survived":true},{"round":5,"score":2011,"rank":1,"survived":true},{"round":6,"score":2426,"rank":1,"survived":true},{"round":7,"score":2859,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":75,"distinct_targets":3,"target_changes":62,"bb_reset_target_change":62,"bb_lines":7,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run7.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run7.json new file mode 100644 index 0000000..82598bd --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run7.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":7,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3092,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":802,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":491,"rank":3,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":400,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":455,"rank":1,"survived":true},{"round":2,"score":934,"rank":1,"survived":true},{"round":3,"score":1338,"rank":1,"survived":true},{"round":4,"score":1776,"rank":1,"survived":true},{"round":5,"score":2233,"rank":1,"survived":true},{"round":6,"score":2652,"rank":1,"survived":true},{"round":7,"score":3092,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":79,"distinct_targets":3,"target_changes":64,"bb_reset_target_change":64,"bb_lines":19,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run8.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run8.json new file mode 100644 index 0000000..4e7843d --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run8.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":8,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2907,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":1139,"rank":2,"firstPlaces":0,"survivalCount":550},{"name":"PatternMover","totalScore":554,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":364,"rank":4,"firstPlaces":0,"survivalCount":150}],"perRound":[{"round":1,"score":416,"rank":1,"survived":true},{"round":2,"score":836,"rank":1,"survived":true},{"round":3,"score":1210,"rank":1,"survived":true},{"round":4,"score":1569,"rank":1,"survived":true},{"round":5,"score":2081,"rank":1,"survived":true},{"round":6,"score":2542,"rank":1,"survived":true},{"round":7,"score":2907,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":12,"config_lines":76,"distinct_targets":3,"target_changes":60,"bb_reset_target_change":60,"bb_lines":10,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run9.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run9.json new file mode 100644 index 0000000..200aa32 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_learn/run9.json @@ -0,0 +1 @@ +{"arm":"bb_learn","run":9,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3066,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"RandomMover","totalScore":642,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"WaveSurfer","totalScore":624,"rank":3,"firstPlaces":0,"survivalCount":300},{"name":"PatternMover","totalScore":479,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":362,"rank":1,"survived":true},{"round":2,"score":836,"rank":1,"survived":true},{"round":3,"score":1247,"rank":1,"survived":true},{"round":4,"score":1666,"rank":1,"survived":true},{"round":5,"score":2122,"rank":1,"survived":true},{"round":6,"score":2552,"rank":1,"survived":true},{"round":7,"score":3066,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"decay","env_TR_BITBRAIN_GAINS":"1.0,1.25,1.5,2.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":12,"config_lines":77,"distinct_targets":3,"target_changes":63,"bb_reset_target_change":63,"bb_lines":15,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run1.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run1.json new file mode 100644 index 0000000..e047365 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run1.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":1,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2891,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":780,"rank":2,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":674,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":596,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":441,"rank":1,"survived":true},{"round":2,"score":876,"rank":1,"survived":true},{"round":3,"score":1243,"rank":1,"survived":true},{"round":4,"score":1640,"rank":1,"survived":true},{"round":5,"score":2042,"rank":1,"survived":true},{"round":6,"score":2442,"rank":1,"survived":true},{"round":7,"score":2891,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":9,"config_lines":73,"distinct_targets":3,"target_changes":60,"bb_reset_target_change":62,"bb_lines":42,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run10.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run10.json new file mode 100644 index 0000000..eac2c7b --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run10.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":10,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2770,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":1234,"rank":2,"firstPlaces":0,"survivalCount":500},{"name":"RandomMover","totalScore":472,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":467,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":396,"rank":1,"survived":true},{"round":2,"score":861,"rank":1,"survived":true},{"round":3,"score":1235,"rank":1,"survived":true},{"round":4,"score":1620,"rank":1,"survived":true},{"round":5,"score":1969,"rank":1,"survived":true},{"round":6,"score":2368,"rank":1,"survived":true},{"round":7,"score":2770,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":13,"config_lines":82,"distinct_targets":3,"target_changes":67,"bb_reset_target_change":67,"bb_lines":35,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run11.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run11.json new file mode 100644 index 0000000..50e952a --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run11.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":11,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2792,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":953,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":592,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"PatternMover","totalScore":498,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":435,"rank":1,"survived":true},{"round":2,"score":825,"rank":1,"survived":true},{"round":3,"score":1185,"rank":1,"survived":true},{"round":4,"score":1596,"rank":1,"survived":true},{"round":5,"score":2030,"rank":1,"survived":true},{"round":6,"score":2397,"rank":1,"survived":true},{"round":7,"score":2792,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":13,"config_lines":87,"distinct_targets":3,"target_changes":73,"bb_reset_target_change":73,"bb_lines":32,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run12.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run12.json new file mode 100644 index 0000000..5c5eb75 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run12.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":12,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2934,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"PatternMover","totalScore":656,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":600,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"WaveSurfer","totalScore":568,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":410,"rank":1,"survived":true},{"round":2,"score":859,"rank":1,"survived":true},{"round":3,"score":1205,"rank":1,"survived":true},{"round":4,"score":1572,"rank":1,"survived":true},{"round":5,"score":1950,"rank":1,"survived":true},{"round":6,"score":2458,"rank":1,"survived":true},{"round":7,"score":2934,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":69,"distinct_targets":3,"target_changes":54,"bb_reset_target_change":54,"bb_lines":49,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run13.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run13.json new file mode 100644 index 0000000..006499a --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run13.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":13,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2943,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":812,"rank":2,"firstPlaces":0,"survivalCount":250},{"name":"PatternMover","totalScore":701,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":579,"rank":4,"firstPlaces":0,"survivalCount":400}],"perRound":[{"round":1,"score":539,"rank":1,"survived":true},{"round":2,"score":914,"rank":1,"survived":true},{"round":3,"score":1287,"rank":1,"survived":true},{"round":4,"score":1676,"rank":1,"survived":true},{"round":5,"score":2071,"rank":1,"survived":true},{"round":6,"score":2517,"rank":1,"survived":true},{"round":7,"score":2943,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":13,"config_lines":76,"distinct_targets":3,"target_changes":63,"bb_reset_target_change":63,"bb_lines":49,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run14.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run14.json new file mode 100644 index 0000000..592d4d8 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run14.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":14,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2890,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":883,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"PatternMover","totalScore":752,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":340,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":454,"rank":1,"survived":true},{"round":2,"score":914,"rank":1,"survived":true},{"round":3,"score":1344,"rank":1,"survived":true},{"round":4,"score":1725,"rank":1,"survived":true},{"round":5,"score":2092,"rank":1,"survived":true},{"round":6,"score":2498,"rank":1,"survived":true},{"round":7,"score":2890,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":84,"distinct_targets":3,"target_changes":70,"bb_reset_target_change":70,"bb_lines":43,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run15.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run15.json new file mode 100644 index 0000000..425762e --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run15.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":15,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2817,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":875,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":578,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"PatternMover","totalScore":561,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":402,"rank":1,"survived":true},{"round":2,"score":845,"rank":1,"survived":true},{"round":3,"score":1271,"rank":1,"survived":true},{"round":4,"score":1581,"rank":1,"survived":true},{"round":5,"score":1928,"rank":1,"survived":true},{"round":6,"score":2373,"rank":1,"survived":true},{"round":7,"score":2817,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":9,"config_lines":102,"distinct_targets":3,"target_changes":83,"bb_reset_target_change":83,"bb_lines":46,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run16.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run16.json new file mode 100644 index 0000000..a1feb4c --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run16.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":16,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2999,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":973,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":498,"rank":3,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":448,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":485,"rank":1,"survived":true},{"round":2,"score":854,"rank":1,"survived":true},{"round":3,"score":1243,"rank":1,"survived":true},{"round":4,"score":1706,"rank":1,"survived":true},{"round":5,"score":2171,"rank":1,"survived":true},{"round":6,"score":2569,"rank":1,"survived":true},{"round":7,"score":2999,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":12,"config_lines":79,"distinct_targets":3,"target_changes":65,"bb_reset_target_change":65,"bb_lines":47,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run2.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run2.json new file mode 100644 index 0000000..fe70596 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run2.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":2,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2994,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":938,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":582,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"PatternMover","totalScore":370,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":477,"rank":1,"survived":true},{"round":2,"score":816,"rank":1,"survived":true},{"round":3,"score":1326,"rank":1,"survived":true},{"round":4,"score":1795,"rank":1,"survived":true},{"round":5,"score":2226,"rank":1,"survived":true},{"round":6,"score":2651,"rank":1,"survived":true},{"round":7,"score":2994,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":92,"distinct_targets":3,"target_changes":73,"bb_reset_target_change":73,"bb_lines":43,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run3.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run3.json new file mode 100644 index 0000000..d097ba6 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run3.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":3,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2913,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":1024,"rank":2,"firstPlaces":0,"survivalCount":500},{"name":"PatternMover","totalScore":640,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":358,"rank":4,"firstPlaces":0,"survivalCount":150}],"perRound":[{"round":1,"score":413,"rank":1,"survived":true},{"round":2,"score":728,"rank":1,"survived":true},{"round":3,"score":1173,"rank":1,"survived":true},{"round":4,"score":1678,"rank":1,"survived":true},{"round":5,"score":2095,"rank":1,"survived":true},{"round":6,"score":2509,"rank":1,"survived":true},{"round":7,"score":2913,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":8,"config_lines":89,"distinct_targets":3,"target_changes":71,"bb_reset_target_change":71,"bb_lines":37,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run4.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run4.json new file mode 100644 index 0000000..addf35e --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run4.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":4,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2920,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":813,"rank":2,"firstPlaces":0,"survivalCount":200},{"name":"PatternMover","totalScore":762,"rank":3,"firstPlaces":0,"survivalCount":550},{"name":"RandomMover","totalScore":531,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":467,"rank":1,"survived":true},{"round":2,"score":876,"rank":1,"survived":true},{"round":3,"score":1205,"rank":1,"survived":true},{"round":4,"score":1597,"rank":1,"survived":true},{"round":5,"score":2062,"rank":1,"survived":true},{"round":6,"score":2487,"rank":1,"survived":true},{"round":7,"score":2920,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":69,"distinct_targets":3,"target_changes":55,"bb_reset_target_change":55,"bb_lines":45,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run5.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run5.json new file mode 100644 index 0000000..9a70195 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run5.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":5,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2890,"rank":1,"firstPlaces":7,"survivalCount":1000,"found":true},"field":[{"name":"RandomMover","totalScore":624,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":614,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"WaveSurfer","totalScore":530,"rank":4,"firstPlaces":0,"survivalCount":100}],"perRound":[{"round":1,"score":525,"rank":1,"survived":true},{"round":2,"score":918,"rank":1,"survived":true},{"round":3,"score":1249,"rank":1,"survived":true},{"round":4,"score":1684,"rank":1,"survived":true},{"round":5,"score":2075,"rank":1,"survived":true},{"round":6,"score":2553,"rank":1,"survived":true},{"round":7,"score":2890,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":13,"config_lines":96,"distinct_targets":3,"target_changes":82,"bb_reset_target_change":82,"bb_lines":43,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run6.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run6.json new file mode 100644 index 0000000..9f75089 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run6.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":6,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3011,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":725,"rank":2,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":598,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":542,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":506,"rank":1,"survived":true},{"round":2,"score":906,"rank":1,"survived":true},{"round":3,"score":1281,"rank":1,"survived":true},{"round":4,"score":1743,"rank":1,"survived":true},{"round":5,"score":2179,"rank":1,"survived":true},{"round":6,"score":2587,"rank":1,"survived":true},{"round":7,"score":3011,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":93,"distinct_targets":3,"target_changes":74,"bb_reset_target_change":74,"bb_lines":43,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run7.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run7.json new file mode 100644 index 0000000..020d2f2 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run7.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":7,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2945,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"PatternMover","totalScore":730,"rank":2,"firstPlaces":0,"survivalCount":500},{"name":"WaveSurfer","totalScore":674,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":315,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":401,"rank":1,"survived":true},{"round":2,"score":884,"rank":1,"survived":true},{"round":3,"score":1285,"rank":1,"survived":true},{"round":4,"score":1706,"rank":1,"survived":true},{"round":5,"score":2119,"rank":1,"survived":true},{"round":6,"score":2494,"rank":1,"survived":true},{"round":7,"score":2945,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":12,"config_lines":99,"distinct_targets":3,"target_changes":84,"bb_reset_target_change":84,"bb_lines":51,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run8.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run8.json new file mode 100644 index 0000000..0f52dff --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run8.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":8,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2943,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":1003,"rank":2,"firstPlaces":0,"survivalCount":250},{"name":"PatternMover","totalScore":938,"rank":3,"firstPlaces":0,"survivalCount":550},{"name":"RandomMover","totalScore":308,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":560,"rank":1,"survived":true},{"round":2,"score":977,"rank":1,"survived":true},{"round":3,"score":1462,"rank":1,"survived":true},{"round":4,"score":1806,"rank":1,"survived":true},{"round":5,"score":2130,"rank":1,"survived":true},{"round":6,"score":2583,"rank":1,"survived":true},{"round":7,"score":2943,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":9,"config_lines":71,"distinct_targets":3,"target_changes":56,"bb_reset_target_change":56,"bb_lines":30,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run9.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run9.json new file mode 100644 index 0000000..c63323e --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_ret/run9.json @@ -0,0 +1 @@ +{"arm":"bb_ret","run":9,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2802,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":773,"rank":2,"firstPlaces":0,"survivalCount":150},{"name":"RandomMover","totalScore":732,"rank":3,"firstPlaces":0,"survivalCount":600},{"name":"PatternMover","totalScore":614,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":413,"rank":1,"survived":true},{"round":2,"score":835,"rank":1,"survived":true},{"round":3,"score":1231,"rank":1,"survived":true},{"round":4,"score":1653,"rank":1,"survived":true},{"round":5,"score":2130,"rank":1,"survived":true},{"round":6,"score":2414,"rank":1,"survived":true},{"round":7,"score":2802,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"retained","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":12,"config_lines":71,"distinct_targets":3,"target_changes":59,"bb_reset_target_change":59,"bb_lines":36,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run1.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run1.json new file mode 100644 index 0000000..3861051 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run1.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":1,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3040,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":671,"rank":2,"firstPlaces":0,"survivalCount":250},{"name":"PatternMover","totalScore":652,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":578,"rank":4,"firstPlaces":0,"survivalCount":400}],"perRound":[{"round":1,"score":416,"rank":1,"survived":true},{"round":2,"score":893,"rank":1,"survived":true},{"round":3,"score":1372,"rank":1,"survived":true},{"round":4,"score":1756,"rank":1,"survived":true},{"round":5,"score":2188,"rank":1,"survived":true},{"round":6,"score":2653,"rank":1,"survived":true},{"round":7,"score":3040,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":75,"distinct_targets":3,"target_changes":62,"bb_reset_target_change":62,"bb_lines":70,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run10.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run10.json new file mode 100644 index 0000000..0bb18be --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run10.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":10,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2944,"rank":1,"firstPlaces":6,"survivalCount":900,"found":true},"field":[{"name":"WaveSurfer","totalScore":899,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":742,"rank":3,"firstPlaces":0,"survivalCount":550},{"name":"PatternMover","totalScore":569,"rank":4,"firstPlaces":1,"survivalCount":250}],"perRound":[{"round":1,"score":223,"rank":2,"survived":false},{"round":2,"score":719,"rank":1,"survived":true},{"round":3,"score":1162,"rank":1,"survived":true},{"round":4,"score":1615,"rank":1,"survived":true},{"round":5,"score":2025,"rank":1,"survived":true},{"round":6,"score":2515,"rank":1,"survived":true},{"round":7,"score":2944,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":77,"distinct_targets":3,"target_changes":60,"bb_reset_target_change":60,"bb_lines":24,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run11.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run11.json new file mode 100644 index 0000000..c1e21af --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run11.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":11,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3125,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":775,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":589,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":466,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":454,"rank":1,"survived":true},{"round":2,"score":890,"rank":1,"survived":true},{"round":3,"score":1396,"rank":1,"survived":true},{"round":4,"score":1859,"rank":1,"survived":true},{"round":5,"score":2277,"rank":1,"survived":true},{"round":6,"score":2709,"rank":1,"survived":true},{"round":7,"score":3125,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":91,"distinct_targets":3,"target_changes":81,"bb_reset_target_change":81,"bb_lines":48,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run12.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run12.json new file mode 100644 index 0000000..0ea93ae --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run12.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":12,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3110,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":804,"rank":2,"firstPlaces":0,"survivalCount":300},{"name":"PatternMover","totalScore":749,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":513,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":488,"rank":1,"survived":true},{"round":2,"score":947,"rank":1,"survived":true},{"round":3,"score":1371,"rank":1,"survived":true},{"round":4,"score":1879,"rank":1,"survived":true},{"round":5,"score":2236,"rank":1,"survived":true},{"round":6,"score":2612,"rank":1,"survived":true},{"round":7,"score":3110,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":13,"config_lines":72,"distinct_targets":3,"target_changes":62,"bb_reset_target_change":62,"bb_lines":24,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run13.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run13.json new file mode 100644 index 0000000..59ae985 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run13.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":13,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3037,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":807,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":664,"rank":3,"firstPlaces":0,"survivalCount":500},{"name":"PatternMover","totalScore":206,"rank":4,"firstPlaces":0,"survivalCount":100}],"perRound":[{"round":1,"score":390,"rank":1,"survived":true},{"round":2,"score":840,"rank":1,"survived":true},{"round":3,"score":1301,"rank":1,"survived":true},{"round":4,"score":1746,"rank":1,"survived":true},{"round":5,"score":2196,"rank":1,"survived":true},{"round":6,"score":2658,"rank":1,"survived":true},{"round":7,"score":3037,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":81,"distinct_targets":3,"target_changes":69,"bb_reset_target_change":69,"bb_lines":50,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run14.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run14.json new file mode 100644 index 0000000..1b74a3d --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run14.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":14,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2993,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":801,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"PatternMover","totalScore":592,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":443,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":453,"rank":1,"survived":true},{"round":2,"score":904,"rank":1,"survived":true},{"round":3,"score":1265,"rank":1,"survived":true},{"round":4,"score":1729,"rank":1,"survived":true},{"round":5,"score":2186,"rank":1,"survived":true},{"round":6,"score":2557,"rank":1,"survived":true},{"round":7,"score":2993,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":13,"config_lines":73,"distinct_targets":3,"target_changes":61,"bb_reset_target_change":61,"bb_lines":42,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run15.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run15.json new file mode 100644 index 0000000..dcbe414 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run15.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":15,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2985,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":796,"rank":2,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":606,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":545,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":440,"rank":1,"survived":true},{"round":2,"score":812,"rank":1,"survived":true},{"round":3,"score":1299,"rank":1,"survived":true},{"round":4,"score":1750,"rank":1,"survived":true},{"round":5,"score":2211,"rank":1,"survived":true},{"round":6,"score":2613,"rank":1,"survived":true},{"round":7,"score":2985,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":11,"config_lines":87,"distinct_targets":3,"target_changes":73,"bb_reset_target_change":73,"bb_lines":54,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run16.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run16.json new file mode 100644 index 0000000..6c0d934 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run16.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":16,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2842,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":774,"rank":2,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":702,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":503,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":457,"rank":1,"survived":true},{"round":2,"score":857,"rank":1,"survived":true},{"round":3,"score":1205,"rank":1,"survived":true},{"round":4,"score":1638,"rank":1,"survived":true},{"round":5,"score":1982,"rank":1,"survived":true},{"round":6,"score":2414,"rank":1,"survived":true},{"round":7,"score":2842,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":86,"distinct_targets":3,"target_changes":70,"bb_reset_target_change":70,"bb_lines":39,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run2.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run2.json new file mode 100644 index 0000000..0a6bfff --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run2.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":2,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2835,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":996,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":655,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":485,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":352,"rank":1,"survived":true},{"round":2,"score":753,"rank":1,"survived":true},{"round":3,"score":1094,"rank":1,"survived":true},{"round":4,"score":1478,"rank":1,"survived":true},{"round":5,"score":1907,"rank":1,"survived":true},{"round":6,"score":2366,"rank":1,"survived":true},{"round":7,"score":2835,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":9,"config_lines":84,"distinct_targets":3,"target_changes":67,"bb_reset_target_change":67,"bb_lines":38,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run3.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run3.json new file mode 100644 index 0000000..555cc4a --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run3.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":3,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3045,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":828,"rank":2,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":662,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":525,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":452,"rank":1,"survived":true},{"round":2,"score":939,"rank":1,"survived":true},{"round":3,"score":1453,"rank":1,"survived":true},{"round":4,"score":1801,"rank":1,"survived":true},{"round":5,"score":2245,"rank":1,"survived":true},{"round":6,"score":2611,"rank":1,"survived":true},{"round":7,"score":3045,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":8,"config_lines":79,"distinct_targets":3,"target_changes":63,"bb_reset_target_change":63,"bb_lines":15,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run4.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run4.json new file mode 100644 index 0000000..c0bb96d --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run4.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":4,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3180,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":646,"rank":2,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":512,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":417,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":452,"rank":1,"survived":true},{"round":2,"score":948,"rank":1,"survived":true},{"round":3,"score":1381,"rank":1,"survived":true},{"round":4,"score":1823,"rank":1,"survived":true},{"round":5,"score":2276,"rank":1,"survived":true},{"round":6,"score":2716,"rank":1,"survived":true},{"round":7,"score":3180,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":8,"config_lines":78,"distinct_targets":3,"target_changes":66,"bb_reset_target_change":66,"bb_lines":39,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run5.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run5.json new file mode 100644 index 0000000..3af4950 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run5.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":5,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2952,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"PatternMover","totalScore":719,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":675,"rank":3,"firstPlaces":0,"survivalCount":500},{"name":"WaveSurfer","totalScore":639,"rank":4,"firstPlaces":0,"survivalCount":150}],"perRound":[{"round":1,"score":357,"rank":1,"survived":true},{"round":2,"score":776,"rank":1,"survived":true},{"round":3,"score":1161,"rank":1,"survived":true},{"round":4,"score":1571,"rank":1,"survived":true},{"round":5,"score":2053,"rank":1,"survived":true},{"round":6,"score":2469,"rank":1,"survived":true},{"round":7,"score":2952,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":9,"config_lines":81,"distinct_targets":3,"target_changes":70,"bb_reset_target_change":70,"bb_lines":51,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run6.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run6.json new file mode 100644 index 0000000..f4be0a1 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run6.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":6,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3126,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"RandomMover","totalScore":659,"rank":2,"firstPlaces":0,"survivalCount":550},{"name":"PatternMover","totalScore":539,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"WaveSurfer","totalScore":379,"rank":4,"firstPlaces":0,"survivalCount":150}],"perRound":[{"round":1,"score":461,"rank":1,"survived":true},{"round":2,"score":920,"rank":1,"survived":true},{"round":3,"score":1355,"rank":1,"survived":true},{"round":4,"score":1826,"rank":1,"survived":true},{"round":5,"score":2303,"rank":1,"survived":true},{"round":6,"score":2699,"rank":1,"survived":true},{"round":7,"score":3126,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":13,"config_lines":89,"distinct_targets":3,"target_changes":71,"bb_reset_target_change":71,"bb_lines":45,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run7.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run7.json new file mode 100644 index 0000000..7b56b99 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run7.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":7,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2927,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"RandomMover","totalScore":793,"rank":2,"firstPlaces":0,"survivalCount":550},{"name":"WaveSurfer","totalScore":689,"rank":3,"firstPlaces":0,"survivalCount":150},{"name":"PatternMover","totalScore":640,"rank":4,"firstPlaces":0,"survivalCount":350}],"perRound":[{"round":1,"score":538,"rank":1,"survived":true},{"round":2,"score":938,"rank":1,"survived":true},{"round":3,"score":1296,"rank":1,"survived":true},{"round":4,"score":1704,"rank":1,"survived":true},{"round":5,"score":2099,"rank":1,"survived":true},{"round":6,"score":2543,"rank":1,"survived":true},{"round":7,"score":2927,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":10,"config_lines":86,"distinct_targets":3,"target_changes":75,"bb_reset_target_change":75,"bb_lines":65,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run8.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run8.json new file mode 100644 index 0000000..3fbd3cb --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run8.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":8,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3021,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":726,"rank":2,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":690,"rank":3,"firstPlaces":0,"survivalCount":500},{"name":"RandomMover","totalScore":364,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":421,"rank":1,"survived":true},{"round":2,"score":832,"rank":1,"survived":true},{"round":3,"score":1298,"rank":1,"survived":true},{"round":4,"score":1681,"rank":1,"survived":true},{"round":5,"score":2114,"rank":1,"survived":true},{"round":6,"score":2533,"rank":1,"survived":true},{"round":7,"score":3021,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":12,"config_lines":101,"distinct_targets":3,"target_changes":83,"bb_reset_target_change":83,"bb_lines":30,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run9.json b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run9.json new file mode 100644 index 0000000..f3ea523 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/bb_round/run9.json @@ -0,0 +1 @@ +{"arm":"bb_round","run":9,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2804,"rank":1,"firstPlaces":7,"survivalCount":950,"found":true},"field":[{"name":"WaveSurfer","totalScore":1173,"rank":2,"firstPlaces":0,"survivalCount":500},{"name":"PatternMover","totalScore":758,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":452,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":433,"rank":1,"survived":true},{"round":2,"score":854,"rank":1,"survived":true},{"round":3,"score":1285,"rank":1,"survived":true},{"round":4,"score":1656,"rank":1,"survived":true},{"round":5,"score":1999,"rank":1,"survived":true},{"round":6,"score":2453,"rank":1,"survived":true},{"round":7,"score":2804,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"off","env_TR_RACK_BITBRAIN":"melee","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"BITBRAIN","rack_active_1v1":"FULL","rack_melee_lines":9,"config_lines":81,"distinct_targets":3,"target_changes":67,"bb_reset_target_change":67,"bb_lines":60,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run1.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run1.json new file mode 100644 index 0000000..ba7702b --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run1.json @@ -0,0 +1 @@ +{"arm":"pattern","run":1,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3082,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"PatternMover","totalScore":817,"rank":2,"firstPlaces":0,"survivalCount":550},{"name":"RandomMover","totalScore":706,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"WaveSurfer","totalScore":558,"rank":4,"firstPlaces":0,"survivalCount":50}],"perRound":[{"round":1,"score":440,"rank":1,"survived":true},{"round":2,"score":903,"rank":1,"survived":true},{"round":3,"score":1364,"rank":1,"survived":true},{"round":4,"score":1753,"rank":1,"survived":true},{"round":5,"score":2123,"rank":1,"survived":true},{"round":6,"score":2547,"rank":1,"survived":true},{"round":7,"score":3082,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":9,"config_lines":76,"distinct_targets":3,"target_changes":66,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run10.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run10.json new file mode 100644 index 0000000..649e9f4 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run10.json @@ -0,0 +1 @@ +{"arm":"pattern","run":10,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2795,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":964,"rank":2,"firstPlaces":0,"survivalCount":500},{"name":"PatternMover","totalScore":698,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":471,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":364,"rank":1,"survived":true},{"round":2,"score":768,"rank":1,"survived":true},{"round":3,"score":1198,"rank":1,"survived":true},{"round":4,"score":1624,"rank":1,"survived":true},{"round":5,"score":1950,"rank":1,"survived":true},{"round":6,"score":2373,"rank":1,"survived":true},{"round":7,"score":2795,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":10,"config_lines":74,"distinct_targets":3,"target_changes":56,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run11.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run11.json new file mode 100644 index 0000000..1245c62 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run11.json @@ -0,0 +1 @@ +{"arm":"pattern","run":11,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2897,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"PatternMover","totalScore":642,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":635,"rank":3,"firstPlaces":0,"survivalCount":500},{"name":"WaveSurfer","totalScore":609,"rank":4,"firstPlaces":0,"survivalCount":150}],"perRound":[{"round":1,"score":389,"rank":1,"survived":true},{"round":2,"score":810,"rank":1,"survived":true},{"round":3,"score":1297,"rank":1,"survived":true},{"round":4,"score":1645,"rank":1,"survived":true},{"round":5,"score":2047,"rank":1,"survived":true},{"round":6,"score":2434,"rank":1,"survived":true},{"round":7,"score":2897,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":13,"config_lines":87,"distinct_targets":3,"target_changes":73,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run12.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run12.json new file mode 100644 index 0000000..3f4d2a9 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run12.json @@ -0,0 +1 @@ +{"arm":"pattern","run":12,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2915,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":798,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":509,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":441,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":411,"rank":1,"survived":true},{"round":2,"score":789,"rank":1,"survived":true},{"round":3,"score":1225,"rank":1,"survived":true},{"round":4,"score":1611,"rank":1,"survived":true},{"round":5,"score":1992,"rank":1,"survived":true},{"round":6,"score":2475,"rank":1,"survived":true},{"round":7,"score":2915,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":11,"config_lines":91,"distinct_targets":3,"target_changes":77,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run13.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run13.json new file mode 100644 index 0000000..96654d9 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run13.json @@ -0,0 +1 @@ +{"arm":"pattern","run":13,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3176,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":867,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"PatternMover","totalScore":624,"rank":3,"firstPlaces":0,"survivalCount":250},{"name":"RandomMover","totalScore":563,"rank":4,"firstPlaces":0,"survivalCount":400}],"perRound":[{"round":1,"score":463,"rank":1,"survived":true},{"round":2,"score":876,"rank":1,"survived":true},{"round":3,"score":1244,"rank":1,"survived":true},{"round":4,"score":1766,"rank":1,"survived":true},{"round":5,"score":2201,"rank":1,"survived":true},{"round":6,"score":2620,"rank":1,"survived":true},{"round":7,"score":3176,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":10,"config_lines":71,"distinct_targets":3,"target_changes":53,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run14.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run14.json new file mode 100644 index 0000000..a0489df --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run14.json @@ -0,0 +1 @@ +{"arm":"pattern","run":14,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2922,"rank":1,"firstPlaces":7,"survivalCount":950,"found":true},"field":[{"name":"WaveSurfer","totalScore":799,"rank":2,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":676,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":581,"rank":4,"firstPlaces":0,"survivalCount":400}],"perRound":[{"round":1,"score":424,"rank":1,"survived":true},{"round":2,"score":892,"rank":1,"survived":true},{"round":3,"score":1312,"rank":1,"survived":true},{"round":4,"score":1792,"rank":1,"survived":true},{"round":5,"score":2209,"rank":1,"survived":true},{"round":6,"score":2600,"rank":1,"survived":true},{"round":7,"score":2922,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":10,"config_lines":79,"distinct_targets":3,"target_changes":67,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run15.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run15.json new file mode 100644 index 0000000..0236e68 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run15.json @@ -0,0 +1 @@ +{"arm":"pattern","run":15,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2860,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":988,"rank":2,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":681,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"PatternMover","totalScore":521,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":379,"rank":1,"survived":true},{"round":2,"score":762,"rank":1,"survived":true},{"round":3,"score":1196,"rank":1,"survived":true},{"round":4,"score":1630,"rank":1,"survived":true},{"round":5,"score":2050,"rank":1,"survived":true},{"round":6,"score":2464,"rank":1,"survived":true},{"round":7,"score":2860,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":13,"config_lines":79,"distinct_targets":3,"target_changes":67,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run16.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run16.json new file mode 100644 index 0000000..1367377 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run16.json @@ -0,0 +1 @@ +{"arm":"pattern","run":16,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2878,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"PatternMover","totalScore":725,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":725,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"WaveSurfer","totalScore":557,"rank":4,"firstPlaces":0,"survivalCount":200}],"perRound":[{"round":1,"score":401,"rank":1,"survived":true},{"round":2,"score":781,"rank":1,"survived":true},{"round":3,"score":1131,"rank":1,"survived":true},{"round":4,"score":1524,"rank":1,"survived":true},{"round":5,"score":1957,"rank":1,"survived":true},{"round":6,"score":2466,"rank":1,"survived":true},{"round":7,"score":2878,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":12,"config_lines":82,"distinct_targets":3,"target_changes":69,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run2.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run2.json new file mode 100644 index 0000000..7340ae0 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run2.json @@ -0,0 +1 @@ +{"arm":"pattern","run":2,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3261,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":643,"rank":2,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":515,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":472,"rank":4,"firstPlaces":0,"survivalCount":350}],"perRound":[{"round":1,"score":456,"rank":1,"survived":true},{"round":2,"score":898,"rank":1,"survived":true},{"round":3,"score":1360,"rank":1,"survived":true},{"round":4,"score":1881,"rank":1,"survived":true},{"round":5,"score":2268,"rank":1,"survived":true},{"round":6,"score":2746,"rank":1,"survived":true},{"round":7,"score":3261,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":8,"config_lines":90,"distinct_targets":3,"target_changes":79,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run3.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run3.json new file mode 100644 index 0000000..7cb37c7 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run3.json @@ -0,0 +1 @@ +{"arm":"pattern","run":3,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2957,"rank":1,"firstPlaces":6,"survivalCount":1000,"found":true},"field":[{"name":"WaveSurfer","totalScore":911,"rank":2,"firstPlaces":1,"survivalCount":400},{"name":"RandomMover","totalScore":614,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":613,"rank":4,"firstPlaces":0,"survivalCount":350}],"perRound":[{"round":1,"score":490,"rank":1,"survived":true},{"round":2,"score":915,"rank":1,"survived":true},{"round":3,"score":1375,"rank":1,"survived":true},{"round":4,"score":1802,"rank":1,"survived":true},{"round":5,"score":2307,"rank":1,"survived":true},{"round":6,"score":2694,"rank":1,"survived":true},{"round":7,"score":2957,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":8,"config_lines":80,"distinct_targets":3,"target_changes":67,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run4.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run4.json new file mode 100644 index 0000000..b50b108 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run4.json @@ -0,0 +1 @@ +{"arm":"pattern","run":4,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3106,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"PatternMover","totalScore":673,"rank":2,"firstPlaces":0,"survivalCount":400},{"name":"RandomMover","totalScore":644,"rank":3,"firstPlaces":0,"survivalCount":400},{"name":"WaveSurfer","totalScore":566,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":386,"rank":1,"survived":true},{"round":2,"score":867,"rank":1,"survived":true},{"round":3,"score":1290,"rank":1,"survived":true},{"round":4,"score":1739,"rank":1,"survived":true},{"round":5,"score":2192,"rank":1,"survived":true},{"round":6,"score":2660,"rank":1,"survived":true},{"round":7,"score":3106,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":9,"config_lines":65,"distinct_targets":3,"target_changes":51,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run5.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run5.json new file mode 100644 index 0000000..b48cc20 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run5.json @@ -0,0 +1 @@ +{"arm":"pattern","run":5,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2869,"rank":1,"firstPlaces":6,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":971,"rank":2,"firstPlaces":1,"survivalCount":450},{"name":"PatternMover","totalScore":661,"rank":3,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":477,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":398,"rank":1,"survived":true},{"round":2,"score":881,"rank":1,"survived":true},{"round":3,"score":1173,"rank":1,"survived":true},{"round":4,"score":1546,"rank":1,"survived":true},{"round":5,"score":2030,"rank":1,"survived":true},{"round":6,"score":2432,"rank":1,"survived":true},{"round":7,"score":2869,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":13,"config_lines":67,"distinct_targets":3,"target_changes":51,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run6.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run6.json new file mode 100644 index 0000000..b9b88db --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run6.json @@ -0,0 +1 @@ +{"arm":"pattern","run":6,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":3194,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":964,"rank":2,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":473,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"PatternMover","totalScore":447,"rank":4,"firstPlaces":0,"survivalCount":250}],"perRound":[{"round":1,"score":378,"rank":1,"survived":true},{"round":2,"score":878,"rank":1,"survived":true},{"round":3,"score":1347,"rank":1,"survived":true},{"round":4,"score":1886,"rank":1,"survived":true},{"round":5,"score":2279,"rank":1,"survived":true},{"round":6,"score":2716,"rank":1,"survived":true},{"round":7,"score":3194,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":9,"config_lines":79,"distinct_targets":3,"target_changes":67,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run7.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run7.json new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run7.json @@ -0,0 +1 @@ +{"arm":"pattern","run":7,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2728,"rank":1,"firstPlaces":6,"survivalCount":900,"found":true},"field":[{"name":"PatternMover","totalScore":1012,"rank":2,"firstPlaces":0,"survivalCount":600},{"name":"WaveSurfer","totalScore":854,"rank":3,"firstPlaces":0,"survivalCount":300},{"name":"RandomMover","totalScore":604,"rank":4,"firstPlaces":1,"survivalCount":300}],"perRound":[{"round":1,"score":396,"rank":1,"survived":true},{"round":2,"score":863,"rank":1,"survived":true},{"round":3,"score":1282,"rank":1,"survived":true},{"round":4,"score":1649,"rank":1,"survived":true},{"round":5,"score":2097,"rank":1,"survived":true},{"round":6,"score":2550,"rank":1,"survived":true},{"round":7,"score":2728,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":10,"config_lines":76,"distinct_targets":3,"target_changes":64,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":"7/7"}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run8.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run8.json new file mode 100644 index 0000000..3d12960 --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run8.json @@ -0,0 +1 @@ +{"arm":"pattern","run":8,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2869,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":736,"rank":2,"firstPlaces":0,"survivalCount":300},{"name":"PatternMover","totalScore":707,"rank":3,"firstPlaces":0,"survivalCount":450},{"name":"RandomMover","totalScore":547,"rank":4,"firstPlaces":0,"survivalCount":300}],"perRound":[{"round":1,"score":388,"rank":1,"survived":true},{"round":2,"score":886,"rank":1,"survived":true},{"round":3,"score":1262,"rank":1,"survived":true},{"round":4,"score":1665,"rank":1,"survived":true},{"round":5,"score":2074,"rank":1,"survived":true},{"round":6,"score":2461,"rank":1,"survived":true},{"round":7,"score":2869,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":12,"config_lines":94,"distinct_targets":3,"target_changes":81,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run9.json b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run9.json new file mode 100644 index 0000000..4ac9e8b --- /dev/null +++ b/common_libs/tests/fixtures/melee_bitbrain_ab/pattern/run9.json @@ -0,0 +1 @@ +{"arm":"pattern","run":9,"rounds":7,"commit":"0f5cfe37b24952ae07fee0a7db526317ae127e6c","binary_sha256":"11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca","ok":true,"modularbot":{"name":"ModularBot","totalScore":2931,"rank":1,"firstPlaces":7,"survivalCount":1050,"found":true},"field":[{"name":"WaveSurfer","totalScore":791,"rank":2,"firstPlaces":0,"survivalCount":250},{"name":"PatternMover","totalScore":711,"rank":3,"firstPlaces":0,"survivalCount":350},{"name":"RandomMover","totalScore":578,"rank":4,"firstPlaces":0,"survivalCount":450}],"perRound":[{"round":1,"score":465,"rank":1,"survived":true},{"round":2,"score":917,"rank":1,"survived":true},{"round":3,"score":1315,"rank":1,"survived":true},{"round":4,"score":1712,"rank":1,"survived":true},{"round":5,"score":2129,"rank":1,"survived":true},{"round":6,"score":2565,"rank":1,"survived":true},{"round":7,"score":2931,"rank":1,"survived":true}],"live":{"env_TR_RACK_PATTERN":"both","env_TR_RACK_BITBRAIN":"off","env_TR_BITBRAIN_MEM":"perRound","env_TR_BITBRAIN_GAINS":"0.0,0.25,0.5,0.75,1.0","env_TR_MOVEMENT":"tfil","rack_active_melee":"PATTERN","rack_active_1v1":"PATTERN","rack_melee_lines":11,"config_lines":84,"distinct_targets":3,"target_changes":75,"bb_reset_target_change":0,"bb_lines":0,"result_end_won":""}} \ No newline at end of file diff --git a/common_libs/tests/measure_melee_bitbrain_ab.nim b/common_libs/tests/measure_melee_bitbrain_ab.nim new file mode 100644 index 0000000..145a827 --- /dev/null +++ b/common_libs/tests/measure_melee_bitbrain_ab.nim @@ -0,0 +1,404 @@ +## MELEE A/B: is BitBrain actually better than Pattern in melee? +## +## The repo's FIRST melee measurement. Runs a 4-bot Free-For-All +## (ModularBot + WaveSurfer + PatternMover + RandomMover) for each arm, where +## the ONLY thing that differs between arms is ModularBot's gun-rack environment +## (`TR_RACK_*` / `TR_BITBRAIN_*`). Every other bot is held fixed. +## +## Why melee needs its own measurement: Pattern's advantage comes from +## accumulating history with ONE enemy. Melee rotates targets, fragmenting +## per-enemy history, so a gun that resets per target and re-adapts fast +## (BitBrain, `TR_BITBRAIN_RESET_ON_TARGET=on` by default) could gain exactly +## where Pattern loses. That is the hypothesis; this runner produces the number. +## +## Design (see docs/melee_bitbrain_ab.md): +## * arms differ ONLY in the ModularBot wrapper script's exported env; +## * each run gets its own ModularBot bot-dir + stdout/stderr log, so liveness +## (`[env] rack active melee = ...`) and target-switching evidence +## (`[config] ... target=#N`, `[bb-reset] reason=target_change`) are captured; +## * the runner is driven in one process per arm from a shell driver; each +## process gets its own Tank Royale server (ephemeral port). +## +## Usage: +## nim c -r --nimcache:/tmp/nc_j116 --path:common_libs \ +## common_libs/tests/measure_melee_bitbrain_ab.nim --list-arms +## +## MELEE_SERVER_JAR= \ +## common_libs/tests/measure_melee_bitbrain_ab.nim \ +## --outdir /tmp/melee_ab --build-only +## +## common_libs/tests/measure_melee_bitbrain_ab.nim \ +## --outdir /tmp/melee_ab --arm pattern --run-start 1 --run-count 16 +## +## Arm env (verbatim, from the arms table below) is written into the per-run +## wrapper script; the runner process' own environment is NOT mutated for the +## bot, so parallel arm processes cannot leak into each other. + +import std/[os, osproc, strutils, strformat, json, sequtils] + +import test_framework/server_manager +import test_framework/runner_process +import test_framework/battle_result + +# ── the field (fixed across arms) ──────────────────────────────────────────── +const + repoSuffix = "common_libs" / "test_framework" / "adversaries" + AdversaryNames = ["WaveSurfer", "PatternMover", "RandomMover"] + ## Mixed field: one strong reactive mover (WaveSurfer, linear gun), one + ## deterministic pattern mover (PatternMover), one erratic mover + ## (RandomMover). All three shoot. + +# ── the arms (ONLY ModularBot's gun rack differs) ──────────────────────────── +type + Arm = object + name*: string + env*: seq[string] ## "KEY=VALUE", exported in the per-run wrapper script + note*: string + +const Arms*: array[4, Arm] = [ + Arm(name: "pattern", env: @[], + note: "shipped default: Pattern-only rack, no env"), + Arm(name: "bb_round", + env: @["TR_RACK_PATTERN=off", "TR_RACK_BITBRAIN=melee", + "TR_BITBRAIN_MEM=perRound", "TR_BITBRAIN_LOG=1"], + note: "BitBrain-only melee rack, perRound memory"), + Arm(name: "bb_ret", + env: @["TR_RACK_PATTERN=off", "TR_RACK_BITBRAIN=melee", + "TR_BITBRAIN_MEM=retained", "TR_BITBRAIN_LOG=1"], + note: "BitBrain-only melee rack, retained memory"), + Arm(name: "bb_learn", + env: @["TR_RACK_PATTERN=off", "TR_RACK_BITBRAIN=melee", + "TR_BITBRAIN_MEM=decay", "TR_BITBRAIN_GAINS=1.0,1.25,1.5,2.0", + "TR_BITBRAIN_LOG=1"], + note: "BitBrain-only melee rack, decay memory + learned gains (user config)"), +] + +const + ModularBotJson = """{ + "name": "ModularBot", + "version": "0.1.0", + "authors": ["Davide Cappellini"], + "description": "frozen melee A/B build of ModularBot", + "homepage": "", + "countryCodes": ["IT"], + "gameTypes": ["classic", "1v1"], + "platform": "Nim", + "programmingLang": "Nim" +} +""" + +# ANSI SGR sequences (the bot's config line color-highlights changed fields). +const AnsiRe = "\x1b\\[[0-9;]*m" + +proc stripAnsi(s: string): string = + result = newStringOfCap(s.len) + var i = 0 + while i < s.len: + if s[i] == '\x1b' and i + 1 < s.len and s[i+1] == '[': + i += 2 + while i < s.len and s[i] notin {'m'}: inc i + if i < s.len: inc i # skip the terminating 'm' + else: + result.add s[i] + inc i + +proc repoRoot(): string = + currentSourcePath().parentDir.parentDir.parentDir + +proc quote(s: string): string = quoteShell(s) + +proc params(): seq[string] = + for i in 1 .. paramCount(): result.add paramStr(i) + +proc findParam(args: seq[string], name: string, default = ""): string = + for i in 0 ..< args.len: + if args[i] == name and i + 1 < args.len: return args[i+1] + default + +proc hasFlag(args: seq[string], name: string): bool = + for a in args: + if a == name: return true + false + +# ── frozen ModularBot build (from `git archive HEAD`, like tools/ab/ab_run.sh) ─ + +proc binarySha(bin: string): string = + let (outp, rc) = execCmdEx("sha256sum " & quote(bin)) + if rc == 0: outp.strip().split(' ')[0] else: "unknown" + +proc headCommit(repo: string): string = + let (outp, rc) = execCmdEx("git -C " & quote(repo) & " rev-parse HEAD") + if rc == 0: outp.strip() else: "unknown" + +proc buildFrozen(repo, outdir: string): string = + ## Compile ONE frozen ModularBot from the committed HEAD snapshot and return + ## its path. A dirty tree cannot leak into the measurement. + let bin = outdir / "frozen" / "ModularBot_bin" + if fileExists(bin): return bin + createDir(outdir / "frozen") + let snapshot = outdir / "frozen" / "head" + createDir(snapshot) + let (arcOut, arcRc) = execCmdEx( + "git -C " & quote(repo) & " archive HEAD | tar -x -C " & quote(snapshot)) + if arcRc != 0: + raise newException(IOError, "git archive HEAD failed:\n" & arcOut) + let garage = snapshot / "ModularBot_garage" + if not dirExists(garage): + raise newException(IOError, "no ModularBot_garage in HEAD snapshot") + let nimcache = outdir / "nimcache" + let cmd = "nim c -d:release --nimcache:" & quote(nimcache) & + " --out:" & quote(bin) & " src/ModularBot.nim" + let (outp, rc) = execCmdEx(cmd, workingDir = garage) + if rc != 0 or not fileExists(bin): + raise newException(OSError, "frozen ModularBot build failed:\n" & outp) + result = bin + +# ── per-run wrapper bot dir ────────────────────────────────────────────────── + +proc writeWrapper(botDir: string, env: seq[string], bin, stdoutLog, stderrLog: string) = + createDir(botDir) + writeFile(botDir / "ModularBot.json", ModularBotJson) + var sh = "#!/bin/sh\ncd \"$(dirname \"$0\")\"\n" + for kv in env: + let p = kv.split('=', 1) + sh.add("export " & p[0] & "=\"" & p[1] & "\"\n") + sh.add("exec ./ModularBot_bin > " & quote(stdoutLog) & + " 2> " & quote(stderrLog) & "\n") + writeFile(botDir / "ModularBot.sh", sh) + discard execCmdEx("chmod +x " & quote(botDir / "ModularBot.sh")) + if fileExists(botDir / "ModularBot_bin"): removeFile(botDir / "ModularBot_bin") + createSymlink(bin, botDir / "ModularBot_bin") + +# ── liveness / target-switching extraction from the bot's stdout ───────────── + +type Live = object + envRackPattern: string + envRackBitbrain: string + envBitbrainMem: string + envBitbrainGains: string + envMovement: string + rackActiveMelee: string + rackActive1v1: string + rackMeleeLines: int + configLines: int + distinctTargets: int + targetChanges: int + bbResetTargetChange: int + bbLines: int + resultEndWon: string + +proc envLine(text, key: string): string = + ## Value of an `[env] KEY = VALUE` (or `[env] KEY=VALUE`) boot-report line, + ## with the `(source: ...)` annotation stripped. Empty when absent. + let prefix = "[env] " & key + for line in text.splitLines(): + let s = line.strip() + if not s.startsWith(prefix): continue + var rest = s[prefix.len .. ^1].strip() + if rest.len == 0 or rest[0] != '=': continue + rest = rest[1 .. ^1].strip() + let si = rest.find("(source:") + if si >= 0: rest = rest[0 ..< si].strip() + return rest + +proc parseLive(text: string): Live = + var lastTarget = -1 + var seen: seq[int] + for raw in text.splitLines(): + let s = stripAnsi(raw).strip() + if s.startsWith("[config] "): + inc result.configLines + let i = s.find("target=#") + if i >= 0: + var j = i + "target=#".len + var neg = false + if j < s.len and s[j] == '-': neg = true; inc j + var num = 0 + var any = false + while j < s.len and s[j] in {'0'..'9'}: + num = num * 10 + (ord(s[j]) - ord('0')); inc j; any = true + if any and not neg: + if lastTarget >= 0 and num != lastTarget: inc result.targetChanges + lastTarget = num + if num notin seen: seen.add num + elif s.startsWith("[rack] "): + if " mode=melee " in s or s.endsWith(" mode=melee"): + inc result.rackMeleeLines + elif s.startsWith("[bb-reset] ") and "reason=target_change" in s: + inc result.bbResetTargetChange + elif s.startsWith("[bb] "): + inc result.bbLines + elif s.startsWith("[result] battle END:"): + let i = s.find("rounds won ") + if i >= 0: result.resultEndWon = s[i + "rounds won ".len .. ^1].strip() + result.distinctTargets = seen.len + result.envRackPattern = envLine(text, "TR_RACK_PATTERN") + result.envRackBitbrain = envLine(text, "TR_RACK_BITBRAIN") + result.envBitbrainMem = envLine(text, "TR_BITBRAIN_MEM") + result.envBitbrainGains = envLine(text, "TR_BITBRAIN_GAINS") + result.envMovement = envLine(text, "TR_MOVEMENT") + result.rackActiveMelee = envLine(text, "rack active melee") + result.rackActive1v1 = envLine(text, "rack active 1v1") + +# ── one run ────────────────────────────────────────────────────────────────── + +proc runOne(repo, outdir, bin, armName: string, env: seq[string], + run, rounds, timeout: int, commit, binsha: string): bool = + let armDir = outdir / armName + createDir(armDir) + let work = outdir / "work" / armName / ("run" & $run) + let botDir = work / "ModularBot" + let outLog = armDir / ("run" & $run & ".bot.stdout.log") + let errLog = armDir / ("run" & $run & ".bot.stderr.log") + let runLog = armDir / ("run" & $run & ".runner.log") + let jsonPath = armDir / ("run" & $run & ".json") + if fileExists(outLog): removeFile(outLog) + if fileExists(errLog): removeFile(errLog) + writeWrapper(botDir, env, bin, outLog, errLog) + + var advDirs: seq[string] + for a in AdversaryNames: advDirs.add repo / repoSuffix / a + + var ok = true + var raw = "" + try: + raw = runBattleRunner(getServerUrl(), @[botDir] & advDirs, rounds, timeout, true) + except CatchableError as e: + ok = false + raw = "EXCEPTION: " & e.msg + writeFile(runLog, raw) + + if not ok: + writeFile(jsonPath, $(%*{"arm": armName, "run": run, "rounds": rounds, + "commit": commit, "binary_sha256": binsha, + "ok": false, "error": raw})) + stderr.writeLine(fmt"[melee] {armName} run {run}: FAILED") + return false + + let r = parseServerOutput(raw) + var perRound: seq[tuple[round, score, rank: int, survived: bool]] + var botRd: seq[JsonNode] + for rr in r.rounds: + for br in rr.results: + if br.name == "ModularBot": + perRound.add (rr.round, br.score, br.rank, br.survived) + + var modJ = %*{"name": "ModularBot", "found": false} + for b in r.results: + if b.name == "ModularBot": + modJ = %*{"name": b.name, "totalScore": b.totalScore, "rank": b.rank, + "firstPlaces": b.firstPlaces, "survivalCount": b.survivalCount, + "found": true} + var field = newJArray() + for b in r.results: + if b.name == "ModularBot": continue + field.add %*{"name": b.name, "totalScore": b.totalScore, "rank": b.rank, + "firstPlaces": b.firstPlaces, "survivalCount": b.survivalCount} + + for pr in perRound: + botRd.add %*{"round": pr.round, "score": pr.score, "rank": pr.rank, + "survived": pr.survived} + + var live = Live() + if fileExists(outLog): + live = parseLive(readFile(outLog)) + + let row = %*{ + "arm": armName, "run": run, "rounds": rounds, + "commit": commit, "binary_sha256": binsha, + "ok": true, + "modularbot": modJ, + "field": field, + "perRound": botRd, + "live": %*{ + "env_TR_RACK_PATTERN": live.envRackPattern, + "env_TR_RACK_BITBRAIN": live.envRackBitbrain, + "env_TR_BITBRAIN_MEM": live.envBitbrainMem, + "env_TR_BITBRAIN_GAINS": live.envBitbrainGains, + "env_TR_MOVEMENT": live.envMovement, + "rack_active_melee": live.rackActiveMelee, + "rack_active_1v1": live.rackActive1v1, + "rack_melee_lines": live.rackMeleeLines, + "config_lines": live.configLines, + "distinct_targets": live.distinctTargets, + "target_changes": live.targetChanges, + "bb_reset_target_change": live.bbResetTargetChange, + "bb_lines": live.bbLines, + "result_end_won": live.resultEndWon + } + } + writeFile(jsonPath, $(row)) + let mb = r.results.filterIt(it.name == "ModularBot") + let wins = if mb.len > 0: mb[0].firstPlaces else: 0 + let rk = if mb.len > 0: mb[0].rank else: 0 + let sc = if mb.len > 0: mb[0].totalScore else: 0 + echo fmt"[melee] {armName} run {run}: wins={wins}/{rounds} rank={rk} score={sc} " & + fmt"targets={live.distinctTargets} changes={live.targetChanges} " & + fmt"rackMelee={live.rackActiveMelee} bbreset={live.bbResetTargetChange}" + result = true + +# ── main ───────────────────────────────────────────────────────────────────── + +proc main() = + let repo = repoRoot() + let args = params() + if hasFlag(args, "--list-arms") or hasFlag(args, "--help") or args.len == 0: + echo "arms:" + for a in Arms: + echo a.name & "\t" & a.env.join(" ") & "\t" & a.note + return + let outdir = findParam(args, "--outdir", "/tmp/melee_bitbrain_ab") + createDir(outdir) + let commit = headCommit(repo) + let bin = buildFrozen(repo, outdir) + let binsha = binarySha(bin) + echo "[melee] commit=", commit, " binary_sha256=", binsha + if hasFlag(args, "--build-only"): return + + let armName = findParam(args, "--arm") + if armName.len == 0: + stderr.writeLine("--arm is required (or --list-arms / --build-only)") + quit(1) + var arm: Arm + var found = false + for a in Arms: + if a.name == armName: arm = a; found = true + if not found: + stderr.writeLine("unknown arm: " & armName) + quit(1) + + let runStart = parseInt(findParam(args, "--run-start", "1")) + let runCount = parseInt(findParam(args, "--run-count", "15")) + let rounds = parseInt(findParam(args, "--rounds", "7")) + let timeout = parseInt(findParam(args, "--timeout", "900000")) + let retries = parseInt(findParam(args, "--retries", "2")) + + # `--runs 1,3,5` overrides the contiguous range (used to fill failed runs). + var runList: seq[int] + let runsSpec = findParam(args, "--runs", "") + if runsSpec.len > 0: + for t in runsSpec.split(','): + let s = t.strip() + if s.len > 0: runList.add parseInt(s) + else: + for run in runStart ..< runStart + runCount: runList.add run + + ensureServer() + echo "[melee] server=", getServerUrl(), " arm=", armName, + " runs=", runList.len, " rounds=", rounds, " retries=", retries + + var ok = 0 + for run in runList: + var done = false + for attempt in 1 .. retries + 1: + if runOne(repo, outdir, bin, armName, arm.env, run, rounds, timeout, commit, binsha): + done = true + break + if attempt <= retries: + stderr.writeLine(fmt"[melee] {armName} run {run}: retry {attempt}/{retries} in 8s") + sleep(8000) + if done: inc ok + echo fmt"[melee] {armName}: {ok}/{runList.len} runs ok" + +when isMainModule: + main() diff --git a/common_libs/tests/run_melee_bitbrain_ab.sh b/common_libs/tests/run_melee_bitbrain_ab.sh new file mode 100755 index 0000000..d208150 --- /dev/null +++ b/common_libs/tests/run_melee_bitbrain_ab.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# run_melee_bitbrain_ab.sh — drive the melee A/B (see measure_melee_bitbrain_ab.nim). +# +# Builds ONE frozen ModularBot (from `git archive HEAD`), then runs one process +# per arm in parallel; each process owns its own Tank Royale server on an +# ephemeral port. Output: //run.json (+ .bot.stdout.log). +# +# common_libs/tests/run_melee_bitbrain_ab.sh [outdir] +# +# Env: MELEE_RUNS (default 16), MELEE_ROUNDS (default 7), MELEE_ARMS (space list). +# Kills its own process groups on EXIT/INT/TERM (setsid per arm). +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO="$(cd "$HERE/../.." && pwd)" +OUTDIR="${1:-/tmp/melee_bitbrain_ab}" +RUNS="${MELEE_RUNS:-16}" +ROUNDS="${MELEE_ROUNDS:-7}" +ARMS_STR="${MELEE_ARMS:-pattern bb_round bb_ret bb_learn}" +BIN="$HERE/measure_melee_bitbrain_ab" + +[[ -x "$BIN" ]] || { echo "ERROR: build the runner first: nim c --path:common_libs $HERE/measure_melee_bitbrain_ab.nim" >&2; exit 1; } +mkdir -p "$OUTDIR" + +echo "[driver] building frozen ModularBot…" +"$BIN" --outdir "$OUTDIR" --build-only + +read -r -a ARMS <<< "$ARMS_STR" +PIDS=() +cleanup() { + local rc=$? + trap - EXIT INT TERM + for p in "${PIDS[@]:-}"; do + [[ -n "$p" ]] || continue + kill -TERM -- "-$p" 2>/dev/null || true + done + sleep 1 + for p in "${PIDS[@]:-}"; do + [[ -n "$p" ]] || continue + kill -KILL -- "-$p" 2>/dev/null || true + done + # backstop: anything from this run's process group that outlived the runner + pkill -f "[m]easure_melee_bitbrain_ab.*$OUTDIR" 2>/dev/null || true + exit "$rc" +} +trap cleanup EXIT INT TERM + +for arm in "${ARMS[@]}"; do + echo "[driver] launching arm $arm (runs=$RUNS rounds=$ROUNDS)" + setsid "$BIN" --outdir "$OUTDIR" --arm "$arm" \ + --run-start 1 --run-count "$RUNS" --rounds "$ROUNDS" \ + > "$OUTDIR/$arm.driver.log" 2>&1 & + PIDS+=("$!") + sleep 3 # stagger so concurrent servers do not race for the same free port +done + +echo "[driver] all arms launched; waiting…" +FAIL=0 +for p in "${PIDS[@]}"; do + wait "$p" || FAIL=$((FAIL + 1)) +done +PIDS=() +echo "[driver] done (failed arm processes: $FAIL)" +exit "$FAIL" diff --git a/docs/melee_bitbrain_ab.md b/docs/melee_bitbrain_ab.md new file mode 100644 index 0000000..3d21365 --- /dev/null +++ b/docs/melee_bitbrain_ab.md @@ -0,0 +1,262 @@ +# Is BitBrain actually better than Pattern in melee? + +**This is the repository's FIRST melee measurement.** Every A/B before this one +was 1v1 vs DrussGT. This doc answers one question with a real number: + +> *"btw bitbrain gun is crushing in melee, the fast adaptation is a killer +> feature there"* — the owner. + +## TL;DR (direct answer) + +**Not detectable at this sample size.** On the metric that matters most in a +melee (the server's round score = damage + survival bonus), the three BitBrain +arms land within ±62 points of the shipped Pattern rack, and every difference is +well inside the noise: permutation **p = 0.16 – 0.71**, all **< the MDE of ±151 +score points (~5.1 %)**. Placement is saturated: every arm finishes **rank 1** +(ModularBot's TFIL movement beats this field regardless of gun). Round wins +*hint* in BitBrain's favour — **112/112** (retained, learned) and **111/112** +(perRound) vs Pattern's **109/112** — but that +0.19 rounds/run is not +significant (**perm p = 0.225, Mann-Whitney p = 0.080**) and is half the +**MDE of 0.40 rounds/run**. So: + +| claim | verdict | +|---|---| +| BitBrain beats Pattern on **round wins** in melee | **hint only, not significant** (p=0.225; MDE=0.40 wins/run) | +| BitBrain beats Pattern on **survival** in melee | **not detectable** (p=0.23–1.00) | +| BitBrain beats Pattern on **placement** in melee | **no — every arm sweeps** (rank 1 everywhere) | +| BitBrain beats Pattern on **score/damage** in melee | **no — not detectable** (p=0.16–0.71; all diffs << MDE) | + +**MEASURED** (this doc): the numbers above. **INFERRED** (not measured): the +mechanism (Pattern loses history across a target switch; BitBrain resets and +re-adapts). The mechanism is real and was exercised — see the target-switching +liveness — but at this sample it buys no detectable score. + +--- + +## Why melee is a different question + +Pattern's strength comes from accumulating history with **one** enemy. Melee +rotates targets, so per-enemy histories fragment; a gun that **resets per target +and re-adapts fast** should gain exactly where Pattern loses. BitBrain is built +for that: `TR_BITBRAIN_RESET_ON_TARGET` defaults to **on**, and its memory modes +(`perRound` / `retained` / `decay`) exist for changing targets. That is a +plausible mechanism — but a plausible mechanism is not a measurement, and +**melee is higher-variance than 1v1** (where a 6-4 result already had P=0.353), +so an impression is worth even less here. This is the first real number. + +## Melee scoring caveat + +Melee is scored differently from 1v1 and the framework does **not** expose raw +damage. All numbers below come from the framework's own fields +(`BattleResult` / `BotResult` / `BotRoundResult`): + +* **`firstPlaces`** — rounds won (rank 1 in a round). The run's primary outcome. +* **`survivalCount`** — total ticks survived across the run's 7 rounds. +* **`rank` / round `rank`** — final placement and per-round placement (1 = best). +* **`totalScore`** — the **server's round score**, which is **damage dealt plus + the survival bonus**, *not raw damage*. It is the closest available proxy for + damage; treat it as "score", not "damage". `score share` = ModularBot's score + ÷ (all four bots' scores). + +## Method + +*Field (fixed across arms):* 4-bot Free-For-All — **ModularBot + WaveSurfer + +PatternMover + RandomMover**. Mixed by design: WaveSurfer is the strong reactive +mover (linear gun), PatternMover the deterministic pattern (Pattern's home turf), +RandomMover the erratic one. All three shoot. + +*Arms (only ModularBot's gun rack differs):* + +| arm | env | +|---|---| +| `pattern` | *(no env — shipped default: Pattern-only rack)* | +| `bb_round` | `TR_RACK_PATTERN=off TR_RACK_BITBRAIN=melee TR_BITBRAIN_MEM=perRound TR_BITBRAIN_LOG=1` | +| `bb_ret` | `TR_RACK_PATTERN=off TR_RACK_BITBRAIN=melee TR_BITBRAIN_MEM=retained TR_BITBRAIN_LOG=1` | +| `bb_learn` | `TR_RACK_PATTERN=off TR_RACK_BITBRAIN=melee TR_BITBRAIN_MEM=decay TR_BITBRAIN_GAINS=1.0,1.25,1.5,2.0 TR_BITBRAIN_LOG=1` | + +*Protocol:* **16 independent runs × 7 rounds per arm = 112 rounds/arm.** Each +run is its own battle with fresh random initial positions (server +`--enable-initial-position`); runs are not paired. A dirty tree cannot leak in: +the frozen ModularBot is built with `git archive HEAD`. + +``` +commit = 0f5cfe37b24952ae07fee0a7db526317ae127e6c +binary sha256 = 11bba2735413bc35ab3b61ead711c51d2223183ad9da510799bc7d76b99b22ca +movement = tfil (shipped default) in every run — the A/B isolates the gun rack +n = 16 runs/arm, 7 rounds/run +``` + +`TR_RACK_BITBRAIN=melee` was verified as *melee-rack-only* (not `both`): the +boot line reads `[env] rack active 1v1 = FULL` and +`[env] rack active melee = BITBRAIN`, i.e. BitBrain is admitted **only** in the +melee rack. The `pattern` arm reads `[env] rack active melee = PATTERN`. + +## Results + +### Arm summary + +``` +arm runs wins/rd score surv rank meanrank score share targets tchanges +bb_learn 16 112/112 2945 1050 1.00 1.000 60.2% 3.00 66.75 +bb_ret 16 112/112 2903 1047 1.00 1.000 59.4% 3.00 68.06 +bb_round 16 111/112 2998 1034 1.00 1.009 60.8% 3.00 68.75 +pattern 16 109/112 2965 1031 1.00 1.000 59.5% 3.00 66.44 +``` + +`score` / `surv` are per-run means; `wins/rd` is pooled round wins. + +### Per-run values (never just the mean) + +``` +bb_learn wins: r1=7 r10=7 r11=7 r12=7 r13=7 r14=7 r15=7 r16=7 r2=7 r3=7 r4=7 r5=7 r6=7 r7=7 r8=7 r9=7 + score: r1=2883 r10=2757 r11=2906 r12=3145 r13=2911 r14=3068 r15=2758 r16=2715 r2=3107 r3=2848 r4=3190 r5=2912 r6=2859 r7=3092 r8=2907 r9=3066 + surv: r1=1050 … (all 1050) + mrank: all 1.00 +bb_ret wins: r1=7 r10=7 r11=7 r12=7 r13=7 r14=7 r15=7 r16=7 r2=7 r3=7 r4=7 r5=7 r6=7 r7=7 r8=7 r9=7 + score: r1=2891 r10=2770 r11=2792 r12=2934 r13=2943 r14=2890 r15=2817 r16=2999 r2=2994 r3=2913 r4=2920 r5=2890 r6=3011 r7=2945 r8=2943 r9=2802 + surv: r5=1000, all others 1050 + mrank: all 1.00 +bb_round wins: r1=7 r10=6 r11=7 r12=7 r13=7 r14=7 r15=7 r16=7 r2=7 r3=7 r4=7 r5=7 r6=7 r7=7 r8=7 r9=7 + score: r1=3040 r10=2944 r11=3125 r12=3110 r13=3037 r14=2993 r15=2985 r16=2842 r2=2835 r3=3045 r4=3180 r5=2952 r6=3126 r7=2927 r8=3021 r9=2804 + surv: r10=900, r9=950, all others 1050 + mrank: r10=1.14, all others 1.00 +pattern wins: r1=7 r10=7 r11=7 r12=7 r13=7 r14=7 r15=7 r16=7 r2=7 r3=6 r4=7 r5=6 r6=7 r7=6 r8=7 r9=7 + score: r1=3082 r10=2795 r11=2897 r12=2915 r13=3176 r14=2922 r15=2860 r16=2878 r2=3261 r3=2957 r4=3106 r5=2869 r6=3194 r7=2728 r8=2869 r9=2931 + surv: r3=1000, r7=900, r14=950, all others 1050 + mrank: all 1.00 +``` + +The only structural difference is that Pattern lost three rounds (r3, r5, r7) and +`bb_round` one (r10); every other round is a ModularBot sweep. `surv` < 1050 +marks the runs where ModularBot died at least once. The raw per-run JSON for all +64 runs is committed at +`common_libs/tests/fixtures/melee_bitbrain_ab//run.json`. + +### Statistics (per-run, two-sided) + +Permutation test (Monte-Carlo, 1,000,000 draws, seed `0x5eed5eed`, `p=(cnt+1)/(B+1)`) +and Mann-Whitney U cross-check, reused verbatim from `tools/ab/ab_analyze.py`. +`diff(A-B)` is `pattern − bitbrain`. + +``` +metric A B diff(A-B) perm p MW p +score pattern bb_learn +19.75 0.7117 0.6109 +score pattern bb_ret +61.63 0.1594 0.5590 +score pattern bb_round -32.88 0.4900 0.3365 +survival pattern bb_learn -18.75 0.2254 0.0800 +survival pattern bb_ret -15.63 0.3507 0.2791 +survival pattern bb_round -3.13 1.0000 0.6982 +wins pattern bb_learn -0.188 0.2251 0.0795 +wins pattern bb_ret -0.188 0.2251 0.0795 +wins pattern bb_round -0.125 0.5984 0.3080 +mean_rank pattern bb_* ±0.000 1.0000 0.35–1.00 +rank pattern bb_* ±0.000 1.0000 1.0000 +score_share pattern bb_learn -0.007 0.5082 0.6109 +score_share pattern bb_ret +0.001 0.9046 0.8653 +score_share pattern bb_round -0.013 0.2908 0.2662 +``` + +### Minimum detectable effect (α=0.05 two-sided, 80 % power) + +`MDE = 2.8016 · sd(pattern) · sqrt(2/n)`, n=16/arm. + +``` +metric sd(ref) MDE ref mean MDE as % of mean +score 152.85 151.40 2965.0 5.1 % +survival 44.25 43.83 1031.3 4.3 % +wins 0.40 0.40 6.81 5.9 % +mean_rank 0.00 0.00 1.000 — +``` + +Every observed effect is **below its MDE**, so this is a *powered null*, not an +under-powered one — at least for effects ≥ ~5 % of the score. + +## Liveness — the melee premise WAS exercised + +Target switching is the whole mechanism, so it had to be proven, not assumed. + +* **Arm applied:** the per-run boot report shows the rack actually flipped — + `pattern`: `[env] rack active melee = PATTERN`; `bb_*`: + `[env] rack active melee = BITBRAIN` with `TR_RACK_PATTERN=off`, + `TR_RACK_BITBRAIN=melee`. All 64 runs passed the liveness check (16/16 per arm). +* **Movement held fixed:** `[env] TR_MOVEMENT = tfil (source: default)` in every + run, so the difference is the gun rack alone. +* **Every run faced all three enemies and switched targets repeatedly.** From + the bot's own `[config] … target=#N` lines: **3.00 distinct targets/run** and + **66–69 target changes/run** (about 10 per round). Example transitions from one + run: `#1 → #4 → #2 → #4 → #1 → #2 → …`. +* **BitBrain really reset on every switch.** `[bb-reset] reason=target_change` + fires once per target change: **66.75** (perRound), **68.19** (retained), + **66.75** (decay) per run — equal, within rounding, to the target-change count. + Example `[bb]` line from a live run: + `[bb] t=440 band=450.+ gain=0.25 shift=-3.39deg rate=0.818 n=11. ncand=5 trained=11 pend=29 dropped=95 mode=perRound`. + The `pattern` arm logs **zero** `[bb]`/`[bb-reset]` lines (BitBrain never + spawned), confirming the arms are cleanly separated. + +**So the premise held** (targets rotated, the gun reset), but the fast adaptation +bought no measurable edge over Pattern's per-round wipe in this field. + +## Direct answer + +At **16 runs/arm (112 rounds/arm)**, in a 4-bot melee against +WaveSurfer + PatternMover + RandomMover: + +* **Round wins:** BitBrain is *slightly* ahead (112/112 and 111/112 vs 109/112), + but the difference is **not significant** (perm p=0.225; MW p=0.080) and is + below the 0.40-wins/run MDE. Do **not** claim a win-rate gain from this. +* **Survival:** **not detectable** (p=0.23–1.00). +* **Placement:** **no difference** — ModularBot is rank 1 in every arm. +* **Score/damage:** **not detectable** — differences of −63 to +33 points + (p=0.16–0.71) against an MDE of ±151 (≈5 %). + +The mechanism is plausible and was demonstrably exercised, but the owner's claim +that BitBrain is "crushing in melee" is **not supported by this measurement**. +The honest reading is the opposite of spin in either direction: **the first +melee number is a null.** + +### Why the null is weak evidence in one direction + +The field is not discriminating enough to separate the guns on *outcome*: +ModularBot's TFIL movement wins 97–100 % of rounds no matter which gun is in the +rack, so wins/rank hit a ceiling. Only the score margin can move, and its MDE is +~5 %. A smaller true gun effect (<5 % score) would be invisible here; a larger +one would not. + +## Reproduce + +```sh +# build the runner (once) +nim c --nimcache:/tmp/nc_j116 --path:common_libs \ + common_libs/tests/measure_melee_bitbrain_ab.nim + +# run the session (needs TR_SERVER_JAR + the TR runner jar; ~15–25 min under load) +MELEE_RUNS=16 MELEE_ROUNDS=7 \ + common_libs/tests/run_melee_bitbrain_ab.sh /tmp/melee_bitbrain_ab + +# analyze the committed fixtures (no Java needed) +python3 common_libs/tests/analyze_melee_ab.py \ + common_libs/tests/fixtures/melee_bitbrain_ab +``` + +## Files + +* `common_libs/tests/measure_melee_bitbrain_ab.nim` — the runner (4-bot melee, + per-arm env, per-run liveness/JSON, binary built from `git archive HEAD`). +* `common_libs/tests/run_melee_bitbrain_ab.sh` — parallel arm driver. +* `common_libs/tests/analyze_melee_ab.py` — per-run table + permutation + MW + + MDE (reuses `tools/ab/ab_analyze.py`'s stats functions). +* `common_libs/tests/fixtures/melee_bitbrain_ab/` — the 64 committed per-run + JSONs + `analysis.json` + `analysis_report.txt`. + +## MEASURED vs INFERRED + +**MEASURED:** commit `0f5cfe3`, binary `11bba27`; 4-bot melee, 4 arms × 16 runs +× 7 rounds; the wins/survival/rank/score means and per-run values; the +permutation p-values, Mann-Whitney p-values and MDEs; the rack boot lines, the +3 distinct targets/run, 66–69 target changes/run and the per-switch `[bb-reset]`. +All of the above are reproducible from the committed per-run JSON. + +**INFERRED:** that Pattern's history fragmentation is *the* reason to expect a +melee gain; that `perRound`/`retained`/`decay` differ in adaptation speed in a +way this test could resolve; that a stronger field (or a >5 % effect) is where a +difference would show. None of these are claimed as measured.