GONOGO_Qlearning改进强化学习:Matlab代码拆解与跑通指南
简介GONOGO_Qlearning改进强化学习Matlab代码包面向计算机、电子信息工程、数学等专业学生及强化学习研究者适合课程设计、期末大作业和毕业设计等场景用于解决传统Q学习收敛慢、稳定性不足等问题。它基于Q函数迭代更新机制引入了针对学习效率和稳定性的改进策略代码采用参数化编程学习率、探索率、折扣因子等关键参数均可灵活调整并配有详细注释和可直接运行的案例数据兼容Matlab 2014、2019a、2024a等版本。压缩包共5个文件包含3个M文件源码、1份PDF算法说明和1张运行结果截图整体仅1.2MB。M文件实现完整的训练与评估流程PDF文档交代算法推导与参数设置运行截图直观展示学习效果内容精炼便于快速定位核心模块。目前已有64人学习使用读者可借助源码注释和案例数据自主复现实验通过调整参数观察算法行为差异深入理解强化学习中的探索与利用平衡等核心概念是一份兼具教学与参考价值的实用工具。1. GONOGO_Qlearning 改进强化学习Matlab 代码包到底改在哪、怎么跑第一次拿到这套 GONOGO_Qlearning 的 Matlab 代码时我原以为又是一份把教科书伪代码搬上来、换几个变量名就敢叫“改进”的课程设计。但拆完 main.m 和 GNG_loglikeli_action.m 之后不得不承认它在 Q-learning 的动作选择策略上确实动了刀——用 GNG 网络做状态空间的在线划分配合 log-likelihood 加权的动作筛选比传统 epsilon-greedy 在收敛稳定性上明显高出一截。它附带的案例数据能直接跑通代码里参数都是独立变量改学习率、折扣因子、探索率不需要动核心循环这对做课程设计、期末大作业或者毕业论文复现的人来说非常友好。适合三类人想把强化学习从“看公式”推进到“看曲线”的学生需要在短时间内出一个可运行对比实验的研究者以及想基于一个干净框架二次开发 Q-learning 变体的工程师。这篇笔记我把代码拆开讲清楚再给你一份能直接抄的参数设置和踩坑记录。2. 从 Q-learning 到 GONOGO改进点拆解与 Matlab 核心实现2.1 先复习标准 Q-learning 的更新规则才知道改进在哪任何改进都建立在对原版的清晰认知之上。标准 Q-learning 属于 off-policy 的时间差分算法它的核心是一条更新公式Q(s,a) - Q(s,a) alpha * [r gamma * max(a) Q(s,a) - Q(s,a)]四个参数各管一件事alpha 控制新信息覆盖旧经验的速度gamma 决定未来奖励折算成当前价值的比例max 操作让算法能在“假设后续都采取最优动作”的前提下估计当前动作的价值r 则是环境给的真实反馈。Matlab 里用二维数组就能存 Q 表状态编号做行索引、动作编号做列索引每次迭代只更新当前状态对应的那一行。以这套代码为例如果你打开 main.m 找到 Q 表更新段会看到类似这样的结构% 核心更新循环与环境的交互 Q 表刷新 for step 1:maxSteps % 用改进策略选择动作GNG log-likelihood 加权见 2.2 a select_action_GNG(Q, s, GNG_struct, params); % 执行动作观察下一状态和奖励 [s_next, r] env_step(s, a, env_params); % 标准 Q-learning 表更新off-policy 取下一状态最大 Q 值 Q(s, a) Q(s, a) params.alpha * ... (r params.gamma * max(Q(s_next, :)) - Q(s, a)); s s_next; % 记录每一步的累计奖励供 RunningMean_edge 平滑画图 reward_history(step) reward_history(max(step - 1, 1)) r; end这段代码的更新公式和教科书完全一致但它真正的改进不在这里而在select_action_GNG这个函数——传统 Q-learning 用的是 epsilon-greedy即小概率随机探索、大概率选当前最大 Q 值而 GONOGO 的版本把状态空间做了自组织划分动作选择的权重由 log-likelihood 动态调整探索不再是“乱试”而是朝不确定性高的区域倾斜。2.2 GNG_loglikeli_action状态空间在线划分与动作筛选GNG_loglikeli_action.m是本套代码的引擎。GNGGrowing Neural Gas是自组织映射的一种增量变体能根据输入样本的分布不断插入和删除节点从而让状态空间被自适应地切成若干区域每个区域对应一组临近状态。传统 Q 表面对连续状态必须手动离散化网格太密会爆内存、太疏又会丢失信息GNG 的价值就是在“该密的地方密、该疏的地方疏”。动作筛选的 log-likelihood 部分做的是这样一件事对每个候选动作用当前状态所属 GNG 节点上的历史统计量计算一个对数似然值表示“在这个状态下选这个动作有多大概率得到正奖励”最后把 GNG 的结构信息与 Q 表汇总成最终动作。这种做法的直接收益是在稀疏奖励环境下探索动作集中在有正反馈记录的区域附近而不是像 epsilon-greedy 那样盲目撒网。这版代码把 GNG 的拓扑参数、log-likelihood 的平滑系数都提取成了独立变量你不需要理解神经气内部的赫布学习细节也能调通。实际操作中最影响效果的是epsilon的退火策略——如果探索衰减太快GNG 还没来得及形成有效的拓扑划分算法就过早收敛到次优策略。2.3 参数化编程把一个算法拆成变量而不是写死在循环里这套代码有一个我很欣赏的习惯所有超参数集中在文件头部和算法逻辑彻底分离。打开 main.m你会看到类似这样的参数区% 超参数配置区改这里不动算法核心 params.alpha 0.1; % 学习率越大收敛越快但过大会震荡 params.gamma 0.95; % 折扣因子越大越看重长期回报 params.epsilon 0.3; % 探索率初始随机动作概率 params.epsilon_min 0.01; % 探索率下限 params.decay 0.995; % 探索退火系数每回合乘一次 params.maxSteps 2000; % 单回合最大步数 % GNG 拓扑参数状态空间自适应划分 gng_params.maxNodes 30; % 节点上限连续状态空间分区数量 gng_params.aging 200; % 边老化阈值 gng_params.beta 0.95; % 节点移除阈值 % 环境边界参数附带的案例数据已经配好替换成自己的任务时改这里 env_params.stateLow [0, 0]; % 状态下限 env_params.stateHigh [10, 10]; % 状态上限改 alpha 和 gamma 直接影响学习曲线的收敛位置改 epsilon 的退火速度决定前期探索是否充分。原则是先固定 gamma 和 epsilon 的策略只调 alpha等 Q 值不震荡了再动 epsilon 的衰减周期最后才是 GNG 的节点数。这个顺序能帮你从一团乱麻里理出因果——毕竟改一个参数性能暴跌的时候你得知道锅是谁的。3. 把 GONOGO_Qlearning 跑起来main.m 全流程、文件分工与参数怎么改3.1 压缩包文件清单与各自职责解压GONOGO_Qlearning改进强化学习Matlab代码.rar以后核心文件就六个。main.m是总入口所有流程从它启动GNG_loglikeli_action.m是改进动作选择函数2.2 已经讲过RunningMean_edge.m负责把原始 reward 序列做运行均值平滑输出论文里那种干净的学习曲线Q_learning.pdf是算法原理参考文档适合先通读一遍再动代码运行结果.jpg是作者跑完的曲线图用来对照你自己的输出是否正常。我一般建议的阅读顺序是先看 PDF 把 Q-learning 更新公式过一遍打开 main.m 把参数区和主循环标记出来再看 GNG_loglikeli_action.m 的动作选择段最后用 RunningMean_edge.m 画图。顺序反了的后果是——你会在看不懂 GNG 实现细节的地方卡住而实际上你只需要理解它的输入输出。3.2 main.m 的执行流程与关键代码走读main.m 的逻辑可以拆成四段参数初始化、GNG 结构创建、训练循环、结果可视化。训练循环里比较关键的是每回合结束时的探索率退火和 GNG 节点更新对应代码如下% 每回合结束探索率退火 GNG 结构调整 for episode 1:maxEpisodes s env_reset(env_params); % 重置环境到初始状态 total_reward 0; for step 1:params.maxSteps % —— 动作选择epsilon 概率走 GNG 加权探索否则选当前最优 —— if rand() params.epsilon a gng_weighted_explore(s, Q, gng_params); else [~, a] max(Q(s, :)); % 利用选 Q 最大的动作 end [s_next, r, done] env_step(s, a, env_params); % —— Q 表增量更新 —— Q(s, a) Q(s, a) params.alpha * ... (r params.gamma * max(Q(s_next, :)) - Q(s, a)); % —— log-likelihood 统计量刷新供后续动作加权使用 —— GNG_struct update_likelihood(GNG_struct, s, a, r); s s_next; total_reward total_reward r; if done, break; end end % 探索率按退火系数衰减但不能低于下限 params.epsilon max(params.epsilon * params.decay, params.epsilon_min); end有几个细节容易忽略。第一rand() params.epsilon这个判断用的是全局随机数而update_likelihood里如果用了randn两者的随机数流会互相干扰——你在 Matlab 里跑两次同样的代码如果结果不同就要考虑是不是随机数种子没有固定。第二max(Q(s_next, :))是 off-policy 的关键它取的是下一状态所有动作里的最大值而不是实际执行动作的 Q 值。第三GNG 结构调整不能每个 step 都做否则节点数会膨胀到失控常见做法是每 N 步触发一次拓扑更新代码里这个 N 值通常和gng_params.aging相关你可以在调试时打印节点数变化来确认。3.3 参数改动实验用控制变量法找出每个参数的作用参数化编程最大的好处是支撑批量实验。我在拿到这套代码后做的第一件事是把 params 里的 alpha、gamma、epsilon 初始值各设三档写一个 for 循环批量跑 9 组实验然后把 Reward 曲线叠加到一张图上对比。步骤是把 main.m 改造成一个接受参数字典的函数run_experiment(params)开一个脚本在不同参数组合下调用它收集返回值。% 批量参数实验脚本示例 results table(); % 存储每组参数的平均收益 exp_id 0; alpha_list [0.05, 0.1, 0.2]; gamma_list [0.9, 0.95, 0.99]; for a alpha_list for g gamma_list exp_id exp_id 1; params.alpha a; params.gamma g; avg_reward run_experiment(params); % 跑完整个训练并返回均值 results(exp_id, :) {a, g, avg_reward}; end end % 查看结果找出最优组合 disp(results);注意三个陷阱。一单次实验有随机性每个参数组合至少要跑 5 次取平均否则你看到的好坏差异可能只是噪声二学习率调大时epsilon 衰减必须同步放缓否则探索不足会让 Q 值学不到全貌三gamma0.99 在步数受限的环境里很容易因为累计奖励爆炸导致 Q 值不收敛如果你的案例数据是短回合任务0.95 是更稳的起点。对照组跑完之后再用最优参数组合和作者的默认参数各跑一遍看性能提升的幅度这就是你作业里最有说服力的实验图。4. 避坑指南跑这套代码最容易翻车的五个位置4.1 现象同样的参数两次运行结果差很多原因几乎都是随机数种子没有固定。Matlab 的rand、randn、randi共享全局随机数流任何一个函数调用都会改变后续所有随机数状态。解决方法是 main.m 开头固定种子rng(42); % 固定随机数种子确保实验结果可复现注意rng要放在所有随机操作之前而且如果在循环内部调用了rng(shuffle)前面的固定就白做了。这套代码里 GNG 节点初始化和动作探索都会消耗随机数流种子的位置尤其敏感。4.2 现象RunningMean_edge.m 画出来的曲线“假平滑”这个函数本质是做滑动平均窗口设得过大曲线会滞后于真实趋势——你把收敛点看晚了窗口过小曲线毛刺多不说还看不出趋势。解决方法是先用窗口50 看整体形态再逐步减小到 10、20找一个既能压住噪声又不抹掉拐点的窗口。具体在函数里找窗口变量通常叫windowSize改成合适值即可。4.3 现象改了环境边界之后Q 表矩阵越界原因是状态编号直接当成了 Q 表行索引。代码里 Q 表是预分配大小的如果环境状态超出了env_params.stateHigh的范围Q(s,:)会报下标越界。解决方法是先对状态做归一化或离散化映射把连续值映射到固定区间再查表。常见做法是在env_step返回s_next之后加一行s_idx min(max(s_next, 1), size(Q, 1)); % 钳位到合法索引范围道理简单但一旦环境边界改得不一致这个错能让你排查半小时。经验是改环境参数时顺手把 Q 表初始化的大小也查一遍。4.4 现象GNG 节点数持续增长内存占用飙升原因在aging参数——节点多久没被激活就会被移除这个值设得太大移除机制失效节点只增不减。解决方法是先把maxNodes调小比如 30观察节点数是否稳定在这个上限附近如果一直顶着上限说明拓扑在持续分裂此时应该检查输入状态是否做了归一化。GNG 对输入量纲极其敏感状态是 0~1 和 0~100 的两个维度后者的方差会主导节点分布。4.5 现象Matlab 2024a 上运行报“函数或变量无法识别”这类问题多出在函数名与工具箱版本相关。RunningMean_edge.m如果用到了movmean这个函数在 2016a 之后才有而代码声称支持 2014 版这里存在版本断档。解决方式是打开报错行把movmean(x, window)替换成手写循环均值或filter实现% 兼容旧版 Matlab 的滑动平均实现替代 movmean kernel ones(1, windowSize) / windowSize; smoothed filter(kernel, 1, reward_history);同理如果randi或unique这类基础函数报错先确认是不是脚本与函数同名冲突——这是 Matlab 老用户都踩过的坑工作目录里存在同名脚本会静默覆盖内置函数。5. 从运行结果到发表级实验图数据记录、置信区间与对比策略5.1 用 RunningMean_edge 画图但要在多个随机种子下取平均单条学习曲线没有说服力。我跑这套代码时会把 main.m 里的训练循环包一层用 5 个不同的rng种子各跑一遍把每个种子的每回合累计奖励存成一个矩阵最后取均值画主曲线把标准差区域画成阴影带。这也是热榜上“origin 画强化学习置信区间曲线”的常见诉求但 Matlab 里几十行代码就能解决不用外转 origin。% 多种子运行生成均值±标准差的置信带 num_seeds 5; all_curves zeros(num_seeds, maxEpisodes); for seed 1:num_seeds rng(seed * 100); % 每个种子独立 reward_per_episode train_agent(params); % 返回每回合奖励 all_curves(seed, :) reward_per_episode; end mean_curve mean(all_curves, 1); std_curve std(all_curves, 0, 1); % 画置信带先画填充区再画均值线 fill([1:maxEpisodes, maxEpisodes:-1:1], ... [mean_curve std_curve, fliplr(mean_curve - std_curve)], ... [0.8 0.85 0.95], EdgeColor, none); hold on; plot(1:maxEpisodes, mean_curve, b-, LineWidth, 1.6);图的纵轴建议用“平滑后的回合累计奖励”横轴是回合数。有一个细节如果你要对比 GONOGO 和标准 Q-learning两条曲线的随机种子必须完全一致否则初始随机性会让对比失效。这也是评审老师最常挑的问题之一。5.2 对比实验的公平性同样预算、同样环境、同样初始化对比实验需要三个统一。第一总交互步数统一比如两边都是 10 万步而不是一个 500 回合一个 800 回合。第二初始 Q 表统一都从零矩阵开始。第三动作选择策略的随机性来源统一最好都用同一个rng种子启动。标准 Q-learning 的 epsilon-greedy 做基线GONOGO 的 GNG 加权做实验这样的对比图才有意义。作者代码里Q_learning.pdf附带的原理说明写得很清楚建议你实现基线时参照 PDF 里的伪代码而不是自己凭记忆写。另外附带的运行结果.jpg是作者在自己环境上的输出你跑出来的曲线如果形态接近但绝对值不同是正常的——环境参数和随机种子不同。但如果你的曲线完全不收敛问题大概率在第 4 章的避坑点上。6. 把 GONOGO_Qlearning 移植到自己的任务状态离散化和 GNG 参数的一个习惯这套代码的案例数据是一个固定环境真正考验你的是把它换到自己的任务上。我的习惯是三个步骤走先手写一个最小环境接口再调整状态表示最后用网格搜索定 GNG 参数。哪怕你只是做课程设计这个流程走一遍答辩时能讲的深度完全不一样。第一步最小环境接口只需要四个函数env_reset()返回初始状态env_step(s, a)返回(s_next, r, done)state_dim和action_set作为全局常量。把 main.m 里跟环境值硬编码的地方全部替换成这四个接口。第二步状态表示决定 GNG 的输入维度连续状态必须归一化。我在移植一个自动泊车简化任务时状态是 (x, y, theta)不归一化直接喂给 GNG节点分布被 x 和 y 的绝对数值主导theta 完全被忽略。归一化到 [0, 1] 之后节点分布立刻正常了。第三步GNG 参数用粗到细的网格搜索。先固定maxNodes30把aging从 50 试到 500看哪组收敛最快再固定aging把节点数从 10 试到 80。一个能用的经验公式是节点数大约是状态维度乘以 10~15aging设为每个回合平均步数的 2~3 倍。比如你的任务每回合约 100 步aging 设 200 到 300 比较合适。这里没有严格的理论解都是经验区间。照这三步走完代码的核心逻辑基本不需要动——Q 表更新、log-likelihood 加权、GNG 节点更新这些框架性部分跟具体环境无关。从那以后我每次拿别人的强化学习代码都会强制自己先做一个小型消融实验把改进模块去掉跑一遍基线再装回来跑一遍确认改进确实有效。这个习惯救过我很多次也让很多“所谓改进”现出原形。这套 GONOGO_Qlearning 至少在我跑过的任务上是真有效果的希望你也能在自己的实验里验证到希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Codex CLI 完整安装配置指南:从环境准备到终端AI编程实战

Codex CLI 完整安装配置指南:从环境准备到终端AI编程实战

Codex CLI 的下载安装配置,我前前后后在不同机器上折腾了不下十次,踩过的坑比代码行数还多。2026 年 10 月这版发布之后,安装逻辑和模型选择又有不少变化,网上很多教程已经过时了。这篇文章就把我自己最新的安装配置流程完整捋一遍…

2026/10/13 0:06:02 阅读更多 →
中国矢量地图SHP处理全流程:坐标系选型、清洗转换与出图避坑

中国矢量地图SHP处理全流程:坐标系选型、清洗转换与出图避坑

简介:对于需要处理中国行政区划地理数据的GIS用户、研究人员与政策制定者而言,这份SHP格式的矢量地图覆盖国界、省界、市界与县界四级行政边界,可支撑地图制图、空间统计、城乡与交通规划及数据可视化等应用场景。压缩包共28个文件&#xff0…

2026/10/13 0:06:02 阅读更多 →
线上问题定位神器 Arthas 已接入 MCP:把 AI 工具端点改到 TaoToken 的实操大纲

线上问题定位神器 Arthas 已接入 MCP:把 AI 工具端点改到 TaoToken 的实操大纲

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

2026/10/13 0:05:02 阅读更多 →

最新新闻

architecture-decision-record 实战:用 ADR 记录“选 PostgreSQL 还是 MySQL“的数据库选型决策

architecture-decision-record 实战:用 ADR 记录“选 PostgreSQL 还是 MySQL“的数据库选型决策

【免费下载链接】architecture-decision-record Architecture decision record (ADR) examples for software planning, IT leadership, and template documentation 项目地址: https://gitcode.com/gh_mirrors/ar/architecture-decision-record 点击查看 免费下载 …

2026/10/13 1:44:13 阅读更多 →
rust-bindgen 位域(Bitfield)使用指南:理解 `__BindgenBitfieldUnit` 与 getter/setter 机制

rust-bindgen 位域(Bitfield)使用指南:理解 `__BindgenBitfieldUnit` 与 getter/setter 机制

【免费下载链接】rust-bindgen Automatically generates Rust FFI bindings to C (and some C) libraries. 项目地址: https://gitcode.com/gh_mirrors/ru/rust-bindgen 点击查看 免费下载 Rust 语言本身不支持 C/C 中的位域(bitfield)语法&…

2026/10/13 1:44:13 阅读更多 →
Grafana Mimir DNS 服务发现:用 dns+、dnssrv+ 与 dnssrvnoa+ 前缀动态解析后端服务地址

Grafana Mimir DNS 服务发现:用 dns+、dnssrv+ 与 dnssrvnoa+ 前缀动态解析后端服务地址

时序数据库后端数据存储可观测性云原生 【免费下载链接】mimir Grafana Mimir provides horizontally scalable, highly available, multi-tenant, long-term storage for Prometheus. 项目地址: https://gitcode.com/gh_mirrors/mimir/mimir 点击查看 免费下载 Gr…

2026/10/13 1:44:13 阅读更多 →
AFSIM 2.9源码实战:从编译到插件扩展的多域仿真框架

AFSIM 2.9源码实战:从编译到插件扩展的多域仿真框架

简介:AFSIM 2.9 是一款面向海陆空天及网络空间战场仿真的仿真引擎源码包,适用于军事训练、作战推演、武器效能评估与电子战模拟等专业场景,适合仿真开发人员、作战研究人员及军事院校师生深入研读。源码包共约2000个文件,以848个h…

2026/10/13 1:44:13 阅读更多 →
FPSSample 完整上手指南:Unity 第一人称多人射击示例项目的克隆、AssetBundle 构建与联机运行

FPSSample 完整上手指南:Unity 第一人称多人射击示例项目的克隆、AssetBundle 构建与联机运行

游戏开发示例工程 【免费下载链接】FPSSample A first person multiplayer shooter example project in Unity 项目地址: https://gitcode.com/gh_mirrors/fp/FPSSample 点击查看 免费下载 本篇技术指南以 FPSSample 官方 README 为主体,结合仓库中的编…

2026/10/13 1:44:13 阅读更多 →
SpriteJS 3D 渲染对象(RenderTarget)实战:FrameBuffer 离屏渲染、纹理回读与双缓冲复用

SpriteJS 3D 渲染对象(RenderTarget)实战:FrameBuffer 离屏渲染、纹理回读与双缓冲复用

图形学3D渲染 【免费下载链接】spritejs A cross platform high-performance graphics system. 项目地址: https://gitcode.com/gh_mirrors/sp/spritejs 点击查看 免费下载 导读:在 SpriteJS 3D 扩展中,RenderTarget 是一块可绘制的 FrameBu…

2026/10/13 1:43:13 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →