当前位置: 首页 > article >正文

用Python手把手教你实现Q-Learning算法(附完整代码)

用Python手把手教你实现Q-Learning算法附完整代码在人工智能领域强化学习正以惊人的速度改变着我们解决问题的方式。想象一下你正在训练一个虚拟机器人穿越迷宫或者开发一个能自动优化广告投放策略的系统——这些看似复杂的任务都可以通过Q-Learning这一经典算法来实现。本文将带你从零开始用Python构建一个完整的Q-Learning实现避开那些教科书里不会告诉你的实践陷阱。1. 环境搭建与核心概念1.1 为什么选择Q-LearningQ-Learning作为强化学习的入门算法有着不可替代的优势无模型学习不需要预先知道环境动态离线学习可以在历史数据上训练简单有效算法逻辑清晰实现门槛低# 必备库安装如果你还没安装 # pip install numpy matplotlib import numpy as np import matplotlib.pyplot as plt1.2 关键参数解析在开始编码前我们需要理解几个核心参数参数典型值作用调整技巧学习率(α)0.1-0.5控制新信息的影响从大到小调整折扣因子(γ)0.9-0.99未来奖励的重要性越接近1越重视长期回报探索率(ε)0.1-0.3探索与利用的平衡训练后期应降低提示这些参数没有绝对最优值需要根据具体问题调整2. 从零构建Q-Learning框架2.1 初始化Q表Q表是算法的核心数据结构存储着状态-动作对的预期回报def init_q_table(state_size, action_size): 初始化Q表 Args: state_size: 状态空间大小 action_size: 动作空间大小 Returns: 初始化的Q值表 return np.zeros((state_size, action_size))2.2 ε-贪婪策略实现这是平衡探索与利用的关键策略def epsilon_greedy_policy(q_table, state, epsilon): if np.random.random() epsilon: return np.random.randint(q_table.shape[1]) # 随机探索 else: return np.argmax(q_table[state]) # 选择最优动作2.3 Q值更新公式贝尔曼方程的具体实现def update_q_value(q_table, state, action, reward, next_state, alpha, gamma): 更新Q值 Args: q_table: Q值表 state: 当前状态 action: 采取的动作 reward: 获得的奖励 next_state: 转移到的状态 alpha: 学习率 gamma: 折扣因子 best_next_action np.argmax(q_table[next_state]) td_target reward gamma * q_table[next_state][best_next_action] td_error td_target - q_table[state][action] q_table[state][action] alpha * td_error3. 实战迷宫寻路问题让我们用一个经典的4x4网格迷宫来测试我们的实现3.1 迷宫环境设计class MazeEnv: def __init__(self): self.grid_size 4 self.state_space self.grid_size * self.grid_size self.action_space 4 # 上,下,左,右 self.goal 15 # 右下角为终点 self.obstacles [5, 7, 11] # 障碍物位置 def reset(self): self.state 0 # 起点在左上角 return self.state def step(self, action): x, y divmod(self.state, self.grid_size) # 执行动作 if action 0 and x 0: x - 1 # 上 elif action 1 and x 3: x 1 # 下 elif action 2 and y 0: y - 1 # 左 elif action 3 and y 3: y 1 # 右 new_state x * self.grid_size y # 检查是否碰到障碍物 if new_state in self.obstacles: return self.state, -10, True # 检查是否到达终点 if new_state self.goal: return new_state, 100, True # 普通移动 self.state new_state return new_state, -1, False3.2 训练过程可视化def train_agent(episodes1000, alpha0.1, gamma0.9, epsilon0.1): env MazeEnv() q_table init_q_table(env.state_space, env.action_space) rewards [] for episode in range(episodes): state env.reset() total_reward 0 done False while not done: action epsilon_greedy_policy(q_table, state, epsilon) next_state, reward, done env.step(action) update_q_value(q_table, state, action, reward, next_state, alpha, gamma) state next_state total_reward reward rewards.append(total_reward) # 逐步降低探索率 epsilon max(0.01, epsilon * 0.995) return q_table, rewards4. 高级技巧与优化4.1 动态参数调整# 自适应学习率示例 def adaptive_alpha(episode, total_episodes): initial_alpha 0.5 min_alpha 0.01 return max(min_alpha, initial_alpha * (1 - episode/total_episodes))4.2 奖励塑形技巧合理的奖励设计能显著加快收敛情况奖励值设计理由到达目标100明确成功信号碰到障碍-10避免危险行为每步移动-1鼓励高效路径4.3 解决Q-Learning的常见问题冷启动问题初始随机策略效率低解决方案使用优先经验回放维度灾难状态空间过大解决方案结合神经网络(DQN)# 优先经验回放示例 class PriorityReplayBuffer: def __init__(self, capacity): self.capacity capacity self.buffer [] self.priorities [] def add(self, experience, priority): if len(self.buffer) self.capacity: self.buffer.pop(0) self.priorities.pop(0) self.buffer.append(experience) self.priorities.append(priority) def sample(self, batch_size): probs np.array(self.priorities) / sum(self.priorities) indices np.random.choice(len(self.buffer), batch_size, pprobs) return [self.buffer[i] for i in indices]5. 工业级应用扩展5.1 股票交易策略优化class TradingEnv: def __init__(self, data): self.data data # 历史价格数据 self.position 0 # 持仓状态 self.cash 10000 # 初始资金 self.current_step 0 def step(self, action): # action: 0持有, 1买入, 2卖出 price self.data[self.current_step] if action 1 and self.position 0: # 买入 self.position self.cash / price self.cash 0 elif action 2 and self.position 0: # 卖出 self.cash self.position * price self.position 0 self.current_step 1 done self.current_step len(self.data) - 1 # 计算回报 portfolio_value self.cash self.position * price reward portfolio_value - 10000 # 相对于初始资金的收益 return self.current_step, reward, done5.2 游戏AI开发# 简单的21点游戏环境 class BlackjackEnv: def __init__(self): self.deck [2,3,4,5,6,7,8,9,10,10,10,10,11] * 4 random.shuffle(self.deck) self.player_hand [] self.dealer_hand [] def deal_card(self): return self.deck.pop() def step(self, action): # 0要牌, 1停牌 if action 0: self.player_hand.append(self.deal_card()) if sum(self.player_hand) 21: return bust, -1, True return playing, 0, False else: # 庄家逻辑 while sum(self.dealer_hand) 17: self.dealer_hand.append(self.deal_card()) player_total sum(self.player_hand) dealer_total sum(self.dealer_hand) if dealer_total 21 or player_total dealer_total: return win, 1, True elif player_total dealer_total: return draw, 0, True else: return lose, -1, True在实现这些高级应用时我发现状态表示的设计往往比算法本身更重要。比如在交易系统中仅使用价格作为状态远远不够还需要考虑技术指标、市场情绪等多维特征。

相关文章:

用Python手把手教你实现Q-Learning算法(附完整代码)

用Python手把手教你实现Q-Learning算法(附完整代码) 在人工智能领域,强化学习正以惊人的速度改变着我们解决问题的方式。想象一下,你正在训练一个虚拟机器人穿越迷宫,或者开发一个能自动优化广告投放策略的系统——这些…...

巧用DAX与组合图:在Power BI中构建动态现金流量瀑布图

1. 为什么需要动态现金流量瀑布图 财务分析中最让人头疼的就是现金流量的可视化呈现。传统的柱状图或折线图只能展示静态数据,而现金流本质上是一个动态累积过程——每笔资金的流入流出都会影响整体余额。想象一下你正在看银行流水账单:工资入账让余额上…...

万象熔炉 | Anything XL部署案例:Kubernetes集群中SDXL服务编排

万象熔炉 | Anything XL部署案例:Kubernetes集群中SDXL服务编排 想在自己的服务器上搭建一个稳定、可扩展的AI图像生成服务吗?面对SDXL这类大模型动辄十几GB的显存需求,单机部署常常捉襟见肘,更别提应对多用户并发请求了。 本文…...

手把手教你部署Qwen2.5-7B-Instruct:vLLM推理加速+Chainlit前端实战

手把手教你部署Qwen2.5-7B-Instruct:vLLM推理加速Chainlit前端实战 想在自己的服务器上快速部署一个高性能的AI对话服务吗?今天我就带你一步步搭建一个基于Qwen2.5-7B-Instruct模型的智能对话系统,用vLLM实现推理加速,再用Chainl…...

HC-SR501红外人体传感器原理与ESP32-S3驱动开发

1. 人体红外传感器技术解析与ESP32-S3平台驱动实现热释电红外(PIR)传感器是嵌入式系统中应用最广泛的环境感知器件之一,其无需主动发射能量、功耗极低、结构简单且可靠性高,在自动照明、安防监控、智能交互等场景中承担着“环境状…...

SGP30气体传感器原理与ESP32-S3嵌入式驱动实现

1. SGP30气体传感器技术解析与嵌入式驱动实现SGP30是Sensirion公司推出的集成式室内空气质量(IAQ)传感器,采用单芯片多传感元件架构,专为低功耗、高可靠性环境监测场景设计。该器件并非传统意义上的单一气体检测单元,而…...

BH1750光照传感器驱动开发与I²C通信实现

1. BH1750光照强度传感器技术解析与嵌入式驱动实现1.1 传感器核心特性与工程价值BH1750是一种基于ROHM原装BH1750FVI芯片的数字环境光传感器(Ambient Light Sensor, ALS),专为高精度、低功耗光照度测量而设计。其核心价值在于将传统模拟光敏元…...

GME-Qwen2-VL-2B-Instruct开发:Node.js后端服务搭建与API封装

GME-Qwen2-VL-2B-Instruct开发:Node.js后端服务搭建与API封装 如果你正在开发一个需要图片理解能力的应用,比如一个能识别商品图的电商助手,或者一个能分析图表数据的智能工具,那么GME-Qwen2-VL-2B-Instruct这个模型很可能就是你…...

技术双标论:为什么传统大厂高管,嘴上Java,手里.NET?

引言:职场最大的“技术骗局”在传统行业的大厂里,流传着一个经久不衰的“罗生门”。你经常能听到高管在全员大会上唾沫横飞地宣讲:“Java生态最完善、就业面最广、未来最主流”,以此来统一思想、应付招聘市场或融资报表。但诡异的…...

DAMOYOLO-S与JavaScript前端交互:实现浏览器实时目标检测

DAMOYOLO-S与JavaScript前端交互:实现浏览器实时目标检测 1. 引言 想象一下,你正在开发一个智能安防的后台,或者一个在线演示AI能力的平台。用户上传一段视频,或者直接打开摄像头,屏幕上就能实时地、准确地框出画面里…...

UNIT-00:Berserk Interface 赋能 .NET 应用开发:智能业务逻辑生成

UNIT-00:Berserk Interface 赋能 .NET 应用开发:智能业务逻辑生成 最近和几个做企业级应用开发的朋友聊天,大家普遍有个痛点:项目里那些重复的、模式化的业务逻辑代码,写起来太费时间了。比如一个标准的增删改查接口&…...

GLM-4.7-Flash在金融科技中的应用:量化交易策略生成

GLM-4.7-Flash在金融科技中的应用:量化交易策略生成 1. 引言 金融量化领域正经历着一场技术革命。传统的量化交易策略开发往往需要大量的人工分析、复杂的数学模型编写和漫长的回测验证周期。一个量化团队可能需要花费数周时间才能从市场数据中挖掘出有效的交易信…...

LingBot-Depth保姆级教程:Windows WSL2下Docker部署深度感知服务

LingBot-Depth保姆级教程:Windows WSL2下Docker部署深度感知服务 你是不是遇到过这样的问题?用深度相机拍出来的深度图,要么是边缘模糊不清,要么是物体内部有空洞,要么是数据稀疏得没法用。这些不完整的深度数据&…...

Humanity’s Last Exam:为什么这个AI基准测试让GPT-4o也头疼?

Humanity’s Last Exam:揭秘AI基准测试的终极挑战 当GPT-4o这样的顶尖AI模型在常规测试中轻松获得接近满分时,一个名为"Humanity’s Last Exam"的基准测试却让这些智能系统束手无策——平均正确率不足10%。这不禁让人思考:什么样的…...

EmbeddingGemma-300m开源可部署:Ollama镜像适配Apple M系列芯片原生运行教程

EmbeddingGemma-300m开源可部署:Ollama镜像适配Apple M系列芯片原生运行教程 1. 教程概述与价值 EmbeddingGemma-300m是谷歌推出的轻量级嵌入模型,专门为设备端部署优化。这个3亿参数的模型基于先进的Gemma 3架构,能够将文本转换为高质量的…...

YOLOv12模型联邦学习初探:在保护数据隐私下的多中心协同训练

YOLOv12模型联邦学习初探:在保护数据隐私下的多中心协同训练 想象一下,一家大型医院的AI团队想训练一个能精准识别医学影像中病灶的YOLOv12模型。他们手头有海量的CT、MRI数据,但问题是,这些数据分散在各个分院,且由于…...

VideoAgentTrek Screen Filter性能展示:低延迟实时过滤技术突破

VideoAgentTrek Screen Filter性能展示:低延迟实时过滤技术突破 最近在实时视频处理领域,有一个技术点特别让人兴奋,那就是如何在保证高质量滤镜效果的同时,把处理延迟压到最低。这听起来简单,做起来可不容易&#xf…...

KALI Linux 2024最新版Docker安装避坑指南(附阿里云镜像加速配置)

KALI Linux 2024终极Docker部署手册:从零避坑到高效镜像加速 在网络安全领域,KALI Linux作为渗透测试和数字取证的标准工具集,其与Docker的融合正在重塑安全研究的效率边界。2024年最新统计显示,超过78%的专业安全团队已将Docker…...

DeepSeek-OCR镜像免配置原理:预编译依赖+权重内置+端口自动映射

DeepSeek-OCR镜像免配置原理:预编译依赖权重内置端口自动映射 你有没有遇到过这样的情况?看到一个很酷的AI工具,想马上试试,结果光是安装配置就折腾了半天——下载模型、安装依赖、配置环境、解决各种版本冲突……最后热情都被消…...

Hunyuan模型灰度发布:A/B测试部署策略详解

Hunyuan模型灰度发布:A/B测试部署策略详解 1. 引言:为什么需要灰度发布? 在机器翻译服务的实际部署中,直接全量上线新模型往往存在很大风险。你可能遇到过这样的情况:新模型在测试环境表现很好,但一到生产…...

GitHub实战指南:AI头像生成器项目的版本控制与持续集成

GitHub实战指南:AI头像生成器项目的版本控制与持续集成 1. 项目概述与价值 AI头像生成器是一个基于Qwen3-32B模型的创意工具,能够根据用户描述生成详细的头像设计文案,适用于Midjourney、Stable Diffusion等AI绘图工具。在开发过程中&#…...

春联生成模型IDEA插件开发:在IDE内直接生成代码注释春联

春联生成模型IDEA插件开发:在IDE内直接生成代码注释春联 每次写代码注释,是不是都觉得有点枯燥?尤其是到了年底,看着满屏的技术文档,总感觉少了点年味儿。要是能在IDE里,给辛苦了一年的代码也贴上几句应景…...

漫画脸描述生成参数详解:top_p、temperature对角色风格多样性影响分析

漫画脸描述生成参数详解:top_p、temperature对角色风格多样性影响分析 1. 引言:为什么你的AI角色总是一个样? 你有没有遇到过这样的情况:用AI生成漫画角色,输入“金发碧眼的少女”,结果出来的角色&#x…...

圣女司幼幽-造相Z-Turbo惊艳动态预览:Gradio中生成过程实时进度与中间帧展示

圣女司幼幽-造相Z-Turbo惊艳动态预览:Gradio中生成过程实时进度与中间帧展示 1. 引言:当文生图遇见实时预览 想象一下,你输入一段文字描述,点击生成按钮,然后……只能干等着。你不知道模型在“想”什么,不…...

比迪丽LoRA模型重装系统后快速恢复AI绘画环境指南

比迪丽LoRA模型重装系统后快速恢复AI绘画环境指南 重装电脑系统,对很多AI绘画爱好者来说,可能意味着一次“灾难”。辛辛苦苦搭建好的Stable Diffusion环境,精心下载和调试的比迪丽LoRA模型,还有那些收藏的提示词和插件&#xff0…...

FireRedASR-AED-L效果实测:中文/中英混合语音识别,准确率惊艳

FireRedASR-AED-L效果实测:中文/中英混合语音识别,准确率惊艳 1. 工业级语音识别新标杆 当我第一次测试FireRedASR-AED-L时,一段带有浓重广东口音的普通话录音让我印象深刻。传统语音识别工具在这里通常会"卡壳",但Fi…...

Qwen2.5-72B-Instruct-GPTQ-Int4参数详解:80层/RoPE/SwiGLU/RMSNorm全解析

Qwen2.5-72B-Instruct-GPTQ-Int4参数详解:80层/RoPE/SwiGLU/RMSNorm全解析 1. 模型概述 Qwen2.5-72B-Instruct-GPTQ-Int4是Qwen大型语言模型系列的最新版本,代表了当前开源大模型领域的重要进展。这个72.7B参数的指令调优模型经过GPTQ 4-bit量化处理&a…...

MedGemma-X多模态实践:结合自然语言处理的智能报告生成

MedGemma-X多模态实践:结合自然语言处理的智能报告生成 用AI重新定义医学影像诊断的工作流程 还记得上次陪家人去医院做CT检查的情景吗?医生仔细查看影像,时而皱眉思考,时而敲打键盘撰写报告。整个过程耗时不说,医生的…...

移动机器人在静态与动态障碍物环境下的全局路径规划与局部避障仿真MATLAB代码

该 MATLAB 代码实现了一个移动机器人在静态与动态障碍物环境下的全局路径规划与局部避障仿真系统。一、研究背景 随着智能机器人技术的发展,机器人在复杂环境中的自主导航成为研究热点。该代码结合了全局路径规划(A*算法) 与局部动态避障&…...

计算机组成原理视角下的LiuJuan20260223Zimage优化

计算机组成原理视角下的LiuJuan20260223Zimage优化 从底层硬件视角重新审视图像处理瓶颈,让性能优化不再停留在表面 最近在处理一批高分辨率图像时遇到了性能瓶颈,特别是LiuJuan20260223Zimage这种特殊格式的大文件,处理起来总是感觉"力…...