in ml3/envs/mountain_car.py [0:0]
def sim_step_torch(self, state, action):
position = state[0]
velocity = state[1]
action = torch.clamp(action, min=self.min_action, max=self.max_action)
velocity = velocity + (self.g * self.m * torch.cos(3.0 * position) + (action / self.m) - (
self.k * velocity)) * self.delta_t
position = position + (velocity * self.delta_t)
if (velocity.data > self.max_speed): velocity.data = torch.Tensor([self.max_speed])
if (velocity.data < -self.max_speed): velocity.data = torch.Tensor([-self.max_speed])
if (position.data >= self.max_position): position.data = torch.Tensor([self.max_position])
if (position.data < self.min_position): position.data = torch.Tensor([self.min_position])
if (position.data == self.min_position and velocity.data < 0): velocity.data = torch.Tensor([0.0])
new_state = torch.stack([position.squeeze(), velocity.squeeze()])
return new_state