Source code for xuance.environment.single_agent_env.minigrid

from xuance.environment import RawEnvironment
import gymnasium as gym
from gymnasium.spaces import Box
import numpy as np
try:
    from minigrid.wrappers import RGBImgPartialObsWrapper, ImgObsWrapper
except ImportError:
    pass


[docs] class MiniGridEnv(RawEnvironment): """ The wrapper of minigrid environment. Args: config: the configurations for the environment. """ def __init__(self, config): super(MiniGridEnv, self).__init__() rgb_img_partial_obs_wrapper = config.RGBImgPartialObsWrapper, img_obs_wrapper = config.ImgObsWrapper self.env = gym.make(config.env_id, render_mode=config.render_mode) if rgb_img_partial_obs_wrapper: self.env = RGBImgPartialObsWrapper(self.env) if img_obs_wrapper: self.env = ImgObsWrapper(self.env) self.env.reset(seed=config.env_seed) self.env_id = config.env_id self.render_mode = config.render_mode self.image_size = np.prod(self.env.observation_space['image'].shape) # height * width * channels self.dim_obs = self.image_size + 1 # direction self.observation_space = Box(low=0, high=255, shape=[self.dim_obs, ], dtype=np.uint8) self.action_space = self.env.action_space self.max_episode_steps = self.env.env.env.max_steps
[docs] def close(self): """Close the environment.""" self.env.close()
[docs] def render(self, *args): """Return the rendering result""" return self.env.render()
[docs] def reset(self): """Reset the environment.""" obs_raw, info = self.env.reset() obs = self.flatten_obs(obs_raw) return obs, info
[docs] def step(self, actions): """Execute the actions and get next observations, rewards, and other information.""" obs_raw, reward, terminated, truncated, info = self.env.step(actions) observation = self.flatten_obs(obs_raw) reward *= 10 return observation, reward, terminated, truncated, info
[docs] def flatten_obs(self, obs_raw): """Convert image observation to vectors""" image = obs_raw['image'] direction = obs_raw['direction'] observations = np.append(image.reshape(-1), direction) return observations