質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

850閲覧

self.memory.append(None) つくりながら学ぶ! 深層強化学習のコードでわからない部分

katahaba

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/12/05 19:19

編集2019/12/05 19:44

つくりながら学ぶ! 深層強化学習のコードでわからない部分がありました。
self.memory.append(None) # メモリが満タンでないときは足す
と書かれた部分で、Noneを追加する意味はindexのところの追加領域を確保するためかなと思ったのですが、
次の行でtransitionを足した結果メモリからはみ出たらどうするんだろうという疑問があります。
常に大きさ的に None > Transition(state, action, state_next, reward)が成り立ってないとだめなきがするのですが、Noneのメモリサイズっていくつなんでしょうか?
どなたかご教授ください。お願いします。
以下コードです。

python

1# 経験を保存するメモリクラスを定義します 2 3 4class ReplayMemory: 5 6 def __init__(self, CAPACITY): 7 self.capacity = CAPACITY # メモリの最大長さ 8 self.memory = [] # 経験を保存する変数 9 self.index = 0 # 保存するindexを示す変数 10 11 def push(self, state, action, state_next, reward): 12 '''transition = (state, action, state_next, reward)をメモリに保存する''' 13 14 if len(self.memory) < self.capacity: 15 self.memory.append(None) # メモリが満タンでないときは足す 16 17 # namedtupleのTransitionを使用し、値とフィールド名をペアにして保存します 18 self.memory[self.index] = Transition(state, action, state_next, reward) 19 20 self.index = (self.index + 1) % self.capacity # 保存するindexを1つずらす 21 22 def sample(self, batch_size): 23 '''batch_size分だけ、ランダムに保存内容を取り出す''' 24 return random.sample(self.memory, batch_size) 25 26 def __len__(self): 27 '''関数lenに対して、現在の変数memoryの長さを返す''' 28 return len(self.memory)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

説明のためにクラスでない場合とします。

Python

1memory = [] 2index = 0 3 4#下記はエラーになる(index out of range) 5memory[index] = 100 6 7#下記はエラーにならない 8memory.append(None) 9memory[index] = 100

self.memory[self.index] = Transition(state, action, state_next, reward)
上記コードにてエラーを回避するため事前にリストの長さを拡張しているのだと思います。

※ご質問のコードはPCのメモリ領域を確保するものとは異なります。

投稿2019/12/06 11:38

meg_

総合スコア10577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問