差分进化算法MATLAB源码详解:用Sphere函数跑通单目标优化
很多刚开始接触智能优化算法的朋友第一段需要亲手写的 MATLAB 程序往往就是“差分进化算法matlab源码跑单目标 sphere 函数”。这个组合看起来简单其实非常值得认真对待差分进化DE是连续全局优化里最经典的算法之一而 sphere 函数则是所有测试函数里最基础的“体检项目”。它能让你在 10 分钟里跑通一套完整的进化算法流程种群初始化、变异、交叉、选择、收敛曲线也能把算法里最容易踩坑的细节暴露出来。如果你是正在做智能算法实验、课程设计或者论文对比实验的人我的建议很直接先把这套代码吃透再谈改进。它能解决的最实际问题就是让你手里有一个逻辑清晰、可复现、能自由替换目标函数的 DE 基线版本。下面我会把每一步的思路和实现细节都讲清楚代码给你可以直接抄重点是我踩过的一些坑也会一并写出来。1. 项目拆解为什么用 DE 和 Sphere 作为入门组合1.1 Sphere 函数一套最简单的“算法体检器”Sphere 函数的数学定义非常简单f(x) sum(x_i^2)x 是一个 D 维实数向量。它的性质非常干净连续、凸、单峰、关于原点对称唯一的全局最优解是全零向量最优值是 0。搜索范围通常取 x_i ∈ [-100, 100]维度 D 在基准测试里常见取 30。正因为干净它特别适合用来验证算法实现的正确性。如果差分进化在这个函数上都不能稳定收敛到接近 0 的量级那大概率是代码有 bug 或者参数设置不合理。反过来如果连 sphere 都跑不明白直接拿 Rastrigin、Ackley 这类多峰函数去调参数最后的收敛曲线一团糟你根本分不清是算法能力不行还是代码本身有问题。先用 sphere 做最小可用验证再去挑战复杂函数这才是稳妥的实验路径。我在实际教学和帮人看代码的时候见过太多人省略这一步。他们一上来就用了多峰函数然后发现结果不好开始怀疑各种参数最后定位到是交叉环节少写了一个 jrand。这种问题放在 sphere 上最快一轮迭代就能看出异常不至于浪费半天时间。1.2 为什么选 DE 而不是遗传算法、粒子群很多人会问单目标连续优化为什么不用遗传算法GA或者粒子群PSO能用但 DE 有三个非常适合做基线的特点。第一调参少。GA 要操心交叉率、变异率、选择压力PSO 要操心惯性权重和两个学习因子。DE 的核心参数只有三个种群规模 NP、缩放因子 F、交叉概率 CR而且经典默认值已经相当稳。参数少意味着你在入门阶段可以把更多注意力放在理解算法结构上而不是在参数旋钮之间反复横跳。第二编码天然贴合。连续优化问题里种群个体本身就是实参数向量不需要像 GA 那样做二进制编解码也不存在映射误差。这让 DE 的实现代码更短逻辑更直观。第三搜索步长有自适应特性。DE 的变异向量完全由种群自身生成种群分散的时候差分向量大搜索步长自动变大种群收敛后差分向量变小搜索步长自动精细化。这种特性让 DE 对目标函数的尺度变化不那么敏感也不需要你手动设计一个退火系数。当然这不代表 DE 在所有问题上都吊打其他算法但作为教学和基线实验它的“容错率”最高。1.3 策略定位先跑通经典的 rand/1/binDE 的策略名通常写成 DE/a/b/c 的形式a 表示基向量的选择方式b 表示差分项的个数c 表示交叉方式。这个项目用的是 DE/rand/1/bin含义是基向量从种群中随机选择使用 1 个差分项交叉方式采用二项式交叉。为什么不直接上收敛更快的 best/1 或者 current-to-best 这类变体因为这类变体把基向量换成当前最优个体收敛速度确实会快但探索性明显下降。拿它跑 sphere 这种单峰函数当然没问题一旦换到多峰函数非常容易早熟种群一窝蜂聚到某个局部最优附近。rand/1 的随机基向量保留了更强的种群多样性更适合作为入门基线。我的建议是这个项目只专注一种策略先把最小闭环跑通。等你理解了整个流程再去扩展 best 系列、自适应 F/CR 这些内容阻力会小很多。上来就追求花哨策略反而容易被各种参数耦合绕晕。2. 算法核心细节解析变异、交叉、选择到底在干什么2.1 变异算子差分向量就是有方向的步长DE 的变异公式很简洁V X_r1 F * (X_r2 - X_r3)。这里 X_r1 是基向量决定变异后解的大致位置X_r2 - X_r3 是差分项方向由当前种群中随机两个个体确定。重点在于差分向量的模长它其实是在自动感知当前搜索区域的“尺度”。算法前期种群个体散落在整个搜索空间里随机两个个体的差可能很大变异步长就大能快速探索广阔区域后期种群集中在最优解附近差分向量大幅缩小搜索自然变成精细打磨。这就是 DE 能兼顾前期探索和后期收敛的内生机制非常巧妙。F 是缩放因子用来放大或缩小差分向量。F 取 0.5 是很常见的起点也是经典论文里推荐的组合之一。F 太大变异向量容易一步越出边界F 太小种群容易陷入停滞。对 sphere 这种简单函数0.5 基本不会出问题。还有一个容易忽略的细节r1 最好不要等于当前个体 i。很多教学代码图省事直接从整个种群随机抽三个个体结果 r1 可能落到 i 自己头上相当于当前个体只是在原来位置附近做了个小扰动没有真正和别的个体交换信息。这个项目在实现时用 setdiff 先把 i 排除再从剩下 NP-1 个个体里随机抽三个。这么做更严谨也符合 DE 的标准定义。注意一旦你改变了随机数取样顺序比如从 randperm(NP, 3) 改成 setdiff 加 randperm同样的随机种子产生的收敛曲线也会变化。如果要严格复现别人的结果最好连采样方式都保持一致。2.2 交叉算子CR 怎么定为什么要有 jrand二项式交叉的任务是决定变异向量 V 和父代 X_i 在每一维上谁说了算。控制它的核心参数是交叉概率 CR。具体流程是对每一维 j如果 rand CR或者 j 正好等于随机抽取的 jrand就把 V(j) 赋给子代 U(j)否则保留 X(i, j)。CR 大子代大部分维度来自变异向量探索性强能大步跨过搜索空间CR 小子代大部分维度保留父代搜索更精细但探索新区域的能力弱。对 sphere 这种可分离、没有变量间耦合的函数CR 设在 0.7 到 0.9 通常效果很好大交叉维度能加速收敛。jrand 的作用是保证子代至少有一个维度来自变异向量。如果没有这个强制位就可能出现所有维度都随机选中父代的情况那这次变异和评估就白做了浪费一次目标函数计算还容易让算法在后期出现停滞。我见过不少人把 jrand 写进循环里每一维都重新生成一次结果也能跑但逻辑上已经偏离了标准二项式交叉的定义。正确做法是在循环开始前先取一次 jrand循环内用同一个值判断。二项式交叉和指数交叉exp的区别简单说就是二项式交叉每维独立判断指数交叉要求连续一段维度被选中。这个项目只实现前者已经足够覆盖入门需要。2.3 边界处理与贪婪选择别让小细节毁掉实验变异可能把 V 推出搜索空间如果不加处理直接拿越界向量去求目标函数值结果只会越来越离谱种群最终会追着一个超范围的点跑实验数据完全不可信。最常用也最省事的处理是截断V max(min(V, Xmax), Xmin)把所有维度拉回边界内。但要注意截断会让大量个体贴在边界上。对 sphere 来说最优解在原点边界堆积个体影响不大如果换成最优解本身在边界附近的问题截断就可能扰乱收敛精度。碰到边界敏感的问题可以试试反射策略某维越界就按“2 倍边界减越界值”折回让个体重新回到可搜索空间内部。选择部分用的是贪婪准则新解 U 的适应度不差于当前解就替换。代码里用 而不是 加上等号条件可以温和地保留旧解避免种群所有个体过快同化。这里不需要额外设置精英保留机制因为 DE 当前种群中的历史最优个体一定会保留下来种群最优值天然不会变差。3. MATLAB 源码实现与运行结果解读3.1 可以直接跑的主程序代码下面这份代码已经跑通逻辑清晰适合直接复制保存成脚本运行。%% 差分进化算法求解 Sphere 函数单目标最小化 % 策略DE/rand/1/bin % 实现说明教学用途以可读性优先 clc; clear; close all; rng(2025); % 固定随机种子保证可复现 % ---------- 参数配置 ---------- D 30; % 决策变量维度 NP 50; % 种群规模 F 0.5; % 变异缩放因子 CR 0.9; % 交叉概率 MaxGen 500; % 最大迭代次数 Xmin -100; % 搜索空间下界 Xmax 100; % 搜索空间上界 % 目标函数Sphere全局最优解为全零向量最优值为 0 fun (x) sum(x.^2); % ---------- 种群初始化 ---------- X Xmin rand(NP, D) * (Xmax - Xmin); fitness zeros(NP, 1); for i 1:NP fitness(i) fun(X(i, :)); end [bestFit, bestIdx] min(fitness); bestX X(bestIdx, :); bestHistory zeros(1, MaxGen); % ---------- 进化主循环 ---------- for gen 1:MaxGen for i 1:NP % 1) 变异从除当前个体外的种群中随机选 3 个个体 candidate setdiff(1:NP, i); r candidate(randperm(length(candidate), 3)); V X(r(1), :) F * (X(r(2), :) - X(r(3), :)); % 2) 边界截断 V max(min(V, Xmax), Xmin); % 3) 二项式交叉 U X(i, :); jrand randi([1, D]); for j 1:D if rand CR || j jrand U(j) V(j); end end % 4) 选择最小化问题newFit 不差于当前解则替换 newFit fun(U); if newFit fitness(i) X(i, :) U; fitness(i) newFit; end end % 记录每代最优 [bestFit, bestIdx] min(fitness); bestX X(bestIdx, :); bestHistory(gen) bestFit; if mod(gen, 50) 0 fprintf(Generation %3d | Best fitness %.8e\n, gen, bestFit); end end % ---------- 结果输出与绘图 ---------- fprintf(Best value: %.10e\n, bestFit); fprintf(Best position (前5维): %s ...\n, mat2str(bestX(1:5), 6)); figure; semilogy(1:MaxGen, bestHistory, LineWidth, 1.8); xlabel(迭代次数); ylabel(最优目标函数值); title(DE 在 30 维 Sphere 函数上的收敛曲线); grid on;提示对 sphere 这类最简单的问题参数不是重点代码逻辑的正确性才是重点。调参实验留到后续换复杂函数时再认真做。3.2 代码逐段解读从初始化到主循环参数区里D 取 30 是基准测试的经典设置搜索范围 [-100, 100] 也是 sphere 的常见定义域。NP 取 50大约是 10D 的经验值Storn 和 Price 早期论文里给出的经典原则就是 NP 取 10D 左右。F 和 CR 分别取 0.5 和 0.9这套组合在一大堆单峰函数实验里都表现稳定。目标函数用匿名函数fun (x) sum(x.^2)定义好处是之后想换成 Rastrigin、Rosenbrock 或者其他工程目标只需要改这一行其他代码完全不用动。这就是函数句柄比硬编码函数调用更灵活的地方。种群初始化就是均匀随机采样Xmin rand(NP, D) * (Xmax - Xmin)。注意这里是对整个矩阵做运算MATLAB 矩阵化操作比写双层 for 循环快得多代码也更简洁。初始化之后逐个计算初代适应度用 min 找到当前最优解和最优个体。主循环里最值得解释的有三处。第一变异阶段为什么用 setdiff(1:NP, i)这是防止当前个体被选为基向量确保每一代里每个个体都在和其他个体进行信息交换。第二边界截断为什么放在交叉之前变异后先把 V 的每一维拉回合法范围交叉时无论子代 U 取父代还是变异向量整体都满足边界约束逻辑上少一次越界检查。第三jrand 必须在 for 循环外提前取好否则每一维的“强制位”就变成了随机概率事件不符合二项式交叉的定义。代码末尾的 semilogy 用对数纵轴画图。为什么不用 plot因为最优目标值从初始的 1e3 量级一路掉到 1e-10 量级跨越十几个数量级线性坐标下低值区域会紧紧贴住横轴根本看不出后期收敛精度。用对数轴才能完整看清整个优化过程。3.3 收敛曲线怎么看跑完这份代码你应该能看到一条先陡峭后平缓的下降曲线。前期陡峭说明算法在快速逼近最优区域后期平缓说明开始精细搜索。500 代对于 30 维 sphere 函数来说很充裕一般随机种子下都能收敛到 1e-10 以下甚至接近浮点精度极限。如果你画出来的曲线一开始就平了而且最优值很大那基本可以断定代码逻辑或者参数有问题。先别急着怀疑 DE 算法的能力逐项检查目标函数有没有写成 sum(x)^2 这种错误形式边界处理有没有漏掉randperm 抽取个体时有没有排除自身。这里要特别强调一点DE 是随机算法单次运行的结果不能说明任何问题。做实验时一定要固定随机种子跑 20 到 30 次记录平均值、中位数和标准差。只用一次运气最好的结果写报告是学术诚信和工程严谨性的大忌。我写代码时直接加了rng(2025)就是为了保证任何人拿到同一份代码跑出来的收敛曲线完全一致复现零障碍。4. 调参实验与常见问题排查实录4.1 参数对照速查NP、F、CR、MaxGen 怎么调参数推荐范围核心作用过大的影响过小的影响NP2D 到 20D种群多样性基础计算量暴涨收敛变慢群体多样性不足容易早熟F0.4 到 0.9控制差分步长子代频繁越界曲线震荡缺乏探索能力群体停滞CR0.3 到 0.9控制交叉强度全局探索强细粒度差局部调整精细收敛偏慢MaxGen视问题难度决定迭代总次数纯耗时未收敛就提前停止调试参数时不要四五个参数一起改否则出了问题根本定位不了原因。我的调试顺序是先把 F 固定在 0.5、CR 固定在 0.9单独调整 NP找到种群多样性和计算成本之间的平衡点然后固定 NP调 F观察曲线是否出现震荡最后才动 CR。每步只改一个变量记录结果再改动下一个。还有一个很容易忽略的点维度变了参数也要跟着变。D 只有 10 的时候NP 取 50 已经很大D 涨到 100NP 反而建议取 2D 到 5D一味调大种群会大幅增加计算时间收益却很有限。换测试函数时搜索范围也必须同步改。比如 Rastrigin 函数常用定义域是 [-5.12, 5.12]Rosenbrock 可能是 [-2.048, 2.048]这些范围和 sphere 的 [-100, 100] 完全不同。4.2 典型故障现象与解决思路故障现象可能原因排查方向最优值长期停在 1e2 级别曲线不下降目标函数写错比如把 sum(x.^2) 写成 sum(x)^2先用 D2 做验证最优解应该是 [0, 0]收敛曲线像锯齿一样上下剧烈震荡F 过大变异向量频繁越界截断后仍产生大幅跳跃调小 F从 0.5 降到 0.3 试试算法迭代几十代后完全停滞F 太小或者 NP 太小种群失去多样性调大 F 到 0.7 以上或者增大 NP收敛很慢最终精度却还不错CR 过小子代保留父代太多把 CR 从 0.3 逐步升到 0.9每次运行结果差异巨大没有固定随机种子脚本开头加 rng 固定种子多跑几次做统计早熟收敛到非零向量且目标值较大NP 过小或者种群初始化范围没覆盖最优区域增大 NP检查 Xmin/Xmax 是否设置正确有一个我反复踩过的坑调试时最优值总是卡在 1e2 附近查了半天代码最后发现是sum(x.^2)被改成了sum(x)^2一个括号的位置差异导致整个搜索方向完全错误。所以遇到异常第一件事永远是验证目标函数本身而不是急着调参数。4.3 三个让结果更稳的小习惯第一个习惯固定随机种子。每个实验脚本第一行就写好rng(一个你喜欢的数字)实验报告里明确标注种子值别人才能原样复现你的结果。这不仅是好习惯也是对实验可复现性的基本尊重。第二个习惯把核心逻辑封装成函数。项目标题叫“matlab源码”但实际做实验时你肯定不希望每次换一个目标函数都要复制整个脚本。建议把 DE 主循环写成一个函数入参包含 D、NP、F、CR、MaxGen、目标函数句柄返回值是历史最优值和最优位置。这样后续做算法对比时只需要在实验脚本里循环调用不同函数代码管理会清爽很多。脚本版本便于教学理解函数版本便于后续复用两者不冲突。第三个习惯保存每一代最优解个体而不只是最优值。bestHistory 只记录数值变化其实够用来画收敛曲线但如果你想分析算法的收敛行为观察最优个体每一维是否真的逼近零向量还需要保存 bestX 的历史。这个数据对判断是否早熟、是否发生了边界粘连问题非常有价值。最后再分享一点我的实际体会我帮人定位 DE 问题的时候最花时间的往往不是算法本身的 bug而是参数设置太极端。F 取 1.2、CR 取 0.1 这类组合放在某些增强策略里也许有特殊效果放在经典 rand/1/bin 里只会让收敛曲线像心电图一样乱跳。拿到这份代码的朋友我建议先别急着改策略而是用 D2、D10、D30 三组维度各跑一遍对比最优值和收敛曲线的形状把算法的基本手感建立起来。跑明白了再考虑把变异策略换成 best/1 或者自适应变体把目标函数换成 Rastrigin、Rosenbrock甚至添加约束条件。差分进化这套流程吃透之后你再去看 JADE、SHADE 之类改进型算法会发现所有花样本质上都是把“随机差分扰动”这个核心底子包装得更精细了。

相关新闻

Dubbo整合Spring服务注册与暴露机制深度解析

Dubbo整合Spring服务注册与暴露机制深度解析

1. 从一次线上服务找不到Provider说起很多同学第一次接触分布式服务框架时,都会遇到一个很迷惑的现象:本地写好了服务实现类,Spring 容器也启动了,日志里没报任何错,但消费者端就是调用不到,报No provider …

2026/10/15 0:07:00 阅读更多 →
手动部署OpenTelemetry Collector:从配置到运维的实践指南

手动部署OpenTelemetry Collector:从配置到运维的实践指南

简介:基于C#编写的winform Socket通信示例,面向需要掌握网络编程的C#初学者,演示了服务端与多个客户端同时连接与数据交互的实现过程。压缩包内包含服务端与客户端两个独立工程,可对照学习服务端监听、客户端连接以及多客户端并发…

2026/10/15 0:05:58 阅读更多 →
SpringBoot整合knife4j实战:接口文档与在线调试完整指南

SpringBoot整合knife4j实战:接口文档与在线调试完整指南

1. 为什么接口文档这件事值得单独拎出来聊做后端开发的人都有一个共识:写接口不难,难的是让前端、测试、甚至未来的自己看懂接口。早些年大家用 Swagger 那一套,ApiOperation、ApiModel注解满天飞,UI 长得像上世纪的产物&#xff…

2026/10/15 0:05:58 阅读更多 →

最新新闻

区间DP解“拿糖果”:从贪心误区到最优策略实战解析

区间DP解“拿糖果”:从贪心误区到最优策略实战解析

说实话,我第一次看到“拿糖果”这道题的时候,差点把它当成热身题给秒了。题面本身非常朴素:有 n 堆糖果排成一行,每堆糖果数量用一个整数数组表示,两个人轮流从最左端或最右端拿走一整堆,直到全部取完&…

2026/10/15 0:46:40 阅读更多 →
光通信技术突破:陶瓷封装与智能光功率控制解析

光通信技术突破:陶瓷封装与智能光功率控制解析

1. 光通信行业现状与易天定位光纤通信作为现代信息社会的基石,其市场规模在过去五年保持着年均12%的复合增长率。根据行业调研数据显示,2023年全球光模块出货量已突破1.8亿只,其中数据中心互连场景占比达到47%。在这个快速扩张的市场中&#…

2026/10/15 0:46:40 阅读更多 →
CEC2010到CEC2017:进化计算基准测试集完整指南与避坑经验

CEC2010到CEC2017:进化计算基准测试集完整指南与避坑经验

简介:面向进化计算与智能优化领域的研究者、工程师及高校学生,这份测试集汇总了CEC2010、CEC2013、CEC2014、CEC2015、CEC2017等历届单目标实参数优化竞赛的基准问题,可用于验证和对比各类新颖优化算法的寻优能力与收敛性能。压缩包内共516个…

2026/10/15 0:45:39 阅读更多 →
Z源逆变器仿真建模与PWM控制策略详解

Z源逆变器仿真建模与PWM控制策略详解

1. Z源逆变器概述与仿真意义Z源逆变器作为电力电子领域的重要拓扑结构,近年来在新能源发电、电动汽车和工业驱动等领域展现出独特优势。与传统电压源型和电流源型逆变器不同,Z源网络通过独特的阻抗网络实现了升降压功能,同时避免了传统拓扑中…

2026/10/15 0:45:39 阅读更多 →
普通程序员有没有必要学习 Agent 开发?从零手写 ReAct Agent 到 LangGraph 实战

普通程序员有没有必要学习 Agent 开发?从零手写 ReAct Agent 到 LangGraph 实战

一、先说结论:有必要,而且窗口期就在当下 如果你是一个每天写 CRUD、调接口、改 Bug 的普通后端 / 前端 / 全栈程序员,看到「Agent」「智能体」这些词,第一反应很可能是:“这不就是调一下大模型 API 吗?跟我…

2026/10/15 0:45:39 阅读更多 →
深入理解 Claude Code:CLAUDE.md、Hooks、Skills、Subagents 全解析

深入理解 Claude Code:CLAUDE.md、Hooks、Skills、Subagents 全解析

1. 引言 Claude Code 是 Anthropic 推出的命令行 AI 编程助手,它不仅能理解自然语言指令,还能通过一系列机制实现高度可定制、可扩展的自动化编码工作流。对于想要真正驾驭 Claude Code 的开发者来说,仅仅会提问远远不够,理解其四…

2026/10/15 0:45:39 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →