【TensorFlow深度学习】Q学习算法原理与Q表的实现

Q学习算法原理与Q表的实现

      • Q学习算法原理与Q表的实现:强化学习的基石探索
        • Q学习算法原理
        • Q表的实现
        • 代码实现
        • 结语

Q学习算法原理与Q表的实现:强化学习的基石探索

在强化学习的广阔天地里,Q学习算法是一颗璀璨的明星,以其优雅的理论基础和实用的工程实现,为智能体赋予了学习如何在环境中采取最佳行动的能力。本文将深入剖析Q学习的原理,探讨其背后的思想,并通过Python代码实例,手把手教你如何实现Q表(Q-table),进而迈入强化学习的实践大门。

Q学习算法原理

Q学习是一种离线的强化学习算法,它无需模型,直接从环境交互中学习最优策略。其核心在于Q函数(Q(s,a)),表示在状态(s)下采取动作(a)后,预期获得的累积回报。Q学习的目标是找到这个函数的最大值,即最优策略。

Q学习的核心更新规则为贝尔曼方程的近似形式:
[Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha [r_{t+1} + \gamma \max_{a’}Q(s_{t+1}, a’) - Q(s_t, a_t)]]
其中,(\alpha) 是学习率,(\gamma) 是折现因子,(r_{t+1}) 是即时奖励,(s_{t+1}) 是下一状态。

Q表的实现

Q表是一种简单直接的Q函数近似方法,它将状态-动作对映射为一个表格中的值,适用于状态空间和动作空间有限的情况。

代码实现

接下来,我们将通过一个经典的“迷宫寻宝”示例,用Python实现Q学习算法,找到从起点到终点的最短路径。

import numpy as np# 迷宫环境定义
maze = np.array([['S', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'W'],[' ', ' ', '#', ' ', '#', ' ', '#', ' ', ' ', ' '],[' ', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],[' ', '#', ' ', ' ', ' ', ' ', ' ', '#', 'E']])
shape = maze.shape# 参数设置
actions = {'U': (-1, 0), 'D': (1, 0), 'L': (0, -1), 'R': (0, 1)}
alpha = 0.1
gamma = 0.9
epsilon = 0.1
num_episodes = 1000# 初始化Q表
Q = np.zeros(shape + (len(actions))# Q学习主循环
for episode in range(num_episodes):state = np.where(maze == 'S')[::-1]  # 起点done = Falsewhile not done:if np.random.uniform(0, 1) < epsilon:  # 探索性策略action = np.random.choice(list(actions.keys()))else:  # 选择最优策略action = max(actions, key=lambda x: Q[state][actions[x]]))new_state = (np.clip(state + actions[action], 0, shape[0]-1)reward = -1 if maze[new_state] == '#' else (10 if maze[new_state] == 'E' else 0)Q[state][action] += alpha * (reward + gamma * np.max(Q[new_state]) - Q[state][action])state = new_stateif maze[state] == 'E':done = True# 打印出Q表
print("Q表:\n", Q)# 打印出最优路径
policy = {state: max(actions, key=lambda x: Q[state][x]) for state in np.ndindex(shape)}
path = []
state = np.where(maze == 'S')[::-1]
while state != np.where(maze == 'E')[::-1]:path.append(state)state = tuple(np.array(policy[state]))
path.append(np.where(maze == 'E')[::-1]))
print("最优路径:", path[::-1])
结语

通过上述代码,我们不仅理解了Q学习的基本原理,还亲手实现了Q表,见证了智能体从零开始,通过不断试错和学习,最终找到最优路径的过程。Q学习的美妙之处在于它不仅限于迷宫游戏,而是可以拓展到机器人导航、游戏AI、交易策略制定等广泛领域。希望这次实践能成为你深入探索强化学习之旅的一个精彩起点,继续挖掘更多算法的奥秘,创造无限可能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker-ce 和 docker-ee介绍版本介绍

1 docker-ce 和 docker-ee介绍版本介绍 •Docker-CE指Docker社区版&#xff0c;由社区维护和提供技术支持&#xff0c;为免费版本&#xff0c;适合个人开发人员和小团队使用。•Docker-EE指Docker企业版&#xff0c;为收费版本&#xff0c;由售后团队和技术团队提供技术支持&am…

箭头函数 this

箭头函数中&#xff0c;是没有this的&#xff0c;所以写在箭头函数中的this&#xff0c;会自动向当前作用域的上一层作用域寻找&#xff0c;是否含有this&#xff0c;如果有就指代&#xff0c;没有就继续找上一层。 new Vue({el:#root,data:{firstName:张,lastName:三,fullNam…

Android Studio历史版本

android studio的历史版本

【langchain】langchain调用huggingface本地模型基础demo

目前网上的langchain教程大多数都是关于如何调用OpenAI等远程模型&#xff0c;对于本地模型的调用示例写法比较少。而且langchain也在不停迭代&#xff0c;文档也比较杂。我个人用Hugging Face的开源模型比较多。因此&#xff0c;本文将向大家介绍如何使用Langchain调用Hugging…

国产达梦数据库使用说明

参考&#xff1a; https://eco.dameng.com/document/dm/zh-cn/start/tool-dm-disql.html https://blog.csdn.net/qq_37358909/article/details/113343515 具体启动脚本名可能版本不同有所差异&#xff0c;注意判断 [rootlocalhost root] cd /home/dmdba/dmdbms/bin [rootloca…

13、架构-流量治理之流量控制

概述 任何一个系统的运算、存储、网络资源都不是无限的&#xff0c;当系统资源不足以支撑外部超过预期的突发流量时&#xff0c;便应该有所取舍&#xff0c;建立面 对超额流量自我保护的机制&#xff0c;这个机制就是微服务中常说的“限 流”。 最大处理能力为80TPS的系统遇到1…

HQL面试题练习 —— 累加刚好超过各省GDP40%的地市名称

目录 1 题目2 建表语句3 题解 1 题目 现有各省地级市的gdp数据&#xff0c;求从高到底累加刚好超过各省GDP40%的地市名称&#xff0c;临界地市也需要。例如&#xff1a; 浙江省的杭州24% 宁波 20% ,杭州宁波44% 大于40% 取出杭州、宁波 江苏省的苏州19% 南京 14% 无锡 12%&am…

【车载开发系列】各类总线介绍

【车载开发系列】各类总线介绍 【车载开发系列】各类总线介绍 【车载开发系列】各类总线介绍一、为什么需要总线二、车载总线的种类三、CAN总线1&#xff09; CAN协议简介2&#xff09;CAN协议特点 四、CAN FD总线1&#xff09;CAN FD协议简介2&#xff09;CAN FD协议特点 五. …

C++文件系统

文件或目录的复制 std::filesystem::copy 函数默认会在目标位置存在同名文件时抛出异常&#xff0c;而不会覆盖已存在的文件。但是你可以通过传递一个额外的参数来指定复制操作是否覆盖已存在的文件。在C17及以上版本中&#xff0c;可以使用 std::filesystem::copy_options 枚…

2.nginx常用命令

使用nginx命令需要进入nginx目录里面执行。 /usr/local/nginx/sbin/ 查看nginx的版本号 启动nginx ./nginx 关闭nginx ./nginx -s stop 查看nginx的是否运行的命令 重新加载nginx 针对配置目录中配置文件nginx.cnf修改后需要重新加载 /usr/local/nginx/conf/nginx.cnf …

【数学】各种图面积公式的推导

Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲面积公式。 1.长方形 长方形是 由无数条 长度为长方形的长&#xff08;或宽&#xff09;的线 组成的图形&#xff0c;这些线有多少根&#xff0c;我们不知道&#xff0c;只需要知道他们垒成了一个由高 宽…

【linux】(6)文本处理sed

sed&#xff08;stream editor&#xff09;是可以根据指定的脚本对输入文本进行编辑、替换、删除等操作。 基本用法 sed [options] script [file...]常用选项 -n&#xff1a;抑制默认输出。通常 sed 会打印每一行&#xff0c;通过 -n 选项可以只打印被脚本处理的行。 sed -n …

Mysql执行一条语句都有哪些操作

Mysql的执行流程 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层&#xff0c; Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现&#xff0c;主要包括连接器&#xff0c;查询缓存、解析器、预处理器、优化器、执行器等。另外&#xf…

Mongoldb 入门

MongoDB是个数据库&#xff0c;但和你可能听说过的比如MySQL这些传统的关系型数据库不太一样&#xff0c;它是一个非关系型数据库&#xff0c;也叫NoSQL数据库。想象一下&#xff0c;如果数据不是放在整齐的表格里&#xff0c;而是像一堆堆杂货&#xff0c;每堆里放的东西可以不…

鸿蒙轻内核M核源码分析系列十九 Musl LibC

LiteOS-M内核LibC实现有2种&#xff0c;可以根据需求进行二选一&#xff0c;分别是musl libC和newlibc。本文先学习下Musl LibC的实现代码。文中所涉及的源码&#xff0c;均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_m 获取。LiteOS-M内核提供了和内核相关的…

斗地主小游戏

ctrlshift/:多行注释 第一版&#xff1a; App:package game;public class App {public static void main(String[] args) {new PokerGame();} }package game;import java.util.ArrayList; import java.util.Collections;public class PokerGame {//存储牌static ArrayList<…

基于小波样条框架的一维时间序列信号降噪方法(MATLAB R2018A)

1952年&#xff0c;DUFFIN在研究非调和Fourier级数时引入了Hilbert空间中框架的概念&#xff0c;然而并没有引起很大的反响。1986年&#xff0c;DAUBECHIES研究发现利用框架可以将L2(R)中的函数展开成类似标准正交基的级数&#xff0c;并且用框架研究函数时所需的条件要比用标准…

多态的应用——数组多态

介绍 ai查询 在Java中&#xff0c;动态数组通常通过ArrayList类来实现&#xff0c;它是Java集合框架&#xff08;Java Collections Framework&#xff09;的一部分。ArrayList是一个可调整大小的数组实现&#xff0c;提供了比标准数组更多的灵活性和功能。 以下是使用ArrayLis…

基于51单片机的MQ-2烟雾报警设计

随着现代家庭用火、用电量的增加,家庭烟雾发生的频率越来越高。烟雾报警器也随之被广泛应用于各种场合。本课题所研究的无线多功能烟雾报警器采用STC89C51为核心控制器,利用气体传感器MQ-2、ADC0832模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片,当环…

前端技术回顾系列 08|TS 泛型基础

在微信中阅读,关注公众号:CodeFit。 创作不易,如果你觉得这篇文章对你有帮助,请不要忘了 点赞、分享 和 关注 我的公众号:CodeFit,为我的持续创作提供一些动力。 上篇内容回顾:枚举(Enums) 在上篇文章中,我们详细回顾了 TypeScript 中的 枚举(Enums)。 枚举 是一…