1
Fork 0

feat(hpc): rename config_path to env_config_path and support YAML configs

This commit is contained in:
Tibo De Peuter 2026-04-04 19:07:01 +02:00
parent 457a23e5cb
commit ed20325fef
5 changed files with 20 additions and 14 deletions

View file

@ -8,7 +8,7 @@ class PPOArgs:
""" """
# path to environment config file, if None, use default config # path to environment config file, if None, use default config
config_path: str | None = None env_config_path: str | None = None
# the name of this experiment # the name of this experiment
exp_name: str = "brittle_star_ppo" exp_name: str = "brittle_star_ppo"

View file

@ -8,7 +8,7 @@ from brittle_star_project import (
ArenaConfig, ArenaConfig,
Backend, Backend,
) )
from brittle_star_project.environment import from_json from brittle_star_project.environment import from_file
class BrittleStarJaxEnvWrapper: class BrittleStarJaxEnvWrapper:
@ -82,7 +82,7 @@ class BrittleStarJaxEnvWrapper:
def from_config( def from_config(
config_path: str, num_envs: int, backend: Backend = Backend.MJX config_path: str, num_envs: int, backend: Backend = Backend.MJX
) -> "BrittleStarJaxEnvWrapper": ) -> "BrittleStarJaxEnvWrapper":
morphology_cfg, arena_cfg, env_cfg = from_json(config_path) morphology_cfg, arena_cfg, env_cfg = from_file(config_path)
return BrittleStarJaxEnvWrapper( return BrittleStarJaxEnvWrapper(
morphology_cfg, arena_cfg, env_cfg, num_envs=num_envs, backend=backend morphology_cfg, arena_cfg, env_cfg, num_envs=num_envs, backend=backend
) )

View file

@ -1,4 +1,4 @@
from .env_config import ArenaConfig, EnvConfig, MorphologyConfig, from_json from .env_config import ArenaConfig, EnvConfig, MorphologyConfig, from_file
from .env_types import Backend, Task from .env_types import Backend, Task
from .env_wrapper import BrittleStarEnv, StepResult from .env_wrapper import BrittleStarEnv, StepResult
from .factory import BrittleStarEnvFactory from .factory import BrittleStarEnvFactory
@ -12,5 +12,5 @@ __all__ = [
"BrittleStarEnv", "BrittleStarEnv",
"StepResult", "StepResult",
"BrittleStarEnvFactory", "BrittleStarEnvFactory",
"from_json", "from_file",
] ]

View file

@ -50,10 +50,16 @@ class EnvConfig:
light_perlin_noise_scale: int = 0 light_perlin_noise_scale: int = 0
def from_json(path: str) -> tuple[MorphologyConfig, ArenaConfig, EnvConfig]: def from_file(path: str) -> tuple[MorphologyConfig, ArenaConfig, EnvConfig]:
"""Load configurations from a JSON or YAML file."""
with open(path, "r") as f: with open(path, "r") as f:
config_json = json.load(f) if path.endswith(".yaml") or path.endswith(".yml"):
morphology = MorphologyConfig(**config_json.get("morphology", {})) import yaml
arena = ArenaConfig(**config_json.get("arena", {})) config_dict = yaml.safe_load(f)
env = EnvConfig(**config_json.get("env", {})) else:
config_dict = json.load(f)
morphology = MorphologyConfig(**config_dict.get("morphology", {}))
arena = ArenaConfig(**config_dict.get("arena", {}))
env = EnvConfig(**config_dict.get("env", {}))
return morphology, arena, env return morphology, arena, env

View file

@ -31,11 +31,11 @@ def convert_obs_dict_to_array(obs_dict: dict) -> jnp.ndarray:
) )
def make_env(config_path: str | None, num_envs: int) -> Callable: def make_env(env_config_path: str | None, num_envs: int) -> Callable:
def thunk(): def thunk():
if config_path is None: if env_config_path is None:
return BrittleStarJaxEnvWrapper.default(num_envs=num_envs) return BrittleStarJaxEnvWrapper.default(num_envs=num_envs)
return BrittleStarJaxEnvWrapper.from_config(config_path, num_envs=num_envs) return BrittleStarJaxEnvWrapper.from_config(env_config_path, num_envs=num_envs)
return thunk return thunk
@ -88,7 +88,7 @@ def train(args: PPOArgs):
print(f"Running on device: {device}") print(f"Running on device: {device}")
print("Creating the environment...") print("Creating the environment...")
env = make_env(config_path=args.config_path, num_envs=args.num_envs)() env = make_env(env_config_path=args.env_config_path, num_envs=args.num_envs)()
print(f"Environment: {env}") print(f"Environment: {env}")
episode_stats = EpisodeStatistics( episode_stats = EpisodeStatistics(