47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""Tiny parameter sweep for PolyCode Simulator v0.1."""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import json
|
||
|
|
from copy import deepcopy
|
||
|
|
from datetime import UTC, datetime
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
from simulator import load_params, run_simulation
|
||
|
|
|
||
|
|
|
||
|
|
def sweep(thresholds: list[float] | None = None) -> list[dict]:
|
||
|
|
thresholds = thresholds or [300.0, 400.0, 500.0]
|
||
|
|
rows: list[dict] = []
|
||
|
|
base = load_params()
|
||
|
|
for threshold in thresholds:
|
||
|
|
params = deepcopy(base)
|
||
|
|
params["funding_threshold"] = threshold
|
||
|
|
summary = run_simulation(params)
|
||
|
|
rows.append(
|
||
|
|
{
|
||
|
|
"funding_threshold": threshold,
|
||
|
|
"acceptance_rate": summary.acceptance_rate,
|
||
|
|
"accepted": summary.accepted,
|
||
|
|
"rejected": summary.rejected,
|
||
|
|
"total_funded": summary.total_funded,
|
||
|
|
}
|
||
|
|
)
|
||
|
|
return rows
|
||
|
|
|
||
|
|
|
||
|
|
def main() -> None:
|
||
|
|
rows = sweep()
|
||
|
|
out_dir = Path("runs")
|
||
|
|
out_dir.mkdir(exist_ok=True)
|
||
|
|
stamp = datetime.now(UTC).strftime("%Y%m%dT%H%M%SZ")
|
||
|
|
path = out_dir / f"sweep-{stamp}.json"
|
||
|
|
path.write_text(json.dumps({"sweep": rows}, indent=2), encoding="utf-8")
|
||
|
|
print("Sweep results:")
|
||
|
|
for row in rows:
|
||
|
|
print(row)
|
||
|
|
print(f"output: {path}")
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
main()
|