【强化学习】倒立摆-PPO算法

先从最简单的开始入门吧

主要参考:

阿里云强化学习训练营

主要改动:

  1. 因为原代码使用Categorical,训练效果不佳,改成了比较简单的动作选择,效果改善了。
  2. 添加一部分函数的说明[Categorical, gather, clamp]
强化学习

类似巴普洛夫的狗

环境=>观测=>动作=>环境改变=>观测

通过奖励,训练模型采取更好的策略。

倒立摆

在倒立摆中,环境的观测值就是

  • 小车在轨道上的位置
  • 杆子与竖直方向的夹角
  • 小车速度
  • 角度变化率

动作为:

  • 0 左
  • 1 右

训练模型,让其学会左右移动,使得杆子与数值方向夹角为0

代码
#导入gym和torch相关包
import gym
import random
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.distributions import Categorical

超参数设置

#Hyperparameters
learning_rate = 0.0005  #学习率
gamma = 0.98  #
lmbda = 0.95 #
eps_clip = 0.1 #
K_epoch = 3    # 
T_horizon = 20 # 

1.定义PPO架构


class PPO(nn.Module):
    def __init__(self):
        super(PPO, self).__init__()
        self.data = []  #用来存储交互数据
        self.fc1 = nn.Linear(4, 256)  #由于倒立摆环境简单,这里仅用一个线性变换来训练数据
        self.fc_pi = nn.Linear(256, 2)  #policy函数, 动作只有左和右,因此输出是2
        self.fc_v = nn.Linear(256, 1)  #value函数(输出v),值只有1,因此输出为1
        self.optimizer = optim.Adam(self.parameters(), lr=learning_rate)  #优化器

    #policy函数
    #输入观测值x
    #输出动作空间概率,从而选择最优action
    def pi(self, x, softmax_dim=0):
        x = F.relu(self.fc1(x))
        x = self.fc_pi(x)
        prob = F.softmax(x, dim=softmax_dim)
        # x形状20*2
        # 这里的dim取0,代表获取同一样本的动作空间softmax
        # 概率越大代表选择的可能性越大,在每次观测时,95%选择概率更大的动作,5%选择概率更小的动作。
        # 下面有个地方dim取1,代表获取一个批次(例如20次尝试)的softmax,不同状态时的动作概率
        return prob

    #value函数
    #输入观测值x
    #输出x状态下value的预测值(reward),提供给policy函数作为参考值
    def v(self, x):
        x = F.relu(self.fc1(x))
        v = self.fc_v(x)
        return v

    #把交互数据存入buffer
    def put_data(self, transition):
        self.data.append
  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
强化学习是一种机器学习方法,其目标是使智能体通过与环境的交互,逐步学习如何在给定的任务中获得最大的累积奖励。倒立摆是一个经典的控制系统的问题,它需要智能体通过施加力或扭矩来使杆保持直立。 在倒立摆问题中,智能体需要根据当前的状态(例如杆的角度和角速度)来选择一个动作(给杆施加一个力或扭矩),以使杆保持直立。智能体通过与环境的交互,不断观察状态和奖励,并通过调整动作来学习如何使杆保持平衡。 Matlab是一种强大的数值计算和编程环境,可以用于实现强化学习算法。在倒立摆问题中,可以使用Matlab编写强化学习算法的相关代码。 首先,需要定义倒立摆的状态空间和动作空间。状态空间可以定义为杆的角度和角速度的范围,动作空间可以定义为给杆施加的力或扭矩的范围。 接下来,可以使用Matlab实现强化学习算法的主要部分,包括状态转换、奖励函数和策略选择。状态转换可以根据当前的状态和动作计算下一个状态,奖励函数可以根据当前的状态和动作计算对应的奖励,策略选择可以根据当前的状态选择一个动作。 最后,可以使用Matlab的优化和数值计算工具来优化策略,以使智能体能够在倒立摆问题中获得最大的累积奖励。 总之,使用Matlab可以实现强化学习倒立摆算法,通过与环境的交互和优化策略,智能体可以学习如何使杆保持直立。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值