File size: 1,886 Bytes
4a61963 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | """4-way per-episode comparison across stop_thr sweep."""
import re
def parse(p):
s = open(p).read()
pat = re.compile(
r'"NE":\s*([\d.]+).*?"success":\s*([\d.]+).*?"TL":\s*([\d.]+).*?"trajectory_id":\s*"([^"]+)"',
re.S,
)
return {m.group(4): (float(m.group(1)), float(m.group(2)), float(m.group(3))) for m in pat.finditer(s)}
import glob
runs = {}
for tag, glob_pat in [
("v5_088", "/tmp/*v5_stopdebug.log"),
("v7_092", "/tmp/*thr092_v7.log"),
("v6_095", "/tmp/*v6_stopdebug.log"),
("v8_097", "/tmp/*thr097_v8.log"),
]:
files = glob.glob(glob_pat)
if not files:
print(f"MISSING {tag}: {glob_pat}")
continue
runs[tag] = parse(files[0])
# Use v6 tids as canonical (all runs have same 30 episodes)
keys = list(next(iter(runs.values())).keys())
print(f"{'tid':<20} | {'v5_088':>10} | {'v7_092':>10} | {'v6_095':>10} | {'v8_097':>10} | sweep pattern")
print("-" * 110)
patterns = {}
for k in keys:
cells = []
succ_str = ""
for tag in ["v5_088", "v7_092", "v6_095", "v8_097"]:
if k in runs[tag]:
ne, s, tl = runs[tag][k]
cells.append(f"NE{ne:>4.1f}{'✓' if s==1 else 'x'}")
succ_str += "1" if s == 1 else "0"
else:
cells.append(" "*10)
succ_str += "?"
patterns.setdefault(succ_str, []).append(k)
print(f"{k[:20]:<20} | {cells[0]:>10} | {cells[1]:>10} | {cells[2]:>10} | {cells[3]:>10} | {succ_str}")
print()
print("===pattern frequency (v5_v7_v6_v8 success bits)===")
labels = {"1111":"always succ","0000":"always fail","0010":"only v6","0011":"v6+v8",
"0110":"v7+v6","0100":"only v7","0111":"v7+v6+v8","1110":"v5+v7+v6","1111":"all"}
for pat, eps in sorted(patterns.items(), key=lambda x: -len(x[1])):
print(f" {pat}: {len(eps)} ep ({labels.get(pat,'')}) {eps[:5]}{'...' if len(eps)>5 else ''}")
|