Skip to content

Latest commit

 

History

History
72 lines (49 loc) · 5.18 KB

README_zh.md

File metadata and controls

72 lines (49 loc) · 5.18 KB

Accelerated-TD

我对加速的梯度时序差分算法(Accelerated Gradient Temporal Difference Learning algorithm, ATD)的Python实现。

GitHub code size in bytes GitHub GitHub issues Gitee issues GitHub Pull requests Contribution GitHub Repo stars GitHub forks Gitee Repo stars Gitee forks

介绍

智能体

PlainATDAgent 直接更新 矩阵而 SVDATDAgentDiagonalizedSVDATDAgent 分别更新其奇异值分解。这在论文的作者(论文链接见后)看来具有更小的复杂度。 SVDATDAgentDiagonalizedSVDATDAgent 的区别在于 SVDATDAgent 采用了这里提到的方法:Brand 2006DiagonalizedSVDATDAgent 采用了这里提到的方法Gahring 2015 来对角化 矩阵以便矩阵的伪逆更容易计算。尽管这种方法我还没完全搞懂。 我还实现了一个名为 TDAgent 的传统梯度时间差异代理。我在下面介绍的几种环境中对它们进行了测试。

后端支持

我为 PyTorch(CPU) 提供了后端支持,以跳过从 numpy.ndarraytorch.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

测试

随机游走(Random Walk)

这个环境来自Sutton的书

代码文件是这个,结果在这random_walk

Boyan的链(Boyan's Chain)

该环境是在Boyan 1999中提出的。

代码文件是这个,结果在这boyans_chain

使用方法

要将我的算法实现导入您的项目,如果您对此不太熟悉,请按照这些说明进行操作。

  1. 克隆存储库并将 atd.py 复制到您想要的位置。如果您从 GitHub 下载了 .zip 文件,请记得将其解压缩。
  2. 将此代码添加到 Python 脚本的头部:
    from atd import TDAgent, SVDATDAgent, DiagonalizedSVDATDAgent, PlainATDAgent # 或者你想要的任何智能体
  3. 如果目标目录与您要执行的 Python 主程序文件所在的目录不同,您应该使用此代码片段而不是步骤 2 中的来将相应的目录附加到环境变量,以便 Python 解释器可以找到它。或者,您可以考虑较新版本 Python 提供的 importlib
    import sys
    
    sys.path.append("<你放置 atd.py 的目录>")
    from atd import TDAgent, SVDATDAgent, DiagonalizedSVDATDAgent, PlainATDAgent # 或者你想要的任何智能体
  4. 像这样初始化一个智能体,你就可以用它了!
    agent = TDAgent(lr=0.01, lambd=0, observation_space_n=4, action_space_n=2)

参考文献:Gahring 2016

随便提Pull Requests!我期待着您的评论。