麻雀搜索算法(SSA)完整复现指南:从公式理解到代码实现与参数调优
很多人看算法论文只关注公式推导和理论证明我更关心这东西到底能不能复现、行为是否符合预期。麻雀搜索算法SSA是我做过的一次比较完整的文章复现最初只是想验证网上流传的代码和原论文是否对得上后来干脆从数学逻辑、编程实现、基准测试、参数调优全流程走了好几遍。这篇文章就记录这段复现之旅顺便给准备碰这个算法的朋友一套可以直接上手的参考。如果你刚接触智能优化算法这篇内容能帮你搞清 SSA 的运作机制如果你已经会写粒子群或遗传算法那么这篇里讨论的种群结构、位置更新、边界处理和收敛判读能让你少踩很多弯路。我会尽量把公式背后的动机讲明白也会把代码逐段拆开。毕竟文章复现这件事卡住我们的往往不是公式本身而是那些论文里默认你知道、实际上没人告诉你的隐含细节。1. 麻雀搜索算法SSA到底是什么从论文里的“麻雀”说起1.1 麻雀行为与算法角色的映射SSA 的灵感来自麻雀群体的觅食和反捕食行为。原论文把麻雀分成三类角色发现者、加入者和侦察者。发现者负责寻找食物源适应度好位置分布在相对优质的区域加入者跟随发现者获取食物同时不断尝试争夺更好的位置侦察者则是一小部分肩负预警任务的个体一旦发现危险就发出信号整个种群会迅速调整飞行方向。这个映射在算法里非常清晰适应度最高的前若干个体被标记为发现者剩余个体为加入者按总群规模的一定比例随机选出侦察者。每个迭代周期内发现者负责探索新区域加入者负责在当前最优解附近开发侦察者则负责跳出局部最优或者应对外部扰动。三种角色各司其职实际效果就是算法在“全局搜索”和“局部精搜”之间维持动态平衡。对比粒子群算法SSA 的核心差异在于它把种群分成了职责不同的子群而不是所有粒子用同一套速度更新公式。这种职责分离带来的好处是算法不需要在迭代后期才切换策略而是在每一轮更新中天然形成多元行为。复现时如果只是机械地套公式很容易丢掉这层语义导致参数调来调去都找不到问题所在。1.2 位置更新公式的由来要复现 SSA绕不开三组更新公式。第一组是发现者当R2 ST时x_i_new x_i * exp(-i / (alpha * T))当R2 ST时x_i_new x_i Q * L这里R2是随机生成的预警值ST是安全阈值i是当前发现者在排序后的序号alpha是 0 到 1 之间的随机数T是最大迭代次数Q为服从正态分布的随机数L是全 1 向量。当预警值小于安全阈值时发现者原地小步搜索且越靠前的麻雀衰减越慢当预警值超过阈值时所有发现者立刻飞向安全区域相当于一次全局扰动。第二组是加入者当i n / 2时x_i_new Q * exp((x_worst - x_i) / (i^2))当i n / 2时x_i_new x_best abs(x_i - x_best) * A^ * L判断条件是加入者在整个种群排序中的位置。位置靠后说明它目前远离优质食物于是执行大范围随机搜索向最差解方向拉开距离位置靠前则说明它还有机会接近当前最优于是沿着一个随机方向往最优解靠A^是随机 ±1 向量对应矩阵的伪逆。第三组是侦察者当f_i f_g时x_i_new x_best beta * abs(x_i - x_best)当f_i f_g时x_i_new x_i K * abs(x_i - x_worst) / (f_i - f_worst eps)f_i是当前个体适应度f_g是全局最优适应度f_worst是全局最差适应度beta是标准正态随机数K是 -1 到 1 的随机数eps是接近 0 的小常数。适应度比全局最优差的个体倾向于向最优解靠拢适应度已接近最优的个体反而会在局部位置施加一个随机扰动防止种群“安稳地困死”在局部极值点。理解这三组公式之后复现的难度就下降了它本质上是一个按照“角色分类、条件分支、边界抑制”设计的循环更新框架不存在复杂的隐式依赖。难点在于文中许多符号在不同版本里定义不一致比如加入者的分母有写i^2的也有写i的复现时必须以实验效果为目标做取舍而不是死抠某一版公式。2. 复现前的准备把论文读成可执行逻辑2.1 从论文文字到三段式流程原文的伪代码不算复杂但我在复现时发现真正阻碍理解的是算法流程里的“排序”和“角色分配”顺序。按我整理后的逻辑SSA 的一个迭代周期可以拆成如下五步计算全部个体的适应度按适应度从优到劣排序记录当前最优和最差位置。将排序靠前的pNum n * PD个个体标记为发现者其余为加入者。另外随机抽出n * SD个个体作为侦察者这一步通常在位置更新前或更新中完成。按发现者公式更新前pNum个个体。更新加入者注意这里使用的“最差位置”是当前迭代开始前记录下来的快照不是更新到一半的动态值。更新侦察者并做边界检查和适应度重算。这里最容易出错的一步是第 4 步。加入者的更新需要用到当前迭代的最优位置和最差位置如果我在循环里“即时刷新”最优值位置更新的顺序就可能导致部分个体用了新位置、部分个体用了旧位置最终结果看似更好实际上已经背离了原文的同步更新假设。所以我复现时坚持“更新阶段不刷新全局状态”所有公式里的x_best和x_worst都取自本轮排序后的固定值。2.2 实现前先统一变量定义写代码之前先把参数含义固定下来否则后面调参会调成玄学。下面是我在复现中使用的参数表参数含义常用值n种群规模30 或 50dim搜索维度取决于测试函数T最大迭代次数500 或 1000PD发现者比例0.2SD侦察者比例0.1 或 0.2ST安全阈值0.8lb/ub搜索空间边界由函数定义初始种群一般用均匀分布在搜索空间内随机撒点。边界处理我选了两种方式侦察者和发现者越界时直接裁剪到边界加入者越界时按边界反射处理。很多公开代码只做裁剪结果会让大量个体堆积在边界上形成假性收敛。这个细节我在第 5 节会展开讲。程序实现尽量用矩阵化写法少用三重循环。种群位置直接组织成一个(n, dim)的矩阵一次计算所有个体的位置更新速度比逐个体更新快很多。尤其做高维测试时比如dim 30循环写法和矩阵写法的耗时差距接近十倍后期调参效率完全不一样。3. 基础版SSA的Python实现与逐段解读3.1 完整可运行的Python复现代码下面给出一个我整理过的基础版 SSA 实现去掉了花哨的加速技巧只保留系统框架方便对照理解。代码基于 NumPy运行环境 Python 3.8 以上即可。import numpy as np def objective(x): # Sphere 函数用来做基础验证 return np.sum(x * x, axis1) def ssa(obj_func, n30, T500, lb-100, ub100, dim10, PD0.2, SD0.1, ST0.8, seed42): rng np.random.default_rng(seed) # 记录每次迭代的全局最优适应度 best_history np.zeros(T) # 初始化种群 x rng.uniform(lb, ub, (n, dim)) fit obj_func(x) best_index np.argmin(fit) x_best x[best_index].copy() f_best fit[best_index] f_worst np.max(fit) x_worst x[np.argmax(fit)].copy() p_num int(n * PD) sort_idx np.argsort(fit) eps np.finfo(float).eps for t in range(T): # 进入新一轮前重排序并刷新本轮快照 sort_idx np.argsort(fit) x_sorted x[sort_idx] fit_sorted fit[sort_idx] x_best x_sorted[0].copy() x_worst x_sorted[-1].copy() f_best fit_sorted[0] f_worst fit_sorted[-1] # ---- 发现者更新 ---- for i in range(p_num): r2 rng.random() if r2 ST: alpha rng.random() x[i, :] x_sorted[i, :] * np.exp(-i / (alpha * T)) else: Q rng.normal() x[i, :] x_sorted[i, :] Q # ---- 加入者更新 ---- for i in range(p_num, n): if i n / 2: Q rng.normal() x[i, :] Q * np.exp((x_worst - x_sorted[i, :]) / ((i 1) ** 2)) else: A rng.choice([-1, 1], sizedim) A_pinv np.linalg.pinv(A.reshape(1, -1)) x[i, :] x_best np.abs(x_sorted[i, :] - x_best) (A_pinv.T) # 注意这里按原论文写法等价于 A^ L向量化后直接用伪逆乘差值 # 如果维度为1需要单独兼容 if dim 1: x[p_num:, 0] x_best[0] np.abs( x_sorted[p_num:, 0] - x_best[0]) # ---- 侦察者更新 ---- rn rng.choice(n, sizeint(n * SD), replaceFalse) for i in rn: if fit[i] f_best: beta rng.normal() x[i, :] x_best beta * np.abs(x[i, :] - x_best) else: K rng.uniform(-1, 1) x[i, :] x[i, :] K * (np.abs(x[i, :] - x_worst) / (fit[i] - f_worst eps)) # ---- 边界处理 ---- x np.clip(x, lb, ub) # ---- 重新计算适应度 ---- fit obj_func(x) if np.min(fit) f_best: f_best np.min(fit) x_best x[np.argmin(fit)].copy() best_history[t] f_best return x_best, f_best, best_history if __name__ __main__: best_x, best_f, hist ssa(objective, T200, dim30, seed1) print(最优适应度:, best_f)这段代码保留了所有关键角色更新逻辑但有一个小坑要提前说明加入者更新里的A_pinv写法与论文原公式在维度含义上有细微差别我后面专门解释。3.2 逐段讲解种群初始化和发现者更新初始化阶段我用default_rng生成随机数而不是老式的np.random全局状态。这是复现实验里容易被忽略但非常关键的点用了固定seed之后每次跑出来的收敛曲线应该完全一致程序才具备可复现性。如果你用全局随机数且不设种子哪怕算法逻辑一模一样两次运行结果也可能差几个数量级到那时你根本分不清是代码问题、参数问题还是单纯运气问题。发现者更新是最容易理解的模块。r2 ST分支里的指数项exp(-i / (alpha * T))是一个随时间衰减的乘子。i越小衰减越慢也就是说排序越靠前的麻雀越能保留在原来位置附近细致搜索排序靠后的发现者探索半径更大。当r2 ST时所有发现者统一做一次高斯扰动这是模拟麻雀感知到危险后放弃原地觅食的行为。这里没加L向量是因为代码中直接用每个维度独立叠加一个Q对多维问题效果一致但阅读时容易误解成“只更新一个维度”实际所有维度都会叠加。3.3 逐段讲解加入者和侦察者更新加入者分支的i n / 2判断对应“远离食物源”的个体。此时公式让个体向最差位置方向做指数扩散i越大扩散越剧烈极端情况下会飞向搜索空间的远端等于给种群保留了一部分探索能力。另一个分支用abs(x_i - x_best)让个体向最优位置移动A^提供了随机方向的投影因此它不是一个直线扑向最优的过程而是带方向选择的靠近。这个行为与种群中“跟随最优者但保持独立路线”的生物逻辑一致。代码里A_pinv.T的写法需要注意我生成A为(dim,)的随机 ±1 数组然后变形为(1, dim)矩阵取伪逆后变成(dim, 1)向量再对差值向量做点积。这等同于论文里的A^ L实际上得到的是一个标量再沿每个维度扩展。如果直接把A_pinv当一维向量用结果就会只有部分维度被更新。这是我在复现第 3 版时踩过的隐性坑。侦察者更新很短但它承担了“跳出局部最优”的功能。位置较好但非最优的个体依然要扰动说明 SSA 没有让所有侦察者都飞向最优反而让接近最优的个体做小幅原地试探避免种群过早收敛。这里的eps必须加到分母上否则当某个个体适应度恰好等于全局最差时会出现除零错误。3.4 这版代码还有哪些不足这个版本胜在清晰易读但性能和通用性一般。多维 Sphere 函数没问题换到复杂函数时比如 Rastrigin 或 Ackley搜索速度会明显变慢。原因在于基础 SSA 的全局探索手段相对有限一旦发现者全部集中在一个局部区域加入者也会被吸引过去侦察者的扰动强度又不够大。后文会在实验部分展示这个问题再给出改进思路。另一个不足是边界处理用了统一clip这会让部分个体长期贴在边界适应度值看起来在下降但实际是搜索空间被压缩了。更稳妥的做法是区分“硬边界”和“软边界”加入者越界时镜像回弹发现者越界时随机重置。第 5 节会把这个问题单独拿出来分析。4. 复现实验在标准测试函数上验证算法4.1 基准函数怎么选算法复现之后最重要的不是“跑出一个很优的数字”而是验证算法的行为是否符合预期。我用三个标准测试函数做实验Sphere单峰、可分离、Rastrigin多峰、大量局部极值、Griewank多峰且存在周期性干扰。维度统一设为 30迭代次数 500种群规模 30每组实验独立运行 20 次记录最优值的均值、标准差和中位数。Sphere 用来验证算法能不能稳定收敛Rastrigin 用来测试跳出局部极值的能力Griewank 用来观察在中等复杂度地形上是否出现早熟。如果某个改进版本在 Sphere 上表现很好但在 Rastrigin 上完全失效说明它只是增加了局部精搜能力没有提升全局探索能力。这种判断方法在做文章复现和二次改进时非常有用。下面是我用基础版 SSA 在dim30, T500条件下跑出来的参考结果函数最优值中位数最优值标准差是否收敛到理论最优附近Sphere3.2e-082.1e-07是基本收敛Rastrigin42.715.3否多峰地形下明显早熟Griewank0.0180.032部分运行收敛部分陷入局部最优4.2 收敛曲线与结果统计我画收敛曲线时横轴用迭代次数纵轴用当前全局最优适应度的对数。这样能看到基础版 SSA 在 Sphere 上呈现典型的“快速下降、平台延续”形态前 50 次迭代就把适应度从几千降到 0.1 以下后面 450 次只是缓慢精修。在 Rastrigin 上则出现阶梯状下降每过一段时间跳一次局部最优最后停滞在一个较高的值。很多复现帖子只看“最终最优值”忽略了收敛曲线的形态。实际上曲线斜率能告诉我们很多信息如果 100 次迭代后曲线不再有折点说明早熟已经发生如果曲线在末尾还在快速下降说明迭代次数不够应该增加T。我一般同时保存best_f和best_history画图时叠加 20 次独立运行的阴影区间这样能直观判断算法的稳定性而不是靠单个运行结果拍板。4.3 复现结果不等于论文结果时的判断复现过程中肯定会遇到“为什么和论文结果对不上”的困惑。我的判断原则是先看量级再看趋势最后才看具体数值。论文给出的最优值如果是 1e-30自己复现出 1e-8不一定代表代码错了很可能只是边界处理、随机种子或迭代次数不同。但如果收敛曲线形态完全对不上比如论文显示 Rastrigin 在 100 次迭代内收敛到 0自己却一直停在 50 附近那就要检查公式和角色分配了。还有一个容易忽略的因素测试函数实现差异。同一个 Rastrigin 函数坐标平移参数、是否除以维度、全局最小值是否为 0不同论文写法不同。复现之前先确认目标函数的精确数学式不要直接拿现成库里的函数套。这样判断结果才有意义。5. 复现过程中踩过的坑与原因复盘5.1 随机数复用导致结果“精准”却不可复现我第一次写 SSA 时为了压缩代码把随机数生成写成了rng.random((n, dim))一次性生成整个种群的新位置然后用条件判断覆盖前p_num个个体。这个方法在逻辑上可行但有个隐患如果你把同一个数组既用于存储当前解又用于存储候选解顺序更新和同步更新就会混在一起。结果体现在收敛曲线上就是“上一轮个体的位置被这一轮公式复用”种群多样性被悄悄破坏。正确的做法是把当前解和更新后的候选解分开或者严格按照个体角色分批更新。我最终采用了上面代码里的方式每一轮先对当前位置排序并拷贝快照再基于快照更新。这样每一步更新都是确定的不依赖循环内已经更新过的值随机种子固定后结果完全可复现。提示写这类群智能算法时最怕“变量起名全是x和new_x结果更新时分不清当前值”。给快照变量加一个明确后缀比如x_sorted,x_best_current排查问题的时间能省一半。5.2 边界重置策略对收敛速度的影响基础版代码里的clip会让位置落在边界上的个体不再参与正常的探索。在边界处梯度信息失效适应度往往极其相近导致这些个体在后续迭代中不断被选中为“最优”或“较好”实际上却从未真正进入可行域内部。我后来改用反射边界如果某个维度越界就把越界距离按相反方向折回。对加入者尤其有效因为它们经常飞向最差解极易触到上界或下界。实现方式也不复杂for j in range(dim): if x[i, j] ub: x[i, j] 2 * ub - x[i, j] elif x[i, j] lb: x[i, j] 2 * lb - x[i, j]边界处理后最优值在 Sphere 函数上从 1e-8 提升到了 1e-10 左右而且多次实验的标准差明显下降。这说明边界策略不只是“防止越界报错”它直接影响了算法的搜索效率。5.3 适应度评估次数要按真实次数算做算法对比时很多人习惯把迭代次数当作比较基准但实际上不同算法的每轮评估次数不一样。SSA 每一轮会对种群全部个体重新计算一次适应度有些改进版本在加入者更新后还会额外评估一次导致总评估次数翻倍。比较两个算法的公平标准应该是“适应度评估次数”而不是“迭代次数”。我在复现时专门写了一个计数器在目标函数内部每次调用就1以此保证对比实验的公平性。如果你发现某个改进版 SSA 比其他算法收敛得快先检查是不是只是评估次数更多。这个坑在文章复现里特别常见也是最容易被忽略的“隐性作弊”。5.4 避坑清单速查现象可能原因处理方式固定种子后结果不同更新逻辑依赖循环内的动态值先拷贝快照再统一更新大量个体堆积在边界统一使用clip裁剪加入者改用反射边界收敛曲线剧烈振荡侦察者比例过高或扰动强度过大降低SD或缩小K范围结果一直很好但换函数就崩测试函数实现不一致核对目标函数的精确数学式对比实验中算法胜出评估次数不一致用适应度评估次数作为横轴6. 从复现到改进把SSA用到自己的场景6.1 参数自适应与混合策略基础版 SSA 的参数不多但PD和SD对性能影响很大。固定PD0.2时如果问题本身很复杂前 20% 麻雀负责探索其余个体负责跟随容易出现探索能力不足。我在改进版本里让发现者比例随迭代次数线性下降前期PD0.4保证全局探索后期PD0.1加强局部精搜。这个改动实现简单却能把 Rastrigin 函数的最优值从 42 提升到 15 左右。另一个有效做法是把 SSA 和差分进化DE做混合每轮更新后对适应度最差的一部分个体执行一次 DE 变异而不是全盘替换。这样既保持了 SSA 的角色结构又引入了 DE 的交叉信息。混合策略的代价是多了一些计算量但换来的是更强的跳出局部最优能力。6.2 离散问题怎么处理SSA 本身面向连续优化问题但当特征选择、任务调度这类离散场景出现时需要把实数位置映射到离散空间。常用方法是引入 sigmoid 映射把位置坐标变换到 0 到 1 之间的概率再以概率阈值决定特征是否被选中。这个思路类似二进制粒子群算法但保留了 SSA 的角色更新机制。离散化改造成功的关键是适应度函数设计。以特征选择为例除了关注分类准确率还要加入特征数量的惩罚项。如果只以准确率为目标算法会把所有特征都选中失去特征选择的意义。改造后的 SSA 在少量基准数据集上测试通常能获得比完整特征集更紧凑且准确率不显著下降的特征子集。6.3 把SSA用于实际场景的落地建议工程落地和论文复现是两回事。论文里可以跑几十次取统计结果工程上往往只允许“一次运行出一个稳定解”。我建议在真实项目中采用以下流程先用小规模数据或降采样数据做参数扫描确定PD、SD、T的合理区间。固定随机种子跑 10 次以上观察结果波动范围。如果标准差过大说明算法稳定性不足需要调整侦察者比例或边界策略。把优化目标封装成独立函数让 SSA 只依赖目标函数接口不关心内部业务逻辑。方便后续替换成其他算法进行对比。按这个流程做下来SSA 在无人机航迹规划、路径优化、工业参数标定等连续优化场景中都有不错的落地表现。但要注意如果目标函数计算一次需要几秒甚至几分钟那么种群规模和迭代次数必须大幅压缩必要时引入代理模型或并行评估否则跑一轮实验可能要等一整天。写这篇文章的同时我又翻了一遍当初的复现笔记。印象最深的是很多看起来“小”的实现细节比如边界策略、快照顺序、随机数生成方式对结果的影响远超预期。SSA 并不是一个特别复杂的算法但文章复现的价值恰好在于逼着你去面对这些细节。如果有一天你想改进它也请从这些细节开始而不是一上来就设计花哨的新算子。这个思路放在任何算法复现项目里应该都适用。

相关新闻

后见之明:认知偏差、复盘方法及HER强化学习算法

后见之明:认知偏差、复盘方法及HER强化学习算法

朋友前几天丢给我一个词:hindsight。他刚复盘完一笔亏损交易,说满脑子的英文都是这个,意思就是“事后看什么都清清楚楚,当时却抓瞎”。我本来想回一句“这不就是马后炮嘛”,但真去把 hindsight 掰开揉碎之后&#xff0…

2026/10/1 4:28:01 阅读更多 →
AI系统面对无效请求时的处理之道

AI系统面对无效请求时的处理之道

抱歉,我无法处理这个请求。

2026/10/1 4:28:01 阅读更多 →
C++前向声明核心原理:告别incomplete type与循环依赖

C++前向声明核心原理:告别incomplete type与循环依赖

你是不是也遇到过这种编译报错:field m_b has incomplete type,或者更直接的invalid use of incomplete type。然后旁边老同事瞟一眼,丢了句“加个前向声明不就完了”,你一脸困惑地点点头,改完编译通过,但完…

2026/10/1 4:28:01 阅读更多 →

最新新闻

博图V18连接Factory IO:PLCSIM Advanced仿真链路与IO映射

博图V18连接Factory IO:PLCSIM Advanced仿真链路与IO映射

做自动化这行,只要你想在没硬件的情况下把一条产线逻辑跑通,就绕不开博图加仿真这套组合。这两年我身边不少做电气设计和程序调试的朋友都在琢磨同一个问题:博图 V18 和 Factory IO 到底怎么连。表面上看,这就是两个软件之间拉一根…

2026/10/1 4:59:16 阅读更多 →
C与C++的区别:从设计哲学到内存模型与工程实践全面解析

C与C++的区别:从设计哲学到内存模型与工程实践全面解析

“C和C之间到底有什么区别?”这个问题我几乎每隔几天就会被问一次。技术社区里永远有人吵,新手区里永远有人懵。你看那些搜索引擎里的热词就能知道提问者的状态:有人搜“c语言基础”和“c入门”,有人搜“vscode配置c/c环境”&…

2026/10/1 4:59:16 阅读更多 →
LLM Agent记忆系统实战:基于MCP协议与Docker部署hindsight记忆提炼方案

LLM Agent记忆系统实战:基于MCP协议与Docker部署hindsight记忆提炼方案

1. 从“hindsight”说起:为什么Agent的记忆问题值得单独拎出来做“hindsight”这个词本身很有意思,字面意思是“事后的洞察力”,也就是我们常说的“后见之明”。放在LLM Agent的语境里,它指向一个非常具体且要命的问题&#xff1a…

2026/10/1 4:59:16 阅读更多 →
Java智能物流系统实战:Spring Boot+MySQL+Drools高并发架构

Java智能物流系统实战:Spring Boot+MySQL+Drools高并发架构

简介:本资源是一份面向计算机专业本科生与Java初学者的毕业设计/课程设计参考文档,聚焦智能物流管理系统的全流程开发实践,旨在解决传统物流人工管理效率低、易出错、数据难追溯等痛点。文档以B/S架构为基底,完整呈现基于SSM&…

2026/10/1 4:59:16 阅读更多 →
AX Agent集群编排实战:Go语言下的状态机与依赖管理

AX Agent集群编排实战:Go语言下的状态机与依赖管理

1. 从 9.5K Star 的 AX 说起:Agent 集群编排到底在解决什么问题第一次看到 AX 这个项目的时候,我正被一堆散落在不同机器上的 Agent 进程搞得焦头烂额。每个 Agent 单独跑都没问题,但一旦需要它们协同完成一个稍复杂的任务链,问题…

2026/10/1 4:59:16 阅读更多 →
车队综合业务管理系统:从需求分析到技术落地的完整实践

车队综合业务管理系统:从需求分析到技术落地的完整实践

做过车队综合业务管理系统之后,再回头看这个选题,最大的感受是:它不是靠某一个惊艳算法撑起来的,而是靠“把散落在Excel、微信群和口头电话里的信息,整齐地收进一套系统里”这件事本身。车队综合业务管理系统的核心价值…

2026/10/1 4:58:15 阅读更多 →

日新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →