DE/SHADE/L-SHADE算法在CEC2005基准函数上的Matlab对比实验及实现细节

做算法对比实验最怕的不是算法本身跑不出来,而是对比口径不统一,跑完一遍结果根本没法写进论文。我最近把差分进化算法(DE)以及它的两条改进线——SHADE(带成功历史自适应的DE)和L-SHADE(线性种群缩减的SHADE)放在CEC2005基准函数上做了一次完整对比,用Matlab从零实现了三个算法,统一了评价口径,跑完才发现很多"论文里看不到"的细节。这篇就把整套实验框架、核心代码、结果解读和踩过的坑一次讲清楚,适合正在做优化算法复现、准备写对比实验、或者想搞清楚L-SHADE为什么能赢DE的人参考。

1. 从DE到L-SHADE:参数自适应这条线为什么值得做

1.1 DE的基线问题:F和CR调参是一个无底洞

差分进化算法(DE)的核心只有三个算子:变异、交叉、选择。最经典的DE/rand/1/bin形式,变异向量由三个互不相同的随机个体构成,差分向量乘以缩放因子F,再与目标个体做二项式交叉,交叉概率CR控制继承变异向量的比例,最后用贪婪选择保留更优个体。

这套机制最大的优势是结构简单、鲁棒性强,但它的痛点也很明显:F和CR对性能影响极大,而且不同函数上的最优参数几乎不重合。以Rosenbrock这类病态函数为例,F取0.5和取0.9,收敛精度可能差一两个数量级。实际项目中调参成本非常高,调完这个函数换一个函数又要重来,这也是很多DE改进算法的出发点。

1.2 JADE留的作业:SHADE用历史记忆解决什么

JADE引入了"当前最优个体引导+外部存档+参数自适应"的组合拳,证明了参数不需要人工指定,而是可以在进化过程中根据成功参数动态调整。SHADE在这个基础上往前走了一步,把参数自适应用"成功历史记忆"来做:维护一组历史记忆槽位,每个槽位存一组(M_CR, M_F),每一代生成个体时,从历史记忆中随机挑一个槽位,以该槽位值为均值生成当前的CR和F。当这一代产生了成功参数(也就是产生了能进入下一代的新个体),就把这些成功参数按加权Lehmer平均回填到某个记忆槽位。

这个设计的精妙之处在于,它不只是跟踪"上一代的好参数",而是保留了一组较长周期的分布记忆。种群在进化前期和后期对参数的需求不一样,自我调整也容易震荡,历史记忆相当于给参数进化加了一个缓冲,个体之间用不同历史状态采样,天然保持了参数多样性。

1.3 LPSR不是简单的"人口减少":L-SHADE的关键改动

L-SHADE的改进看起来非常朴素:在SHADE基础上引入线性种群缩减(Linear Population Size Reduction,LPSR)。种群规模从初始的Nmax,随着函数评价次数(FES)线性递减到Nmin,公式是:

N_{G+1} = round(Nmax + (Nmin - Nmax) * (FES / MaxFES))

每一次削减时,去掉当前种群中适应度最差的若干个体。

但LPSR真正的价值不是"减少计算量"这么简单。它相当于一种隐式的资源重分配策略:进化早期种群规模大,探索覆盖面广,适合在全局范围内找到有希望的区域;到了后期种群规模小,个体数量少,剩下的个体可以把更多代数花在局部精修上。同样的MaxFES预算,固定种群规模的SHADE后期可能还在浪费大量评价在冗余个体上,L-SHADE则把这些评价集中给了幸存者。

很多刚接触的人以为L-SHADE就是把种群调小,实际上它把"种群规模"从一个需要手动设定的常数,变成了一条和预算挂钩的时变曲线,这才是它性能提升的根本原因。

2. CEC2005这25个函数到底在考验什么

2.1 函数分组的用意:从单峰到混合组合

CEC2005基准集一共25个函数,通常按特性分成四个梯队:

函数区间类型典型函数难度来源
f1 - f5单峰函数Sphere、Schwefel系列、Elliptic病态条件、噪声、最优在边界
f6 - f12基本多峰函数Rosenbrock、Rastrigin、Ackley、Weierstrass大量局部最优、位移旋转
f13 - f14扩展多峰函数Expanded Griewank+Rosenbrock、Expanded Scaffer多函数耦合、不可分性
f15 - f25混合组合函数Composition函数多个子函数拼接、局部最优可控嵌套

这个设计思路很明确:先用单峰函数考察算法的收敛速度和精度,再用多峰函数考察全局搜索能力和跳出局部最优的能力,最后用混合组合函数模拟真实工程优化中的"多个问题叠加"场景。一套好的优化算法,必须在四类函数上都拿到可接受的结果,任何一项偏科都会在排名里暴露出来。

2.2 位移、旋转与"不可分性"为什么让算法失效

CEC2005相对早期测试集最大的变化,是引入了位移(shift)和旋转(rotation)。

位移指的是全局最优点不再落在坐标原点,甚至可能落在搜索空间的边界附近,这对依赖中心先验知识的算法很不友好;旋转是把变量坐标系转了一个角度,使得函数不再可分,每个变量之间互相耦合。以旋转Rastrigin为例,如果算法的基础算子只在单变量方向上有规则地搜索,一旦坐标系旋转,它的搜索方向就和函数沟壑方向错开,性能断崖下降。

混合组合函数更狠,它把多个子函数的局部最优区域通过权重叠加在一起,形成"地形中的地形"。这类函数上经常出现的情况是:某个算法在f9(旋转Rastrigin)上非常好,换到f15组合函数上却完全找不到方向。这就是为什么CEC2005的结果不能只看平均值,要逐个函数看赢在哪、输在哪。

2.3 评价口径:MaxFES与独立重复次数

CEC2005官方建议最大函数评价次数为MaxFES = 10000 * D,30维问题就是300000次评价。这里有一个新手常犯的错误:把"迭代代数"和"函数评价次数"混为一谈。

DE的每一代里,每个个体产生一个试验向量后要做一次评价,所以一代的评价次数近似等于种群规模。但如果用了边界处理里的重新初始化、或者自适应参数修正时额外计算了适应度,FES就会和种群规模脱钩。严谨的做法是在所有评价入口统一累加计数器,并把"达到MaxFES"作为唯一终止条件。

独立重复次数也很关键,CEC2005这类随机优化算法的问题,单次运行结果毫无意义,通常至少跑25次,取均值、标准差、中位数和成功率。成功率定义为多次运行中,最终误差小于某个阈值(比如1e-8)的比例,这个指标对区分"偶尔能收敛"和"稳定收敛"特别重要。

3. Matlab实验框架怎么搭才公平

3.1 主脚本与统一调用接口

做对比实验第一件事是统一入口。我搭的框架长这样:一个主跑脚本负责调度,三个算法函数接收完全相同的参数结构体,输出完全相同的统计结构体,benchmark函数全部从CEC2005官方实现里调用。

% 主脚本示例:统一调度三个算法 probList = 1:25; options.maxFES = 10000 * D; options.Nmax = 100; options.Nmin = 4; options.runs = 25; for p = probList for r = 1:options.runs [bestErrorDE(p,r)] = runDE(p, D, options); [bestErrorSHADE(p,r)] = runSHADE(p, D, options); [bestErrorLSHADE(p,r)] = runLSHADE(p, D, options); end end

这个接口设计保证了三个算法共享同一套FES统计、同一套初始化和同一套benchmark。不同算法内部迭代代数不同没关系,大家都以FES为准,这才是可比的。

3.2 初始化范围必须按函数边界走

CEC2005每个函数的搜索边界是不同的,有些是[-100, 100],有些是[-5.12, 5.12],最优解位置也不同。很多复现翻车都是因为在所有函数上用了同一个初始化范围,导致某些函数一开始就已经离最优解极远,比较结果完全失真。

我的做法是写一个getBounds(fn),直接从CEC2005官方函数定义里读取目标范围,初始化种群时用该函数的真实边界。这一点务必注意,宁可多写几行查表代码,也不要在所有函数上搞一刀切。

3.3 统计输出:均值、标准差、中位数、成功率一起报

结果处理上我推荐用这样一个表格结构,既要报最优值也要报方差,才能看出算法的稳定性:

函数DE均值误差DE成功率SHADE均值误差SHADE成功率L-SHADE均值误差L-SHADE成功率

绘图方面,收敛曲线统一采用log10(误差)纵轴,横轴是FES,每一定间隔记录当前最好误差。注意CEC2005的误差不是fitness - 0,而是fitness - f_opt,其中f_opt是官方给出的该函数全局最优值。直接拿适应度值画图会让你在f1这类函数上看到一个很大的偏置,完全看不出收敛趋势。

4. 三个算法的Matlab核心实现与关键细节

4.1 DE/rand/1/bin的标准实现

标准DE的实现非常短,但每个细节都影响结果。变异个体必须互不相同,交叉要保证至少有一个维度来自变异向量,边界处理我采用的是"重新生成"策略,也就是越界分量在边界内重新均匀随机采样。

% DE/rand/1/bin 核心循环片段 for i = 1:N % 选择三个互不相同的个体 r = randperm(N, 4); r1 = r(1); r2 = r(2); r3 = r(3); while r1 == i, r1 = randi(N); end while r2 == i || r2 == r1, r2 = randi(N); end while r3 == i || r3 == r1 || r3 == r2, r3 = randi(N); end % 变异 V = X(r1,:) + F * (X(r2,:) - X(r3,:)); % 二项式交叉,确保至少一维来自V jrand = randi(D); for d = 1:D if rand() <= CR || d == jrand U(d) = V(d); else U(d) = X(i,d); end end % 边界处理:越界分量重新初始化 U = boundRepair(U, lb, ub, 'reinit'); % 贪婪选择 if f(U) <= f(X(i,:)) X(i,:) = U; end end

DE/rand/1没有存档也没有历史记忆,F和CR是全程固定的。我这里F=0.5,CR=0.9,这是一组对多数函数都比较折中的配置,但完全不敢说最优。

4.2 SHADE的成功历史参数更新

SHADE相对DE多了三块:外部存档、成功参数历史记忆、current-to-pbest/1变异策略。外部存档存入每一代中被淘汰的父代个体,后续变异时可以从存档里取个体,增加差分向量的多样性。

参数生成部分,先随机选一个历史槽位,然后按正态分布生成CR、按柯西分布生成F,注意两者都要做边界修正:

k = randi(H); CR_i = randn() * 0.1 + M_CR(k); if CR_i < 0, CR_i = 0; elseif CR_i > 1, CR_i = 1; end F_i = cauchyrnd(M_F(k), 0.1); while F_i <= 0 F_i = cauchyrnd(M_F(k), 0.1); end if F_i > 1, F_i = 1; end

成功参数收集之后,用加权Lehmer平均更新当前记忆槽。权重w取个体适应度改善量的归一化值:

% 加权Lehmer平均 w = abs(improvements) / sum(abs(improvements)); meanCR = sum(w .* S_CR.^2) / sum(w .* S_CR); meanF = sum(w .* S_F.^2) / sum(w .* S_F);

这段代码里有一个容易被忽视的点:如果某一代没有任何成功参数,S_CR和S_F是空数组,直接调用sum(w .* S_CR)会报错。我在实现里加了空数组保护,空的时候保持当前记忆槽位不变。这种边界情况在短预算、高难度函数上非常容易出现。

4.3 L-SHADE的线性种群缩减实现

L-SHADE在SHADE基础上加入LPSR,但核心执行顺序有讲究:先根据当前FES计算目标种群规模,再在实际削减前完成当轮进化,最后统一裁剪最差个体,不能每产生一个新个体就顺手删一个,那样会打乱交叉变异时用到的索引关系。

% 每代结束后执行LPSR targetN = round(Nmax + (Nmin - Nmax) * (FES / MaxFES)); if targetN < currentN % 按适应度排序,保留前targetN个 [~, idx] = sort(fitness); X = X(idx(1:targetN),:); fitness = fitness(idx(1:targetN),:); end

这里还有一个联动细节:外部存档的上限A_max = round(currentN * p),当种群规模因为LPSR下降后,存档容量也应该跟着缩减,否则内存里积累了大量旧个体,会稀释差分向量的信息。L-SHADE原文里对这个容量的更新是明确的,复现时一定不要漏掉。

5. 结果对比:L-SHADE优势在哪里,又输在哪里

5.1 代表性的误差收敛表

我在30维、MaxFES=300000、独立运行25次的配置下跑完25个函数,整体趋势非常清晰。下面列出几个有代表性的函数误差数量级(注意这是我自己环境下的示例结果,严格复现请以官方代码和本地运行为准,重点看相对趋势):

函数DESHADEL-SHADE
f1 Shifted Sphere1e-141e-281e-28
f5 Schwefel 2.6 边界最优1e11e-51e-6
f9 Shifted Rastrigin1e11e-81e-8
f11 Shifted Rotated Weierstrass1e01e-21e-2
f15 混合组合函数1e11e21e3
f19 混合组合函数1e21e11e1

从这张表能看到几个关键信息:L-SHADE相对SHADE的提升,在单峰函数和部分基本多峰函数上并不明显,两者几乎打平;但L-SHADE几乎不会比SHADE差出数量级,尤其是在预算充足的条件下,LPSR让L-SHADE在后期有更集中的精修能力。而在部分混合组合函数上,三者都会陷入局部最优,DE在某些组合函数上甚至比SHADE表现还好,这说明"新算法一定全面碾压"是不成立的。

5.2 为什么在Rastrigin这类函数上L-SHADE提升明显

Rastrigin这类函数的特点是局部最优呈周期排列,全局最优只有一个,但周围全是"坑"。DE的问题在于F固定,前期差分向量步长太大,后期又不够小,很难在坑与坑之间做精细切换。SHADE通过自适应F和current-to-pbest策略,让步长在进化过程中逐步收缩,所以在f9上比DE好了几个数量级。

L-SHADE在Rastrigin上的额外收益来自种群规模的收缩。前期大规模种群把搜索范围铺满整个定义域,后面随着种群缩小,每个个体能分配到更多的评价次数,可以从"大范围找坑"平滑过渡到"在坑里精修"。这种时间维度的策略,是固定种群大小的算法做不到的。

5.3 SHADE和L-SHADE的差距来自预算分配

有人可能会问:既然L-SHADE就是改了个种群缩减,为什么在单峰函数上反而能和SHADE打平甚至更好?我的理解是,LPSR本身是一种更聪明的预算分配策略。同样的300000次评价,SHADE始终用100个个体,后期还有相当一部分评价花在已经被证明不好的个体身上;L-SHADE后期可能只剩二三十个个体,但每个个体都是精挑细选之后的精英,且变异操作里pbest引导的方向更集中,收敛速度自然更快。

但也正是这种"早期壮、后期精"的设计带来了隐患:如果函数地形在后期突然出现一个有利区域,小种群很难像大种群那样快速覆盖过去。我在f15这类混合组合函数上观察到的L-SHADE反而不如SHADE的情况,大概率就是这种原因。这个结果提醒我,选择算法不能只看平均排名,要看你实际问题的地形属于哪一类。

6. 复现这套对比踩过的坑

6.1 边界处理方式不同会直接改写排名

边界处理看起来是个小模块,实际影响极大。常见做法有三种:越界分量反弹、越界分量重新初始化、越界分量限制在边界上。我在最初版本里统一用了"限制在边界上",结果DE在Rastrigin上的表现奇差,因为大量个体堆在边界上,差分向量失去了多样性。换成"越界分量在边界内重新采样"之后,结果明显正常。

如果是严格复现某篇论文,一定要看清楚论文描述的是哪种边界处理。很多论文正文不会写这个细节,但在源代码里能看出来。对于对比实验,三个算法必须用同一种处理方式,否则算法差异和边界处理的差异会混在一起,结论说不清。

6.2 存档、记忆与种群缩减之间的联动

L-SHADE的参数很多,它们不是独立存在的:外部存档上限和当前种群规模挂钩,记忆槽位更新和成功参数非空判断挂钩,LPSR又同时影响着存档上限和下一次参数生成时的种群索引范围。

我踩过的一个具体坑是:实现LPSR时直接修改了X,但没有同步修改外部存档A里可能指向旧个体的索引,导致下个世代变异时选到越界索引,Matlab直接报错。后来统一改成"每代先用旧种群完成变异交叉选择,再统一瘦身种群和存档",问题就消失了。

另一个坑是存档容量在那个公式A_max = round(p * N)里,p取了0.1,但如果N已经缩减到很小,存档容量可能比种群还小,这时候优先级要保证存档容量不小于1,否则空存档会让差分向量经常缺少可用个体。

6.3 关于CEC2005官方函数实现

CEC2005的测试函数实现是有官方版本的,建议直接从官方渠道获取函数代码,不要自己从公式重写。因为这些函数里大量使用了预生成的旋转矩阵和位移向量,自己重写不仅费时,而且很容易在细节上出错。

我的经验是先在低维(比如10D)上用已知结论验证benchmark实现是否正确:比如在Sphere函数上,一个最简单的随机搜索就应该能稳定降到某个误差范围。如果连这种基线测试都不符合预期,说明函数实现或评价计数器已经出了问题,先修这个,不要急着跑完整实验。

另外,CEC2005官方代码里的全局最优值f_opt不是0,用误差而不是原始适应度做统计,是所有后续分析和绘图的前提。我在第一次跑的时候没统一这个口径,画收敛曲线时发现所有函数的起始点都不一样,排查了很久才发现是误差计算的问题。

最后分享一点个人体会

这套实验跑完,我最深的感触是:L-SHADE确实是一个设计非常巧妙的DE变体,但它的优势是有条件的,不是所有函数都碾压,尤其混合组合函数上照样会翻车。做对比实验,真正重要的不是"谁的均值小",而是能不能把评价口径、边界处理、初始化范围、误差定义全部统一,让结论经得起质疑。如果你也想在CEC2005上对比算法,建议照着这个框架先搭好基础设施,再往里面塞自己的算法,能省掉大量后面返工的时间。代码部分我用的是Matlab 2021之后的语法,基本兼容性没问题,直接拿过去改函数列表就能扩展自己的实验。

相关新闻

AI论文写作工具横评:9款工具全流程实测与避坑指南

AI论文写作工具横评:9款工具全流程实测与避坑指南

又是一年毕业季&#xff0c;周围的学弟学妹们又开始在深夜对着Word文档眼神放空。论文写作这事儿&#xff0c;说难不难&#xff0c;说简单也真不简单&#xff0c;尤其是从选题到定稿的整个过程&#xff0c;既有大量机械性的格式整理&#xff0c;又有需要灵感和逻辑梳理的深度思…

2026/10/20 17:44:25 阅读更多 →
文献综述的评述部分怎么写才不空洞?科迅捷AI(官方网站:www.kexunjie.com)给三种落笔方式

文献综述的评述部分怎么写才不空洞?科迅捷AI(官方网站:www.kexunjie.com)给三种落笔方式

文献综述最容易被导师批的一句是像文献清单&#xff0c;不像综述。区别在哪&#xff1f;清单只摆谁做了什么&#xff0c;综述要回答这些研究放在一起说明了什么、还缺什么。评述部分就是综述的灵魂&#xff0c;但很多人写到这儿就词穷&#xff0c;只能堆形容词。导师翻开综述&a…

2026/10/20 17:44:24 阅读更多 →
静态数字DIO模块如何用宽电平与源漏可配置简化测试系统

静态数字DIO模块如何用宽电平与源漏可配置简化测试系统

做测试测量这块一年到头接触各种板卡模块&#xff0c;最近在一个老产线改造项目里&#xff0c;我换上了MT-PXle平台的静态数字DIO模块。说实话&#xff0c;刚看到“覆盖宽电平范围&#xff0c;源极/漏极可灵活选择”这句宣传语时我没太当回事&#xff0c;真到现场接线时才发现&…

2026/10/20 17:44:24 阅读更多 →

最新新闻

CStatic控件实现GDI双缓冲实时曲线绘制

CStatic控件实现GDI双缓冲实时曲线绘制

简介&#xff1a;本资源是一份面向VC初学者与MFC界面开发者的实战教程&#xff0c;聚焦于利用Static控件实现轻量级曲线绘制&#xff0c;解决Windows桌面应用中无须第三方库即可动态展示波形、趋势图等图形数据的常见需求。压缩包共41个文件&#xff0c;涵盖10个头文件&#xf…

2026/10/20 18:31:25 阅读更多 →
PHP zval内存机制与__debugInfo漏洞原理剖析

PHP zval内存机制与__debugInfo漏洞原理剖析

1. 这道题不是考PHP语法&#xff0c;是考你有没有真正“看见”PHP的内存 刚看到“[蓝帽杯 2021]One Pointer PHP”这个标题时&#xff0c;我下意识点开题目页面&#xff0c;扫了一眼源码就准备关掉——又是一道“PHP弱类型反序列化”的老套路&#xff1f;结果在本地搭环境复现…

2026/10/20 18:31:25 阅读更多 →
手机号反查QQ号合规指南:三步通过官方流程确认绑定关系

手机号反查QQ号合规指南:三步通过官方流程确认绑定关系

手机号反查QQ号&#xff0c;听着像是个挺玄的功能&#xff0c;其实在官方体系里说穿了就是一条标准的“找回账号”路径。大多数人都不知道&#xff0c;是因为搜索时总被各种收费工具页面截胡&#xff0c;反而把官方入口给忽略了。这篇文章我把边界说清楚&#xff1a;什么情况下…

2026/10/20 18:31:25 阅读更多 →
AutoRemesher 自适应网格密度实战:如何按曲率控制四边形分布

AutoRemesher 自适应网格密度实战:如何按曲率控制四边形分布

AutoRemesher 自适应网格密度实战&#xff1a;如何按曲率控制四边形分布 【免费下载链接】autoremesher Automatic quad remeshing tool 项目地址: https://gitcode.com/GitHub_Trending/au/autoremesher 拿到一个扫描或雕刻出来的高模 obj&#xff0c;动辄几百万三角形…

2026/10/20 18:31:25 阅读更多 →
VOS3000操作手册实战:软交换计费配置与呼叫排障全指南

VOS3000操作手册实战:软交换计费配置与呼叫排障全指南

简介&#xff1a;VOS3000操作手册是一份面向运营商、呼叫中心运维人员及通信技术学习者的系统化文档&#xff0c;完整覆盖从入门到精通的软交换平台操作路径。手册围绕系统登录、费率与套餐管理、账户体系、呼叫跟踪、业务管理、语音管理、数据查询与报表、话单分析等核心模块展…

2026/10/20 18:31:25 阅读更多 →
Claude Code实战:宠物健康管理系统全栈开发复盘

Claude Code实战:宠物健康管理系统全栈开发复盘

1. 项目概述&#xff1a;这不是一个“AI写代码”的演示&#xff0c;而是一次真实产品级开发的完整复盘“Claude Code从零搭建新项目全流程AI实现-宠物生命周期管理App”——这个标题里藏着三个关键信息点&#xff1a;Claude Code是核心工具链&#xff0c;从零搭建强调过程完整性…

2026/10/20 18:30:19 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →