强化学习—PPO代码实现及个人详解2(python)

下面我们接着说代码的第二部分:

二、定义经验回放

import random
from collections import deque


class ReplayBufferQue:
    '''DQN的经验回放池,每次采样batch_size个样本,这里分两类采样方式,用的是第二类PGReplay'''

    def __init__(self, capacity: int) -> None:
        self.capacity = capacity
        self.buffer = deque(maxlen=self.capacity)

    def push(self, transitions):
        '''_summary_
        Args:
            transitions (tuple): _description_
        '''
        self.buffer.append(transitions)

    def sample(self, batch_size: int, sequential: bool = False):
        if batch_size > len(self.buffer):
            batch_size = len(self.buffer)
        if sequential:  # sequential sampling
            rand = random.randint(0, len(self.buffer) - batch_size)
            batch = [self.buffer[i] for i in range(rand, rand + batch_size)]
            return zip(*batch)
        else:
            batch = random.sample(self.buffer, batch_size)
            return zip(*batch)

    def clear(self):
        self.buffer.clear()

    def __len__(self):
        return len(self.buffer)


class PGReplay(ReplayBufferQue):
    '''PG的经验回放池,每次采样所有样本,因此只需要继承ReplayBufferQue,重写sample方法即可
    '''

    def __init__(self):
        self.buffer = deque()

    def sample(self):
        ''' sample all the transitions
        '''
        batch = list(self.buffer)
        return zip(*batch)

这是深度学习必备的经验回放池,说就简单点就是存取数据的,这里分了两个大类:

第一类是ReplayBufferQue。首先初始化,参数 capacity表示回放缓冲区的容量。然后创建一个双向队列 self.buffer 作为回放缓冲区,并设置最大长度为 capacity,超出部分会自动移除。之后定义一个push方法,将数据transitions添加到回放缓冲区 self.buffer 中。再定义了一个sample,用于从回放缓冲区中采样数据。之后根据参数 sequential 的取值,进行不同的采样方式。如果 sequential 为 True,则进行顺序采样;否则进行随机采样。clear 用于清空回放缓冲区。Len用于返回回放缓冲区的长度。最后会返回打包好的随机数据。

(关于双向队列deque,可以学习这篇文章:python双向队列deque

第二类是PGReplay ,继承自 ReplayBufferQue 类。(这一类是采样所有数据)这样就可以避免代码重写。子类具有经验回放池的基本功能,并且可以重写父类中的方法(如 sample() 方法)。首先初始化,这里并没有传入参数,但会创建一个空的双向队列 self.buffer。之后用list将整个缓冲区的数据转换为列表,并传出去。最后返回zip对象。

(上面提到了一个知识点,就是子类和父类,子类如果继承父类,很多重复代码都可以不用写了,具体解释和深刻理解可以看这篇文章:Python:类的继承,调用父类的属性和方法基础详解

经验回放技术的核心思想是将Agent与环境交互得到的经验数据(在每一步中收集到状态、动作、奖励、下一个状态等经验数据。)存储在一个经验回放缓冲区(Replay Buffer)中,并从中随机抽样一批数据用于训练深度神经网络

回放缓冲区:通常使用循环缓冲区(Circular Buffer)或双端队列(deque)来实现。

注意:

(1)zip() 函数用于将多个可迭代对象中对应位置的元素打包成元组。而*符号用于解压参数,将包含多个可迭代对象的列表拆分为独立的参数传递给函数。打个比方:batch 应该是一个包含多个列表(或其他可迭代对象)的列表,如 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]。通过 zip(*batch),将这些子列表中对应位置的元素打包成元组,例如 (1, 4, 7)、(2, 5, 8)、(3, 6, 9)。

(2)函数注解中使用 -> None 表示该函数的返回值类型为 None,即函数不返回任何有意义的值,类似于在函数体中显式地使用 return None。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: PPO (Proximal Policy Optimization) 是一种基于梯度的强化学习算法。它的主要思想是通过对策略的更新来提高策略的效率。主要包括以下步骤: 1. 首先选取一个初始策略,然后使用这个策略在环境中进行多次探索。 2. 收集探索中获得的数据,并使用这些数据来估计策略的价值。 3. 通过梯度下降法来更新策略,使得策略的价值更高。 4. 通过使用一个称为“clip”的技巧来限制策略的更新,以避免策略变得过于激进。 5. 重复上述步骤,直到策略达到最优。 PPO 通过在策略迭代过程中限制更新的幅度来防止策略的更新过于激进,从而提高了稳定性和效率。这也是为什么 PPO 算法在实际应用中表现很好的原因。 ### 回答2: 强化学习ppo算法,全称是Proximal Policy Optimization,是一种用于解决连续动作空间问题的强化学习算法。 ppo算法的核心思想是通过参数更新策略,优化策略的近似目标函数,以获得更好的策略。它采用了两个核心技术:策略评估和策略改进。 首先,ppo算法使用一个神经网络来表示策略,并基于当前策略采样生成训练数据。然后,利用产生的训练数据来更新策略模型的参数,提高策略的性能。 在策略评估方面,ppo算法采用了一种称为价值函数的辅助函数,用于估计当前策略的优劣。这个价值函数可以帮助判断哪些动作对于获得更好的回报是有帮助的。通过评估策略的优劣,可以确定哪些策略需要得到改进,以及改进的方向。 在策略改进方面,ppo算法使用一种叫做近端策略优化的方法,将策略的更新限制在一个可接受的范围内,防止策略的更新过于剧烈。这种方法可以保证策略更新的稳定性,并且避免一些不可预见的问题。 最后,通过多轮的策略评估和策略改进,ppo算法可以逐步优化策略,提高强化学习的性能。相比于传统的强化学习算法,ppo算法具有较强的鲁棒性和稳定性。 总结来说,ppo算法是一种用于解决连续动作空间问题的强化学习算法,通过使用策略评估和策略改进的方法,优化策略模型的参数,以提高策略的性能。它具有鲁棒性和稳定性的优势,适用于许多实际问题的求解。 ### 回答3: 强化学习(Reinforcement Learning)是一种机器学习方法,其通过智能体(agent)与环境(environment)的交互学习,通过观察环境状态和采取不同的行动来优化策略,使得智能体获得更高的奖励。 其中,PPO(Proximal Policy Optimization)是一种基于策略梯度(Policy Gradient)的强化学习算法。PPO算法通过定义一个目标函数,通过最大化该目标函数,优化策略。其基本思想是通过充分利用已有数据的经验,进行更新,并保证更新策略与之前的策略之间的差异不会太大,避免过大的策略改变导致训练不稳定。PPO算法的目标函数使用了一种被称为"近似比率(Importance Sampling Ratio)"的技巧,用于约束策略更新的幅度。 PPO算法具体步骤如下: 1. 初始化策略参数 2. 根据当前策略与环境交互采集样本数据 3. 计算采集到的样本数据的优势估计值,用于评估每个状态行动对的价值 4. 根据样本数据计算目标函数,并通过优化算法(如Adam)更新策略参数 5. 重复步骤2-4,直到达到预设的训练轮数或满足停止条件 PPO算法相较于其他强化学习算法的优势在于,其采用了一种近似比率的方法来约束策略更新范围,避免了过于剧烈的改变,增强了算法的稳定性。此外,PPO算法还可通过引入剪切或克隆操作来控制策略更新的幅度,进一步增加算法的稳定性。 总结起来,PPO算法是基于策略梯度的一种强化学习算法,通过近似比率来约束策略更新的幅度,以提高算法的稳定性。通过与环境的交互学习,PPO算法能够优化策略,并使智能体获得更好的奖励。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值