Skip to content

Commit 3b1a31e

Browse files
authored
Merge pull request #6 from BartekCupial/fix/multi_room_map_generation_bug
Fixed map size error in MiniHack-MultiRoom environments
2 parents 1a4b4e8 + 734df5e commit 3b1a31e

File tree

5 files changed

+33
-24
lines changed

5 files changed

+33
-24
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ If you use MiniHack in your work, please cite:
188188
}
189189
```
190190

191-
If you use our example ported environments, please cite the original papers: [MiniGrid](https://github.com/maximecb/gym-minigrid/) (see [license](https://github.com/maximecb/gym-minigrid/blob/master/LICENSE), [bib](https://github.com/maximecb/gym-minigrid/#minimalistic-gridworld-environment-minigrid)), [Boxoban](https://github.com/deepmind/boxoban-levels/) (see [license](https://github.com/deepmind/boxoban-levels/blob/master/LICENSE), [bib](https://github.com/deepmind/boxoban-levels/#bibtex)).
191+
If you use our example ported environments, please cite the original papers: [MiniGrid](https://github.com/Farama-Foundation/Minigrid) (see [license](https://github.com/Farama-Foundation/Minigrid/LICENSE), [bib](https://github.com/maximecb/gym-minigrid/#minimalistic-gridworld-environment-minigrid)), [Boxoban](https://github.com/deepmind/boxoban-levels/) (see [license](https://github.com/deepmind/boxoban-levels/blob/master/LICENSE), [bib](https://github.com/deepmind/boxoban-levels/#bibtex)).
192192

193193
# Contributions and Maintenance
194194

docs/envs/ported/minigrid.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# MiniGrid
22

3-
This family of environments is ported to MiniHack from [MiniGrid](https://github.com/maximecb/gym-minigrid), a popular suite of procedurally generated grid-based environments that assess various capabilities of RL agents, such as exploration, memory, and generalisation. For more information, check out [MiniGrid's documentation](https://github.com/maximecb/gym-minigrid/blob/master/README.md).
3+
This family of environments is ported to MiniHack from [MiniGrid](https://github.com/Farama-Foundation/Minigrid), a popular suite of procedurally generated grid-based environments that assess various capabilities of RL agents, such as exploration, memory, and generalisation. For more information, check out [MiniGrid's documentation](https://minigrid.farama.org/index.html).
44
After porting environments to MiniHack, one can make them substantially harder by adding additional environment dynamics to the task, such as monsters, dungeon features and objects.
55

66
The MultiRoom environments have a series of connected rooms. The final room has the goal location the agent needs to get to. We have ported the `MultiRoom` in three different room numbers, namely 2, 4 and 6 rooms. Moreover, we added additional complexity to them by adding monsters (e.g. `MiniHack-MultiRoom-N4-Monster-v0`), locked doors (e.g. `MiniHack-MultiRoom-N4-Locked-v0`), lava tiles instead of walls (e.g. `MiniHack-MultiRoom-N4-Lava-v0`), or all at one (e.g. `MiniHack-MultiRoom-N4-Extreme-v0`).

minihack/agent/common/envs/wrapper.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ def step(self, action):
4747

4848
return step_return
4949

50-
def reset(self, wizkit_items=None):
50+
def reset(self, options=dict(wizkit_items=None)):
5151
# reset state counter when env resets
52-
obs = self.env.reset(wizkit_items=wizkit_items)
52+
obs = self.env.reset(options=options)
5353
if self.state_counter != "none":
5454
self.state_count_dict.clear()
5555
# current state counts as one visit
@@ -106,8 +106,8 @@ def step(self, action):
106106

107107
return next_state, reward, done, truncated, info
108108

109-
def reset(self, wizkit_items=None):
110-
obs = self.env.reset(wizkit_items=wizkit_items)
109+
def reset(self, options=dict(wizkit_items=None)):
110+
obs = self.env.reset(options=options)
111111
obs["tty_chars_crop"] = np.zeros((self.h, self.w), dtype=np.uint8)
112112
obs["tty_colors_crop"] = np.zeros((self.h, self.w), dtype=np.int8)
113113
self.last_observation = obs
@@ -130,8 +130,8 @@ def step(self, action):
130130

131131
return next_state, reward, done, truncated, info
132132

133-
def reset(self, wizkit_items=None):
134-
obs = self.env.reset(wizkit_items=wizkit_items)
133+
def reset(self, options=dict(wizkit_items=None)):
134+
obs = self.env.reset(options=options)
135135
obs["prev_reward"] = np.zeros(1, dtype=np.float32)
136136
obs["prev_action"] = np.zeros(1, dtype=np.uint8)
137137
self.last_observation = obs

minihack/envs/boxohack.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ def get_lvl_gen(self):
9393
lvl_gen.set_start_pos(info["player"])
9494
return lvl_gen
9595

96-
def reset(self, wizkit_items=None):
96+
def reset(self, options=dict(wizkit_items=None)):
9797
self.update(self.get_lvl_gen().get_des())
98-
initial_obs = super().reset(wizkit_items=wizkit_items)
98+
initial_obs = super().reset(options=options)
9999
self._goal_pos_set = self._object_positions(self.last_observation, "{")
100100
return initial_obs
101101

minihack/envs/minigrid.py

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from nle.nethack import Command, CompassDirection
44
from minihack.envs import register
55
import gymnasium as gym
6+
from nle.nethack.nethack import TERMINAL_SHAPE
67

78

89
MOVE_AND_KICK_ACTIONS = tuple(
@@ -12,16 +13,21 @@
1213

1314
class MiniGridHack(MiniHackNavigation):
1415
def __init__(self, *args, **kwargs):
15-
# Only ask users to install gym-minigrid if they actually need it
16+
# Only ask users to install minigrid if they actually need it
1617
try:
17-
import gym_minigrid # noqa: F401
18+
import minigrid # noqa: F401
1819
except ModuleNotFoundError:
1920
raise ModuleNotFoundError(
2021
"To use MiniGrid-based environments, please install"
21-
" gym-minigrid: pip3 install gym-minigrid"
22+
" minigrid: pip3 install minigrid"
2223
)
2324

24-
self.minigrid_env = gym.make(kwargs.pop("env_name"))
25+
height, width = TERMINAL_SHAPE
26+
height -= 3 # adjust for topline -1 and bottomlines -2
27+
width -= 4 # adjust for left -2 and right -2 borders
28+
self.minigrid_env = gym.make(
29+
kwargs.pop("env_name"), width=width, height=height
30+
)
2531
self.num_mon = kwargs.pop("num_mon", 0)
2632
self.num_trap = kwargs.pop("num_trap", 0)
2733
self.door_state = kwargs.pop("door_state", "closed")
@@ -44,10 +50,10 @@ def get_env_map(self, env):
4450
empty_str = True
4551
env_map = []
4652

47-
for j in range(env.grid.height):
53+
for j in range(env.unwrapped.grid.height):
4854
str = ""
49-
for i in range(env.width):
50-
c = env.grid.get(i, j)
55+
for i in range(env.unwrapped.width):
56+
c = env.unwrapped.grid.get(i, j)
5157
if c is None:
5258
str += "."
5359
continue
@@ -66,7 +72,7 @@ def get_env_map(self, env):
6672
str += "."
6773
elif c.type == "player":
6874
str += "."
69-
if not empty_str and j < env.grid.height - 1:
75+
if not empty_str and j < env.unwrapped.grid.height - 1:
7076
if set(str) != {"."}:
7177
str = str.replace(".", " ", str.index(self.wall))
7278
inv = str[::-1]
@@ -75,7 +81,10 @@ def get_env_map(self, env):
7581
elif empty_str:
7682
empty_strs += 1
7783

78-
start_pos = (int(env.agent_pos[0]), int(env.agent_pos[1]) - empty_strs)
84+
start_pos = (
85+
int(env.unwrapped.agent_pos[0]),
86+
int(env.unwrapped.agent_pos[1]) - empty_strs,
87+
)
7988
env_map = "\n".join(env_map)
8089

8190
return env_map, start_pos, goal_pos, door_pos
@@ -127,10 +136,10 @@ def seed(self, core=None, disp=None, reseed=False):
127136
self.minigrid_env.seed(core)
128137
return super().seed(core, disp, reseed)
129138

130-
def reset(self, wizkit_items=None):
139+
def reset(self, options=dict(wizkit_items=None), **kwargs):
131140
des_file = self.get_env_desc()
132141
self.update(des_file)
133-
return super().reset(wizkit_items=wizkit_items)
142+
return super().reset(options=options, **kwargs)
134143

135144

136145
class MiniHackMultiRoomN2(MiniGridHack):
@@ -157,7 +166,7 @@ def __init__(self, *args, **kwargs):
157166

158167
register(
159168
id="MiniGrid-MultiRoom-N10-v0",
160-
entry_point="gym_minigrid.envs:MultiRoomEnv",
169+
entry_point="minigrid.envs:MultiRoomEnv",
161170
kwargs={"minNumRooms": 10, "maxNumRooms": 10},
162171
)
163172

@@ -463,12 +472,12 @@ def __init__(self, *args, **kwargs):
463472
# MiniGrid: LavaCrossing
464473
register(
465474
id="MiniGrid-LavaCrossingS19N13-v0",
466-
entry_point="gym_minigrid.envs:CrossingEnv",
475+
entry_point="minigrid.envs:CrossingEnv",
467476
kwargs={"size": 19, "num_crossings": 13},
468477
)
469478
register(
470479
id="MiniGrid-LavaCrossingS19N17-v0",
471-
entry_point="gym_minigrid.envs:CrossingEnv",
480+
entry_point="minigrid.envs:CrossingEnv",
472481
kwargs={"size": 19, "num_crossings": 17},
473482
)
474483

0 commit comments

Comments
 (0)