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 ''}")