Spaces:
Sleeping
Sleeping
from gym_minigrid.minigrid import Ball | |
from gym_minigrid.roomgrid import RoomGrid | |
from gym_minigrid.register import register | |
class UnlockPickup(RoomGrid): | |
""" | |
Unlock a door, then pick up a box in another room | |
""" | |
def __init__(self, seed=None): | |
room_size = 6 | |
super().__init__( | |
num_rows=1, | |
num_cols=2, | |
room_size=room_size, | |
max_steps=8*room_size**2, | |
seed=seed | |
) | |
def _gen_grid(self, width, height): | |
super()._gen_grid(width, height) | |
# Add a box to the room on the right | |
obj, _ = self.add_object(1, 0, kind="box") | |
# Make sure the two rooms are directly connected by a locked door | |
door, _ = self.add_door(0, 0, 0, locked=True) | |
# Add a key to unlock the door | |
self.add_object(0, 0, 'key', door.color) | |
self.place_agent(0, 0) | |
self.obj = obj | |
self.mission = "pick up the %s %s" % (obj.color, obj.type) | |
def step(self, action): | |
obs, reward, done, info = super().step(action) | |
if action == self.actions.pickup: | |
if self.carrying and self.carrying == self.obj: | |
reward = self._reward() | |
done = True | |
return obs, reward, done, info | |
register( | |
id='MiniGrid-UnlockPickup-v0', | |
entry_point='gym_minigrid.envs:UnlockPickup' | |
) | |