加速勾配時間差学習アルゴリズム(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も必要です。
この環境はサットンの本からのものです。
この環境は、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
プルリクエストについてお気軽にご連絡ください。コメントをお待ちしております。