Python クラスって難しい(クラスの使い方を勉強しなおしました)
Deep Q-Network(DQN)による倒立振子 第4回
はじめに
今回はこちらの二行を見ていきます。
memory = Memory(max_size=memory_size) actor = Actor()
クラス:Memoryを呼び出しています。
# [3]Experience ReplayとFixed Target Q-Networkを実現するメモリクラス class Memory: def __init__(self, max_size=1000): self.buffer = deque(maxlen=max_size)
self.buffer = deque(maxlen=max_size)
deque(引数)でdequeオブジェクトを生成する。
デック(英: deque)は、計算機科学における抽象データ型の1つで、先頭または末尾で要素を追加・削除できるキューである。(ウィキペディア(Wikipedia)より)
先頭・末尾の要素に対する削除や追加(挿入)は標準のリストより処理速度が速い(逆にdequeは両端以外の要素へのアクセスが遅い)
ここであることに気づきました。。。
print(memory)
を使ってmemoryの中身を見ようとしたところ、
<__main__.Memory object at 0x000002384B40BC88>
と出力されました。
どういうことか調べてみると、クラスのインスタンスを生成していただけでした。
(クラスの使い方を勉強してなかったので基本中の基本がわかってなかったです)
クラスの定義
クラスを利用したい場合は、関数を実行するときと同じように「()」を後ろにつけてインスタンスを生成します。
つまり、昨日(前回)から調べていたのは
クラスを使えるように準備していただけでした。
# [5.2]Qネットワークとメモリ、Actorの生成
と、きちんと説明されていたのに、、、
あらためて、
print(memory.buffer)
を使ってmemory.bufferの中身を確認しました。
deque([], maxlen=10000)
出ました!空のデック(リストみないなやつ)が作られてました。
以上で「memory = Memory(max_size=memory_size)」の部分はオッケーです。
同様に「actor = Actor()」の部分は
クラスActorを呼び出して変数actorに格納しています。(インスタンス化する)
クラスの説明・実行例はこちらの動画がとても分かりやすかったです。
本日はここまで。次回に続きます。
参考サイト
保存ファイル
lesson49.py
文責:Luke