## 强化学习分为on-policy和off-policy。从数据的角度来说,不同之处就在于数据是不是一次性的,对于on-policy就是一次性的,用完就扔,对于off-poilcy来说就是有一个大buffer来存放数据,用了一次还可以再用很多次。那么数据如何有效方便存储就是一个问题。
On-poilicy
使用list存储数据。
关键代码如下:
states, actions, rewards = [],[],[]
for _ in range(len_episode):
#
#就是选择动作,使用agent产生数据之类的操作
#
states.append(s)
actions.append(a)
rewards.apeend(r)
# 收集完数据之后可能要进行一些数据处理,比如说,计算discount reward,计算优势函数等
## 现在开始训练
# 对于有的算法,需要用batchsize,那么:
if len(actions) < bastchsize:
states = np.array(states)
# 其他数组同
#然后训练
if len(actions) > bactchsize:
for _ in range(epoches):
total = zip(states, actions, rewards)
total_ = total
for _ in range(int(len(actions))%batchsize):
sample = random.sample(total_,batchsize)
states[:],actions[:],rewards[:] = zip(*sample)
#训练网络
for i in sample:
total_.remove(i)
if len(total_) < batchsize:
states = np.array(states)
# ... 训练函数
使用deque,dataset,dict存储数据
(持续更新中。。。)