feat(hpc): rename config_path to env_config_path and support YAML configs
This commit is contained in:
parent
457a23e5cb
commit
ed20325fef
5 changed files with 20 additions and 14 deletions
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Reference in a new issue