Stable-Baselines3

Here is a simple example from examples/interfaces/sb3_marl_env.py:

import numpy as np

import fluidgym
from fluidgym.envs.multi_agent_fluid_env import MultiAgentFluidEnv
from fluidgym.integration.sb3 import MultiAgentVecEnv

fluid_env = fluidgym.make(
    "CylinderJet3D-easy-v0",
)
assert isinstance(fluid_env, MultiAgentFluidEnv)
env = MultiAgentVecEnv(fluid_env)

obs, info = env.reset(seed=42)

for i in range(50):
    actions = np.array([env.action_space.sample() for _ in range(env.num_envs)])
    obs, reward, done, info = env.step(actions)
    print(f"Step {i}: Reward = {reward:.4f}")

    env.render()

    if np.any(done):
        break

env.save_gif("cylinder.gif")