我对加速的梯度时序差分算法(Accelerated Gradient Temporal Difference Learning algorithm, ATD)的Python实现。
PlainATDAgent
直接更新 矩阵而 SVDATDAgent
和 DiagonalizedSVDATDAgent
分别更新其奇异值分解。这在论文的作者(论文链接见后)看来具有更小的复杂度。 SVDATDAgent
和 DiagonalizedSVDATDAgent
的区别在于 SVDATDAgent
采用了这里提到的方法:Brand 2006 而 DiagonalizedSVDATDAgent
采用了这里提到的方法Gahring 2015 来对角化 矩阵以便矩阵的伪逆更容易计算。尽管这种方法我还没完全搞懂。
我还实现了一个名为 TDAgent
的传统梯度时间差异代理。我在下面介绍的几种环境中对它们进行了测试。
我为 PyTorch(CPU) 提供了后端支持,以跳过从 numpy.ndarray
到 torch.Tensor
的转换过程,反之亦然。要想使用此支持,您可以在导入 atd
模块之前添加此代码:
import os
os.environ["ATD_BACKEND"] = "NumPy" # 或 "PyTorch"
如果您想要自己运行测试,只需克隆此仓库并运行 python algorithm_test/<random_walk 或 boyans_chain>.py
。:)
- Python>=3.9
- NumPy>=1.19
- 如果你想使用 PyTorch 作为后端,那么还需要Torch>=1.10
- 如果你想运行我的测试脚本,那么还需要Matplotlib>=3.3.3
- 如果你想运行我的测试脚本,那么还需要Tqdm
这个环境来自Sutton的书。
该环境是在Boyan 1999中提出的。
要将我的算法实现导入您的项目,如果您对此不太熟悉,请按照这些说明进行操作。
- 克隆存储库并将
atd.py
复制到您想要的位置。如果您从 GitHub 下载了 .zip 文件,请记得将其解压缩。 - 将此代码添加到 Python 脚本的头部:
from atd import TDAgent, SVDATDAgent, DiagonalizedSVDATDAgent, PlainATDAgent # 或者你想要的任何智能体
- 如果目标目录与您要执行的 Python 主程序文件所在的目录不同,您应该使用此代码片段而不是步骤 2 中的来将相应的目录附加到环境变量,以便 Python 解释器可以找到它。或者,您可以考虑较新版本 Python 提供的
importlib
。import sys sys.path.append("<你放置 atd.py 的目录>") from atd import TDAgent, SVDATDAgent, DiagonalizedSVDATDAgent, PlainATDAgent # 或者你想要的任何智能体
- 像这样初始化一个智能体,你就可以用它了!
agent = TDAgent(lr=0.01, lambd=0, observation_space_n=4, action_space_n=2)
参考文献:Gahring 2016
随便提Pull Requests!我期待着您的评论。