diff --git a/docs/chapter1/RL_example.py b/docs/chapter1/RL_example.py index 1a6d730..c5ef084 100755 --- a/docs/chapter1/RL_example.py +++ b/docs/chapter1/RL_example.py @@ -41,6 +41,7 @@ def play_montecarlo(env, agent, render=False, train=False): env = gym.make('MountainCar-v0') env.seed(3) # 设置随机数种子,只是为了让结果可以精确复现,一般情况下可删去 agent = BespokeAgent(env) +print(type(env.observation_space)) print('观测空间 = {}'.format(env.observation_space)) print('动作空间 = {}'.format(env.action_space)) print('观测范围 = {} ~ {}'.format(env.observation_space.low, diff --git a/docs/chapter1/chapter1.md b/docs/chapter1/chapter1.md index 00e914c..4b69c0e 100644 --- a/docs/chapter1/chapter1.md +++ b/docs/chapter1/chapter1.md @@ -430,10 +430,13 @@ OpenAI是一家非营利性的人工智能研究公司,其公布了非常多 我们可以通过 pip 来安装 Gym 库,由于 Gym 库 0.26.0 及其之后的版本对之前的代码不兼容,所以我们安装 0.26.0 之前的 Gym,比如 0.25.2。 - ```bash pip install gym==0.25.2 ``` +此外,为了显示图形界面,我们还需要安装 pygame 库。 +```bash +pip install pygame +``` 在 Python 环境中导入Gym库,如果不报错,就可以认为 Gym 库安装成功。 @@ -554,14 +557,14 @@ print('动作数 = {}'.format(env.action_space.n)) 输出: ``` -观测空间 = Box(2,) +观测空间 = Box([-1.2 -0.07], [0.6 0.07], (2,), float32) 动作空间 = Discrete(3) 观测范围 = [-1.2 -0.07] ~ [0.6 0.07] 动作数 = 3 ``` -由输出可知,观测空间是形状为 (2,) 的浮点型 np.array,动作空间是取 {0,1,2} 的 int 型数值。 +由输出可知,观测是形状为 (2,) 的浮点型 np.array,动作空间是取 {0,1,2} 的 int 型数值。 接下来考虑智能体。智能体往往是我们自己实现的。我们可以实现一个智能体类————BespokeAgent 类,代码如下: @@ -617,7 +620,7 @@ train是 bool 型的变量,指示在运行过程中是否训练智能体,在 接下来,我们使用下面的代码让智能体和环境交互一个回合,并在交互过程中进行图形化显示,可用 env.close()语句关闭图形界面。 ```python -env.seed(0) # 设置随机数种子,只是为了让结果可以精确复现,一般情况下可删去 +env.seed(3) # 设置随机数种子,只是为了让结果可以精确复现,一般情况下可删去 episode_reward = play_montecarlo(env, agent, render=True) print('回合奖励 = {}'.format(episode_reward)) env.close() # 此语句可关闭图形界面 @@ -636,10 +639,10 @@ print('平均回合奖励 = {}'.format(np.mean(episode_rewards))) 输出: ``` -平均回合奖励 = -102.61 +平均回合奖励 = -106.63 ``` -小车上山环境有一个参考的回合奖励值 $-$110,如果连续 100 个回合的平均回合奖励大于 $-$110,则认为这个任务被解决了。BespokeAgent 类对应的策略的平均回合奖励就在 $-$110 左右。 +小车上山环境有一个参考的回合奖励值 $-$110,如果连续 100 个回合的平均回合奖励大于 $-$110,则认为这个任务被解决了。BespokeAgent 类对应的策略的平均回合奖励就在 $-$110 左右。完整代码实现可参考[小车上山代码](https://github.com/datawhalechina/easy-rl/blob/master/docs/chapter1/RL_example.py)。 测试智能体在 Gym 库中某个任务的性能时,学术界一般最关心 100 个回合的平均回合奖励。至于为什么是 100 个回合而不是其他回合数(比如 128 个回合),完全是习惯使然,没有什么特别的原因。对于有些任务,还会指定一个参考的回合奖励值,当连续 100 个回合的奖励大于指定的值时,就认为这个任务被解决了。但是,并不是所有的任务都指定了这样的值。对于没有指定值的任务,就无所谓任务被解决了或者没有被解决。