基于网站《动手学强化学习》,其中的代码是几年前的,而名为 Gym Lib 的 Lib 已经过时了。因此,需要更改的地方,这是 DQN 和其他变体的完整新代码。 如果您只想实现 DQN,则只需下载它。但是,在 hands_on_RL 中使用 gym 的其他算法上需要更改的部分是相同的。因此,在这里我们展示需要更改的部分,以帮助您更改其他算法

需要更改

1. 环境 ‘env_name-v0’ 已过期。您应该考虑升级到版本v1

env_name = 'CartPole-v1'
env = gym.make(env_name, render_mode='human')

2. env.seed(0) 没有被使用,你应该改到那里,并在后面加上 ‘[0]’

state = env.reset(seed = 0)[0]

3. 需要解包的值太多(预期为 4):next_state、reward、done、_ = env.step(action)

添加返回值

next_state, reward, done, _, __ = env.step(action)

4. 从 numpy.ndarrays 列表创建张量非常慢。请考虑使用 numpy.array() 将列表转换为单个 numpy.ndarray

def take_action(self. state)
    ....
    'state = torch.tensor(np.array([state]), dtype=torch.float).to(self.device)'
    ....

5. 新版本 env 无法自动停止,因此我们需要添加一个计数器

....
    for i_episode in range(int(num_episodes / 10)):
        episode_return = 0
        state = env.reset(seed=0)[0]
        done = False
        'steps = 0'
        while not done 'and steps < 200':
            'steps += 1'
            ....