机器学习 Q-Learning
对马尔可夫奖励的理解
看的这个教程
- 公式:V(s) = R(s) + γ * V(s’)
V(s) 代表当前状态 s 的价值。
R(s) 代表从状态 s 到下一个状态 s’ 执行某个动作后所获得的即时奖励。
γ 是折扣因子,它表示未来奖励的重要性,通常取值在 0 到 1 之间。
V(s’) 代表下一个状态 s’ 的价值。 - 理解

- 如果折扣因子γ为1,那么从现在开始,一直到结束,所有的即时奖励加在一起就是当前状态的价值。所以,现在的价值是以后的所有即时奖励决定的。但是,实际中,γ是0到1的一个小数。就是说,相同的动作,离现在越远,带来的收益越小。还有,我发现,终点是没有价值的,或者他的价值对于算法没有帮助,只是终点前一步到终点这个动作,或者状态转移产生了一个大的奖励。不知道对不对。请大家提出意见。
- 假设我们把所有的状态价值放在一个shape为(16,4)的表格里,我们把它称为Q表。16代表16个格子,4代表每一个动作。(数字是16,4是因为图片有16个格子,每个格子都能执行四个动作,这里只是举个简单的例子,你有多少种状态和有几个动作都没有关系,可以随便改,只要合理)。初始值都为0。就是说当前所有位置的所有动作的价值都为0。
- 在这个格子里,我们的目的是走到终点。规则是,每次任意方向走一步,走到终点胜利,走到陷阱,就失败。胜利与失败就结束游戏。胜利,这次游戏的一分,失败则是得-100分。每走一步扣一分。
- 要知道,Q表的所有格子初始值为0,是不符合现实的,那么,怎么把值逐步更改为现实中对应的值呢?
- 假设,我们走对了一次,倒数第二个格子,在向终点方向的那个动作就有了价值(不是0了,而且大于0)。
- 假设,我们走错了一次,那么走错的倒数第二个格子,向陷阱走的那个动作就有了价值,(不是0,并且小于0)。这样打完一局游戏,不论走对还是走错,都会产生1个有价值的格子。如果这个格子不是起点,那就肯定还有倒数第三个格子,根据公式,倒数第三个格子的那个方向价值也能算出来。如果倒数第三个格子不是起点…就这样,一点一点的“辐射”。所有的,走过的格子都有了价值。
- 假如走到了一个格子,我们只要查Q表,就能知道,往哪里走比较安全,能通向终点,往哪里走比较危险,会掉进陷阱。所以Q表会指引我们,走向正确的道路,避开危险的道路。
- 算法成立的前提是,有过走成功的经历,这样才会把最终的那个奖励,“扩散”到起点。
- 实际上,我们不是直接从终点扩散的,而是直接采样足够多的样本,一点点更新Q表。比如,我们采样到一步数据,拿Q表查询当前状态的当前动作的价值(V(s) )计作A,还有查询下一个状态的价值(V(s’))计作B。再拿到这一步的奖励R(s)计作R,假设折扣是0.9,那么A = R+0.9*B 。看到没有,是未来的价值决定现在的价值。如果Q表是正确的,这个等式就成立,但是我们会发现有误差,所以,我们得计算出误差(等式右边减去左边),误差 = (R+0.9*B - A)0.1,0.1是学习率,再拿这个误差更新A,就是Q表中,当前的状态这个动作的价值。这样,Q表就会距离理想中的绝对正确的Q表更进一步了。至于为什么有学习率,我的理解是,R+0.9*B这个东西也是估算出来的,不是真正的值,(但是按道理他是和奖励R决定A的),所以只取用他的影响*,不取用他真正的值。**(大家可以谈谈自己的看法,本人能力尚浅)**什么是影响,我也不清楚,可能在这个领域有他的名字,只是我不知道,或者没有察觉出是哪个概念。
关于陷阱的作用

- 加入把打叉的都变成陷阱,那么,我们就会更快的到达终点,因为走进陷阱后,Q表就不会让他再次掉进陷阱。所以说,陷阱在某种程度上,帮助我们接近终点。有不同意见,可以提出来,让大家讨论。
代码,上面的链接里有完整版。还有视频,我也是从B站找到的
- 这个代码在2023-10-11 跑成功过
- gym== 0.26.2
- python == 3.9
- ipython == 8.16.1
- ipython-genutils == 0.2.0 (不确定有没有用到)
- 用的conda(这个倒是无所谓)
import randomimport gym
import numpy as np
from IPython import displayclass NasWrapper(gym.Wrapper):def __init__(self):env = gym.make('FrozenLake-v1',render_mode='rgb_array',is_slippery=False)super(NasWrapper, self).__init__(env)self.env = envdef reset(self):state, _ = self.env.reset()return statedef step(self, action):state, reward, terminated, truncated, info = self.env.step(action)over = terminated or truncatedif not over:reward = -1# elif reward == 1:# reward = 100if over and reward == 0:reward = -100return state, reward, overdef show(self):from matplotlib import pyplot as pltplt.figure(figsize=(3, 3))plt.imshow(self.env.render())plt.show()nw = NasWrapper()
Q = np.zeros((16, 4))def play(isShow=False):data = []reword_sum = 0state = nw.reset()over = Falsewhile not over:action = Q[state].argmax()if random.random() < 0.1:action = nw.action_space.sample()next_state, reward, over = nw.step(action)reword_sum += rewarddata.append((state, action, reward, next_state, over))state = next_stateif isShow:display.clear_output(wait=True)nw.show()return data, reword_sumclass Pool():def __init__(self):self.pool = []def __len__(self):return len(self.pool)def __getitem__(self, item):return self.pool[item]def update(self):old_len = len(pool)while len(pool) - old_len < 200:self.pool.extend(play()[0])self.pool = self.pool[-10000:]# 获取一批数据样本def sample(self):return random.choice(self.pool)pool = Pool()# pool.update()def train():for epoch in range(100):pool.update()for i in range(100):state, action, reward, next_state, over = pool.sample()value = Q[state, action]target = Q[next_state].max() * 0.9 + rewardupdate = (target - value) * 0.1Q[state, action] += updateif epoch % 100 == 0:print(epoch, len(pool), play()[-1])train()
print("train ok")
print(Q)
play(isShow=True)
# nw.reset()
# while True:
# inputNumber = input()
# print("---")
# nw.step(int(inputNumber))
# nw.show()相关文章:
机器学习 Q-Learning
对马尔可夫奖励的理解 看的这个教程 公式:V(s) R(s) γ * V(s’) V(s) 代表当前状态 s 的价值。 R(s) 代表从状态 s 到下一个状态 s’ 执行某个动作后所获得的即时奖励。 γ 是折扣因子,它表示未来奖励的重要性,通常取值在 0 到 1 之间。…...
产品设计心得体会 优漫动游
产品设计需要综合考虑用户需求、市场需求和技术可行性,从而设计出能够满足用户需求并具有市场竞争力的产品。以下是我在产品设计方面的心得体会: 产品设计心得体会 1.深入了解用户需求:在产品设计之前,需要进行充分的用户调研…...
前端--CSS
文章目录 CSS的介绍 引入方式 代码风格 选择器 复合选择器 (选学) 常用元素属性 背景属性 圆角矩形 Chrome 调试工具 -- 查看 CSS 属性 元素的显示模式 盒模型 弹性布局 一、CSS的介绍 层叠样式表 (Cascading Style Sheets). CSS 能够对网页中元素位置的排版进行像素级精…...
实操指南|如何用 OpenTiny Vue 组件库从 Vue 2 升级到 Vue 3
前言 根据 Vue 官网文档的说明,Vue2 的终止支持时间是 2023 年 12 月 31 日,这意味着从明年开始: Vue2 将不再更新和升级新版本,不再增加新特性,不再修复缺陷 虽然 Vue3 正式版本已经发布快3年了,但据我了…...
系统架构设计:15 论软件架构的生命周期
目录 一 软件架构的生命周期 1 需求分析阶段 2 设计阶段 3 实现阶段 4 构件组装阶段...
金山wps golang面试题总结
简单自我介绍如果多个协程并发写map 会导致什么问题如何解决(sync.map,互斥锁,信号量)chan 什么时候会发生阻塞如果 chan 缓冲区满了是阻塞还是丢弃还是panicchan 什么时候会 panic描述一下 goroutine 的调度机制goroutine 什么时…...
计算机视觉实战--直方图均衡化和自适应直方图均衡化
计算机视觉 文章目录 计算机视觉前言一、直方图均衡化1.得到灰度图2. 直方图统计3. 绘制直方图4. 直方图均衡化 二、自适应直方图均衡化1.自适应直方图均衡化(AHE)2.限制对比度自适应直方图均衡化(CRHE)3.读取图片4.自适应直方图均…...
501. 二叉搜索树中的众数
501. 二叉搜索树中的众数 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def findMode(self, root: Option…...
【Linux】常用命令
目录 文件解压缩服务器文件互传scprsync 进程资源网络curl发送简单get请求发送 POST 请求发送 JSON 数据保存响应到文件 文件 ls,打印当前目录下所有文件和目录; ls -l,打印每个文件的基本信息 pwd,查看当前目录的路径 查看文件 catless:可以左右滚动阅读more :翻…...
机器人制作开源方案 | 齿轮传动轴偏心轮摇杆简易四足
1. 功能描述 齿轮传动轴偏心轮摇杆简易四足机器人是一种基于齿轮传动和偏心轮摇杆原理的简易四足机器人。它的设计原理通常如下: ① 齿轮传动:通过不同大小的齿轮传动,实现机器人四条腿的运动。通常采用轮式齿轮传动或者行星齿轮传动…...
Windows中将tomcat以服务的形式安装,然后在服务进行启动管理
Windows中将tomcat以服务的形式安装,然后在服务进行启动管理 第一步: 在已经安装好的tomcat的bin目录下: 输入cmd,进入命令窗口 安装服务: 输入如下命令,最后是你的服务名,避免中文和特殊字符 service.…...
解决ERROR: No query specified的错误以及\G 和 \g 的区别
文章目录 1. 复现错误2. 分析错误3. 解决问题4. \G和\g的区别 1. 复现错误 今天使用powershell连接数据库后,执行如下SQL语句: mysql> select * from student where id 39 \G;虽然成功查询除了数据,但报出如下错误的信息: my…...
mysql中SUBSTRING_INDEX函数用法详解
MySQL中的SUBSTRING_INDEX函数用于从字符串中提取子字符串,其用法如下: SUBSTRING_INDEX(str, delim, count)参数说明: str:要提取子字符串的原始字符串。delim:分隔符,用于确定子字符串的位置。count&am…...
AndroidStudio报错:android.support.v4.app.Fragment
解决办法一 android.support.v4.app.Fragment替换为android.app.Fragment 解决办法二 有时太多,先类型过去再说。 找到gradle.properties,修改: android.useAndroidXfalse android.enableJetifierfalse...
今年这情况,还能不能选计算机了?
在知乎上看到一个有意思的问题,是劝退计算机的。 主要观点: 计算机从业人员众多加班,甚至需要99635岁危机秃头 综上所属,计算机不仅卷,而且还是一个高危职业呀,可别来干了。 关于卷 近两年确实能明显感觉…...
Elastic Cloud v.s. Zilliz Cloud:性能大比拼
Elastic Cloud v.s. Zilliz Cloud:性能大比拼 Zilliz 经常会收到来自开发者和架构师的提问:“Zilliz Cloud 和 Elastic Cloud 比起来,谁进行向量处理能力比较强?” 诸如此类的问题很多,究其根本,大都是开发者/架构师在为语义相似性检索系统进行数据库选型时缺少决策依据有…...
设计模式03———包装器模式 c#
首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 创建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色 (个人喜好)调节渐变色 可更改同种颜色的色调 (个人喜好) 调节天空盒 准备工作做完后 接下我们做【…...
《动手学深度学习 Pytorch版》 8.3 语言模型和数据集
8.3.1 学习语言模型 依靠在 8.1 节中对序列模型的分析,可以在单词级别对文本数据进行词元化。基本概率规则如下: P ( x 1 , x 2 , … , x T ) ∏ t 1 T P ( x t ∣ x 1 , … , x t − 1 ) P(x_1,x_2,\dots,x_T)\prod^T_{t1}P(x_t|x_1,\dots,x_{t-1}) …...
Linux桌面环境(桌面系统)
早期的 Linux 系统都是不带界面的,只能通过命令来管理,比如运行程序、编辑文档、删除文件等。所以,要想熟练使用 Linux,就必须记忆很多命令。 后来随着 Windows 的普及,计算机界面变得越来越漂亮,点点鼠标…...
【LeetCode刷题(数据结构)】:二叉树的前序遍历
给你二叉树的根节点root 返回它节点值的前序遍历 示例1: 输入:root [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] 输出:[1] 示例…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
