atrium-sim-webviz / baselines /random_agent.py
chicelli's picture
bootstrap: atrium-sim webviz API (Gradio SDK, ZeroGPU)
a7d3d15 verified
Raw History Blame Contribute Delete
1.94 kB
"""Watch a random agent drop bricks - the M1 demo.
uv run python -m baselines.random_agent --render human --episodes 3
Headless? Use --gif out.gif instead (or SDL_VIDEODRIVER=dummy).
"""
from __future__ import annotations
import argparse
import gymnasium as gym
import atrium_sim # noqa: F401 (registers the env)
from baselines.policy import RandomPolicy
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--render", choices=["human", "rgb_array", "none"], default="human")
parser.add_argument("--episodes", type=int, default=3)
parser.add_argument("--seed", type=int, default=1)
parser.add_argument("--suite", default="train")
parser.add_argument("--gif", default=None, help="record the first episode to this GIF path")
args = parser.parse_args()
render_mode = None if args.render == "none" else args.render
env = gym.make("atrium_sim/BrickLayer-v0", render_mode=render_mode)
env.unwrapped.env_cfg = type(env.unwrapped.env_cfg)(suite=args.suite)
policy = RandomPolicy(env.action_space, args.seed)
for ep in range(args.episodes):
if args.gif and ep == 0:
from atrium_sim.render.recorder import record_episode
metrics = record_episode(env, policy, args.gif, seed=args.seed)
else:
obs, info = env.reset(seed=args.seed + ep)
done = False
while not done:
obs, reward, terminated, truncated, info = env.step(policy.act(obs))
done = terminated or truncated
metrics = info["metrics"]
print(
f"episode {ep}: return={metrics['episode_return']:+.2f} "
f"in-tol={metrics['frac_in_tol']:.0%} filled={metrics['frac_filled']:.0%} "
f"waste={metrics['waste_count']:.0f} placements={metrics['placements']:.0f}"
)
env.close()
if __name__ == "__main__":
main()