from gym_minigrid.minigrid import * from gym_minigrid.register import register class PlaygroundV0(MiniGridEnv): """ Environment with multiple rooms and random objects. This environment has no specific goals or rewards. """ def __init__(self): super().__init__(grid_size=19, max_steps=100) def _gen_grid(self, width, height): # Create the grid self.grid = Grid(width, height) # Generate the surrounding walls self.grid.horz_wall(0, 0) self.grid.horz_wall(0, height-1) self.grid.vert_wall(0, 0) self.grid.vert_wall(width-1, 0) roomW = width // 3 roomH = height // 3 # For each row of rooms for j in range(0, 3): # For each column for i in range(0, 3): xL = i * roomW yT = j * roomH xR = xL + roomW yB = yT + roomH # Bottom wall and door if i+1 < 3: self.grid.vert_wall(xR, yT, roomH) pos = (xR, self._rand_int(yT+1, yB-1)) color = self._rand_elem(COLOR_NAMES) self.grid.set(*pos, Door(color)) # Bottom wall and door if j+1 < 3: self.grid.horz_wall(xL, yB, roomW) pos = (self._rand_int(xL+1, xR-1), yB) color = self._rand_elem(COLOR_NAMES) self.grid.set(*pos, Door(color)) # Randomize the player start position and orientation self.place_agent() # Place random objects in the world types = ['key', 'ball', 'box'] for i in range(0, 12): objType = self._rand_elem(types) objColor = self._rand_elem(COLOR_NAMES) if objType == 'key': obj = Key(objColor) elif objType == 'ball': obj = Ball(objColor) elif objType == 'box': obj = Box(objColor) self.place_obj(obj) # No explicit mission in this environment self.mission = '' def step(self, action): obs, reward, done, info = MiniGridEnv.step(self, action) return obs, reward, done, info register( id='MiniGrid-Playground-v0', entry_point='gym_minigrid.envs:PlaygroundV0' )