第八篇:强化学习值迭代及代码实现

这篇具有很好参考价值的文章主要介绍了第八篇:强化学习值迭代及代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你好,我是郭震(zhenguo)

前几天我们学习强化学习策略迭代,今天,强化学习第8篇:强化学习值迭代

值迭代是强化学习另一种求解方法,用于找到马尔可夫决策过程(MDP)中的最优值函数。

值迭代

值迭代可以总结为如下几点:

  • 值迭代通过不断迭代更新值函数来逼近最优值函数,从而确定最优策略。

  • 值迭代的关键是在每次迭代中更新值函数。

  • 对于每个状态,通过考虑所有可能的动作和下一个状态,选择能够使值最大化的动作,并计算更新后的值函数。

  • 迭代更新值函数,更新公式也是贝尔曼方程,和策略迭代值函数更新公式一样。

  • 值迭代需要进行多次迭代,直到值函数收敛为止。收敛时,值函数不再发生显著变化。

可以看到:值迭代是比策略迭代更为简单的一种迭代方法。

代码实现

值迭代,求迷宫问题,完整代码。

只使用numpy

import numpy as np

定义迷宫地图,在迷宫地图中,不同的数字代表不同的含义:

  • 0:表示可以通过的空格,即可行走的路径。

  • -1:表示墙壁或障碍物,表示不能通过的障碍物区域。

  • 1:表示目标位置,即终点位置。

其中,0代表可行走的路径,-1代表障碍物或墙壁,1代表迷宫的终点位置。这些数值用于描述迷宫的不同区域,以帮助算法进行路径搜索和价值计算。如下所示:

第八篇:强化学习值迭代及代码实现
# 定义迷宫地图
maze = np.array([
    [0, 0, 0, 0],
    [0, -1, 0, -1],
    [0, 0, 0, 0],
    [-1, 0, -1, 1]
])

定义参数

# 定义参数
gamma = 0.9  # 折扣因子
epsilon = 1e-6  # 收敛阈值

初始值函数

# 初始化值函数
V = np.zeros(maze.shape)

进行值迭代

# 进行值迭代
while True:
    delta = 0
    for i in range(maze.shape[0]):
        for j in range(maze.shape[1]):
            if maze[i, j] == -1 or maze[i, j] == 1:
                continue
            # 计算当前状态的最大价值
            max_value = float("-inf")
            for action in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
                ni, nj = i + action[0], j + action[1]
                if ni >= 0 and ni < maze.shape[0] and nj >= 0 and nj < maze.shape[1] and maze[ni, nj] != -1:
                    max_value = max(max_value, gamma * V[ni, nj])
            # 更新值函数
            new_value = maze[i, j] + max_value
            delta = max(delta, abs(new_value - V[i, j]))
            V[i, j] = new_value
    if delta < epsilon:
        break

# 打印最优值函数
print("最优值函数:")
print(V)

这里面的核心代码就是求解贝尔曼方程:

第八篇:强化学习值迭代及代码实现

其中, 表示状态  的值函数,即按照某个策略获得的预期回报。 表示选择能够使得值最大化的动作 。 表示对所有可能的下一个状态  和奖励  进行求和。 表示在状态  下执行动作  后转移到状态  且获得奖励  的概率。 是折扣因子,用于平衡当前和未来的奖励。

在上述代码中,首先定义了迷宫地图,并设置了折扣因子和收敛阈值。然后,通过值迭代算法逐步更新值函数,直到值函数的变化小于收敛阈值为止。最后,打印出最优的值函数。

感谢你的点赞和转发,让我更新更有动力文章来源地址https://www.toymoban.com/news/detail-472958.html

到了这里,关于第八篇:强化学习值迭代及代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【从零开始学习Redis | 第八篇】认识Redis底层数据结构(下)

    目录 前言:   ZipList: Ziplist的特性: QucikList: QuicList特征: SkipList: 跳表特征: RedisObijct:  小心得: 总结:           在现代软件开发中,数据存储和处理是至关重要的一环。为了高效地管理数据,并实现快速的读写操作,各种数据库技术应运而生。其中,Redis作为一种

    2024年04月12日
    浏览(55)
  • 【FPGA入门】第八篇、FPGA驱动VGA实现动态图像移动

    目录 第一部分、实现效果 第二部分、动态VGA显示的原理 1、将动态显示的区域提前进行赋值 2、图像块的移动是每张图片叠加后的效果 3、如何实现图像块位置的改变 第三部分、系统结构和驱动波形 1、系统的Top-down结构 2、图像块移动的驱动波形 第四部分、代码 1、同步信号

    2024年02月04日
    浏览(47)
  • 类EMD的“信号分解方法”及MATLAB实现(第八篇)——离散小波变换DWT(小波分解)

    在之前的系列文章里,我们介绍了EEMD、CEEMD、CEEMDAN、VMD、ICEEMDAN、LMD、EWT,我们继续补完该系列。 今天要讲到的是小波分解,通常也就是指离散小波变换(Discrete Wavelet Transform, DWT)。在网上有一些介绍该方法的文章,但是总感觉不够通俗或不够透彻,希望读完这篇能让你有

    2024年02月07日
    浏览(50)
  • 第八篇: K8S Prometheus Operator实现Ceph集群企业微信机器人告警

    我们的k8s集群与ceph集群是部署在不同的服务器上,因此实现方案如下: (1) ceph集群开启mgr内置的exporter服务,用于获取ceph集群的metrics (2) k8s集群通过 Service + Endponit + ServiceMonitor建立ceph集群metrics与Prometheus之间的联系 建立一个 ServiceMonitor 对象,用于 Prometheus 添加监控项; 为

    2024年02月14日
    浏览(38)
  • 微服务开发系列 第八篇:Elasticsearch

    A、技术栈 开发语言:Java 1.8 数据库:MySQL、Redis、MongoDB、Elasticsearch 微服务框架:Spring Cloud Alibaba 微服务网关:Spring Cloud Gateway 服务注册和配置中心:Nacos 分布式事务:Seata 链路追踪框架:Sleuth 服务降级与熔断:Sentinel ORM框架:MyBatis-Plus 分布式任务调度平台:XXL-JOB 消息中间

    2024年02月08日
    浏览(50)
  • 第八篇——Kafka Streams源码解读

    作者:禅与计算机程序设计艺术 Kafka Streams是一个开源分布式流处理平台,它可以让你轻松处理实时数据流。通过Kafka Streams API可以轻松创建、部署和运行复杂的实时流处理应用程序。虽然Kafka Stream提供了许多高级功能,但其底层原理却十分简单易懂,在学习之余,我们还是需

    2024年02月07日
    浏览(43)
  • 致远OA如何开发 第八篇 新增接口

    新增接口 此栏目技术支持 技术大佬对栏目文章的支持 特别感谢 新增接口 1 第一种方式 rest java文件 2 第二种方式 Ajax 新增文件java 依赖注入

    2024年01月25日
    浏览(42)
  • 将强化学习引入NLP:原理、技术和代码实现

    本文深入探讨了强化学习在自然语言处理(NLP)中的应用,涵盖了强化学习的基础概念、与NLP的结合方式、技术细节以及实际的应用案例。通过详细的解释和Python、PyTorch的实现代码,读者将了解如何利用强化学习优化NLP任务,如对话系统和机器翻译。 关注TechLead,分享AI全维

    2024年02月05日
    浏览(42)
  • 第八篇:SQL语法-DQL-数据查询语言

    DQL英文全称是Data QueryLanguage(数据查询语言),用来查询数据库中表的记录 查询: select DQL主要包含以下操作 基本查询 条件查询 分组查询 在select之后指定字段名,如果有多个则用逗号分隔,用于查询表中指定字段的数据 在select之后使用【 通配符* 】,用于查询 同一

    2024年02月20日
    浏览(46)
  • 【Kubernetes】第八篇 - Ingress 路由转发的介绍与使用

    上一篇,通过 Service 服务,解决了 pod 的 IP 漂移问题; K8s 的 Pod 和 Service 通过 NodePort 将服务暴露到外部,随着服务增加端口就变得不好管理;所以,通常情况下会设计一个 Ingress 进行路由转发方便统一管理; 本篇,介绍 Ingress 的使用; 1,Ingress ingress:意思是入口、进入;

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包