for a in action: reward -= 0.00035 * MOTORS_TORQUE * np.clip(np.abs(a), 0, 1) # normalized to about -50.0 using heuristic, more optimal agent should spend less done = False if self.game_over or pos[0] < 0: reward = -100 done = True if pos[0] > (TERRAIN_LENGTH - TERRAIN_GRASS) * TERRAIN_STEP: done = True return np.array(state, dtype=np.float32), reward, done, {}
时间: 2024-02-10 20:20:58 浏览: 24
这段代码是用于对小人的行动进行评估和计算奖励值的,其中包含以下内容:
1. for a in action: reward -= 0.00035 * MOTORS_TORQUE * np.clip(np.abs(a), 0, 1):对每个行动a进行惩罚,根据行动的大小和方向来惩罚小人,以便让小人做出更加合理的行动。
2. done = False:先将游戏结束的标志done设为False。
3. if self.game_over or pos[0] < 0: reward = -100 done = True:如果小人触碰到障碍物或者小人向左移动出了游戏场景,那么将reward设为-100,并将游戏结束的标志done设为True,以便结束游戏。
4. if pos[0] > (TERRAIN_LENGTH - TERRAIN_GRASS) * TERRAIN_STEP: done = True:如果小人完成了游戏目标,即到达了终点,那么将游戏结束的标志done设为True,以便结束游戏。
5. return np.array(state, dtype=np.float32), reward, done, {}:将获取到的状态信息state、奖励值reward和游戏结束标志done返回,以便进行下一步的处理和分析。
总的来说,这段代码是用于对小人的行动进行评估和计算奖励值的。通过对小人的行动进行惩罚和奖励,可以激励小人做出更加合理的行动,从而提高游戏的趣味性和挑战性。同时,游戏结束的判断也可以让小人在游戏达到目标后及时结束游戏,确保游戏的完整性和正确性。
相关问题
reward = 0 if self.prev_shaping is not None: reward = shaping - self.prev_shaping self.prev_shaping = shaping
这段代码是用于计算小人的奖励值的,其中包含以下内容:
1. reward = 0:先将奖励值设为0,如果满足一定条件,再根据条件计算出奖励值。
2. if self.prev_shaping is not None::如果之前的奖励值不为空,即小人之前已经做出过行动,那么根据当前状态和之前状态的差别来计算当前的奖励值。
3. reward = shaping - self.prev_shaping:根据当前状态shaping和之前状态的差别(即self.prev_shaping)来计算当前的奖励值reward。
4. self.prev_shaping = shaping:将当前状态的奖励值保存下来,以便在下一次计算奖励值时使用。
总的来说,这段代码是用于计算小人的奖励值的,以便对小人的行动进行评估和优化。奖励值的计算方式可以根据具体情况进行调整,以达到更好的效果。
while not ep_done: num_steps += 1 if train_params.RENDER: self.env_wrapper.render() action = self.sess.run(self.actor_net.output, {self.state_ph:np.expand_dims(state, 0)})[0] # Add batch dimension to single state input, and remove batch dimension from single action output action += (gaussian_noise() * train_params.NOISE_DECAY**num_eps) next_state, reward, terminal = self.env_wrapper.step(action) episode_reward += reward next_state = self.env_wrapper.normalise_state(next_state) reward = self.env_wrapper.normalise_reward(reward) self.exp_buffer.append((state, action, reward)) if len(self.exp_buffer) >= train_params.N_STEP_RETURNS: state_0, action_0, reward_0 = self.exp_buffer.popleft() discounted_reward = reward_0 gamma = train_params.DISCOUNT_RATE for (_, _, r_i) in self.exp_buffer: discounted_reward += r_i * gamma gamma *= train_params.DISCOUNT_RATE run_agent_event.wait() PER_memory.add(state_0, action_0, discounted_reward, next_state, terminal, gamma) state = next_state
这段代码是主循环中的一部分,其中包含了执行动作、观察环境、更新经验缓存等操作。具体来说,算法执行以下步骤:
1. 累计步数;
2. 如果需要渲染环境,则渲染环境;
3. 使用Actor网络计算当前状态的动作;
4. 对动作添加高斯噪声;
5. 执行动作并观察新状态和奖励;
6. 累计回报;
7. 对新状态进行归一化处理;
8. 对奖励进行归一化处理;
9. 将经验添加到经验缓存中;
10. 如果经验缓存已满,则计算N步回报,并将经验添加到优先经验回放缓存中;
11. 更新状态。
在这个过程中,Actor网络用于计算当前状态下的动作,而高斯噪声则用于增加探索性,以便算法能够更好地探索环境。在执行动作之后,算法会观察新状态和奖励,并将它们添加到经验缓存中。如果经验缓存已满,算法会计算N步回报,并将经验添加到优先经验回放缓存中。最后,算法会更新状态并继续执行主循环。