Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add extra tasks used in E3B paper #69

Merged
merged 3 commits into from
Jan 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 149 additions & 0 deletions minihack/envs/minigrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,37 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, env_name="MiniGrid-MultiRoom-N6-v0", **kwargs)


register(
id="MiniGrid-MultiRoom-N10-v0",
entry_point="gym_minigrid.envs:MultiRoomEnv",
kwargs={"minNumRooms": 10, "maxNumRooms": 10},
)


class MiniHackMultiRoomN10(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 360)
super().__init__(*args, env_name="MiniGrid-MultiRoom-N10-v0", **kwargs)


# open door version of the above envs - methods with message-based bonuses tend to fail on these
# because there is no message "the door opens" when visiting a new room


class MiniHackMultiRoomN6OpenDoor(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 240)
kwargs["door_state"] = kwargs.pop("door_state", "open")
super().__init__(*args, env_name="MiniGrid-MultiRoom-N6-v0", **kwargs)


class MiniHackMultiRoomN10OpenDoor(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 360)
kwargs["door_state"] = kwargs.pop("door_state", "open")
super().__init__(*args, env_name="MiniGrid-MultiRoom-N10-v0", **kwargs)


register(
id="MiniHack-MultiRoom-N2-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN2",
Expand All @@ -167,6 +198,18 @@ def __init__(self, *args, **kwargs):
id="MiniHack-MultiRoom-N6-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN6",
)
register(
id="MiniHack-MultiRoom-N10-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN10",
)
register(
id="MiniHack-MultiRoom-N6-OpenDoor-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN6OpenDoor",
)
register(
id="MiniHack-MultiRoom-N10-OpenDoor-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN10OpenDoor",
)


# MiniGrid: LockedMultiRoom
Expand Down Expand Up @@ -235,6 +278,29 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, env_name="MiniGrid-MultiRoom-N6-v0", **kwargs)


class MiniHackMultiRoomN10Lava(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 360)
kwargs["lava_walls"] = True
super().__init__(*args, env_name="MiniGrid-MultiRoom-N10-v0", **kwargs)


class MiniHackMultiRoomN6LavaOpenDoor(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 240)
kwargs["lava_walls"] = True
kwargs["door_state"] = kwargs.pop("door_state", "open")
super().__init__(*args, env_name="MiniGrid-MultiRoom-N6-v0", **kwargs)


class MiniHackMultiRoomN10LavaOpenDoor(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 360)
kwargs["lava_walls"] = True
kwargs["door_state"] = kwargs.pop("door_state", "open")
super().__init__(*args, env_name="MiniGrid-MultiRoom-N10-v0", **kwargs)


register(
id="MiniHack-MultiRoom-N2-Lava-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN2Lava",
Expand All @@ -247,6 +313,18 @@ def __init__(self, *args, **kwargs):
id="MiniHack-MultiRoom-N6-Lava-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN6Lava",
)
register(
id="MiniHack-MultiRoom-N10-Lava-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN10Lava",
)
register(
id="MiniHack-MultiRoom-N6-Lava-OpenDoor-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN6LavaOpenDoor",
)
register(
id="MiniHack-MultiRoom-N10-Lava-OpenDoor-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN10LavaOpenDoor",
)


# MiniGrid: MonsterpedMultiRoom
Expand Down Expand Up @@ -335,7 +413,66 @@ def __init__(self, *args, **kwargs):
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN6Extreme",
)


# Note: the N6-Extreme-v0 env above is impossible to solve consistently even for a human
# due to too many monsters. Here are some easier envs with lava and fewer monsters.


class MiniHackMultiRoomN2LavaMonsters(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 40)
kwargs["num_mon"] = 1
kwargs["lava_walls"] = True
super().__init__(
*args, env_name="MiniGrid-MultiRoom-N2-S4-v0", **kwargs
)


class MiniHackMultiRoomN4LavaMonsters(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 120)
kwargs["num_mon"] = 2
kwargs["lava_walls"] = True
super().__init__(
*args, env_name="MiniGrid-MultiRoom-N4-S5-v0", **kwargs
)


class MiniHackMultiRoomN6LavaMonsters(MiniGridHack):
def __init__(self, *args, **kwargs):
kwargs["max_episode_steps"] = kwargs.pop("max_episode_steps", 240)
kwargs["num_mon"] = 3
kwargs["lava_walls"] = True
super().__init__(*args, env_name="MiniGrid-MultiRoom-N6-v0", **kwargs)


register(
id="MiniHack-MultiRoom-N2-LavaMonsters-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN2LavaMonsters",
)
register(
id="MiniHack-MultiRoom-N4-LavaMonsters-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN4LavaMonsters",
)
register(
id="MiniHack-MultiRoom-N6-LavaMonsters-v0",
entry_point="minihack.envs.minigrid:MiniHackMultiRoomN6LavaMonsters",
)


# MiniGrid: LavaCrossing
register(
id="MiniGrid-LavaCrossingS19N13-v0",
entry_point="gym_minigrid.envs:CrossingEnv",
kwargs={"size": 19, "num_crossings": 13},
)
register(
id="MiniGrid-LavaCrossingS19N17-v0",
entry_point="gym_minigrid.envs:CrossingEnv",
kwargs={"size": 19, "num_crossings": 17},
)


register(
id="MiniHack-LavaCrossingS9N1-v0",
entry_point="minihack.envs.minigrid:MiniGridHack",
Expand All @@ -356,6 +493,18 @@ def __init__(self, *args, **kwargs):
entry_point="minihack.envs.minigrid:MiniGridHack",
kwargs={"env_name": "MiniGrid-LavaCrossingS11N5-v0"},
)
register(
id="MiniHack-LavaCrossingS19N13-v0",
entry_point="minihack.envs.minigrid:MiniGridHack",
kwargs={"env_name": "MiniGrid-LavaCrossingS19N13-v0"},
)

register(
id="MiniHack-LavaCrossingS19N17-v0",
entry_point="minihack.envs.minigrid:MiniGridHack",
kwargs={"env_name": "MiniGrid-LavaCrossingS19N17-v0"},
)


# MiniGrid: Simple Crossing
register(
Expand Down
134 changes: 130 additions & 4 deletions minihack/envs/skills_freeze.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Copyright (c) Facebook, Inc. and its affiliates.
from minihack import MiniHackSkill, LevelGenerator, RewardManager
from minihack.envs import register
from nle import nethack

freeze_msgs = [
"The bolt of cold bounces!", # checks if cold bounces from the wall
Expand All @@ -26,6 +27,22 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, des_file=des_file, **kwargs)


class MiniHackFreezeWandRestrictedActions(MiniHackFreeze):
def __init__(self, *args, **kwargs):
lvl_gen = LevelGenerator(w=8, h=8, lit=True)
lvl_gen.add_object("cold", "/", cursestate="blessed")
des_file = lvl_gen.get_des()

ACTIONS = tuple(nethack.CompassDirection) + (
nethack.Command.PICKUP,
nethack.Command.ZAP,
nethack.Command.FIRE,
)
kwargs["actions"] = ACTIONS

super().__init__(*args, des_file=des_file, **kwargs)


class MiniHackFreezeHorn(MiniHackFreeze):
def __init__(self, *args, **kwargs):
lvl_gen = LevelGenerator(w=8, h=8, lit=True)
Expand All @@ -35,6 +52,22 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, des_file=des_file, **kwargs)


class MiniHackFreezeHornRestrictedActions(MiniHackFreeze):
def __init__(self, *args, **kwargs):
lvl_gen = LevelGenerator(w=8, h=8, lit=True)
lvl_gen.add_object("frost horn", "(", cursestate="blessed")
des_file = lvl_gen.get_des()

ACTIONS = tuple(nethack.CompassDirection) + (
nethack.Command.PICKUP,
nethack.Command.APPLY,
nethack.Command.FIRE,
)
kwargs["actions"] = ACTIONS

super().__init__(*args, des_file=des_file, **kwargs)


class MiniHackFreezeRandom(MiniHackFreeze):
def __init__(self, *args, **kwargs):
des_file = """
Expand Down Expand Up @@ -63,6 +96,43 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, des_file=des_file, **kwargs)


class MiniHackFreezeRandomRestrictedActions(MiniHackFreeze):
def __init__(self, *args, **kwargs):
des_file = """
MAZE: "mylevel", ' '
FLAGS:hardfloor
MESSAGE: "Welcome to MiniHack!"
INIT_MAP: solidfill,' '
GEOMETRY:center,center
MAP
........
........
........
........
........
........
........
........
ENDMAP
REGION:(0,0,7,7),lit,"ordinary"
IF [50%] {
OBJECT:('/',"cold"),random,blessed
} ELSE {
OBJECT:('(',"frost horn"),random,blessed
}
"""

ACTIONS = tuple(nethack.CompassDirection) + (
nethack.Command.PICKUP,
nethack.Command.ZAP,
nethack.Command.APPLY,
nethack.Command.FIRE,
)
kwargs["actions"] = ACTIONS

super().__init__(*args, des_file=des_file, **kwargs)


class MiniHackFreezeLava(MiniHackSkill):
def __init__(self, *args, **kwargs):
des_file = """
Expand Down Expand Up @@ -95,19 +165,75 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, des_file=des_file, **kwargs)


class MiniHackFreezeLavaRestrictedActions(MiniHackSkill):
def __init__(self, *args, **kwargs):
des_file = """
MAZE: "mylevel", ' '
FLAGS:hardfloor
INIT_MAP: solidfill,' '
GEOMETRY:center,center
MAP
-------------
|.....L.....|
|.....L.....|
|.....L.....|
|.....L.....|
|.....L.....|
-------------
ENDMAP
REGION:(0,0,12,6),lit,"ordinary"
$left_bank = selection:fillrect (1,1,5,5)
$right_bank = selection:fillrect (7,1,11,5)
IF [50%] {
# wand of cold
OBJECT:('/',"cold"),rndcoord($left_bank),blessed
} ELSE {
# frost horn
OBJECT:('(',"frost horn"),rndcoord($left_bank),blessed
}
BRANCH:(1,1,5,5),(0,0,0,0)
STAIR:rndcoord($right_bank),down
"""
ACTIONS = tuple(nethack.CompassDirection) + (
nethack.Command.PICKUP,
nethack.Command.ZAP,
nethack.Command.APPLY,
nethack.Command.FIRE,
)
kwargs["actions"] = ACTIONS

super().__init__(*args, des_file=des_file, **kwargs)


register(
id="MiniHack-Freeze-Wand-v0",
id="MiniHack-Freeze-Wand-Full-v0",
entry_point="minihack.envs.skills_freeze:MiniHackFreezeWand",
)
register(
id="MiniHack-Freeze-Horn-v0",
id="MiniHack-Freeze-Wand-Restricted-v0",
entry_point="minihack.envs.skills_freeze:MiniHackFreezeWandRestrictedActions",
)
register(
id="MiniHack-Freeze-Horn-Full-v0",
entry_point="minihack.envs.skills_freeze:MiniHackFreezeHorn",
)
register(
id="MiniHack-Freeze-Random-v0",
id="MiniHack-Freeze-Horn-Restricted-v0",
entry_point="minihack.envs.skills_freeze:MiniHackFreezeHornRestrictedActions",
)
register(
id="MiniHack-Freeze-Random-Full-v0",
entry_point="minihack.envs.skills_freeze:MiniHackFreezeRandom",
)
register(
id="MiniHack-Freeze-Lava-v0",
id="MiniHack-Freeze-Random-Restricted-v0",
entry_point="minihack.envs.skills_freeze:MiniHackFreezeRandomRestrictedActions",
)
register(
id="MiniHack-Freeze-Lava-Full-v0",
entry_point="minihack.envs.skills_freeze:MiniHackFreezeLava",
)
register(
id="MiniHack-Freeze-Lava-Restricted-v0",
entry_point="minihack.envs.skills_freeze:MiniHackFreezeLavaRestrictedActions",
)
Loading