MiniCraft - Crossing
Reproduces the minigrid Crossing gridworld environment as a HierarchyCraft environment.
Minigrid representation:
HierarchyCraft requirements graph:
1from typing import List 2 3from hcraft.elements import Item, Zone 4from hcraft.purpose import Purpose, GetItemTask 5from hcraft.transformation import Transformation, Use, Yield, PLAYER, CURRENT_ZONE 6 7from hcraft.examples.minicraft.minicraft import MiniCraftEnv 8 9MINICRAFT_NAME = "Crossing" 10__doc__ = MiniCraftEnv.description(MINICRAFT_NAME, for_module_header=True) 11 12 13class MiniHCraftCrossing(MiniCraftEnv): 14 MINICRAFT_NAME = MINICRAFT_NAME 15 __doc__ = MiniCraftEnv.description(MINICRAFT_NAME) 16 17 ROOM = Zone("room") 18 """The one and only room.""" 19 20 GOAL = Item("goal") 21 """Goal to reach.""" 22 23 LAVA = Item("lava") 24 """Lava, it burns.""" 25 26 def __init__(self, **kwargs) -> None: 27 purpose = Purpose() 28 self.task = GetItemTask(self.GOAL) 29 purpose.add_task(self.task, terminal_groups="goal") 30 die_in_lava = GetItemTask(self.LAVA, reward=-1) 31 purpose.add_task(die_in_lava, terminal_groups="die") 32 super().__init__( 33 self.MINICRAFT_NAME, 34 start_zone=self.ROOM, 35 purpose=purpose, 36 **kwargs, 37 ) 38 39 def build_transformations(self) -> List[Transformation]: 40 find_goal = Transformation( 41 "find_goal", 42 inventory_changes=[Yield(CURRENT_ZONE, self.GOAL, max=0)], 43 zone=self.ROOM, 44 ) 45 46 reach_goal = Transformation( 47 "reach_goal", 48 inventory_changes=[ 49 Use(CURRENT_ZONE, self.GOAL), 50 Yield(PLAYER, self.GOAL), 51 ], 52 ) 53 54 find_lava = Transformation( 55 "find_lava", 56 inventory_changes=[Yield(CURRENT_ZONE, self.LAVA, max=0)], 57 zone=self.ROOM, 58 ) 59 60 reach_lava = Transformation( 61 "reach_lava", 62 inventory_changes=[ 63 Use(CURRENT_ZONE, self.LAVA), 64 Yield(PLAYER, self.LAVA), 65 ], 66 ) 67 return [find_goal, reach_goal, find_lava, reach_lava]
API Documentation
MINICRAFT_NAME =
'Crossing'
class
MiniHCraftCrossing(typing.Generic[~ObsType, ~ActType]):
14class MiniHCraftCrossing(MiniCraftEnv): 15 MINICRAFT_NAME = MINICRAFT_NAME 16 __doc__ = MiniCraftEnv.description(MINICRAFT_NAME) 17 18 ROOM = Zone("room") 19 """The one and only room.""" 20 21 GOAL = Item("goal") 22 """Goal to reach.""" 23 24 LAVA = Item("lava") 25 """Lava, it burns.""" 26 27 def __init__(self, **kwargs) -> None: 28 purpose = Purpose() 29 self.task = GetItemTask(self.GOAL) 30 purpose.add_task(self.task, terminal_groups="goal") 31 die_in_lava = GetItemTask(self.LAVA, reward=-1) 32 purpose.add_task(die_in_lava, terminal_groups="die") 33 super().__init__( 34 self.MINICRAFT_NAME, 35 start_zone=self.ROOM, 36 purpose=purpose, 37 **kwargs, 38 ) 39 40 def build_transformations(self) -> List[Transformation]: 41 find_goal = Transformation( 42 "find_goal", 43 inventory_changes=[Yield(CURRENT_ZONE, self.GOAL, max=0)], 44 zone=self.ROOM, 45 ) 46 47 reach_goal = Transformation( 48 "reach_goal", 49 inventory_changes=[ 50 Use(CURRENT_ZONE, self.GOAL), 51 Yield(PLAYER, self.GOAL), 52 ], 53 ) 54 55 find_lava = Transformation( 56 "find_lava", 57 inventory_changes=[Yield(CURRENT_ZONE, self.LAVA, max=0)], 58 zone=self.ROOM, 59 ) 60 61 reach_lava = Transformation( 62 "reach_lava", 63 inventory_changes=[ 64 Use(CURRENT_ZONE, self.LAVA), 65 Yield(PLAYER, self.LAVA), 66 ], 67 ) 68 return [find_goal, reach_goal, find_lava, reach_lava]
Reproduces the minigrid Crossing gridworld environment as a HierarchyCraft environment.
MiniHCraftCrossing(**kwargs)
27 def __init__(self, **kwargs) -> None: 28 purpose = Purpose() 29 self.task = GetItemTask(self.GOAL) 30 purpose.add_task(self.task, terminal_groups="goal") 31 die_in_lava = GetItemTask(self.LAVA, reward=-1) 32 purpose.add_task(die_in_lava, terminal_groups="die") 33 super().__init__( 34 self.MINICRAFT_NAME, 35 start_zone=self.ROOM, 36 purpose=purpose, 37 **kwargs, 38 )
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.
40 def build_transformations(self) -> List[Transformation]: 41 find_goal = Transformation( 42 "find_goal", 43 inventory_changes=[Yield(CURRENT_ZONE, self.GOAL, max=0)], 44 zone=self.ROOM, 45 ) 46 47 reach_goal = Transformation( 48 "reach_goal", 49 inventory_changes=[ 50 Use(CURRENT_ZONE, self.GOAL), 51 Yield(PLAYER, self.GOAL), 52 ], 53 ) 54 55 find_lava = Transformation( 56 "find_lava", 57 inventory_changes=[Yield(CURRENT_ZONE, self.LAVA, max=0)], 58 zone=self.ROOM, 59 ) 60 61 reach_lava = Transformation( 62 "reach_lava", 63 inventory_changes=[ 64 Use(CURRENT_ZONE, self.LAVA), 65 Yield(PLAYER, self.LAVA), 66 ], 67 ) 68 return [find_goal, reach_goal, find_lava, reach_lava]
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