-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExperience.py
More file actions
27 lines (20 loc) · 811 Bytes
/
Experience.py
File metadata and controls
27 lines (20 loc) · 811 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from collections import deque
import random
import numpy as np
class ExperienceBuffer(object):
"""RL Agent's experience buffer"""
def __init__(self, buffer_size):
self._buffer_size = buffer_size
self._buffer = deque(maxlen=buffer_size)
def add(self, experience):
"""Add new experience"""
if len(self._buffer) + len(experience) > self._buffer_size:
self._popN(len(self._buffer)+len(experience)-self._buffer_size)
self._buffer.extend(experience)
def batch(self, batch_size):
"""Sample experience"""
return np.reshape(np.array(random.sample(self._buffer, batch_size)), [batch_size, 5])
def _popN(self, n):
"""Pop n oldest experiences from buffer"""
for _ in range(n):
self._buffer.popleft()