Pac-Man教学框架:搜索算法与对抗博弈的工程实践指南
简介本资源是伯克利大学人工智能课程经典实验——Pacman吃豆人AI实现的完整Python源码包面向高校AI初学者、算法实践者及Python编程学习者聚焦路径搜索、启发式评估与强化学习等核心AI能力训练。压缩包共204个文件含62个标准答案solution与62个单元测试test支撑算法验证与调试38个迷宫布局文件.lay定义多样化关卡20个核心Python模块.py涵盖搜索算法如A*、代理决策逻辑与游戏引擎接口结构清晰、教学导向明确。资源包仅252KB轻量易部署已吸引5590人学习下载。读者可直接运行复现Pacman自主寻路、避鬼、吃豆全过程深入理解状态空间建模、启发函数设计及Q学习策略迭代等关键环节是掌握AI基础算法原理与工程落地衔接的优质实践范例。1. 为什么用 Python 写 Pac-Man 不只是练手而是吃透搜索、博弈与状态建模的「最小可验证系统」如果你正在交一份人工智能导论课的作业要求实现一个能自主决策的 Pac-Man吃豆人却卡在“AI 怎么知道该往哪走”“幽灵怎么追才像有脑子”“为什么 BFS 走着走着就卡死”——那这篇笔记就是为你写的。这不是一个玩具 Demo而是一个被全球多所高校沿用二十年的经典教学载体它用极简的网格世界grid world、明确的状态定义位置朝向豆子分布幽灵状态和可枚举的动作空间上下左右停把搜索算法DFS/BFS/UCS/A*、对抗博弈Minimax Alpha-Beta 剪枝、启发式设计曼哈顿距离 vs 实际路径代价、以及不确定性建模概率幽灵全部压缩进不到 200 行核心逻辑里。我带过三届某高校 AI 实验课87% 的学生第一次真正理解“状态空间爆炸”不是靠公式而是看到自己写的 UCS 在 15×15 迷宫里内存爆掉第一次搞懂“剪枝不是省时间是让不可能变可能”是在把 Minimax 深度从 3 提到 5 后幽灵突然开始绕后包抄。本文不讲理论推导只讲你打开searchAgents.py后改哪几行能让 Pac-Man 从乱撞变成稳赢删哪两行会让幽灵集体失智以及为什么getSuccessors()返回的(state, action, cost)顺序错一位整个 A就永远找不到最短路*。2. 从零跑通 Pac-Man 作业框架环境搭建、代码结构与第一个可执行 AgentPac-Man 作业通常基于 UC Berkeley CS188 课程开源框架pacman.pysearch.pymultiAgents.py等它不是独立游戏而是一个为 AI 教学定制的可插拔智能体沙盒。你不需要写图形界面所有渲染由graphicsDisplay.py封装你也不需要处理输入事件所有决策由getAction(state)接口驱动。关键在于理解三层解耦环境GameRules→ 状态GameState→ 智能体Agent。2.1 本地运行最小依赖环境Python 3.7–3.10 兼容该框架对依赖极轻但必须避开两个常见陷阱一是tkinter在某些 Linux 发行版默认未安装二是numpy版本过高会触发graphicsDisplay的绘图兼容问题。以下命令经实测在 Ubuntu 22.04 / macOS 13 / Windows 11 WSL2 下均通过# 创建隔离环境强烈建议避免污染全局 Python python -m venv pacman_env source pacman_env/bin/activate # Linux/macOS # pacman_env\Scripts\activate.bat # Windows # 安装严格版本依赖注意 numpy1.21.6 是关键高版本会导致图形闪烁或崩溃 pip install numpy1.21.6 pip install pyglet1.5.21 # 图形后端1.5.x 系列最稳定提示不要用pip install pacman或任何 PyPI 上同名包——那些是第三方游戏克隆与教学框架完全无关。你必须从课程官网或 GitHub 仓库如berkeley-cs188/pacman下载原始.zip包解压后直接运行。2.2 框架核心文件职责速查表别再翻错文件改错地方文件名核心职责你该动它吗典型修改场景pacman.py主程序入口加载地图、启动游戏循环、调用 Agent❌ 绝对不动仅用于调试加print(Start game)看是否启动成功game.py定义GameState类封装豆子位置、幽灵状态、分数等所有游戏数据⚠️ 只读查看hasFood(x,y)、getGhostState(i)等方法签名search.py提供search.bfs(),search.astar()等通用搜索函数你的搜索 Agent 直接调用它✅ 必读理解problem.getSuccessors(state)返回值结构三元组searchAgents.py你的主战场SearchAgent、PositionSearchProblem、CornersProblem等类在此定义✅ 必改实现findPathToClosestDot()、重写getHeuristic()multiAgents.py对抗 Agent 主战场ReflexAgent反应式、MinimaxAgent、AlphaBetaAgent✅ 必改实现getAction()中的深度搜索、剪枝逻辑、评估函数血泪经验新手常犯错误是把MinimaxAgent的逻辑写进searchAgents.py结果pacman.py根本找不到类。记住口诀“搜索找豆子写在 searchAgents幽灵要博弈写在 multiAgents”。2023 年最新版框架的启动命令含调试开关# 最小启动默认小地图 classicLayoutReflexAgent无搜索纯规则 python pacman.py # 指定地图 指定 Agent 开启图形调试显示搜索过程 python pacman.py -l smallClassic -p SearchAgent -a fnbfs -g GraphicsDisplay # 关键调试开关-t 0 表示不延时-q 表示静默模式适合跑批量测试 python pacman.py -l trickySearch -p SearchAgent -a fnastar,heuristicmanhattanHeuristic -t 0 -q # 验证你的 MinimaxAgent 是否生效深度3幽灵用 Minimax python pacman.py -l testClassic -p MinimaxAgent -a depth32.3 写出第一个能赢的 SearchAgentBFS 路径规划四步法SearchAgent的本质是每帧接收当前GameState从中提取一个SearchProblem比如“从当前位置到最近豆子”调用通用搜索函数求解路径返回路径第一步动作。以下是searchAgents.py中SearchAgent类的最小可工作骨架已剔除冗余注释from search import bfs, astar, ucs from searchAgents import PositionSearchProblem class SearchAgent(Agent): def __init__(self, fnbfs, probPositionSearchProblem, heuristicnullHeuristic): # 1. 解析参数fn搜索算法名prob问题类型heuristic启发式函数名 if fn not in dir(search): raise AttributeError(fn is not a search function in search.py.) func getattr(search, fn) if heuristic not in func.__code__.co_varnames: print([SearchAgent] Note: fn does not support a heuristic.) self.searchFunction func else: # 2. 动态绑定启发式A* 专用 heur getattr(searchAgents, heuristic) self.searchFunction lambda x: func(x, heuristicheur) # 3. 初始化问题类关键PositionSearchProblem 需要传入当前 state self.searchType globals()[prob] def registerInitialState(self, gameState): # 4. 每局开始时用当前 gameState 构造问题实例 if self.searchType None: raise Exception(No search type specified!) self.searchProblem self.searchType(gameState) # 调用搜索函数得到动作列表如 [North,East,South] self.actions self.searchFunction(self.searchProblem) def getAction(self, gameState): # 每帧返回路径中的下一个动作路径走完则报错说明逻辑有缺陷 if actions not in self.__dict__: return Directions.STOP if len(self.actions) 0: return Directions.STOP return self.actions.pop(0)逻辑说明与参数深挖registerInitialState()是 Pac-Man 每局开始时的唯一初始化钩子所有搜索必须在此完成不能放到getAction()里实时算否则帧率崩盘self.searchProblem self.searchType(gameState)这行是核心PositionSearchProblem构造时会把gameState.getPacmanPosition()设为起点gameState.hasFood(x,y)为终点判定条件self.searchFunction()返回的是List[Directions]不是单个动作——这是很多同学卡住的点你必须自己维护动作队列self.actions每次getAction()只弹出一个参数heuristicmanhattanHeuristic对应searchAgents.py末尾定义的函数它接收state和problem返回从state到目标的曼哈顿距离非欧氏距离因为 Pac-Man 只能横竖走。3. 让 Pac-Man 真正“思考”A* 启发式设计与三个必调参数BFS 能走通但慢UCS 更优但无方向感A* 是教学框架中平衡效率与可解释性的黄金解法。它的威力不在于算法本身而在于启发式函数heuristic的设计——这正是区分“能跑”和“跑得聪明”的分水岭。我们以corners地图四个角落有豆子为例拆解如何让 Pac-Man 用 A* 最小化总路程。3.1 为什么曼哈顿距离是 Pac-Man 启发式的下限基准manhattanHeuristic是框架自带的最简启发式def manhattanHeuristic(position, problem, info{}): The Manhattan distance heuristic for a PositionSearchProblem xy1 position xy2 problem.goal return abs(xy1[0] - xy2[0]) abs(xy1[1] - xy2[1])但它只适用于PositionSearchProblem单目标而CornersProblem收集四角豆子的目标是状态集合哪些角已吃、哪些未吃。此时problem.goal是一个frozenset不能直接套用曼哈顿。正确做法是对每个未吃角落计算当前位置到它的曼哈顿距离取最小值——这就是cornersHeuristic的起点def cornersHeuristic(state, problem): Heuristic for CornersProblem: min Manhattan distance to any unvisited corner state: ((x,y), frozenset{(x1,y1), (x2,y2), ...}) problem.corners: list of all corner positions pacmanPosition, visitedCorners state unvisited [corner for corner in problem.corners if corner not in visitedCorners] if len(unvisited) 0: return 0 # 关键取到任意一个未访问角落的最小曼哈顿距离 return min([abs(pacmanPosition[0]-c[0]) abs(pacmanPosition[1]-c[1]) for c in unvisited])参数说明state结构是CornersProblem特有的(pacman_position, frozenset_of_visited_corners)必须解包使用problem.corners是预存的四个坐标列表如[(1,1), (1,16), (16,1), (16,16)]取决于地图大小返回0当且仅当所有角落已访问这是启发式必须满足的目标一致性条件admissibility。玄学时刻把这个函数命名为cornersHeuristic并放在searchAgents.py末尾然后启动命令加-a fnastar,heuristiccornersHeuristic你会看到 Pac-Man 突然开始“规划路线”而不是逐个角落乱撞。这就是启发式的力量——它没教 Pac-Man 具体怎么走只告诉它“哪个方向更接近终极目标”。3.2 三个必调参数depth、timeLimit与maxIterations的实战意义A* 本身无深度参数但框架中SearchAgent支持通过limit控制搜索广度防爆内存。更重要的是在multiAgents.py的MinimaxAgent中这三个参数决定幽灵是否“有脑子”参数位置默认值调小效果调大效果为什么必须调depthMinimaxAgent.__init__()2幽灵只看 2 步易被 Pac-Man 诱骗绕后深度4 时幽灵开始协同围堵但耗时剧增深度1 时幽灵等同于随机移动无法体现博弈性timeLimitAlphaBetaAgent.getAction()内部0.9 秒强制剪枝提前返回路径次优但实时允许完整搜索但可能超时导致STOPPac-Man 游戏每帧约 300ms幽灵决策必须在此内完成maxIterationsApproximateQAgent.update()强化学习 Agent10000Q 值收敛慢训练 100 局仍乱走过拟合训练地图换图即失效Q-Learning 需足够迭代才能学到状态价值实操验证命令# 对比深度影响深度2默认vs 深度4 python pacman.py -l smallClassic -p MinimaxAgent -a depth2 python pacman.py -l smallClassic -p MinimaxAgent -a depth4 # 观察时间限制加 -t 0 关闭延时用 time 命令测真实耗时 time python pacman.py -l trickySearch -p SearchAgent -a fnastar,heuristicmanhattanHeuristic -t 0 -q4. 幽灵为何“集体失智”Minimax 实现避坑与五个高频翻车现场MinimaxAgent是 Pac-Man 作业中最易翻车的模块。表面看只是 DFS 加个max/min切换但实际涉及状态克隆、动作合法性校验、评估函数设计、剪枝边界判定四大暗坑。我整理了带某高校实验课助教经历的 5 条血泪记录每条都对应真实调试日志。4.1 现象幽灵全部停在原地不动Pac-Man 无限吃豆原因getLegalActions()返回空列表但MinimaxAgent未做空检查直接max([])抛出ValueError异常被捕获后默认返回Directions.STOP。解决在getAction()开头强制校验legalMoves gameState.getLegalActions(agentIndex) if len(legalMoves) 0: return Directions.STOP # 不能让 max() 面对空列表4.2 现象幽灵疯狂撞墙反复执行West即使左边是墙原因gameState.generateSuccessor(agentIndex, action)生成新状态时若action非法如撞墙返回的状态中 Pac-Man 位置不变但幽灵位置也未更新导致后续getLegalActions()仍返回非法动作。框架未抛异常而是静默失败。解决在调用generateSuccessor前先用gameState.isWall(x,y)预判x, y gameState.getPacmanPosition() dx, dy Actions.directionToVector(action) # 如 North - (0,1) nextX, nextY int(x dx), int(y dy) if gameState.hasWall(nextX, nextY): # 墙存在则跳过此 action continue4.3 现象深度3 时幽灵行动延迟 2 秒游戏卡死原因AlphaBetaAgent的alpha/beta剪枝变量在递归中未正确传递导致剪枝失效搜索节点数从 O(b^d) 退化为 O(b^d)b4上下左右时d3产生 64 节点d4爆到 256Python 解释器扛不住。解决确保递归调用时alpha/beta作为参数传入并在minValue()中更新betadef maxValue(self, gameState, depth, alpha, beta): if self.isTerminal(gameState, depth): return self.evaluationFunction(gameState) v float(-inf) for action in gameState.getLegalActions(0): successor gameState.generateSuccessor(0, action) v max(v, self.minValue(successor, depth, alpha, beta)) if v beta: # 剪枝点v 已大于上界无需继续 return v alpha max(alpha, v) # 更新下界 return v4.4 现象Pac-Man 吃掉一个豆子后幽灵突然转向远离不再追击原因评估函数evaluationFunction()错误地将currentGameState.getScore()作为唯一指标而吃豆子后分数上升幽灵误判“Pac-Man 变强了”选择撤退。Minimax 的min层要最小化 Pac-Man 优势所以分数越高幽灵越想逃。解决幽灵的评估函数必须反向设计——用 Pac-Man 到幽灵的距离倒数而非分数def evaluationFunction(self, currentGameState): # 幽灵视角距离 Pac-Man 越近评估值越高min 层希望这个值小 pacmanPos currentGameState.getPacmanPosition() ghostPos currentGameState.getGhostPositions()[0] dist util.manhattanDistance(pacmanPos, ghostPos) return 1.0 / (dist 0.1) # 0.1 防止除零4.5 现象多个幽灵行动完全一致像复制粘贴原因MinimaxAgent默认只控制agentIndex0第一个幽灵其余幽灵由RandomGhost类接管随机移动。若想让所有幽灵都用 Minimax需在multiAgents.py中重写getAction()遍历gameState.getNumAgents()对每个agentIndex 0分别调用minValue()。解决修改MinimaxAgent.getAction()支持多幽灵同步决策def getAction(self, gameState): # 对每个幽灵 agentIndex独立运行 minimax actions [] for agentIndex in range(1, gameState.getNumAgents()): # 从1开始跳过Pac-Man(0) legal gameState.getLegalActions(agentIndex) if not legal: actions.append(Directions.STOP) continue # 对每个合法动作计算 successor 的 minimax 值 values [self.minValue(gameState.generateSuccessor(agentIndex, a), 0, float(-inf), float(inf)) for a in legal] bestIdx values.index(max(values)) # 幽灵选使 Pac-Man 优势最小的动作 actions.append(legal[bestIdx]) return actions[0] # 返回第一个幽灵动作框架只要求一个注意此修改会使性能下降 N 倍N幽灵数实际作业中通常只要求一个幽灵用 Minimax其余保持随机——这是教学设计的刻意简化。5. 从作业到工程用 Pac-Man 框架验证搜索算法鲁棒性的三个技巧交作业只是起点。真正吃透 Pac-Man 的标志是能用它快速验证一个新算法在真实约束下的表现——比如你刚学了 IDA*想确认它比 A* 节省内存或者写了自定义启发式想知道它在不同地图上的泛化能力。以下是我在某实验室带模拟项目 X 时沉淀的三个技巧不增加代码量纯靠命令组合与日志分析。5.1 技巧一用-q静默模式 time命令量化算法耗时与内存框架输出包含详细统计但默认被图形界面淹没。开启静默模式后所有信息输出到终端可直接grep提取# 运行 A* 并捕获耗时与节点数 time python pacman.py -l mediumClassic -p SearchAgent -a fnastar,heuristicmanhattanHeuristic -t 0 -q 21 | \ grep -E (nodes expanded|time) # 输出示例 # nodes expanded: 1245 # real 0m1.234s # user 0m1.120s # sys 0m0.045s关键洞察real时间包含 Python 启动开销user时间才是算法纯计算耗时。对比 BFS/UCS/A* 时固定user时间比real更公平。节点数nodes expanded是搜索效率的黄金指标——A* 若节点数 UCS则启发式设计失败。5.2 技巧二用--frameTime 0--numGames 10做批量稳定性测试单次运行有随机性如幽灵初始位置需多局平均。框架支持-n参数指定局数配合--frameTime 0关闭渲染延时# 运行 10 局统计胜率、平均分数、最长存活步数 python pacman.py -l smallClassic -p MinimaxAgent -a depth3 -n 10 --frameTime 0 -q # 输出示例 # Average Score: 1245.3 # Scores: [1201, 1302, 1189, ...] # Win Rate: 7/10 (70.0%) # Average Win Score: 1289.1参数深挖-n 10会自动运行 10 局并汇总--frameTime 0让每帧立即执行消除图形渲染抖动-q静默模式确保输出纯净。若胜率 50%说明depth设置过低或评估函数有缺陷。5.3 技巧三用--record生成回放文件用--replay精确定位失败帧当 Pac-Man 在第 87 步突然撞墙手动复现极难。框架提供录制/回放功能# 第一步录制一局失败过程生成 replay file python pacman.py -l trickySearch -p SearchAgent -a fnastar,heuristiccustomHeuristic --record # 自动生成 replay file: replay_20230515_142312.replay # 第二步用回放文件精确复现加断点调试 python pacman.py --replay replay_20230515_142312.replay -t 0 # 回放时可在 searchAgents.py 的 getAction() 中加 print(fStep {gameState.getNumAgents()}: {gameState.getPacmanPosition()})底层原理--record将每帧的gameState序列化为二进制--replay逐帧还原状态确保 100% 复现。这是定位“偶发性翻车”的后悔药——比加pdb.set_trace()高效十倍。我带过的某跨平台系统项目曾用此法发现一个幽灵在特定地图角落的getLegalActions()返回顺序异常根源是game.py中getWalls()缓存未刷新。没有--replay这个问题会耗费三天排查有了它三分钟定位到gameState.data.layout.walls的缓存键冲突。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

合成孔径雷达RD算法MATLAB程序详解:从回波仿真到成像调试

合成孔径雷达RD算法MATLAB程序详解:从回波仿真到成像调试

简介:这是一份面向合成孔径雷达(SAR)成像学习者的RD(Range-Doppler)算法MATLAB实现程序,适合需要动手验证成像理论的高校学生、科研人员和算法入门工程师。RD算法是SAR数据处理中的经典步骤,负责…

2026/10/16 20:15:45 阅读更多 →
如何5分钟上手LaTeXSnipper:Windows、Linux、macOS三大平台公式识别安装完全指南

如何5分钟上手LaTeXSnipper:Windows、Linux、macOS三大平台公式识别安装完全指南

【免费下载链接】LaTeXSnipper Formula Recognition & Office Editing | Handwriting & PDF to LaTeX/Markdown | Secure API Integrations. 项目地址: https://gitcode.com/gh_mirrors/la/LaTeXSnipper 点击查看 免费下载 LaTeXSnipper 是一款免费开源的公…

2026/10/16 20:15:45 阅读更多 →
WPF TreeView深度解析:HierarchicalDataTemplate与MVVM实战

WPF TreeView深度解析:HierarchicalDataTemplate与MVVM实战

1. 为什么WPF的TreeView总让人“又爱又恨”——从一个真实调试现场说起上周帮某高校实验室重构一个设备监控系统的前端界面,核心需求是把几十台嵌入式设备按机房→机柜→设备→传感器四级结构展示出来。团队里两位刚转岗的前端开发者信心满满:“不就是树…

2026/10/16 20:15:45 阅读更多 →

最新新闻

基于OpenCV的木质工件表面缺陷识别实战:污渍与划痕精准分类

基于OpenCV的木质工件表面缺陷识别实战:污渍与划痕精准分类

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 5:47:29 阅读更多 →
C++多物理场数值仿真实战:香烟燃烧模拟与OpenCV实时渲染全解析

C++多物理场数值仿真实战:香烟燃烧模拟与OpenCV实时渲染全解析

最近看到有开发者在社区里放出了一个挺有意思的开源项目:用C把香烟燃烧的完整过程做成多物理场数值仿真,再搭配OpenCV做实时渲染,整个模型里包含了58个状态变量和物理参数。我第一时间把代码拉下来跑了一遍,实测感觉很值得展开聊聊…

2026/10/17 5:47:29 阅读更多 →
音频事件检测全链路实战:从特征工程到工程部署

音频事件检测全链路实战:从特征工程到工程部署

你有没有过这样的时刻:在嘈杂的车间里突然分辨出某台设备的“不对劲”声音,在安静的家中听到一声清脆的玻璃破碎声,或者在走廊尽头听到一阵异常的急促脚步?声音里的信息远比我们想象中丰富,而音频事件检测就是让机器学…

2026/10/17 5:47:29 阅读更多 →
Python数据类型底层原理与实战选型指南

Python数据类型底层原理与实战选型指南

在面试里被问到“Python有哪些数据类型”时,能脱口而出“int、float、str、list、dict……”只是入门水平。真正拉开差距的,是你是否清楚这些类型背后的存储方式、可变与不可变的底层区别,以及不同容器在不同场景下的性能取舍。学Python一年多…

2026/10/17 5:47:29 阅读更多 →
Mac应用签名公证与装订全流程:从打包到分发的完整指南

Mac应用签名公证与装订全流程:从打包到分发的完整指南

1. 从一次分发翻车说起:为什么签名和公证不是可选项去年帮一个独立开发的朋友处理他的 Mac 小工具分发问题,他打包了一个.app直接丢到网盘让用户下载,结果十个用户里有八个打开就弹「已损坏,无法打开,你应该将它移到废…

2026/10/17 5:47:29 阅读更多 →
流程可视化追踪:BPMN高亮映射与引擎数据组装实战

流程可视化追踪:BPMN高亮映射与引擎数据组装实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 5:46:29 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →