ShinkaEvolve: Towards Open-Ended and Sample-Efficient Program Evolution
一句话总结:把 AlphaEvolve 那套"用 LLM 当变异算子的进化式程序搜索"做到极度样本高效——靠三件小而狠的工程武器(探索/利用平衡的 parent 采样、基于代码嵌入的 novelty 拒绝采样、bandit 驱动的多 LLM 集成选择),把"发现一个 SOTA 解"的评估预算从几千次砍到一两百次(circle packing 仅 150 次即超越 AlphaEvolve),并且完全开源。
- 来源:Robert Tjarko Lange, Yuki Imajuku, Edoardo Cetin(Sakana AI),arXiv:2509.19349v1,2025-09-17
- 代码:https://github.com/SakanaAI/ShinkaEvolve (Apache 2.0,含交互式可视化工具)
- 本地 PDF:ref21_shinkaevolve.pdf
- 命名彩蛋:日语「進化(shinka)」= evolution/innovation;ShinkaEvolve 读起来像"进化-进化(進化ー進化)",作者自嘲这种双语叠词在日本很常见,指向"开放式自我精炼创新引擎"的愿景。
TL;DR 速览
- 问题:以 AlphaEvolve 为代表的"LLM 作为变异算子的进化式代码搜索"效果强,但两个硬伤——(1) 样本极其低效:常需数千次程序评估才找到好解,每次评估都要真跑代码,昂贵又慢;(2) 闭源,社区无法复现/扩展。低效的根子在于"朴素的探索策略没有有效利用历代累积的知识"。
- 方法:一个开源进化框架,控制流三阶段(parent/inspiration 采样 → LLM 引导变异 + novelty 拒绝采样 → 执行+反馈驱动的 LLM 集成选择),三个协同的核心创新:
1. 自适应 parent 采样:
power-law或weighted(融合 fitness sigmoid × "后代少者优先")在纯探索(uniform)与纯利用(hill-climbing)之间平滑取舍; 2. 代码 novelty 拒绝采样:嵌入 mutable 代码 → 算 cosine 相似度 → 超阈值(0.95)再让 LLM 当 novelty judge 裁决"是否真的不一样",不同才准入执行; 3. bandit(UCB1 变体)驱动的多 LLM 集成:动态学习"当前档案状态下哪个 LLM 最会提有效变异",且奖励用exp(max(r_i − r_baseline, 0)) − 1偏爱大胆的高风险高回报变异; 4. 外加 meta-scratchpad:每 T 代总结成功策略,把"全局洞见 + 实现建议"拼进变异 prompt,做知识扩散。 - 关键数字:
- Circle packing:仅 150 次评估就发现新 SOTA(sum of radii ≈ 2.636),超过 AlphaEvolve;对比方法(OpenEvolve/LLM4AD)动辄 10³–10⁴ 次评估。
- AIME 数学:进化出的 agent scaffold(3 专家生成 + 3 peer review + 1 synthesis = 7 次 LLM 调用)把 gpt-4.1-nano 的 AIME-2024 从基线 ~20% 拉到 ~34%;且跨年份(2025 题 20→25.6)、跨模型(gpt-4.1-mini 44→65.6、o4-mini 80→94.4)稳定迁移。
- ALE-Bench:在 ALE-Agent 最优解之上再平均 +2.3%;ahc039 一题从榜单第 5 提到第 2。
- MoE 负载均衡损失:进化出 global-batch LBL 的新变体(补一个"欠专业化专家"的熵加权正则项),在 2.7B MoE 上 perplexity 与下游任务全面小胜。
- 消融:weighted 采样 > hill-climbing > random;novelty 拒绝采样是最大增益项;bandit 集成只带来"轻微"提升。
- 一句话评价:这是把 [[ref20_alphaevolve]] 从"资源充裕的大厂内部工具"平民化的一篇——它的贡献不在某个惊艳的新算法,而在于把进化搜索里三个被 AlphaEvolve 一笔带过的"采样/去重/选模型"决策,各自做成可插拔、可消融、有原理的模块,合起来换来 1–2 个数量级的样本效率。对本项目(harness 演化)最直接的价值:§4.2 明确把"agent scaffold / harness 设计"当成一个可进化的程序对象,且证明进化出的 harness 能跨模型迁移——这正是"用进化搜索自动造 harness"的一个干净范例。
tags: #进化式代码搜索 #样本高效 #open-ended #harness设计 #LLM-as-mutation #bandit #novelty-search #Sakana
related: [[ref20_alphaevolve]](最近亲,直接对标与超越)· [[ref22_thetaevolve]] · [[ref23_darwin-godel-machine]](同 Sakana/Clune 谱系的开放式自改进)· [[ref09_meta-harness]](都在"自动造 harness",但一个进化、一个 agentic 全历史搜索)· [[ref17_self-harness]](自改进 harness 的对照)
摘要
我们提出 ShinkaEvolve:一个新的开源框架,用 LLM 推进科学发现,兼具 SOTA 性能与前所未有的效率。近期扩展 LLM 推理时算力的进展,让通用科学发现取得显著进步——这些方法依赖进化式 agentic harness,把 LLM 当变异算子来生成候选解。但当前的代码进化方法有两个关键局限:样本低效(需数千样本才能找到有效解)与闭源。ShinkaEvolve 通过三个创新解决之:平衡探索/利用的 parent 采样、代码 novelty 拒绝采样、bandit 驱动的 LLM 集成选择。
在 circle packing(仅 150 样本达 SOTA)、AIME 数学推理的 agentic harness 设计、ALE-Bench 竞赛编程、以及 MoE 负载均衡损失函数发现四个任务上,ShinkaEvolve 一致地提升了样本效率与解质量。开源 + 低成本,让"开放式发现"得以民主化。
[!NOTE] 注意摘要里这句措辞——作者直接把 AlphaEvolve 这类系统称作 "evolutionary agentic harnesses",把"LLM 当变异算子"当作 harness 的一种。这是本文与本项目坐标系的接口:进化框架本身是一个元级 harness,而它进化出来的产物(如 AIME 的 agent scaffold)又是一个任务级 harness。两层都在"造 harness"。
1 介绍:进化式代码搜索的两个硬伤——低效与闭源
LLM 通过 agentic 系统自主做实验、验证假设,已在竞赛编程、数学优化、自动 agent 设计等域证明有效。这类框架的共同范式是:把 LLM 当成"精巧的变异算子(mutation operator)",迭代精炼候选解,成功变体在世代间传播。但当前实现有两个实际局限:
- 样本低效(首要挑战):现有方法通常需要数千次评估,昂贵且耗时。作者一针见血地指出根因——"这种低效源于朴素的探索策略,没能有效利用前几代累积的知识"。
- 闭源:多数领先系统(尤指 AlphaEvolve)不开源,阻碍复现与社区改进。
ShinkaEvolve 用三个协同的算法创新来治这两个病,并把完整实现开源。三条贡献:
- 引入 ShinkaEvolve 进化框架,靠三招大幅提升样本效率:新的 parent 采样策略 + 代码 novelty 拒绝采样 + 自适应性能驱动的 LLM 集成选择;
- 在四个不同域验证其"超越人类与 LLM 已有解"的能力:数学优化(circle packing)、agentic 设计(AIME)、竞赛编程(ALE-Bench)、LLM 训练设计(MoE LBL);
- 以 Apache 2.0 开源,含实现细节与交互式可视化工具。
[!TIP] 什么是"进化式代码搜索 / LLM-as-mutation-operator"? 传统遗传编程(GP)用手工设计的语法级算子(随机改一个 token、交换两个子树)做变异/交叉,盲目且低效。LLM-as-mutation 的核心洞察(源自 ELM: Evolution through Large Models, Lehman et al. 2022)是:让 LLM 读一段现有代码 + 它的分数/反馈,用自然语言"想一想怎么改更好",再吐出改进版。这样变异不再是随机扰动,而是带语义、带意图的编辑——LLM 学过的编程知识变成了强先验。交叉(crossover)则是喂给 LLM 两段不同的代码让它"融合优点"。整个搜索过程维护一个程序档案(archive),本质是"种群式、LLM 引导的树搜索"。ShinkaEvolve、AlphaEvolve、OpenEvolve、FunSearch 都属这一支;本文的贡献是把这套搜索的采样/去重/选模型三处做精,换来样本效率的数量级提升。
2 相关工作
作者把 ShinkaEvolve 定位在两条线索的交叉:LLM 驱动的进化式代码优化 与 开放式 agentic 发现。
2.1 LLM 驱动的进化式代码优化(最近的邻居)
[!TIP] ① 谱系源头与关键前作 - ELM / Evolution through Large Models(Lehman et al. 2022)[27]:最早提出"LLM 当进化里的变异/交叉算子",奠基性工作。 - FunSearch(Romera-Paredes et al. 2024, Nature)[39]:在固定程序骨架内进化"指定的函数",用程序搜索做出数学发现(如 cap set 问题)。是"LLM + 进化搜索能做出真·数学新发现"的里程碑。 - Eureka(Ma et al. 2023)/ DiscoPOP(Lu et al. 2024a):把这套用于进化 reward / preference 目标函数——和本文 §4.4 进化 MoE 损失函数是同一思路的血亲。 - Language Model Crossover(Meyerson et al. 2023)[33]:论证 LLM 能通过 few-shot prompting 模拟"代码片段 + 其背后 rationale"的交叉。 - AIDE / ABMCTS(Inoue, Jiang et al. 2025):把这类档案系统看作"种群式 LLM 引导树搜索",并引入自适应分支树搜索。
最相关的三个:AlphaEvolve(Novikov et al. 2025)、OpenEvolve(Sharma 2025,AlphaEvolve 的开源复现)、LLM4AD(Liu et al. 2024a)。ShinkaEvolve 明确说自己"推进这条线",靠的是 rejection-sampling + LLM prioritization + online meta-scratchpad drafting 的组合,达成前所未有的样本效率。
[!IMPORTANT] 与 AlphaEvolve 的逐项对比(本项目最该关注的一张表)
维度 AlphaEvolve [[ref20_alphaevolve]] ShinkaEvolve(本文) 机构/开源 Google DeepMind,闭源 Sakana AI,Apache 2.0 全开源 + 可视化工具 核心目标 面向大规模发现,算力充裕 样本高效:150 次 vs 数千次 parent 选择 未强调(岛屿模型 + 简单选择) 显式的探索/利用平衡:power-law / weighted(fitness×novelty) 去重/多样性 无专门的 novelty 过滤 代码嵌入 rejection sampling + LLM-novelty-judge 选哪个 LLM 变异 固定/人工指定模型池 bandit(UCB1 变体) 动态选,且偏爱高风险高回报变异 知识扩散 程序库 + 标量分数 额外 meta-scratchpad(周期性总结策略拼进 prompt) 变异形式 diff(SEARCH/REPLACE) diff + full rewrite + crossover 三种混合 岛屿模型 ✓(沿用 FunSearch) ✓(沿用,且禁止岛内最优个体迁移以保多样) 不可变代码保护 EVOLVE-BLOCK标记沿用同款标记 + 非法 patch 用 Reflexion 反馈重采 一句话:ShinkaEvolve = AlphaEvolve 的骨架 + 三个"让搜索更聪明地花每一次评估"的模块 + 开源。它没有推翻 AlphaEvolve 的范式,而是把范式里"随便糊弄过去"的采样/去重/选模型决策工程化。
2.2 开放式 agentic 发现(Open-Ended Discovery)
[!TIP] ② novelty search 与开放式 - Novelty Search(Lehman & Stanley 2011)[29]:反直觉的开创性思想——放弃目标(abandon objectives),只奖励"行为新颖"本身,反而更能穿越欺骗性的适应度地形、找到好解。传统 novelty search 依赖显式的多样性度量(行为特征距离)。 - 本文的差别:LLM agent 用学到的表征生成有创意但语义连贯的解,无需手工多样性度量。ShinkaEvolve 系统性地组合 stepping stones(次优的中间解,作为突破性创新的"垫脚石"),靠 LLM 既生成变异、又评估程序间关系,让成功模式通过 crossover 在搜索分支间快速传播。 - Omni-EPIC(Faldor et al. 2024)、ADAS(Hu et al. 2024)、Darwin Gödel Machine(Zhang et al. 2025) 是同谱系的开放式/自改进系统。见 [[ref23_darwin-godel-machine]]。
[!TIP] 什么是 stepping stones(垫脚石)? 开放式进化的核心概念之一:通往最优解的路上,往往要先经过一些"当下看起来更差、但蕴含关键结构"的中间解。如果只用贪心(hill-climbing),这些"暂时变差"的垫脚石会被立刻抛弃,搜索就卡在局部最优。ShinkaEvolve 保留一个档案 + 岛屿模型 + weighted 采样,正是为了让垫脚石活下来、之后通过 crossover 被组合进突破性解。Figure 5 的进化树就直观展示了"多条分支各自探索不同算法思路,最后某条路径把垫脚石拼成最优解"。
3 方法(核心)
3.0 算法总览:三阶段控制流
ShinkaEvolve 的控制流是一个 while 循环,每代做三件事:
- Parent & inspiration 采样:从一个"岛屿式子种群"的档案里,采一个主 parent + 若干 inspiration 程序。核心是在 parent 选择上权衡探索与利用。
- 程序变异:LLM 引导的代码编辑(diff / full rewrite / crossover);用基于代码嵌入相似度 + LLM-as-novelty-judge 的拒绝采样保证多样。
- 执行 + 世界反馈:跑程序拿 fitness + 公共指标 + 文字反馈;反馈驱动 LLM 集成选择概率 与 online meta-scratchpad 起草。

Figure 1 逐元素解读(全文的招牌图):
- 左(框架闭环):一个环形数据流。Sample Parent & Context(黄,中枢)→ LLM Offspring Generator(红)→ Offspring Program(蓝)→ 经过 Novelty Filtering(虚线框,表示"可选/门控")→ Evaluate Program(红)→ Feedback Archiving(灰)→ 反馈回 Sample Parent & Context。左上 Task Evaluator(绿)给 LLM Offspring Generator 提供任务上下文。注意 Novelty Filtering 用虚线画——它是"生成后、执行前"的一道过滤闸,不通过就重采,这正是省评估的关键位置。
- 右(circle packing 对比):横轴 = 评估的 LLM 程序提案数(对数轴,10²→10⁴),纵轴 = 最优 circle packing 解(sum of radii)。ShinkaEvolve(金色★)在约 10²(几百次) 就冲到最高点 ≈2.636,OpenEvolve(蓝●)在 ~10³ 才到 2.6342,LLM4AD(红●)在 ~10⁴ 到 2.636;绿色虚线是 AlphaEvolve 的水平线(样本数未公开,标注"# Samples?")。这张图一眼说清全文卖点:同样甚至更好的解,横轴上少 1–2 个数量级。
3.1 Parent 与 inspiration 采样:探索/利用的平衡
档案维护 & 岛屿种群。ShinkaEvolve 维护一个固定大小的档案(存历代程序 + fitness + 元信息,含 elite size 约束)。变异上下文 = 一个主 parent + 若干 inspiration(取自 top 解 + 随机档案样本),给 LLM 提供多样范例做创意重组。沿用 AlphaEvolve/FunSearch 的岛屿模型:多个独立子种群从同一初始程序播种、并行进化以增多样、防早熟收敛;岛间偶尔迁移(migration) 扩散知识,但禁止各岛的最优个体迁移以保护每岛独特性。采样是层级式的:先均匀采一个 island ID,再在该岛内采 parent 和 inspiration。
Parent 选择的两套策略。给定一个岛内子种群:
(a) Power-law 采样:按 fitness 给程序排名 \(r_i\)(\(r_i=1\) 为最优),选择概率:
- \(\alpha=0\) → 均匀采样(纯探索);\(\alpha\to\infty\) → hill-climbing(纯利用,永远只选第一名);\(\alpha\) 控制利用强度。
(b) Weighted 采样(融合性能 + novelty,受 Darwin Gödel Machine 启发):先算中位 fitness \(\alpha_0 = \mathrm{median}(\{F(P_1),...,F(P_n)\})\),然后:
| 符号 | 含义 |
|---|---|
| \(F(P_i)\) | 程序 \(P_i\) 的 fitness |
| \(\alpha_0\) | 种群 fitness 的中位数(动态基准) |
| \(\lambda\) | selection pressure(选择压,越大越"只挑好的",论文取 10) |
| \(s_i\) | sigmoid 性能分:fitness 高于中位者接近 1,低于者接近 0 |
| \(N(P_i)\) | \(P_i\) 已经产生的后代数量 |
| \(h_i\) | novelty 分:后代越少越接近 1 → 偏爱"还没被充分开发"的程序 |
| \(w_i=s_i h_i\) | 二者乘积,同时要求"表现好"且"没被榨干" |
[!TIP] 把 weighted 采样讲透 + 数值举例 设计动机:单纯按 fitness 选(hill-climbing)会过度利用——一旦某个 parent 表现好就反复变异它,很快榨干、卡局部最优(Figure 9 左:hill-climbing 早期猛涨但很快 plateau)。单纯均匀选又过度探索,浪费评估在没希望的解上。weighted 采样的巧思是乘上 \(h_i\):一个程序即使 fitness 很高,只要它已经生了很多后代(\(N\) 大),\(h_i\) 就变小,被选中概率下降——强制搜索去"照顾"那些同样优秀但还没被充分探索的解。
数值举例(\(\lambda=10\)):种群中位 fitness \(\alpha_0=0.5\)。 - 程序 A:\(F=0.6\)(高于中位 0.1),\(N=8\)(已生 8 个后代)→ \(s_A=\sigma(10\times0.1)=\sigma(1)\approx0.73\),\(h_A=1/9\approx0.11\) → \(w_A\approx0.081\)。 - 程序 B:\(F=0.55\)(略高于中位),\(N=1\)(几乎没探索)→ \(s_B=\sigma(0.5)\approx0.62\),\(h_B=1/2=0.5\) → \(w_B\approx0.31\)。 - 结果:虽然 A 的 fitness 更高,但 B 被选中概率反而是 A 的近 4 倍——因为 A 已经被反复变异过了,B 是"高潜力未开发"的垫脚石。这就是"性能 × novelty"如何自动实现探索/利用平衡。

Figure 2 逐面板解读:四个散点图,每个点是档案里一个程序,横轴=后代数 \(N\)、纵轴=性能分、颜色深浅=该策略下被采样的概率(右侧色标,紫=低→黄=高)。 - Uniform(\(\alpha=0\)):所有点近乎同色(低概率均摊)→ 纯探索,不看性能也不看后代数。 - Hill Climbing(\(\alpha\to\infty\)):几乎全是深紫(概率≈0),只有极少数最高分点亮 → 纯利用,把所有采样质量压在冠军身上。 - Power Law(\(\alpha=1\)):黄色亮点集中在高性能区(图顶),概率随性能平滑衰减 → 温和利用,但不看后代数(同一高度的点颜色相近)。 - Weighted(\(\lambda=10\)):黄色亮点集中在"高性能 + 低后代数"的左上角——注意同样高的性能分下,左边(后代少)比右边(后代多)更黄,这正是 \(h_i=1/(1+N)\) 的效果。这个面板是 weighted 策略"性能×novelty"二维权衡的直接可视化,也是 §4 消融里胜出的那个策略。
3.2 程序变异与 novelty 评估
三种变异形式(采样一个 LLM + 采样参数如 temperature/reasoning budget 之后): 1. Diff-based edits:用 SEARCH/REPLACE 块做定点修改(沿用 AlphaEvolve)。 2. Full rewrites:整程序重写,程序性地保证不可变块不被动。 3. Crossover mutation:额外采一个档案程序,prompt LLM 把两个程序"融合"。
不可变代码用 EVOLVE-BLOCK-START/END 标记保护;若 patch 非法(碰了不可变区),用 Reflexion 提供 parsing 反馈并重采新提案。
Novelty 拒绝采样(省评估的关键武器): - 用嵌入模型(text-embedding-3-small)嵌入程序的可变部分; - 算该程序与岛内子种群所有程序的 cosine 相似度; - 若最大相似度超阈值(\(\eta=0.95\))→ 判为"可能重复",再 query 一个 LLM 当 novelty judge,问它"这程序是否真的有意义地不同"; - 只有通过 novelty 检验才被送去执行;否则重采。

Figure 3 逐步解读:从左到右的流水线——
- 代码片段(左,一段程序)→ Embed(灰条,嵌入向量);
- Similarity(一个热力矩阵,档案内两两程序的 cosine 相似度,对角线最亮=自身);
- Thresh(取出该新程序与档案的相似度列,做阈值化)→ Max(取最大相似度,图中那格是红色=超阈);
- 超阈就进 LLM-as-a-code-novelty-judge(右侧大框),由 LLM 定夺;顶部大回环箭头 Resample new proposal program 表示判为不新颖就丢弃重采。
- 要点:这是"廉价的嵌入相似度做粗筛 + 昂贵的 LLM 做精判"的两级门控。消融(Figure 9 右)显示这是最大增益项;而 LLM-judge 相比纯阈值只带来"边际提升",说明嵌入相似度本身就已是很好的 novelty 代理,不加 LLM 也够用——这是个很有实操价值的结论(省一次 LLM 调用)。
[!TIP] 为什么 novelty 拒绝采样能省这么多评估?(讲透) 进化搜索最大的浪费是 LLM 反复提出"换汤不换药"的近似重复程序——比如把变量改个名、调个无关紧要的常数。每个这样的提案都要真跑一次代码评估(circle packing 要跑优化器、MoE 要 pretrain),成本巨大却不推进搜索前沿。novelty 拒绝采样在执行之前用嵌入相似度就地拦截这些重复,把宝贵的评估预算留给"真正不同"的提案。这就是为什么它是消融里增益最大的一项:它不是让单次提案更好,而是消除了整类无效评估。类比:与其花钱面试 100 个简历雷同的候选人,不如先用简历去重、只面试 20 个真正不同的。
3.3 执行与世界反馈
多目标评估 + 文字反馈:程序执行后,ShinkaEvolve 拿到标量 fitness \(r_i\) + 一组"公共指标(public metrics)" + 文字反馈,全部存进档案,用一个简单的 prompt 模板喂给下一代变异(当前程序 + 性能指标 + 文字反馈 + 指令)。
自适应 LLM 采样(bandit):不同 LLM 在不同域、不同档案状态下提变异的能力不同(非平稳)。ShinkaEvolve 每代末动态更新 LLM 采样概率,基于 UCB1(Auer et al. 2002)——每个 LLM 关联一个访问计数 + 期望分估计。关键的领域定制是奖励的定义:不用绝对 fitness \(r_i\),而是:
其中 \(r^b_i\) 是程序 \(i\) 的基线奖励 = max(它的 parent 程序, 数据库里的初始程序) 的分数。
| 符号 | 含义 |
|---|---|
| \(r_i\) | 该 LLM 提出的变异 \(i\) 的绝对 fitness |
| \(r^b_i\) | 基线 = max(parent 分数, 初始程序分数)——衡量"相对提升"的锚 |
| \(\max(\cdot,0)\) | 只计正向提升,变差的变异不惩罚(记为 0) |
| \(\exp(\cdot)-1\) | 对提升做指数放大,越大的跃升奖励越高 |
| \(r^u_i\) | 用于更新 UCB1 的归一化奖励(再用观测奖励的统计量归一,保证跨域尺度不变) |
[!TIP] 把 bandit 奖励 \(r^u_i=\exp(\max(r_i-r^b_i,0))-1\) 讲透 + 举例 两个设计动机: 1. 用相对提升而非绝对分——因为档案在进化,晚期的绝对分天然更高,若用绝对分会误判"晚期被采的 LLM 更强"。减去 baseline(parent 或初始程序)消除这种非平稳偏差,公平衡量每个 LLM 的净贡献。 2. \(\exp\) + \(\max(\cdot,0)\) 组合刻意偏爱"大胆、高风险高回报"的变异,而非"安全的小修小补": - 举例:LLM-A 提了个变异,比 parent 提升 \(0.5\) → \(r^u=\exp(0.5)-1\approx0.65\);LLM-B 提了个变异只提升 \(0.1\) → \(r^u=\exp(0.1)-1\approx0.11\)。A 的奖励是 B 的近 6 倍,而线性奖励下只有 5 倍——指数把"大跃升"的相对价值进一步放大。 - 若某变异让分数变差(\(r_i<r^b_i\))→ \(\max(\cdot,0)=0\) → \(r^u=e^0-1=0\),不扣分。因为进化里"敢冒险偶尔失败"是好事,不该惩罚探索。 净效果:bandit 会逐渐把采样倾向那些"偶尔能提出突破性大改"的 LLM,而不是那些"稳定但平庸"的 LLM。不过消融显示这项增益"轻微(slightly)",是三招里最弱的一环。
Meta-Scratchpad & 在线精炼:每 \(T\) 代(论文取 10),meta-agent 总结近期程序评估、识别共同的优化策略与设计原则,综合成可执行建议拼进变异 prompt,把"累积的进化经验"作为高层指导下发。

Figure 4 解读:一份多页文档的缩略图,分三块—— - Individual Program Summaries(左侧多列小卡片):逐个成功程序的要点摘要(做了什么改动、拿到什么分); - Global Insights Scratchpad(中部):跨程序抽象出的"成功优化模式(Successful Optimization Patterns)"与性能规律; - Meta Recommendations(右侧):面向下一代的可执行实现建议。 - 作用:这三部分被 append 到变异 prompt,等于给 LLM 一份"本次搜索到目前为止学到的攻略"。它和 [[ref09_meta-harness]] 的"文件系统全历史"是同一直觉的两种实现——都想让提议者带着"历史经验"去改,只不过 Meta-Harness 让 agent 自己 grep 原始日志,而 ShinkaEvolve 用一个 meta-agent 把经验预先蒸馏成攻略再喂。前者信息无损但需强 agent,后者信息有损但更省 token、对弱 LLM 更友好。
3.4 实现要点(附录 A/表 1)
- 队列式实现:LLM 顺序生成提案 → 进评估队列;每个提案基于"目前已完成的所有 job"。也试过全异步版(job 队列 + proposal 队列,吞吐更高但引入 "off-archiveness"——新提案不是基于全部已提交 job)。
- Python API 高层接口借鉴 OpenEvolve:用户只需写
initial.py(含EVOLVE-BLOCK)+evaluate.py(定义run_experiment+ 聚合函数 + 可选 validate),跑EvolutionRunner。 - 典型超参(circle packing):archive size 40、islands 2、weighted 采样 \(\lambda=10\)、patch 混合 [diff 0.45, full 0.45, cross 0.1]、150 代、novelty 阈值 0.95、embedding=text-embedding-3-small、LLM 池含 gemini-2.5-pro/flash、o4-mini、gpt-4.1 系列、UCB1 探索系数 1.0。多评估
num_runs=3抗随机性。
4 实验:四个域,都超越人类/LLM 已有解
4.1 Circle Packing:复现并超越 AlphaEvolve
任务:把 26 个圆放进单位正方形,最大化半径之和,不重叠、不越界。离散放置 + 连续半径优化耦合,多局部最优,是进化算法的经典难 benchmark。
结果:仅 150 代就展现出"三阶段"改进轨迹——(1) 快速改进期(发现基础半径优化)→ (2) 持续探索期(约束优化等更精巧技术渐现)→ (3) 收敛期(restart 精炼最优解)。发现的解融合三招:golden-angle 螺旋结构化初始化 + 角落/边缘策略放置;SLSQP 梯度精炼 + 模拟退火全局探索的混合优化;局部圆移动与全局 ring 旋转交替的智能扰动 + 自适应温度 + reheating。最终 sum of radii ≈ 2.6360,超越 AlphaEvolve(Figure 1 右)。附录还证明:把每个圆半径缩 \(10^{-8}\) 就能满足精确约束(分数仅从 2.6359831 降到 2.6359828,相对变化 <\(10^{-6}\))——"用松弛的 surrogate 任务进化 + 事后 post-process 得精确 SOTA"是个可推广的原则。
4.2 AIME:进化数学推理的 Agent Scaffold(⭐本项目最相关)
任务:AIME-2024 的 30 道竞赛数学题;进化agent scaffold 设计,约束每题最多 10 次 LLM 调用;base model = gpt-4.1-nano;进化 75 代,每候选跑 3 次独立取平均。
结果:发现的 scaffold 显著超越手工基线(单次 query agent、majority-voting)。

Figure 6 三面板逐一解读:
- 左(Pareto 前沿):横轴=每题平均 LLM 调用数,纵轴=AIME-2024 准确率。红点=Pareto 最优,灰点=被支配。进化出一条清晰的"效率↔性能"前沿:systematic_error_detection(~10 调用,最高分 ~34%)、expert_ensemble_with_self_correction、multi_step_reflection_agent、two_stage_verification,一路到 initial_program(低调用低分)。7 次调用即达最高性能,另一 scaffold 用满 10 次拿相当结果。
- 中(跨年份迁移):三组柱(2023/2024/2025),每组 Base Agent / Majority@5 / ShinkaEvolve。2024 上 ShinkaEvolve 34.4 vs base 18.4;2025 上 25.6 vs base 11.1(大涨);但 2023 上仅 23.0 vs 21.8(小涨)——作者解读:2023 涨幅小可能因训练数据污染已饱和,2025(最新、未见过)涨幅大证明真泛化而非记忆。
- 右(跨 LLM 迁移):把 gpt-4.1-nano 上进化的 scaffold 直接套到 gpt-4.1-mini / gpt-4.1 / o4-mini。全部大涨:gpt-4.1-mini 44.4→65.6、gpt-4.1 46.7→65.6、o4-mini 80.0→94.4——证明进化出的是可迁移的通用推理策略,而非绑死 nano 的模型专属技巧。
发现的 scaffold(附录 C.2):一个三阶段架构,恰好用 7 次调用(3 生成 + 3 review + 1 synthesis): 1. 生成阶段:3 个不同 persona 专家在 0.7 温度下独立解题——严谨的分步推理者、直觉型模式识别者、算法/CS 导向的数学家; 2. 批判性同行评审:每个解在 0.1 低温下过一个"怀疑型 reviewer",用多例验证 pattern、揪逻辑漏洞、必要时纠错; 3. 综合阶段:一个 0 温度的 "editor-in-chief" persona 分析所有解与批判,选最可靠的构造 canonical 解;失败时回退到 majority voting(先 reviewed 解、再原始解)保证鲁棒输出。
[!NOTE] 为什么这个例子对本项目(harness 演化)最重要? §4.2 是本文里唯一一个进化对象本身就是"agent harness / scaffold" 的案例——其余三个(circle packing / ALE / MoE loss)进化的是普通算法程序。这里 ShinkaEvolve 扮演"造 harness 的元级 harness":它自动搜出了一套"多专家生成 + 怀疑式评审 + 主编综合 + majority 回退"的编排逻辑,这套逻辑跨模型、跨年份都能迁移。这正是[[ref09_meta-harness]]、[[ref17_self-harness]]在追求的目标——自动设计 harness——只不过 ShinkaEvolve 用的是进化搜索这条技术路线,而 Meta-Harness 用的是"强 agent + 全历史文件系统",Self-Harness 用的是"模型自诊断 + 回归门"。三条路殊途同归,值得在项目叙事里三方对照。
4.3 ALE-Bench:改进竞赛编程解
任务:ALE-Bench LITE(10 个 AtCoder 启发式竞赛题)。以 ALE-Agent 的最优解为初始程序,用 ShinkaEvolve 在其上再进化 50 代,用 public test 分数当 fitness,最后提交 private test。
结果:10 题平均再提升 ~2.3%(1879.3→1927.9)。ahc039 一题从榜单第 5 提到第 2(若参赛)——靠给 kd-tree 缓存子树统计(bbox + 鱼数)、新增"targeted edge move"(找到误分类的鱼、贪心移动最近边去纠正)。但作者诚实指出:ShinkaEvolve 的改动往往紧贴 ALE-Agent 初始解,algorithmically close,这暗示存在对初始解过拟合的风险。public top-5 → private 的泛化检验显示提升微乎其微(1923.5→1927.0),无显著过拟合证据。
4.4 LLM 训练:进化 MoE 负载均衡损失
任务:MoE 因 top-K 专家选择不可微,需要辅助负载均衡损失(LBL) 防止专家负载早期塌缩。用 ShinkaEvolve 设计更好的 LBL。代理任务:556M MoE(64 专家、激活 8)在 2B fineweb token 上训练,fitness = 最终 CE + L1 负载不均。仅跑 30 代(pretrain 太贵)。再用 2.7B MoE / ~30B token 验证泛化。
发现的解(式 1):在流行的 global-batch LBL 基础上补一个新正则项,专门规整"欠专业化的专家":
其中 \(s(P_\ell)=0.5+\big(1-\frac{H(P_\ell)}{\log N_E}\big)\)(层内路由熵的归一化补),\(\tau=0.064/N_E\) 是最小使用阈。
[!TIP] 这个新正则项在补什么"盲点"? global-batch LBL 是频率 \(f\) 与路由概率 \(P\) 的点积 \(f\cdot P\)——但\(f\cdot P\) 可能"看起来均衡",实则少数专家几乎没被碰过(dead experts)。ShinkaEvolve 的新项对"分到 token 比例低于阈 \(\tau\) 的专家"施加 \(\max(0,\tau-f)\) 的软推力,且乘 \(s(P_\ell)\)——当层内路由熵 \(H\) 越低(越集中在少数专家)推力越强。净效果:它是一张"安全网",专家一旦跨过下限就自动失效、不再过度正则化已均衡的层,专治 dead experts。在 2.7B 上 perplexity 与 7 个下游 benchmark 全面小胜,且优势随 \(\lambda\) 增大而扩大。
5 消融与分析:三招各值多少

Figure 9 逐面板解读(横轴统一为"评估的程序提案数",纵轴=进化性能分): - 左(parent 选择):Novelty Weighted(绿)> Hill Climbing(橙)> Best-of-N(蓝)。hill-climbing 早期猛涨但约 40 次后 plateau 在 ~2.45;weighted 全程稳定爬升到 ~2.63;Best-of-N(永远拿初始程序当 parent、无反馈)收敛最差。印证 weighted 采样的探索/利用平衡是对的。 - 中(LLM 集成):+ Bandit(绿)> Fixed Ensemble(橙)> Single LLM(蓝,GPT-5-nano)。bandit 比固定均匀集成"轻微(slightly)"更好;固定集成又比单 LLM 明显好。结论:多 LLM 有用,但 bandit 的动态调度只是锦上添花(三招里最弱)。 - 右(novelty 拒绝采样):+ LLM-Novelty-Judge(绿)≈ Threshold Rejection(橙,也很高)>> No Rejection(蓝)。拒绝采样带来的 gap 巨大(No Rejection 卡在 ~2.47,有拒绝的冲到 ~2.63)——这是三招里增益最大的;而 LLM-judge 相比纯阈值只边际提升,说明嵌入相似度已是够好的 novelty 代理。
三项 takeaway 汇总: | 创新 | 消融结论 | 增益排序 | |---|---|---| | Novelty 拒绝采样 | 相比无拒绝巨大提升;LLM-judge 仅边际增益 | 最大 | | Weighted parent 采样 | 稳超 hill-climbing / random | 大 | | Bandit LLM 集成 | 比固定集成"轻微"提升 | 最小 |
5' 讨论、局限与未来
总结:ShinkaEvolve 用改进的样本效率 + 开源,解决了 LLM 驱动科学发现的关键局限,四个域达 SOTA。
局限(作者自陈): 1. 固定配置,对探索/利用平衡的自动控制有限,跨域可能需手调; 2. 任务规范需人类专家手工设计目标函数与评估; 3. 仅限有明确数值目标的问题,限制了在多样评估域的适用性; 4. ALE-Bench 上倾向紧贴初始解,有过拟合初始化的风险(§4.3)。
未来方向: - LLM 自动生成任务规范 → 更高自主、解锁未探索域; - 迈向真·开放式(系统自己生成目标); - 自指精炼(self-referential refinement) + 在线 meta-learning 持续改进发现过程。
个人思考
与其他论文的关联(放进本项目坐标系)
- 对 [[ref20_alphaevolve]](最近亲,必对比):这是理解本文的钥匙——ShinkaEvolve 不是新范式,而是 AlphaEvolve 的"样本高效化 + 开源化"。AlphaEvolve 面向算力充裕的大厂内部发现,parent 选择/去重/选模型都相对朴素;ShinkaEvolve 把这三处各做成有原理的模块(power-law/weighted 采样、嵌入 rejection、UCB1 bandit),换来 1–2 个数量级样本效率(circle packing 150 vs 数千)。对本项目而言:如果要复现"进化式 harness 搜索",ShinkaEvolve 是比 AlphaEvolve 更现实的起点(开源 + 便宜 + Python API 极简)。
- 对 [[ref09_meta-harness]](都在自动造 harness,但技术路线正交):两者都想"自动设计 harness",但机制迥异—— | 维度 | ShinkaEvolve(进化搜索) | Meta-Harness(agentic 全历史搜索) | |---|---|---| | 提议者 | 一个 LLM 池(当变异算子),bandit 调度 | 一个强编程 agent(Claude Code+Opus)| | 历史利用 | meta-scratchpad 蒸馏成攻略(有损)| 文件系统 原始日志无损,agent 自己 grep | | 搜索结构 | 岛屿+档案+parent采样+novelty去重(重结构)| 极简外环,把结构下放给 agent | | 反馈 | 标量 fitness + 文字反馈 + 公共指标 | 完整源码/轨迹/分数(可达千万 token)| | 样本效率 | 极致(150 次)| 每次评估产海量诊断,靠强 agent 消化 | 我的判断:ShinkaEvolve 押注"用便宜的结构化搜索 + 多个中等 LLM 群策群力",Meta-Harness 押注"用一个超强 agent + 无损历史"。前者省钱、可复现、对弱模型友好;后者天花板高、但依赖前沿 agent。两者在"meta-scratchpad vs 文件系统全历史"上的分歧,本质是"经验该预先蒸馏还是让 agent 现场检索"——这是本项目值得展开的一个方法论轴。
- 对 [[ref17_self-harness]]:Self-Harness 是"模型自己诊断自己的失败、提有界编辑、回归门准入";ShinkaEvolve 的 AIME scaffold 进化则是"外部进化搜索造 harness"。若把三篇并置:Meta-Harness=强外部agent造、Self-Harness=模型自造、ShinkaEvolve=进化搜索造——三种"自动 harness 设计"的完整设计空间。
- 对 [[ref23_darwin-godel-machine]](同 Sakana/Clune 谱系):本文 weighted 采样明确"受 DGM 启发",且共享 open-endedness/stepping-stone 的思想血统。DGM 是开放式自改进 agent(改自己代码本体),ShinkaEvolve 是"任务专用、有明确数值目标"的受控切片——更工程、更可评估。
- 对 [[ref22_thetaevolve]]:(待补,预期是同期/后续的 evolve 系列,应重点对比"样本效率"这一维度上谁更进一步。)
方法论启示(可迁移的通用思路)
- "省评估"的杠杆在"执行前拦截无效提案",而非"让单次提案更好":novelty 拒绝采样是全文增益最大的一招,它不优化质量,而是消除整类近似重复的评估浪费。任何"每次迭代都很贵"的搜索/优化(harness 搜索、超参搜索、prompt 搜索)都该先问:我能不能在花钱评估之前,用廉价信号(嵌入相似度)去重?
- 探索/利用别只用一个 fitness 排名,乘一个"新鲜度"因子:weighted 采样的 \(s_i\times h_i\)(性能×后代少)是个极简却有效的模板——把"这个候选有多好"与"这个候选被榨取了多少"解耦相乘。可直接搬到任何 population-based 搜索。
- bandit 奖励要用"相对基线的正向提升 + 指数放大":\(\exp(\max(r-r_b,0))-1\) 这个形式同时解决了非平稳(减 baseline)、不惩罚探索(max 截 0)、偏爱大跃升(exp)。是"在非平稳环境里选算子/选模型"的可复用奖励设计。
- 经验蒸馏(meta-scratchpad) vs 无损检索(文件系统)是一条真实的设计权衡:预算紧、模型弱 → 蒸馏成攻略;预算足、agent 强 → 给原始历史让它自己挖。
在我的工作中能怎么用
- 这篇是本项目"进化式 harness 搜索"支线的范式论文,且比 AlphaEvolve 更可落地(开源 Python API)。§4.2 的 AIME scaffold 进化应作为"进化能造出可迁移 harness"的存在性证据写进串讲。
- 我们的
pdf-paper-readerskill 本身是个 harness。可以想象用 ShinkaEvolve 式的进化去优化它:initial.py=当前 skill 逻辑、fitness=某种"笔记质量分 + 坐标准确率"、novelty 去重防止 LLM 提近似重复的 skill 改动。难点在 §5 的局限——需要人手工定义 fitness,而"笔记质量"很难数值化(不像 circle packing 有 sum of radii)。这恰是本文承认的适用边界。 - meta-scratchpad 的思路可以直接借用:在多篇论文精读时,维护一份"跨论文攻略"(哪些排版/解读手法有效),拼进每次的生成 prompt——这是廉价版的"经验扩散"。
开放问题 / 疑问
- 过拟合初始解:ALE-Bench 上 ShinkaEvolve 明显倾向紧贴 ALE-Agent 的解(作者自认)。这说明"以强初始解播种"是双刃剑——收敛快,但可能困在初始解的算法邻域,错过结构性突破。weighted 采样和 novelty 去重似乎没能完全对冲这个倾向?
- novelty 用嵌入相似度是否够"语义"? text-embedding-3-small 嵌的是代码文本,两段"文本相似但算法迥异"或"文本迥异但算法等价"的程序会被误判吗?消融说嵌入已够用,但这是在 circle packing(结构相对简单)上验证的,更复杂的程序空间未必成立。
- fitness 必须是干净的数值目标——这把 ShinkaEvolve 挡在了"harness 优化"最有价值的那些场景外(如开放任务、无 verifier 的任务)。相比之下 Meta-Harness/Self-Harness 靠"文字反馈/轨迹/verifier"能处理更软的信号。进化搜索要进入软目标域,缺的正是一个可微或可排序的代理。
- bandit 增益为何这么小? 消融里 bandit 只"轻微"胜过固定集成。是任务不够非平稳,还是 UCB1 探索系数没调好?多 LLM 集成的真正价值(diversity)似乎主要来自"有多个模型",而非"动态调度它们"。
局限性(作为读者的补充判断)
- 四个域的成功都建立在"有明确数值 fitness"上,这是 cherry-pick 友好的设定;论文没有在"软目标/开放任务"上尝试,而那恰是 harness 优化最需要的地方。
- 样本效率的对比多在 circle packing 一个任务上做足(Figure 1/9),其余三域更多是"能改进"而非"用多少次评估改进"的严格效率曲线——"前所未有的样本效率"这个主张的强证据集中在单一任务。
- 三招的增益极不均衡(novelty>>weighted>>bandit):真正的贡献可能主要是 novelty 拒绝采样这一招,其余两招锦上添花。标题的"three key innovations"在营销上齐整,在消融上并不等权。