蒙特卡洛方法(MC Basic算法例子)

本文章中使用的算法和例子来源于bilibili中西湖大学赵世钰老师的【强化学习的数学原理】课程。网址:第5课-蒙特卡洛方法(MC Basic算法例子)_哔哩哔哩_bilibili

目录

一、任务目标

二、细节分析

三、代码演示


一、任务目标

1、初始的策略已给出

efc20420ef5f4dc4898c8ceb7fec02a4.png

2、使用MC Basic算法去更新策略

3、出界回馈为-1,禁止区域回馈为-10,目标区域回馈为1,折扣累计奖赏参数为0.9

二、细节分析

1、为达到步数动态调整的效果,使用递归函数get_expected_reward()来完成。

2、迭代的终止条件为,每一次调整的策略和未调整前的策略一样,即策略未更新。

三、代码演示

import numpy as npclass Behrman:# 属性n, m = None, None  # 棋盘的行数和列数xx, yy = [-1, 0, 1, 0, 0], [0, 1, 0, -1, 0]  # 五种行动(上、右、下、左、静止)s = "↑→↓←O"  # 用于显示的行动符号_lambda = 0.9  # 折扣因子# 矩阵chessboard = [["***"],["**#"],["#*x"]]policy = [[1, 3, 2],[2, 3, 3],[2, 2, 0]]Punishment = Nonedef __init__(self):self.n, self.m = len(self.chessboard), len(self.chessboard[0][0])self.init_matrix()def init_matrix(self):"""初始化棋盘矩阵、奖惩值矩阵、状态和策略矩阵。"""self.chessboard = [list(row[0]) for row in self.chessboard]self.states = [[0] * self.m for _ in range(self.n)]self.Punishment = [[0 if cell == "*" else (-10 if cell == "#" else 1)for cell in row] for row in self.chessboard]def next_point(self, x, y, i):"""计算下一个位置的坐标,如果越界返回-1。"""wall = 0nx, ny = x + self.xx[i], y + self.yy[i]if 0 <= nx < self.n and 0 <= ny < self.m:return nx, ny, wallelse:wall = 1return x, y, walldef action(self, x, y, i):"""返回给定行动的奖惩值。"""next_pos = self.next_point(x, y, i)if next_pos[2] == 1:return -1else:return self.Punishment[next_pos[0]][next_pos[1]]def get_expected_reward(self, x, y, action, step_count):"""递归计算前 `step_count` 步的累计奖励值。"""if step_count == 0:return 0next_pos = self.next_point(x, y, action)immediate_reward = self.action(x, y, action)future_reward = self._lambda * self.get_expected_reward(next_pos[0], next_pos[1], self.policy[next_pos[0]][next_pos[1]], step_count - 1)return immediate_reward + future_rewarddef get_MCpolicy(self, step_count=3):"""动态步数策略更新函数。"""new_policy = [[0 for _ in range(self.m)] for _ in range(self.n)]for x in range(self.n):for y in range(self.m):best_action = max(range(5), key=lambda i:self.get_expected_reward(x, y, i, step_count))new_policy[x][y] = best_actionreturn new_policydef show_policy(self):"""显示最终策略矩阵。"""policy_display = "\n".join("\t".join(self.s[self.policy[x][y]] for y in range(self.m)) for x in range(self.n))print(policy_display)def run_policy_iteration(self, step_count=2):"""蒙特卡洛算法,带有动态步数的策略迭代。"""count = 0flag = 1while flag:count += 1new_policy = self.get_MCpolicy(step_count)if np.array_equal(new_policy, self.policy):flag = 0else:for x in range(self.n):for y in range(self.m):self.policy[x][y] = new_policy[x][y]print(f"策略迭代算法收敛,共迭代{count}次")self.show_policy()if __name__ == '__main__':behrman = Behrman()behrman.run_policy_iteration(step_count=3)  # 可以调整step_count以选择不同步数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1989.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数理统计(第4章第1节:1元方差分析)

目录 引例 基本概念 1元方差分析的数学模型 ​编辑离差平方和​编辑​编辑​编辑​编辑​编辑 单因子方差分析的假设检验​编辑 1元方差分析表 例子 引例 基本概念 1元方差分析的数学模型 离差平方和 单因子方差分析的假设检验 1元方差分析表 例子

Python酷库之旅-第三方库Pandas(192)

目录 一、用法精讲 891、pandas.Index.nunique方法 891-1、语法 891-2、参数 891-3、功能 891-4、返回值 891-5、说明 891-6、用法 891-6-1、数据准备 891-6-2、代码示例 891-6-3、结果输出 892、pandas.Index.value_counts方法 892-1、语法 892-2、参数 892-3、…

光控资本:普通股东、控股股东、大股东、实际控制人都是什么意思?

1、一般股东 一般股东是指持有公司一般股股份的出资者。一般股是指在公司的经营管理和盈利及财产的分配上享有一般权力的股份。 一般股的权力&#xff1a; 1、获得股利的权力。一般股股东在股市付出完债息、优先股股息后&#xff0c;能够获得股利&#xff0c;具体有多少要看…

SELS-SSL/TLS

一、了解公钥加密&#xff08;非对称加密&#xff09; 非对称加密中&#xff0c;用于加密数据的密钥与用于解密数据的密钥不同。私钥仅所有者知晓&#xff0c;而公钥则可自由分发。发送方使用接收方的公钥对数据进行加密&#xff0c;数据仅能使用相应的私钥进行解密。 你可以将…

openfoam中生成的3d案例提取得到slice后的2d案例

问题&#xff1a; 由于前期准备做3d的案例&#xff0c;并且模拟也比较费时间&#xff0c;现在生成了几十份3d的数据&#xff0c;但是现在只想要2d的数据来演示&#xff0c;该如何提取或者转换呢&#xff1f; 解决方法&#xff1a; 1.说明图片中的每个2d视图的points都是恒定不…

【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)

2024年人机交互与虚拟现实国际会议&#xff08;HCIVR 2024&#xff09; 2024 International Conference on Human-Computer Interaction and Virtual Reality 官方信息 会议官网&#xff1a;www.hcivr.org 2024 International Conference on Human-Computer Interaction and …

计算机网络 -- HTTP 协议详解

根据以往的内容我们可以得知&#xff0c;大多数网络协议一共有五层标准&#xff0c;今天我们将 探索 应用层的 HTTP 协议。 一 什么是HTTP协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。 HTTP 协议 &#xff0c;全称超文本传输协议 &#…

算法【Java】—— 动态规划之斐波那契数列模型

动态规划 动态规划的思路一共有五个步骤&#xff1a; 状态表示&#xff1a;由经验和题目要求得出&#xff0c;这个确实有点抽象&#xff0c;下面的题目会带大家慢慢感受状态标识状态转移方程初始化&#xff1a;避免越界访问 dp 表&#xff0c;所以在进行填表之前我们要预先填…

kafka使用指南

文章目录 前言特点架构一、zookeeper安装配置二、kafka安装配置三、快去试一下吧&#xff01;下一章:kafka命令之分区接入创建删除 前言 随着大数据时代的到来&#xff0c;高吞吐量的分布式发布订阅消息系统kafka得到了极大的应用&#xff0c;它具有高吞吐量、 特点 高吞吐量…

Windows 服务器中用户的分类

Windows 服务器中用户的分类 本地用户&#xff08;只能在本地登录&#xff09;如果你的服务器升级为域成员服务器&#xff0c;即刻失去本地服务。 漫游用户&#xff08;域用户就是漫游用户&#xff0c;可用在域内的任何一个设备上、且在权限允许的范围内进行登录和资源使用。 …

基于YOLO11/v10/v8/v5深度学习的建筑墙面损伤检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

Sublime Text 的PHP格式化插件phpfmt 的 setting 配置参数说明

phpfmt.sublime-settings 是 Sublime Text 中 phpfmt 插件的配置文件&#xff0c;用于定义代码格式化的各种参数。以下是一些常见的配置参数及其说明&#xff1a; 1、version 指定配置文件的版本&#xff0c;根据 phpfmt 插件的版本&#xff0c;此值可能有所不同。 2、php_b…

Oracle视频基础1.2.1练习

1.2.1 需求&#xff1a; 完整格式查看所有用户进程判断oracle启动状态 连接sqlplus不登陆 以sysdba身份登陆&#xff0c;通过登陆信息判断oracle启动状态 启动数据库&#xff0c;查系统全局区动态组件表 使用shell&#xff0c;启动监听然后返回sql ps -ef sqlplus /nolog con…

Ajax学习

目录 一、是什么 二、jQuery.ajax 三、初实现 四、再实现 五、应用 一、是什么 AJAX&#xff1a;Asynchronous JavaScript and XML&#xff08;异步的JavaScript和XML&#xff09; 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术 应用&#…

音频中sample rate是什么意思?

‌sample rate‌在数字信号处理中&#xff0c;指的是‌采样频率‌&#xff0c;即每秒钟从连续信号中抽取的样本数量。采样频率越高&#xff0c;信号的还原度越高&#xff0c;但同时也会增加计算负担和存储需求‌。 实际应用场景 在音频处理中&#xff0c;设置合适的采样率可以…

RabbitMQ客户端应用开发实战

这一章节我们将快速完成RabbitMQ客户端基础功能的开发实战。 一、回顾RabbitMQ基础概念 这个RabbitMQ的核心组件&#xff0c;是进行应用开发的基础。 二、RabbitMQ基础编程模型 RabbitMQ提供了很多种主流编程语言的客户端支持。这里我们只分析Java语言的客户端。 上一章节提…

【光交换器件】

一、ROADM ROADM节点通常由波长选择开关&#xff08;WSS&#xff09;和其他模块组成。 ROADM分类 光网络交叉能力分类 Colorless&#xff08;波长无关&#xff09; Directionless&#xff08;方向无关&#xff09; Contentionless&#xff08;竞争无关&#xff09; Flexi-G…

docker的安装配置与基本简单命令

目录 1.docker简介 2.docker安装 2.1使用root用户登陆 更新yum源 2.2安装依赖 2.3设置yum源 更新yum源索引 2.4安装docker 2.5启动并且设置开机自启动 2.6验证安装是否成功 2.7配置docker加速器 2.8重启docker服务 3.docker简单使用 3.1下载镜像 3.2列出…

第72期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

Fx-LMS 单片机

功能&#xff1a;主动降噪控制器 开发板连接麦克风&#xff0c;通过ADC或其他方式采集声音信号。采集到的声音信号经过开发板内置的Fx-LIIS主动降噪算法处理&#xff0c;生成反向声波信号&#xff0c;并通过DAC输出至扬声器进行播放。通过反向声波与原声波叠加&#xff0c;达到…