跳转至

Rethinking Code Similarity for Automated Algorithm Design with LLMs

会议: ICLR 2026
arXiv: 2603.02787
代码: https://github.com/RayZhhh/behavesim
领域: LLM / 自动算法设计 / 代码相似度
关键词: LLM-AAD, 代码相似度, 行为相似度, 动态时间规整, FunSearch, EoH, 算法多样性

一句话总结

提出 BehaveSim,一种基于"问题求解轨迹"(PSTrajs)和动态时间规整(DTW)的算法相似度度量方法,从执行行为层面而非语法或输出层面衡量算法差异,集成到 FunSearch/EoH 等 LLM-AAD 框架后显著提升性能。

研究背景与动机

领域现状:LLM 驱动的自动算法设计(LLM-AAD)已成为算法开发的新范式——FunSearch、EoH 等框架可以自主生成专家级算法的代码实现,在 Online Bin Packing、Cap Set、TSP 等经典问题上取得了令人瞩目的成果。

现有痛点:在 LLM-AAD 中,算法的核心设计原理隐含在生成的代码中,而非显式的数学公式或伪代码。现有代码相似度指标(如语法树编辑距离、BLEU、代码嵌入余弦相似度)只能捕捉表面语法差异,无法判断两段代码是否实现了本质不同的算法逻辑。

核心矛盾:两段语法截然不同的代码可能实现了相同的算法思路(仅变量名、循环结构不同),而语法相似的代码可能蕴含完全不同的求解策略。现有度量无法区分"真正的算法创新"与"表面的代码变体"。

关键缺口:LLM-AAD 框架在种群维护/多样性管理中需要用相似度来去重或选择。如果相似度指标不准确,框架会保留冗余的"伪创新"算法,挤掉真正有价值的多样性,导致搜索效率下降。

输出等价的局限:另一类方法比较算法的最终输出(如目标函数值),但不同算法可能在相同输入上偶然得到相同输出,却在不同输入上表现迥异。输出等价无法揭示求解过程的差异。

核心 idea:通过记录算法在执行过程中产生的中间解序列(问题求解轨迹),用 DTW 对齐这些轨迹来度量算法间的行为相似度——关注"怎么解"而非"解了什么"。

方法详解

整体框架

BehaveSim 的核心思想是:不看代码文本,不看最终输出,而是看算法在运行过程中的"行为"——即它逐步生成中间解的轨迹。两个算法的行为越相似(轨迹越对齐),说明它们使用了相似的求解策略。

关键设计

  1. 问题求解轨迹(PSTrajs)提取

    • 功能:在算法执行过程中,按时间步记录每个中间解的状态(如 bin packing 中每步的装箱决策、TSP 中每步选择的下一个城市)。
    • 形式化:对算法 \(A\) 在问题实例 \(p\) 上的执行,记录轨迹 \(\tau_A(p) = (s_1, s_2, \ldots, s_T)\),其中 \(s_t\) 是时间步 \(t\) 的中间解状态。
    • 关键设计:轨迹的粒度取决于问题定义——对 bin packing 是每个物品的放置决策,对 TSP 是路径的逐步构建。
    • 与传统 profiling 的区别:程序 profiling 关注资源消耗(CPU、内存),PSTrajs 关注解的演化过程,捕捉算法的"思考方式"。
  2. 基于 DTW 的轨迹对齐

    • 为什么用 DTW:不同算法的执行步数可能不同(如贪心算法步数少、回溯算法步数多),需要弹性对齐。DTW(Dynamic Time Warping)允许非线性时间轴拉伸,找到两条轨迹间的最优对齐。
    • 相似度计算:\(\text{BehaveSim}(A_1, A_2) = \frac{1}{|P|} \sum_{p \in P} \text{DTW}(\tau_{A_1}(p), \tau_{A_2}(p))\),在多个问题实例上取平均。
    • 距离度量:轨迹中每个状态间的距离函数 \(d(s_i, s_j)\) 根据具体问题定义(如装箱方案的 Jaccard 距离、路径的编辑距离)。
  3. 集成到 LLM-AAD 框架

    • FunSearch 集成:在 FunSearch 的种群管理中,用 BehaveSim 替代原有的去重/多样性维护机制,确保种群中的算法在行为层面真正多样化。
    • EoH 集成:在 Evolution of Heuristics 框架中,BehaveSim 指导交叉/变异操作,优先保留行为差异大的个体。
    • 效果:行为多样性的引入使框架能探索更广的解空间,避免过早收敛到局部最优。
    • 即插即用:BehaveSim 作为模块化组件,无需修改框架核心逻辑,只需替换相似度度量接口。
  4. 算法聚类与分析

    • 功能:用 BehaveSim 构建算法间的距离矩阵,通过层次聚类将 AI 生成的大量算法按行为模式分组。
    • 价值:使研究者能系统分析 LLM 生成了哪些类型的求解策略,发现真正新颖的算法设计。
    • 可视化:聚类结果可生成算法策略的树状图或热力图,直观展示算法家族的多样性分布。

实验关键数据

主实验:BehaveSim 集成后的 AAD 性能提升

任务 框架 原始性能 +BehaveSim 提升幅度 说明
Online Bin Packing FunSearch baseline 得分 显著提升 多样性驱动 经典 NP-hard 问题
Cap Set FunSearch baseline 得分 显著提升 发现更多策略 数学组合优化
TSP (旅行商问题) EoH baseline 启发式 显著改进 避免策略冗余 路径优化

BehaveSim vs 现有代码相似度指标对比

相似度指标 能区分语法变体? 能区分算法逻辑? AAD 提升? 说明
语法树编辑距离 有限 只看代码结构
代码嵌入(CodeBERT等) 部分 有限 表示层面的语义
输出等价 N/A 部分 有限 忽略求解过程
BehaveSim (本文) 显著 捕捉执行行为

关键发现

  • BehaveSim 能有效区分语法相似但算法逻辑不同的代码,也能识别语法不同但行为相同的"伪创新"。
  • 在三个 AAD 任务上,集成 BehaveSim 后框架性能均显著提升,证明行为多样性是提升 LLM-AAD 效果的关键。
  • 聚类分析揭示 LLM 生成的算法可按行为模式分为若干明确的策略族群,有助于理解 AI 的"算法设计思维"。

亮点与洞察

  • 从"看代码"到"看行为"的范式转换:BehaveSim 提出了一个优雅的洞察——衡量算法相似度应该关注算法"做了什么"而非"写了什么"。这一思路对代码理解、软件工程、程序合成等领域都有启发意义。
  • DTW 的巧妙应用:将时间序列分析中的经典工具引入代码相似度领域,用弹性时间对齐解决不同算法执行步数不一致的问题。
  • LLM 生成算法的可分析性:通过行为聚类,首次提供了系统化分析 AI 生成算法策略谱系的工具,这对理解 LLM 的代码生成能力和局限性有重要价值。
  • 对 AAD 生态系统的基础设施贡献:随着 LLM 生成的算法数量爆炸式增长,BehaveSim 提供了急需的"算法品质检测"工具,帮助筛选真正的创新而非冗余变体。

局限与展望

  • 问题特定的轨迹定义:PSTrajs 的提取需要针对每个问题定义"中间解状态"的格式,泛化到任意编程任务需要额外的工程工作。对于没有明确中间解概念的问题(如分类器设计),轨迹定义本身就是开放性问题。
  • 计算开销:DTW 的时间复杂度为 \(O(T_1 \times T_2)\),对于长轨迹或大种群,成对相似度计算可能成为瓶颈。
  • 轨迹粒度的选择:记录粒度太粗会丢失行为差异,太细会引入噪声。目前粒度选择依赖问题领域知识。
  • 仅验证三个任务:虽然覆盖了组合优化的代表性问题,但对更广泛的 AAD 任务(如机器学习超参优化、程序合成、约束满足问题)的适用性尚待验证。
  • 随机性算法的处理:对于包含随机性的算法(如随机贪心、模拟退火),同一算法在不同运行中的轨迹可能差异很大,需要多次采样取统计量来稳定度量。
  • 轨迹长度差异极端情况:当两个算法的执行步数差距悬殊时(如 O(n) vs O(n²)),DTW 可能产生不可靠的对齐,需要额外的归一化策略。
  • 多目标场景:当算法同时优化多个目标时(如延迟+吞吐量),单一轨迹可能无法充分表征行为差异,需要多维轨迹的联合对齐。

相关工作与对比

  • vs FunSearch (Romera-Paredes et al., 2024):FunSearch 是 Google DeepMind 的 LLM-AAD 框架,用 LLM 进化生成算法。BehaveSim 作为即插即用的多样性模块集成到 FunSearch 中,增强了其种群多样性管理。
  • vs EoH (Liu et al., 2024):EoH 是另一个 LLM-AAD 框架,通过进化算法启发式设计。BehaveSim 在 EoH 中替换了原有的基于语法的去重机制。
  • vs 代码克隆检测文献:传统代码克隆检测关注的是"这两段代码是否在做同一件事",BehaveSim 则关注"这两段代码是否用同一种策略做事"——粒度更细,对 AAD 更有价值。
  • vs 程序等价检验:程序等价是判断两个程序是否总产生相同输出(不可判定问题),BehaveSim 则是度量行为相似的程度,是一个更实用的近似方案。
  • vs Algorithm Selection / AutoML:算法选择关注"哪个算法最适合给定问题",BehaveSim 关注"这些算法有多相似"——后者为前者提供了更精细的算法空间结构化表示。
  • vs Neural Program Embedding:Code2Vec 等方法将程序嵌入向量空间,但捕获的是静态语义。BehaveSim 的动态行为视角与之互补——可以想象将两者结合用于更全面的算法表征。

评分

  • 新颖性: ⭐⭐⭐⭐ 从行为角度定义代码相似度是很有创意的切入点
  • 实验充分度: ⭐⭐⭐⭐ 三个 AAD 任务 + 多种相似度对比 + 聚类分析
  • 写作质量: ⭐⭐⭐⭐ 动机清晰,方法描述直观
  • 价值: ⭐⭐⭐⭐ 对 LLM-AAD 生态系统有实用价值,DTW+轨迹的思路可迁移到其他问题