poolcoach / examples /random_agent.py
masterdanh's picture
deploy: snapshot for HF Space
78738de
Raw
History Blame Contribute Delete
1.51 kB
#!/usr/bin/env python3
"""Smoke test SinkOneBallEnv: agent random đánh N cú, in thống kê.
Chạy từ gốc repo:
python examples/random_agent.py
Mong đợi: env chạy không lỗi; pot-rate của random thấp (vài %),
reward shaping có phân bố quanh 0. Đây là baseline để so với PPO/SAC.
"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
import numpy as np
from poolcoach_rl.envs import SinkOneBallEnv
def main(n_episodes: int = 50):
env = SinkOneBallEnv(seed=42)
rewards, potted, scratched, contacted = [], 0, 0, 0
for _ in range(n_episodes):
env.reset()
action = env.action_space.sample()
_, reward, terminated, truncated, info = env.step(action)
assert terminated and not truncated
rewards.append(reward)
potted += info.get("potted", False)
scratched += info.get("scratch", False)
contacted += info.get("contact", False)
print(f"Episodes : {n_episodes}")
print(f"Pot rate : {potted / n_episodes:.1%}")
print(f"Contact rate : {contacted / n_episodes:.1%}")
print(f"Scratch rate : {scratched / n_episodes:.1%}")
print(f"Reward mean : {np.mean(rewards):+.4f}")
print(f"Reward min/max: {np.min(rewards):+.4f} / {np.max(rewards):+.4f}")
if __name__ == "__main__":
# Tuy chon: python examples/random_agent.py [so_van] (mac dinh 50)
n = int(sys.argv[1]) if len(sys.argv) > 1 else 50
main(n)