boyu-ai/Hands-on-RL

CartPole-v0环境训练reward超过上限值200?

Closed this issue · 1 comments

首先训练报错的问题,在#30已经解决了,但是训练过程中会发现,单个episode_return是会超过200的,这与环境设定不符。
查阅了gym的官方文档,发现问题出现在next_state, reward, done, _, _ = env.step(action)这步,因为env.step(action)在新版本将原先返回的done参数,替换成了terminatedtruncated两个参数。

terminated:智能体是否达到MDP定义下的结束条件,对于CartPole来说就是杆的倾斜度数过大,或者车子离初始位置左右的偏离程度过大。
truncated:是否满足MDP范围之外的结束条件,通常是一个时间限制,对于CartPole来说就是到达了200帧。

意思就是,只要terminatedtruncated中的一个参数是true,就代表此次episode结束了。如果继续按照原先的写法,则只考虑了terminated的情况,自然而然reward就会超过200了。

正确的代码修改如下:

done = False
while not done:
    action = agent.take_action(state)
    next_state, reward, terminated, truncated, _ = env.step(action)  # 变更返回的参数
    done = terminated or truncated   # 重新定义done
    transition_dict['states'].append(state)
    transition_dict['actions'].append(action)
    transition_dict['next_states'].append(next_state)
    transition_dict['rewards'].append(reward)
    transition_dict['dones'].append(done)
    state = next_state
    episode_return += reward

感谢!看了你的分享解决了我运行“第8章-DQN改进算法.ipynb”遇到的问题。

gym 0.26.1 下修改成next_state, reward, done, _, _ = env.step(action)以后,会导致倒立摆环境长时间结束不了,和你这里是同样的解决思路😊