引用来自ShangtongZhang的代码chapter12/mountain_car.py
使用喜闻乐见的MountainCar来测试Sarsa(λ)算法的性能
因为一直在纠结true online Sarsa(λ)的问题,然后我发现效果惨不忍睹。。。不知道是自己的问题还是不太合适用在这,可以在下面看出来。因为训练速度很慢(全部训练完差不多一下午,中间我还在sao改),所以就借鉴一下大佬的结果。
问题描述
使用强化学习中的经典任务——Mountain Car来测试Sarsa(λ)和true on-line Sarsa(λ)算法的性能,同时也测试了不同的Eligibility trace对Sarsa(λ)算法性能的影响。
Mountain Car的具体描述可以参考例子mountain car
引入模块
1 | import numpy as np |
下面模块的代码和mountain car一致,建议看之前再熟悉一下Tile Coding的原理
1 | ####################################################################### |
定义3种常见的Eligibility trace,就是更新公式里常见的z
1 | # accumulating trace update rule |
定义Sarsa(λ)算法类
1 | # wrapper class for Sarsa(lambda) |
agent完成play,并绘制使用不同trace的cost map
1 |
|
100%|██████████| 30/30 [02:07<00:00, 4.19s/it]
100%|██████████| 30/30 [01:49<00:00, 3.72s/it]
100%|██████████| 30/30 [01:42<00:00, 3.45s/it]
100%|██████████| 30/30 [01:37<00:00, 3.13s/it]
100%|██████████| 30/30 [01:44<00:00, 3.31s/it]
100%|██████████| 30/30 [01:42<00:00, 3.17s/it]
100%|██████████| 30/30 [01:40<00:00, 3.37s/it]
100%|██████████| 30/30 [01:36<00:00, 3.14s/it]
100%|██████████| 30/30 [01:36<00:00, 3.36s/it]
100%|██████████| 30/30 [01:07<00:00, 2.24s/it]
100%|██████████| 30/30 [00:57<00:00, 1.90s/it]
100%|██████████| 30/30 [00:53<00:00, 1.77s/it]
100%|██████████| 30/30 [00:49<00:00, 1.63s/it]
100%|██████████| 30/30 [00:46<00:00, 1.56s/it]
100%|██████████| 30/30 [00:45<00:00, 1.45s/it]
100%|██████████| 30/30 [00:45<00:00, 1.54s/it]
figure_12_10:
figure_12_11:
why online Sarsa(λ) so terrible QAQ: