文章推荐:MFC/C++学习系列之简单记录8——消息映射
文章链接:MFC/C++学习系列之简单记录8——消息映射-腾讯云开发者社区-腾讯云
文章简介:本文介绍了MFC的消息映射类,包括DoDataExchange 函数、BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 宏,并于WPF做对比,代码解释详细且包含代码实现后效果,适合初学者已经需要使用句柄的朋友!
ppo算法通常用于离散动作的学习,但也可以实现连续动作学习。采用off-policy的更新策略,离散动作和连续动作的PPO算法网络结构分析,为使用PPO算法提供依据。
PPO(Proximal Policy Optimization)强化学习算法通过限制策略更新的范围,实现了稳定且高效的策略优化,适合在复杂环境中执行连续动作的优化。
1、连续动作的actor层
self.actor = nn.Sequential(
nn.Linear(state_dim, 64),
nn.Tanh(),
nn.Linear(64, 32),
nn.Tanh(),
nn.Linear(32, action_dim),
nn.Tanh())
2、离散动作的actor层
self.action_layer = nn.Sequential(
nn.Linear(state_dim, n_latent_var),
nn.Tanh(),
nn.Linear(n_latent_var,
n_latent_var),
nn.Tanh(),
nn.Linear(n_latent_var, action_dim), nn.Softmax(dim=-1) )
在PPO算法中,网络结构的最后一层之所以能决定是连续动作还是离散动作,是因为最后一层的激活函数会直接影响输出的格式,以适应不同的动作空间需求。
对于连续动作空间(如 BipedalWalker 环境):
· 输出代表的是动作的均值,在连续动作空间中,动作不再是离散的类别,而是一个区间内的数值。网络输出后会用一个高斯分布来采样生成动作。
· 最后一层使用 Tanh 激活函数,将输出范围限制在 [-1 ,1 ]之间。通过这种方式,可以控制动作值在合理范围内。
· PPO中会使用该均值输出和一个固定的方差定义一个多元高斯分布,根据分布采样出具体动作。
对于离散动作空间(如 CartPole 环境):
· 输出代表每个动作的概率分布,离散动作空间中每个动作都是一个离散类别,因此需要得到每个动作的概率。
· 使用 Softmax 激活函数将输出转换成概率分布,每个输出的概率和为1。然后可以根据这些概率来采样动作。
· 连续动作:使用 Tanh 限制输出范围,然后定义正态分布进行采样,得到连续值的动作。
· 离散动作:使用 Softmax 产生概率分布,然后根据该分布随机采样得到动作类别。
邀请人:升级打怪的菜鸟
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。