算法实战篇(二),Tensorflow实现Actor-Critic框架下的经典PPO算法

本篇是我们算法实战的第二篇,针对的是我们在“基础算法篇(六),基于AC框架的PPO算法”中提出的相关算法,具体算法中部分参考了莫烦老师的相关代码,在这里向莫烦老师表示感谢。

一、基础游戏背景介绍

在这次代码实现中,为了体现与前面离散型输出的不同,我们特意选择了Gym中的转动杆游戏,如下图:
在这里插入图片描述

游戏的目标就是给转动杆一个力,最终让它能够稳定的立起来。这个游戏与DQN中使用的“活动杆小车”游戏不同的是,这个游戏的输入action_space是一个Box(1,)类型,即一个float的连续值。同时,这个游戏的输出observation_space是一个Box(3,)类型,是三个float的数组。
其他关于编程环境的搭建,请大家参考“番外篇,强化学习基础环境搭建
下面我们正式进入我们的程序。

二、主函数

同样的,让我们先看main()函数:

def main():
    # first, create the envrioment of 'Pendulum-v0'
    # the game Pendulum-v0's observation_space is Box(3,), it means the observation has three var and each one is float
    # the action_space is Box(1,), it means the action has one var and is float
    # the output of the game is continuous, not discrete
    env = gym.make(ENV_NAME).unwrapped
    # second, create the PPO agent. it is based the AC arch, so it has two type of network
    # the critic which give the value of the state
    # the actor which give the action
    agent = PPO(env.observation_space, env.action_space)
    for episode in range(EPISODES):
        # every episode reset the memory
        agent.resetMemory()
        # get the initial state
        state = env.reset()
        # this is the total reward
        ep_r = 0
        for step in range(STEPS):
            # show the game window
            env.render()
            # output the action
            action = agent.Choose_Action(state)
            # process the action and get the info
            next_state, reward, done, info = env.step(action)
            # store the date to update the model
            agent.Store_Data(state, action, reward, next_state, done)
            # train the agent every BATCH_SIZE
            if (step + 1) % BATCH_SIZE == 0 or step == STEPS - 1:
                agent.Train(next_state)
            # set the new state
            state = next_state
            # record the reward
            ep_r += reward
            if step == STEPS - 1:
                agent.UpdateActorParameters()
        # caculate the total reward in every episode
        if episode == 0:
            all_ep_r.append(ep_r)
        else:
            all_ep_r.append(all_ep_r[-1] * 0.9 + ep_r * 0.1)
        print(
            'Ep: %i' % episode,
            "|Ep_r: %i" % ep_r,
            ("|Lam: %.4f" % METHOD['lam']) if METHOD['name'] == 'kl_pen' else '',
        )

上述主函数主要分为以下几步(针对每一行代码):

  • 1.生成环境对象env
  • 2.生成PPO对象agent
  • 3.开始每一幕(Episode)循环
  • 4.首先重置agent存储的数据,将上一幕存储的数据清零
  • 5.得到环境的初始状态
  • 6.设置记录这一幕reward的变量
  • 7.开始这一幕中每一步(Step)的循环
  • 8.首先显示游戏窗口
  • 9.基于状态state,利用agent生成行动action
  • 10.将action输入环境,得到下一个状态next_state和实时收益reward等数据
  • 11.存储相关数据
  • 12.如果满足训练条件,则进行agent的训练,用梯度下降更新相关Critic和Actor网络参数
  • 13.将最新得到的下一个状态,改为现有状态
  • 14.判断是否是最后一个step,如果是,则执行两个actor参数的拷贝更新,否则继续执行步循环,直到走完设计的步数
  • 15.后续的代码是记录每个Episode的总得分,并将其存储和打印出来

我们可以看出,从主函数角度来讲,与DQN的函数基本一致,区别在于这里是每个Episode直接打印结果。
下面,我们来详细介绍基于Actor-Critic框架的PPO类。

三、Agent类

在“基础算法篇(六),基于AC框架的PPO算法”中我们介绍了相关算法,这里我们是严格按照算法进行的实现,其中网络构建了两类三个:

  • 价值网络(Critic),一个网络,输入是环境的状态,输出是这个状态的价值;
  • 策略网络(Actor),两个网络,一个用来与环境交互,另一个进行参数更新,这种方式主要用来解决经典PG算法中的“采集数据不能够重复使用的问题”。

下面我们详细介绍相关代码实现部分。

(一)PPO类的初始化函数

PPO类的初始化主要是导入观测空间和行动空间的大小,并根据这两个量生成相应的策略和价值网络,具体代码如下:

def __init__(self, observation_space, action_space):
    
  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ppo(proximal policy optimization)是一种用于强化学习的策略优化算法,其基本思想是在策略更新函数的优化过程中,使用了一些新的技巧来提高学习效率和稳定性。 actor-critic是一种深度强化学习算法,其中actorcritic分别负责学习决策策略和估计价值函数。actor-critic算法通过训练actorcritic模型来实现策略优化。 pp actor-critic算法结合了ppoactor-critic的两种算法,是一种新的策略优化算法。它通过使用ppo算法对策略进行优化,并使用actor-critic算法来学习和估计策略价值。在这种模型中,actor负责生成动作,critic负责评估策略价值,pp算法保证了策略更新的稳定性和效率。 pp actor-critic算法具有许多优点,例如可以有效地解决强化学习中出现的稀疏奖励和高维空间问题,能够在没有先验知识的情况下自动学习和适应。不过,它的训练过程比较复杂,需要选择合适的超参数,并且需要较长的训练时间来获得最佳效果。 尽管存在一些挑战,但pp actor-critic算法仍被广泛应用于各种强化学习任务,例如游戏、机器人控制等。它的发展也为解决实际应用中的问题提供了新的思路和方法。 ### 回答2: PPO Actor-Critic是深度强化学习领域中的一个算法。它是基于Actor-Critic方法的一种改进。Actor-Critic算法将决策策略和价值函数相结合,以达到更准确的评估和更新。而PPO算法则是为了解决常规Policy Gradient算法的训练不稳定性而提出的一种策略优化算法PPO Actor-Critic算法的核心思想是通过对策略的更新,不断改善训练的效果。该算法是由Proximal Policy Optimization(PPO算法Actor-Critic算法结合而成。在训练过程中,PPO Actor-Critic会利用现有的经验,通过Actor-Critic算法更新策略和价值函数。其更新策略的过程中,会采用PPO算法进行优化,从而能够根据实际情况平衡策略更新和训练效果。 PPO Actor-Critic算法的优点是能够同时利用线性和非线性的函数逼近器来最小化优势函数的误差。从而避免了传统策略梯度算法的过拟合问题,大大增强了该算法的鲁棒性。此外,PPO Actor-Critic也能够避免过多的数据采样和重复推断,大大提升了算法的效率。 综上所述,PPO Actor-Critic是一种结合了PPO算法Actor-Critic算法强化学习算法,可用于训练智能代理以达到更精确的评估和更新。 ### 回答3: PPO Actor-Critic 是指一种深度强化学习算法。在这种算法中,通过两个模型一起工作来提高决策过程的效率。 其中,Actor 模型用于执行动作。它使用一系列状态来计算每个可能的策略,并选择相应的行动方案。这个过程被看作是一个正则化的过程。这意味着在执行过程中,Actor 模型不断从环境中获取反馈信息,并根据这些反馈信息进行优化。 相反,Critic 模型则用于评估 Actor 模型的表现。它通过测量实际的奖励和预测的奖励之间的差距来判断 Actor 模型是否做决策。如果结果不好,则系统会通过重新计算 Actor 模型的策略来提出新的决策方案。 PPO Actor-Critic 算法通过优化 Actor 模型的过程来提高决策的效率。这通常会导致更好的策略和更好的结果。此外,由于 Critic 模型的存在,系统可以更好地理解和评估策略的表现。这使得 PPO Actor-Critic 算法成为适用于机器人控制、游戏策略和金融交易等领域的一种流行算法
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值