MELEE A/B: BitBrain vs shipped Pattern rack — repo's first melee measurement (null)
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.
This commit is contained in:
@@ -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 <outdir> [--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())
|
||||
@@ -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
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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"}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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"}}
|
||||
@@ -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"}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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"}}
|
||||
@@ -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"}}
|
||||
@@ -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":""}}
|
||||
@@ -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":""}}
|
||||
@@ -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=<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()
|
||||
Executable
+64
@@ -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: <outdir>/<arm>/run<N>.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"
|
||||
Reference in New Issue
Block a user