tensorflow - PPO可以应用于REINFORCE算法而不是A2C算法吗?
问题描述
除了为 A2C 做 PPO,我们可以为 REINFORCE 算法实现近端策略优化吗?喜欢下面的代码?
def update(self):
s, a, r, done_mask, prob_a = self.make_batch()
gamma = 0.99
k_epoch = 3
for i in range(k_epoch):
discounted_rewards = []
Gt = 0
for t in reversed(range(len(r))):
Gt = r[t] + done_mask[t]*gamma*Gt
discounted_rewards.append(Gt)
discounted_rewards.reverse()
discounted_rewards = T.tensor(discounted_rewards,dtype = T.float)
pi = self.model.forward(s)
pi_a = pi.squeeze(1).gather(1,a)
ratio = T.exp( T.log(pi_a) - T.log(prob_a) )
surr1 = ratio * discounted_rewards
eps_clip = 0.1
surr2 = T.clamp(ratio, 1-eps_clip, 1+eps_clip)*discounted_rewards
loss = -T.min(surr1, surr2)
self.optimizer.zero_grad()
loss.mean().backward(retain_graph=True)
self.optimizer.step()
解决方案
推荐阅读
- python-3.x - 使用 BeautifulSoup 进行抓取时遇到的这些不同错误是什么?
- javascript - 尝试使用 HTML、css Bootstrap4 和 JavaScript 编写石头剪刀布游戏,但无法让我的功能选择新图像工作
- android - 如何将 Firebase 查询快照“附加”到流中
- python - 如何修复 JSON UnicodeDecodeError:Python 中的“utf-8”错误?
- r - 为什么 sf::st_transform() 返回的对象的投影与调用中使用的投影不同?
- google-sheets - 过滤部分匹配的单元格
- ruby - 我是 ruby 语言的新手,正在尝试创建一个文本冒险游戏,我想包含两个字符串
- python - 获取插入MSSQL的行ID时,来自pyodbc的Python中的函数序列错误
- c - 此代码显示错误。你能教我什么是错误以及如何改变它吗?
- java - PDB 文件到角度以再次转换为 PDB 格式