robopal.commons.gym_wrapper 源代码
import numpy as np
import gymnasium as gym
from gymnasium import spaces
[文档]
class GymWrapper(gym.Env):
def __init__(self, env) -> None:
super(GymWrapper, self).__init__()
self.env = env
self.observation_space = spaces.Box(
low=-np.inf, high=np.inf, shape=self.env.obs_dim, dtype="float64"
)
self.action_space = spaces.Box(
low=env.min_action, high=env.max_action, shape=self.env.action_dim, dtype="float64"
)
self.max_episode_steps = env.max_episode_steps
self.name = env.name
self.render_mode = env.render_mode
def __getattr__(self, attr):
return getattr(self.env, attr)
[文档]
def step(self, action):
return self.env.step(action)
[文档]
def reset(self, seed=None, options=None):
# following line to seed self.np_random
super().reset(seed=seed, options=options)
return self.env.reset(seed=seed, options=options)
[文档]
def render(self, mode="human"):
self.env.render()
[文档]
def close(self):
self.env.close()
[文档]
class GoalEnvWrapper(GymWrapper):
""" GoalEnvWrapper: a wrapper for gym.GoalEnv """
def __init__(self, env) -> None:
super(GoalEnvWrapper, self).__init__(env)
self.observation_space = spaces.Dict(
dict(
observation=spaces.Box(low=-np.inf, high=np.inf, shape=self.env.obs_dim, dtype="float64"),
desired_goal=spaces.Box(low=-np.inf, high=np.inf, shape=self.env.goal_dim, dtype="float64"),
achieved_goal=spaces.Box(low=-np.inf, high=np.inf, shape=self.env.goal_dim, dtype="float64"),
)
)
[文档]
def step(self, action):
return super().step(action)
[文档]
def reset(self, seed=None, options=None):
return super().reset(seed=seed, options=options)
[文档]
def compute_reward(self, achieved_goal, desired_goal, info: dict = None, **kwargs):
return self.env.compute_rewards(achieved_goal, desired_goal, info, **kwargs)