CartPole-v0环境训练reward超过上限值200?
Closed this issue · 1 comments
SHTechBoBo commented
首先训练报错的问题,在#30已经解决了,但是训练过程中会发现,单个episode_return是会超过200的,这与环境设定不符。
查阅了gym的官方文档,发现问题出现在next_state, reward, done, _, _ = env.step(action)
这步,因为env.step(action)
在新版本将原先返回的done
参数,替换成了terminated
和truncated
两个参数。
terminated
:智能体是否达到MDP定义下的结束条件,对于CartPole来说就是杆的倾斜度数过大,或者车子离初始位置左右的偏离程度过大。
truncated
:是否满足MDP范围之外的结束条件,通常是一个时间限制,对于CartPole来说就是到达了200帧。
意思就是,只要terminated
和truncated
中的一个参数是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
Roronoayx commented
感谢!看了你的分享解决了我运行“第8章-DQN改进算法.ipynb”遇到的问题。
gym 0.26.1 下修改成next_state, reward, done, _, _ = env.step(action)以后,会导致倒立摆环境长时间结束不了,和你这里是同样的解决思路😊