强化学习 -- Q-Learning小实例手写入门代码

前言

本文针对下面这篇文章进行代码复现,文章写的很棒,但是算法最关键的更新步骤貌似有问题,本人使用原版公式。
http://www.cnblogs.com/coshaho/p/7475988.html

正文

使用矩阵模拟了环境以及奖励,可以先尝试读懂原文章。本文是针对文章做的复现,我的学习经历告诉我,要啃很多遍概念才可以将知识转化为实践。所以对该文章以及本文示例代码有困惑请务必多看教学视频理解概念。
本人也只是刚刚入门强化学习,对一些概念理解感觉较为困难,故有不足之处一定要评论私聊告知我。

import numpy as np

# 最大轮次
max_number_of_episodes = 1000

# 每轮最大步长
max_number_of_steps = 20

# 每轮目标得分
target_score = 200

# 构建目标矩阵
target_table = np.zeros([6, 6])

# 构建一个奖励矩阵
# 相连通的房间行动一步奖励为1
# 通往屋外的行动奖励100
# 不连通的屋子用 -1 来表示不可达
reward_table = np.array([[-1, -1, -1, -1, 1, -1],
                         [-1, -1, -1, 1, -1, 100],
                         [-1, -1, -1, 1, -1, -1],
                         [-1, 1, 1, -1, 1, -1],
                         [0, -1, -1, 1, -1, 100],
                         [-1, 1, -1, -1, 1, 100]])

# 主循环,分为两个循环,
# 外循环控制轮次,内循环控制本轮进行
# 当每一轮步长超长或得分超过额定值退出本轮
for episodes in range(max_number_of_episodes):
    # 随机获得一个初始状态
    observation = np.random.choice([0, 1, 2, 3, 4, 5])

    # 通过总奖励来控制提前退出本轮
    total_reward = 0

    for i in range(max_number_of_steps):
        # 选出当前状态可以行动的房间,随机下一个 action
        action_array = (np.array(np.where(reward_table[observation] >= 0))).flatten()
        action = np.random.choice(action_array)

        # 获得下一个 action 对应的可进入房间
        next_action_array = (np.array(reward_table[action][np.where(reward_table[action] >= 0)])).flatten()

        # 按照 q-learning 公式进行更新
        target_table[observation][action] = target_table[observation][action] + 0.9 * (reward_table[observation][action] + 0.8 * max(next_action_array))

        total_reward += reward_table[observation][action]
        observation = action

        # 如果本轮得分超过200,即停留在外面2次,结束循环
        if(total_reward >= 200):
            break

# 打印规范化后的目标矩阵
print(target_table / max(target_table.flatten()))

结果

在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张甜不拉几

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值