membrane-temp / train /render_png_matplotlib.py
luffy-orf
Refresh plots, showcase upload script, and docs for Hub results
dbd3aaf
Raw
History Blame Contribute Delete
1.94 kB
#!/usr/bin/env python3
"""Optional: write baseline_vs_heuristic.png using matplotlib (pip install matplotlib)."""
from __future__ import annotations
import csv
from pathlib import Path
import sys
_ROOT = Path(__file__).resolve().parent.parent
if str(_ROOT) not in sys.path:
sys.path.insert(0, str(_ROOT))
def main() -> None:
try:
import matplotlib.pyplot as plt
except ImportError as e:
raise SystemExit("Install matplotlib: pip install matplotlib") from e
csv_path = _ROOT / "docs" / "plots" / "episode_returns.csv"
by_pol: dict[str, list[float]] = {"baseline": [], "heuristic": []}
with csv_path.open(encoding="utf-8") as f:
for row in csv.DictReader(f):
by_pol[row["policy"]].append(float(row["return"]))
plt.figure(figsize=(8, 4.5))
labels = {
"baseline": "Weak scripted baseline (5-ep mean)",
"heuristic": "Hand-tuned scripted policy (5-ep mean)",
}
for label, color in (("baseline", "#c0392b"), ("heuristic", "#27ae60")):
vals = by_pol[label]
xs = list(range(len(vals)))
plt.plot(xs, vals, alpha=0.35, color=color, linewidth=1)
window = min(5, len(vals))
smooth = [
sum(vals[max(0, i - window + 1) : i + 1]) / (i - max(0, i - window + 1) + 1)
for i in range(len(vals))
]
plt.plot(xs, smooth, color=color, label=labels[label])
plt.xlabel("Episode index")
plt.ylabel("Membrane episode score (0–1)")
plt.title("Scripted policies on the refuse-leak scenario (not the neural model)")
plt.legend(loc="lower right")
plt.grid(True, alpha=0.25)
out = _ROOT / "docs" / "plots" / "baseline_vs_heuristic.png"
out_svg = out.with_suffix(".svg")
plt.tight_layout()
plt.savefig(out, dpi=120)
plt.savefig(out_svg, format="svg")
plt.close()
print(f"Wrote {out} and {out_svg}")
if __name__ == "__main__":
main()