symbolic-equation について
symbolic-equationは、データから解釈可能な科学方程式を発見するスキルです。物理・科学的な関係をモデル化する研究者向けに、LLM主導の進化的探索と複数の島による集団管理を行います。
主な機能
- 01変数、目的変数、適合度の指定
- 02島モデルによる方程式の多様性維持
- 03LLMによる方程式候補の生成
- 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:進化的探索ループ
収束するか、最大サンプル数に達するまで、以下を繰り返します。
- アイランドを選択:アイランドをランダムに選択します
- プロンプトを作成:クラスタから上位の方程式をサンプリングします(スコアに基づくソフトマックス重み付け)
- 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:最良の方程式を抽出する
探索の完了後、以下を行います。
- 各アイランドから最良の方程式を収集します
- 適合度スコアで順位付けします
- 可能であれば簡約します(代数的簡約)
- 物理的な解釈とともに報告します
クラスタのサンプリング
クラスタスコアに対する、温度スケジュール付きソフトマックス:
temperature = T_init * (1 - (num_programs % period) / period)
probabilities = softmax(cluster_scores / temperature)
- 温度が高いほど、探索が活発になります
- 温度が低いほど、最良のクラスタの活用が優先されます
- クラスタ内では、短いプログラムが優先されます(オッカムの剃刀)
ルール
- 方程式では標準的な数学演算のみを使用します
- パラメーター最適化には scipy BFGS または Adam を使用します
- 適合度 = 負の MSE(高いほど良好)
- 方程式の評価にはタイムアウト保護を設けます
- 再帰方程式は許可されません
- 純粋な適合度よりも物理的な解釈可能性を優先します
関連スキル
- 上流:data-analysis、math-reasoning
- 下流:paper-writing-section
- こちらも参照:algorithm-design
コメント
Markdown 対応