MiniCraft - MultiRoom
Reproduces the minigrid MultiRoom gridworld environment as a HierarchyCraft environment.
Minigrid representation:
HierarchyCraft requirements graph:
1from typing import List 2 3from hcraft.elements import Item, Zone 4from hcraft.task import GetItemTask 5from hcraft.transformation import Transformation, Use, Yield, PLAYER, CURRENT_ZONE 6 7from hcraft.examples.minicraft.minicraft import MiniCraftEnv 8 9MINICRAFT_NAME = "MultiRoom" 10__doc__ = MiniCraftEnv.description(MINICRAFT_NAME, for_module_header=True) 11 12 13class MiniHCraftMultiRoom(MiniCraftEnv): 14 MINICRAFT_NAME = MINICRAFT_NAME 15 __doc__ = MiniCraftEnv.description(MINICRAFT_NAME) 16 17 GOAL = Item("goal") 18 """Goal to reach.""" 19 20 def __init__(self, n_rooms: int = 6, **kwargs) -> None: 21 self.rooms = [Zone(f"Room {i + 1}") for i in range(n_rooms)] 22 self.task = GetItemTask(self.GOAL) 23 super().__init__( 24 self.MINICRAFT_NAME, 25 purpose=self.task, 26 start_zone=self.rooms[0], 27 **kwargs, 28 ) 29 30 def build_transformations(self) -> List[Transformation]: 31 transformations = [] 32 find_goal = Transformation( 33 "Find goal", 34 inventory_changes=[Yield(CURRENT_ZONE, self.GOAL, max=0)], 35 zone=self.rooms[-1], 36 ) 37 transformations.append(find_goal) 38 39 reach_goal = Transformation( 40 "Reach goal", 41 inventory_changes=[ 42 Use(CURRENT_ZONE, self.GOAL, consume=1), 43 Yield(PLAYER, self.GOAL), 44 ], 45 ) 46 transformations.append(reach_goal) 47 48 for i, room in enumerate(self.rooms): 49 connected_rooms: List[Zone] = [] 50 if i > 0: 51 connected_rooms.append(self.rooms[i - 1]) 52 if i < len(self.rooms) - 1: 53 connected_rooms.append(self.rooms[i + 1]) 54 for connected_room in connected_rooms: 55 transformations.append( 56 Transformation( 57 f"Go to {room.name} from {connected_room.name}", 58 destination=room, 59 zone=connected_room, 60 ) 61 ) 62 63 return transformations
API Documentation
MINICRAFT_NAME =
'MultiRoom'
class
MiniHCraftMultiRoom(typing.Generic[~ObsType, ~ActType]):
14class MiniHCraftMultiRoom(MiniCraftEnv): 15 MINICRAFT_NAME = MINICRAFT_NAME 16 __doc__ = MiniCraftEnv.description(MINICRAFT_NAME) 17 18 GOAL = Item("goal") 19 """Goal to reach.""" 20 21 def __init__(self, n_rooms: int = 6, **kwargs) -> None: 22 self.rooms = [Zone(f"Room {i + 1}") for i in range(n_rooms)] 23 self.task = GetItemTask(self.GOAL) 24 super().__init__( 25 self.MINICRAFT_NAME, 26 purpose=self.task, 27 start_zone=self.rooms[0], 28 **kwargs, 29 ) 30 31 def build_transformations(self) -> List[Transformation]: 32 transformations = [] 33 find_goal = Transformation( 34 "Find goal", 35 inventory_changes=[Yield(CURRENT_ZONE, self.GOAL, max=0)], 36 zone=self.rooms[-1], 37 ) 38 transformations.append(find_goal) 39 40 reach_goal = Transformation( 41 "Reach goal", 42 inventory_changes=[ 43 Use(CURRENT_ZONE, self.GOAL, consume=1), 44 Yield(PLAYER, self.GOAL), 45 ], 46 ) 47 transformations.append(reach_goal) 48 49 for i, room in enumerate(self.rooms): 50 connected_rooms: List[Zone] = [] 51 if i > 0: 52 connected_rooms.append(self.rooms[i - 1]) 53 if i < len(self.rooms) - 1: 54 connected_rooms.append(self.rooms[i + 1]) 55 for connected_room in connected_rooms: 56 transformations.append( 57 Transformation( 58 f"Go to {room.name} from {connected_room.name}", 59 destination=room, 60 zone=connected_room, 61 ) 62 ) 63 64 return transformations
Reproduces the minigrid MultiRoom gridworld environment as a HierarchyCraft environment.
MiniHCraftMultiRoom(n_rooms: int = 6, **kwargs)
21 def __init__(self, n_rooms: int = 6, **kwargs) -> None: 22 self.rooms = [Zone(f"Room {i + 1}") for i in range(n_rooms)] 23 self.task = GetItemTask(self.GOAL) 24 super().__init__( 25 self.MINICRAFT_NAME, 26 purpose=self.task, 27 start_zone=self.rooms[0], 28 **kwargs, 29 )
Arguments:
- invalid_reward: Reward given to the agent for invalid actions. Defaults to -1.0.
- max_step: Maximum number of steps before episode truncation. If None, never truncates the episode. Defaults to None.
- render_window: Window using to render the environment with pygame.
31 def build_transformations(self) -> List[Transformation]: 32 transformations = [] 33 find_goal = Transformation( 34 "Find goal", 35 inventory_changes=[Yield(CURRENT_ZONE, self.GOAL, max=0)], 36 zone=self.rooms[-1], 37 ) 38 transformations.append(find_goal) 39 40 reach_goal = Transformation( 41 "Reach goal", 42 inventory_changes=[ 43 Use(CURRENT_ZONE, self.GOAL, consume=1), 44 Yield(PLAYER, self.GOAL), 45 ], 46 ) 47 transformations.append(reach_goal) 48 49 for i, room in enumerate(self.rooms): 50 connected_rooms: List[Zone] = [] 51 if i > 0: 52 connected_rooms.append(self.rooms[i - 1]) 53 if i < len(self.rooms) - 1: 54 connected_rooms.append(self.rooms[i + 1]) 55 for connected_room in connected_rooms: 56 transformations.append( 57 Transformation( 58 f"Go to {room.name} from {connected_room.name}", 59 destination=room, 60 zone=connected_room, 61 ) 62 ) 63 64 return transformations
Build transformations for this MiniCraft environment
Inherited Members
- hcraft.examples.minicraft.minicraft.MiniCraftEnv
- description
- hcraft.env.HcraftEnv
- world
- invalid_reward
- max_step
- name
- render_window
- render_mode
- state
- current_step
- current_score
- cumulated_score
- episodes
- task_successes
- terminal_successes
- purpose
- metadata
- truncated
- observation_space
- action_space
- action_masks
- step
- render
- reset
- close
- all_behaviors
- solving_behavior
- planning_problem
- infos
- gymnasium.core.Env
- spec
- unwrapped
- np_random_seed
- np_random
- has_wrapper_attr
- get_wrapper_attr
- set_wrapper_attr