mcpField
S
symbolic-equation

symbolic-equation

github.com/lingzhi227数据与数据库4401.6k 次安装35 周前更新
代码仓库

关于 symbolic-equation

symbolic-equation 是从数据中发现可解释科学方程的技能,面向需要拟合物理或科学关系的研究者。它以 LLM 引导进化搜索,并通过多岛群与聚类采样平衡探索和利用。

主要功能

  1. 01定义变量、目标和评估函数
  2. 02采用多岛群维护方程多样性
  3. 03用 LLM 提出方程变体
  4. 04基于适应度评估并筛选方程
  5. 05简化并解释优选方程

适用场景

  1. 01从实验数据推导科学关系
  2. 02探索具有物理背景的候选方程
  3. 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 步:定义问题规格

创建一份规格说明,包含:

  1. 输入变量:带有类型的物理量(例如,x: np.ndarray、v: np.ndarray)
  2. 输出变量:要预测的目标量
  3. 评估函数:适应度指标(通常为经参数优化后的负 MSE)
  4. 物理背景:用于指导方程发现的领域知识
# 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 步:进化搜索循环

重复以下步骤,直到收敛或达到最大采样次数:

  1. 选择岛:随机选择一个岛
  2. 构建提示词:从方程簇中采样排名靠前的方程(按分数进行 softmax 加权)
  3. LLM 提议:生成一个改进版本的新方程
  4. 评估:在测试数据上运行,计算适应度分数
  5. 注册:如果方程有效,则将其添加到岛的方程簇中
第 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 小时):

  1. 按最佳分数对岛进行排序
  2. 重置排名后 50% 的岛
  3. 用一个存续岛的最佳方程为每个重置岛提供种子
  4. 重新启动方程簇采样温度
第 6 步:提取最佳方程

搜索完成后:

  1. 收集每个岛的最佳方程
  2. 按适应度分数排序
  3. 尽可能进行简化(代数化简)
  4. 附上物理解释后报告

方程簇采样

对方程簇分数进行温度调度的 softmax 采样:

temperature = T_init * (1 - (num_programs % period) / period)
probabilities = softmax(cluster_scores / temperature)
  • 温度越高 → 探索越充分
  • 温度越低 → 越多利用最佳方程簇
  • 在方程簇内部:优先选择更短的程序(奥卡姆剃刀)

规则

  • 方程只能使用标准数学运算
  • 通过 scipy BFGS 或 Adam 优化参数
  • 适应度 = 负 MSE(越高越好)
  • 对方程评估进行超时保护
  • 不允许递归方程
  • 相较于单纯拟合,更重视物理可解释性

相关技能

评论

支持 Markdown