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.
MINICRAFT_NAME = 'Crossing'
ROOM = Zone(name='room')

The one and only room.

GOAL = Item(name='goal')

Goal to reach.

LAVA = Item(name='lava')

Lava, it burns.

task
def build_transformations(self) -> List[hcraft.Transformation]:
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