自定义gym环境并使用RL训练--寻找宝石


完整代码已上传到 github
result_polyDL.mp4.gif


最近有项目需要用到RL相关的一些东西,于是就开始尝试自己搭建一个自定义的gym环境,并使用入门的DQN网络对这个环境进行训练,这个是我入门的第一个项目,可能有一些地方理解的不够的或者有问题的,希望见谅并能指正。

其中环境的自定义部分参考了csdn extremebingo的文章,模型建立与训练过程参考了: pytorch official tutorials,训练结果的展示参考了:tensorflow org tutorials

寻找宝石游戏

绿色的小圆圈代表机器人,红色圈圈表示火坑,蓝色圆圈表示宝石,褐色圈圈表示石柱,其中环境每次重置机器人便会出生在任意一个空白的格子中,机器人需要找到含有宝石的格子获得奖励结束游戏。在寻找的过程中如果踩入火坑游戏结束获得负奖励,机器人无法移动到石柱所在的格子中。

自定义gym环境

自定义gym环境模块主要参考了csdn extremebingo的文章,可以直接点击查看自定义的具体流程介绍,也可以参考github Readme 的gym Env set up模块介绍中的操作流程。这里就不再赘述,下面主要介绍下使用这个流程中可能有的坑:

  1. 将自定义的文件拷贝到环境中可能不生效,可以尝试在这个路径同样进行一遍操作:
    C:\Users\xxx\AppData\Roaming\Python\Python37\site-packages\gym\envs

  2. extremebingo 构建的环境中有部分代码存在一些笔误还有一些bug,这里进行了一些修改,修改后的环境代码

模型构建与训练

数据收集

训练数据主要有:(state, action, next_state, reward)

  • state 当前环境的状态
  • action 当前状态时,机器人执行的动作
  • next_state 执行该动作后的状态
  • reward 执行该动作后获得的激励

(这里用环境render的图表示state 见get_screen,actions = ['n', 'e', 's', 'w'] 含意为:n 上 s下 w左 e 右 reward 找到宝石+1,踩到火坑-1,增加步数在训练的过程中进行适度的惩罚

数据收集过程中的action 根据当前训练的状态按照概率选择使用模型结果或者随机选择动作执行下一步操作
这个概率值由EPS_END EPS_STAR EPS_DECAY 还有steps_done 共同控制 结果按照指数进行衰减
这里我使用的值为:

    EPS_START = 0.9
    EPS_END = 0.05
    EPS_DECAY = 20000

选择随机策略的概率随着训练次数steps_done 的变化如下图所示:
eps.png
这里eps_decay 改为了20000而不是torch offical tutorials里的200,主要是因为这个环境比小车的稍微复杂,因此前期需要更多的随机策略的样本训练,offical turorials 里概率的变化曲线如下:

eps.jpg

,当我们在test模型时,主要应选取模型的输出作为下一个action 因此 我在代码中增加了eval时eps_threshold=0.001

def select_action(state, eval=False):
    global steps_done
    sample = random.random()

    eps_threshold = EPS_END + (EPS_START - EPS_END) * \
                    math.exp(-1. * steps_done / EPS_DECAY)
    if eval:
        eps_threshold = 0.001
    print("eps_threshold:{} ,steps_done:{}".format(eps_threshold, steps_done))
    steps_done += 1

    if sample > eps_threshold:
        print("select Model")
        with torch.no_grad():
            # t.max(1) will return largest column value of each row.
            # second column on max result is index of where max element was
            # found, so we pick action with the larger expected reward.
            if eval
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值