Spaces:
Sleeping
Sleeping
File size: 4,174 Bytes
be5548b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
#!/usr/bin/env python3
import random
import numpy as np
import gym
from gym_minigrid.register import env_list
from gym_minigrid.minigrid import Grid, OBJECT_TO_IDX
# Test specifically importing a specific environment
from gym_minigrid.envs import DoorKeyEnv
# Test importing wrappers
from gym_minigrid.wrappers import *
##############################################################################
print('%d environments registered' % len(env_list))
for env_idx, env_name in enumerate(env_list):
print('testing {} ({}/{})'.format(env_name, env_idx+1, len(env_list)))
# Load the gym environment
env = gym.make(env_name)
env.max_steps = min(env.max_steps, 200)
env.reset()
env.render('rgb_array')
# Verify that the same seed always produces the same environment
for i in range(0, 5):
seed = 1337 + i
env.seed(seed)
grid1 = env.grid
env.seed(seed)
grid2 = env.grid
assert grid1 == grid2
env.reset()
# Run for a few episodes
num_episodes = 0
while num_episodes < 5:
# Pick a random action
action = random.randint(0, env.action_space.n - 1)
obs, reward, done, info = env.step(action)
# Validate the agent position
assert env.agent_pos[0] < env.width
assert env.agent_pos[1] < env.height
# Test observation encode/decode roundtrip
img = obs['image']
grid, vis_mask = Grid.decode(img)
img2 = grid.encode(vis_mask=vis_mask)
assert np.array_equal(img, img2)
# Test the env to string function
str(env)
# Check that the reward is within the specified range
assert reward >= env.reward_range[0], reward
assert reward <= env.reward_range[1], reward
if done:
num_episodes += 1
env.reset()
env.render('rgb_array')
# Test the close method
env.close()
env = gym.make(env_name)
env = ReseedWrapper(env)
for _ in range(10):
env.reset()
env.step(0)
env.close()
env = gym.make(env_name)
env = ImgObsWrapper(env)
env.reset()
env.step(0)
env.close()
# Test the fully observable wrapper
env = gym.make(env_name)
env = FullyObsWrapper(env)
env.reset()
obs, _, _, _ = env.step(0)
assert obs['image'].shape == env.observation_space.spaces['image'].shape
env.close()
# RGB image observation wrapper
env = gym.make(env_name)
env = RGBImgPartialObsWrapper(env)
env.reset()
obs, _, _, _ = env.step(0)
assert obs['image'].mean() > 0
env.close()
env = gym.make(env_name)
env = FlatObsWrapper(env)
env.reset()
env.step(0)
env.close()
env = gym.make(env_name)
env = ViewSizeWrapper(env, 5)
env.reset()
env.step(0)
env.close()
# Test the wrappers return proper observation spaces.
wrappers = [
RGBImgObsWrapper,
RGBImgPartialObsWrapper,
OneHotPartialObsWrapper
]
for wrapper in wrappers:
env = wrapper(gym.make(env_name))
obs_space, wrapper_name = env.observation_space, wrapper.__name__
assert isinstance(
obs_space, spaces.Dict
), "Observation space for {0} is not a Dict: {1}.".format(
wrapper_name, obs_space
)
# This should not fail either
ImgObsWrapper(env)
env.reset()
env.step(0)
env.close()
##############################################################################
print('testing agent_sees method')
env = gym.make('MiniGrid-DoorKey-6x6-v0')
goal_pos = (env.grid.width - 2, env.grid.height - 2)
# Test the "in" operator on grid objects
assert ('green', 'goal') in env.grid
assert ('blue', 'key') not in env.grid
# Test the env.agent_sees() function
env.reset()
for i in range(0, 500):
action = random.randint(0, env.action_space.n - 1)
obs, reward, done, info = env.step(action)
grid, _ = Grid.decode(obs['image'])
goal_visible = ('green', 'goal') in grid
agent_sees_goal = env.agent_sees(*goal_pos)
assert agent_sees_goal == goal_visible
if done:
env.reset()
|