关于 symbolic-equation
symbolic-equation 是从数据中发现可解释科学方程的技能,面向需要拟合物理或科学关系的研究者。它以 LLM 引导进化搜索,并通过多岛群与聚类采样平衡探索和利用。
主要功能
- 01定义变量、目标和评估函数
- 02采用多岛群维护方程多样性
- 03用 LLM 提出方程变体
- 04基于适应度评估并筛选方程
- 05简化并解释优选方程
适用场景
- 01从实验数据推导科学关系
- 02探索具有物理背景的候选方程
- 03按拟合表现排序并解释方程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lingzhi227/ agent-research-skills --skill symbolic-equation安装后在 Claude Code 中输入/symbolic-equation确认已加载。
附带文件references/llmsr-patterns.md
详细介绍
符号方程发现
使用 LLM 引导的进化搜索,从数据中发现可解释的科学方程。
输入
$0— 数据集描述、变量名称和物理背景
参考资料
- LLM-SR 模式(提示词、进化、采样):
~/.claude/skills/symbolic-equation/references/llmsr-patterns.md
工作流(源自 LLM-SR)
第 1 步:定义问题规格
创建一份规格说明,包含:
- 输入变量:带有类型的物理量(例如,
x: np.ndarray、v: np.ndarray) - 输出变量:要预测的目标量
- 评估函数:适应度指标(通常为经参数优化后的负 MSE)
- 物理背景:用于指导方程发现的领域知识
# Example specification
@equation.evolve
def equation(x: np.ndarray, v: np.ndarray, params: np.ndarray) -> np.ndarray:
"""Describe the acceleration of a damped nonlinear oscillator."""
return params[0] * x
第 2 步:初始化多岛缓冲区
- 创建 N 个岛(默认值:10),以保持种群多样性
- 每个岛独立维护方程簇
- 方程簇根据性能特征对方程进行分组
第 3 步:进化搜索循环
重复以下步骤,直到收敛或达到最大采样次数:
- 选择岛:随机选择一个岛
- 构建提示词:从方程簇中采样排名靠前的方程(按分数进行 softmax 加权)
- LLM 提议:生成一个改进版本的新方程
- 评估:在测试数据上运行,计算适应度分数
- 注册:如果方程有效,则将其添加到岛的方程簇中
第 4 步:构建提示词
将已有方程按版本序列呈现:
def equation_v0(x, v, params):
"""Initial version."""
return params[0] * x
def equation_v1(x, v, params):
"""Improved version of equation_v0."""
return params[0] * x + params[1] * v
def equation_v2(x, v, params):
"""Improved version of equation_v1."""
# LLM completes this
第 5 步:重置岛(维护多样性)
定期重置(默认值:每 4 小时):
- 按最佳分数对岛进行排序
- 重置排名后 50% 的岛
- 用一个存续岛的最佳方程为每个重置岛提供种子
- 重新启动方程簇采样温度
第 6 步:提取最佳方程
搜索完成后:
- 收集每个岛的最佳方程
- 按适应度分数排序
- 尽可能进行简化(代数化简)
- 附上物理解释后报告
方程簇采样
对方程簇分数进行温度调度的 softmax 采样:
temperature = T_init * (1 - (num_programs % period) / period)
probabilities = softmax(cluster_scores / temperature)
- 温度越高 → 探索越充分
- 温度越低 → 越多利用最佳方程簇
- 在方程簇内部:优先选择更短的程序(奥卡姆剃刀)
规则
- 方程只能使用标准数学运算
- 通过 scipy BFGS 或 Adam 优化参数
- 适应度 = 负 MSE(越高越好)
- 对方程评估进行超时保护
- 不允许递归方程
- 相较于单纯拟合,更重视物理可解释性
相关技能
评论
支持 Markdown