Pytorch实现DDPG算法

本文介绍了如何使用Pytorch实现DDPG算法,该算法基于Actor-Critic结构,结合DQN思想处理连续动作问题。文章详细阐述了网络结构、学习过程、记忆库的使用以及在目标网络更新和动作选择策略上的技巧,如soft-replacement和添加噪声。
摘要由CSDN通过智能技术生成


DDPG是强化学习里的一种经典算法。关于算法的原理我在之前的文章里有详细介绍过: 强化学习入门8—深入理解DDPG

在学习莫凡大神的教程中,莫凡大神用的是tensorflow实现的DDPG。因为平时使用pytorch较多,且大神当时使用的tensorflow版本也较低,于是便借此使用pytorch复现一下DDPG。

注意:本文参考的是莫凡大神的tf版本的代码,指路👉 https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/intro-DDPG/

回顾DDPG

在这里插入图片描述

DDPG即Deep Deterministic Policy Gradient,确定性策略梯度算法。它结构上基于Actor-Critic,结合DQN算法的思想,使得它不仅可以处理离散型动作问题,也可以处理连续型动作问题。

实现

话不多说,直接上代码

首先是定义Actor和Critic两个网络。

结合上面的图,Actor的输入是当前的state,然后输出的是一个确定性的action。

class Actor(nn.Module):
    def __init__(self, state_dim, action_dim, action_bound):
        super(Actor,self).__init__()
        self.action_bound = torch.FloatTensor(action_bound)
        # layer
        self.layer_1 = nn.Linear(state_dim, 30)
        nn.init.normal_(self.layer_1.weight, 0., 0.3) # 初始化权重
        nn.init.constant_(self.layer_1.bias, 0.1)
        
				self.output = nn.Linear(30, action_dim)
        self.output.weight.data.normal_(0.,0.3) # 初始化权重
        self.output.bias.data.fill_(0.1)

    def forward(self, s):
        a = torch.relu(self.layer_1(s))
        a = torch.tanh(self.output(a))
        # 对action进行放缩,实际上a in [-1,1]
        scaled_a = a * self.action_bound
        return scaled_a

在动作输出这里,加了一个 action bound 在,只是用于限制一下action的范围。

Critic网络输入的除了当前的state还有Actor输出的action,然后输出的是Q-value,即 Q(s,a)

class Critic(nn.Module):
    def __init__(self, state_dim, action_dim):
        super(Critic,self).__init__()
        n_layer = 30
        # layer
        self.layer_1 = nn.Linear(state_dim, n_layer)
        nn.init.normal_(self.layer_1.weight, 0., 0.1)
        nn.init.constant_(self.layer_1.bias, 0.1)
        
        self.layer_2 = nn.Linear(action_dim, n_layer)
        nn.init.normal_(self.layer_2.weight, 0., 0.1)
        nn.init.constant_(self.layer_2.bias, 0.1)
        
        self.output = nn.Linear(n_layer,
  • 14
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值