Source code for shimmy.utils.dm_control_multiagent

"""Utility functions for DM Control Multi-Agent."""
from __future__ import annotations

from typing import TYPE_CHECKING

from dm_control.locomotion import soccer as dm_soccer

if TYPE_CHECKING:
    import dm_control.composer


[docs] def load_dm_control_soccer( team_size: int | None = 2, time_limit: float | None = 10.0, disable_walker_contacts: bool | None = False, enable_field_box: bool | None = True, terminate_on_goal: bool | None = False, walker_type: dm_soccer.WalkerType | None = dm_soccer.WalkerType.BOXHEAD, ) -> dm_control.composer.Environment: """Helper function to load a DM Control Soccer environment. Handles arguments which are None or unspecified (which will throw errors otherwise). Args: team_size (Optional[int]): number of players for each team time_limit (Optional[float]): time limit for the game disable_walker_contacts (Optional[bool]): flag to disable walker contacts enable_field_box (Optional[bool]): flag to enable field box terminate_on_goal (Optional[bool]): flag to terminate the environment on goal walker_type (Optional[dm_soccer.WalkerType]): specify walker type (BOXHEAD, ANT, or HUMANOID) Returns: env (dm_control.composer.Environment): dm control soccer environment """ env = dm_soccer.load( team_size=team_size if team_size is not None else 2, time_limit=time_limit if time_limit is not None else 10.0, disable_walker_contacts=disable_walker_contacts if disable_walker_contacts is not None else False, enable_field_box=enable_field_box if enable_field_box is not None else True, terminate_on_goal=terminate_on_goal if terminate_on_goal is not None else False, walker_type=walker_type if walker_type is not None else dm_soccer.WalkerType.BOXHEAD, ) return env