-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathswimmer_env.py
More file actions
31 lines (27 loc) · 1.15 KB
/
Copy pathswimmer_env.py
File metadata and controls
31 lines (27 loc) · 1.15 KB
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
import numpy as np
from gym import utils
from gym.envs.mujoco import mujoco_env
class SwimmerEnvNew(mujoco_env.MujocoEnv, utils.EzPickle):
def __init__(self):
mujoco_env.MujocoEnv.__init__(self, 'swimmer.xml', 1)
utils.EzPickle.__init__(self)
def _step(self, action):
ctrl_cost_coeff = 0.0001
xposbefore = self.model.data.qpos[0, 0]
self.do_simulation(a, self.frame_skip)
xposafter = self.model.data.qpos[0, 0]
reward_fwd = (xposafter - xposbefore) / self.dt
reward_ctrl = - ctrl_cost_coeff * np.square(a).sum()
reward = reward_fwd + reward_ctrl
ob = self._get_obs()
return ob, reward, False, dict(reward_fwd=reward_fwd, reward_ctrl=reward_ctrl)
def _get_obs(self):
qpos = self.model.data.qpos
qvel = self.model.data.qvel
return np.concatenate([qpos.flat, qvel.flat])
def reset_model(self):
self.set_state(
self.init_qpos + self.np_random.uniform(low=-.1, high=.1, size=self.model.nq),
self.init_qvel + self.np_random.uniform(low=-.1, high=.1, size=self.model.nv)
)
return self._get_obs()