forked from AI4Finance-Foundation/ElegantRL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenv.py
26 lines (21 loc) · 1.23 KB
/
env.py
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
import gym
import numpy as np
class PendulumEnv(gym.Wrapper): # a demo of custom gym env
def __init__(self, gym_env_name=None):
gym.logger.set_level(40) # Block warning
if gym_env_name is None:
gym_env_name = "Pendulum-v0" if gym.__version__ < '0.18.0' else "Pendulum-v1"
super().__init__(env=gym.make(gym_env_name))
'''the necessary env information when you design a custom env'''
self.env_name = gym_env_name # the name of this env.
self.state_dim = self.observation_space.shape[0] # feature number of state
self.action_dim = self.action_space.shape[0] # feature number of action
self.if_discrete = False # discrete action or continuous action
def reset(self) -> np.ndarray: # reset the agent in env
return self.env.reset()
def step(self, action: np.ndarray) -> (np.ndarray, float, bool, dict): # agent interacts in env
# OpenAI Pendulum env set its action space as (-2, +2). It is bad.
# We suggest that adjust action space to (-1, +1) when designing a custom env.
state, reward, done, info_dict = self.env.step(action * 2)
state = state.reshape(self.state_dim)
return state, float(reward), done, info_dict