小琳AI课堂 探索强化学习:通过Python迷宫示例掌握Q-learning算法

大家好,这里是小琳AI课堂。今天我们通过一个Python示例来进一步理解强化学习中的Q-learning算法。这个示例将带我们穿越一个迷宫,用代码的形式展示智能体是如何通过试错来找到出口的。🔍
首先,我们需要安装两个Python库:numpypandas。如果你还没有安装它们,可以通过以下命令来安装:

pip install numpy
pip install pandas

接下来,我们定义一个迷宫环境MazeEnv类。这个类包含了迷宫的地图、起始点和终点。我们的智能体需要在迷宫中找到通往终点的路径。
MazeEnv类中,我们有两个关键方法:

  • reset:将智能体放回起始点,为新的回合做准备。
  • step:智能体在这个方法中执行动作,环境根据动作给出新的状态、奖励和是否完成标志。
import numpy as np
import pandas as pd# 定义环境
class MazeEnv:def __init__(self):self.maze = np.array([[0, 0, 0, 0, 0],[0, -1, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 1]])self.start = (0, 0)self.end = (3, 4)def reset(self):self.position = self.startreturn self.positiondef step(self, action):if action == 'up':new_position = (self.position[0] - 1, self.position[1])elif action == 'down':new_position = (self.position[0] + 1, self.position[1])elif action == 'left':new_position = (self.position[0], self.position[1] - 1)elif action == 'right':new_position = (self.position[0], self.position[1] + 1)# 检查是否超出边界if (new_position[0] < 0 or new_position[0] >= self.maze.shape[0]) or \(new_position[1] < 0 or new_position[1] >= self.maze.shape[1]):reward = -1done = Falseelse:# 更新位置self.position = new_position# 如果到达终点,给予奖励并结束回合if self.position == self.end:reward = 10done = True# 如果碰到障碍物,给予惩罚elif self.maze[new_position] == -1:reward = -10done = Trueelse:reward = -0.04done = Falsereturn self.position, reward, done# Q-learning算法
def q_learning(env, episodes=1000, learning_rate=0.1, discount_factor=0.99, epsilon=0.1):actions = ['up', 'down', 'left', 'right']q_table = pd.DataFrame(0, index=[str(i) for i in range(env.maze.size)], columns=actions)for episode in range(episodes):state = str(env.reset())done = Falsewhile not done:if np.random.uniform(0, 1) < epsilon:action = np.random.choice(actions)else:action = q_table.loc[state].idxmax()next_state, reward, done = env.step(action)next_state = str(next_state)max_future_q = q_table.loc[next_state].max()current_q = q_table.loc[state, action]new_q = (1 - learning_rate) * current_q + learning_rate * (reward + discount_factor * max_future_q)q_table.loc[state, action] = new_qstate = next_statereturn q_tableenv = MazeEnv()
q_table = q_learning(env)
print(q_table)

MazeEnv 类:定义了一个简单的迷宫环境,其中包括迷宫地图、起始点和终点。 reset 方法:将智能体重置到起始位置,并返回当前位置。
step 方法:接收一个动作作为输入,并返回新的状态、奖励和是否完成标志。 q_learning
函数:实现了Q-learning算法,它通过不断尝试动作并更新Q-table来学习最优策略。

这个算法通过不断尝试和更新一个叫做Q-table的数据结构来学习最优策略。Q-table记录了在不同状态下,执行不同动作的预期奖励。
在Q-learning算法中,我们遍历多个回合(episodes),在每个回合中,智能体都会尝试不同的动作,并根据动作的结果更新Q-table。智能体有时会随机选择动作(探索),有时则会选择当前看起来最优的动作(利用)。
最后,我们打印出Q-table,它展示了在不同状态下,智能体应该选择哪个动作来最大化长期奖励。
这个示例虽然简单,但它展示了强化学习的基本原理:智能体通过与环境交互,不断学习如何在给定的环境中做出最优决策。这就是强化学习的魅力所在,它让机器能够通过经验来学习和适应复杂的环境。
希望这个示例能帮助你更好地理解强化学习。如果你有任何问题或想法,欢迎在评论区留言分享!👇
本期的小琳AI课堂就到这里,希望你喜欢今天的内容!下期见!👋

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

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

相关文章

计算机网路(应用层)

客户/服务方式&#xff08;C/S&#xff09;方式和对等方式&#xff08;P2P方式&#xff09; 客户/服务器方式&#xff08;Client/Server&#xff0c;C/S&#xff09;方式 客户/服务器是指通信中所涉及的两个应用进程。 客户/服务器方式所描述的是进程之间的服务和被服务的关…

基于Android Studio 蜜雪冰城(奶茶饮品点餐)—原创

目录 一、项目演示 二、开发环境 三、项目详情 四、项目完整源码 一、项目演示 本项目素材、数据和布局页面参考均来自《蜜雪冰城》&#xff0c;在此特别声明感谢&#xff01; 基于Android Studio 蜜雪冰城(奶茶饮品)—原创 二、开发环境 三、项目详情 1.启动页 这段代码是…

软件安全最佳实践:首先关注的地方

尽管组织拥有大量可用的工具&#xff0c;但应用程序安全性仍然不足。 最近的数据显示&#xff0c;在过去四到五年中&#xff0c;软件供应链攻击同比增长了 600-700%&#xff0c;超过一半的美国企业在过去 12 个月中遭受过某种形式的软件供应链攻击。 为何应用程序安全工作未…

LeetCode[中等] 142. 环形链表 II

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…

Elasticsearch:一次生产集群 ES Watcher 失效的深度排查与分析 - 全过程剖析与解决方案

作者&#xff1a;尚雷&#xff0c;TechTalk 技术交流社区创办者 一次生产集群 ES Watcher 失效的深度排查与分析 全过程剖析与解决方案​​ 一、Elasticsearch Watcher 介绍 1.1 Watcher 概念概述 Watcher 是 Elasticsearch 提供的一项监控和告警服务&#xff0c;允许用户定义…

末端回路漏电监测仪为何不可或缺?

末端回路漏电监测仪 接地故障保护器 智能电力继电器 智能型剩余电流继电器 智能动作保护器 在2022年8月14日一个寻常的午后&#xff0c;庄南地的一片豆角田边&#xff0c;发生了一场令人痛心的意外。杨某与其父亲杨某某正忙于灌溉作物&#xff0c;却不料&#xff0c;一场本可避…

Vue3.0组合式API:依赖注入provide和inject实现跨层组件的通信

Vue3.0组合式API系列文章&#xff1a; 《Vue3.0组合式API&#xff1a;setup()函数》 《Vue3.0组合式API&#xff1a;使用reactive()、ref()创建响应式代理对象》 《Vue3.0组合式API&#xff1a;computed计算属性、watch监听器、watchEffect高级监听器》 《Vue3.0组合式API&…

TypeScript异常处理

1.异常的概念 程序运行中意外发生的情况就成为异常 例子&#xff1a; //除法运算function chu(num1:number,num2:number){if(num20){//throw 抛出异常throw new Error(除数不能为零)}let num:numbernum1/num2console.log(num) }//程序出现异常后会停止运行// 捕获异常try{ /…

论文《Mixture of Weak Strong Experts on Graphs》笔记

【Mowst 2024 ICLR】论文提出了一种新的图神经网络架构&#xff0c;称为Mixture of weak and strong experts&#xff08;Mowst&#xff09;&#xff0c;通过将轻量级的多层感知机&#xff08;MLP&#xff09;作为弱专家和现成的GNN作为强专家相结合&#xff0c;以处理图中的节…

Linux云计算 |【第四阶段】NOSQL-DAY1

主要内容&#xff1a; NoSQL概述&#xff08;RDBMS、NoSQL&#xff09;、部署Redis服务、Redis数据类型&#xff08;字符串、散列类型、列表类型、集合类型、有序集合类型&#xff09;、Redis其它操作命令、修改Redis服务运行参数、部署支持PHP和Redis的Nginx服务器 一、NoSQL…

4G模组SIM双卡切换是徒增成本,还是未雨绸缪?

初学开发的小伙伴提出疑问&#xff1a;手机双卡可以理解&#xff0c;物联网设备有必要双卡吗&#xff0c;会不会太浪费&#xff1f; 但在实际应用中&#xff0c;双卡是必需的。 在使用4G模组双卡功能的场景下&#xff0c;切换卡槽更是一个关键环节——关乎设备在不同网络环境…

【设计模式-享元】

Flyweight Pattern&#xff08;享元模式&#xff09; 是一种结构型设计模式&#xff0c;旨在通过共享对象来减少内存使用和提高性能。享元模式特别适用于需要大量相似对象的场景&#xff0c;可以有效地减少内存开销。 核心思想 享元模式通过将对象的共享部分&#xff08;共享…

关于单片机的技术原理及应用

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于单片机的技术原理及应用的相关内容&…

ANSYS Workbench蜂窝板泰森多边形Voronoi结构建模

在ANSYS Workbench内基于Voronoi算法建立泰森多边形蜂窝状结构板模型可采用CAD Voronoi插件建模后将模型导入。 在插件内设置好模型参数后运行&#xff0c;插件会自动在CAD内完成Voronoi图形的绘制。 将长方形与Voronoi晶格分别生成面域并做差集&#xff0c;形成Voronoi框架…

【JAVA开源】基于Vue和SpringBoot的校园美食分享平台

本文项目编号 T 033 &#xff0c;文末自助获取源码 \color{red}{T033&#xff0c;文末自助获取源码} T033&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

多层感知机paddle

多层感知机——paddle部分 本文部分为paddle框架以及部分理论分析&#xff0c;torch框架对应代码可见多层感知机 import paddle print("paddle version:",paddle.__version__)paddle version: 2.6.1多层感知机&#xff08;MLP&#xff0c;也称为神经网络&#xff0…

Visual Studio-X64汇编编写

纯64位汇编&#xff1a; includelib ucrt.lib includelib legacy_stdio_definitions.lib includelib user32.libextern printf:proc extern MessageBoxA:proc.data szFormat db "%s",0 szHello db "HelloWorld",0 szRk db "123",0.code start p…

鸿蒙生态应用

鸿蒙生态应用开发核心概念 HarmonyOS 应用&#xff1a;使用 HarmonyOS SDK 开发的应用程序&#xff0c;能够在华为终端设备 &#xff08;如&#xff1a;手机、平板等&#xff09;上运行&#xff0c;其有两种形态&#xff1a; ⚫ 传统方式的需要安装的 App。 ⚫ 轻量级&#xf…

碎纸片的自动拼接复原技术

摘要&#xff1a;破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。目前发现对碎纸片的拼接大部分由人工完成&#xff0c;准确率较高&#xff0c;但耗费大量人力财力及时间&#xff0c;效率很低。随着计算机技术的发展&#xff0c;人们试图…

java 解析excel

在Java中解析Excel文件&#xff0c;可以使用Apache POI库。以下是一个简单的例子&#xff0c;展示如何使用Apache POI读取一个Excel文件&#xff08;假设为.xlsx格式&#xff09;的内容。 首先&#xff0c;确保你的项目中包含了Apache POI的依赖。如果你使用Maven&#xff0c;…