つくりながら学ぶ! 深層強化学習のコードでわからない部分がありました。
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)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。