メインコンテンツへスキップ
iws.DataFit はパラメータフィッティングを記述します。どの実験と比較するか、どのパラメータを自由にするか、どう探索するかを指定し、パイプラインの 1 要素として送信します。理論(コスト関数、識別可能性、マルチスタート)は データフィッティング (英語ガイド) を参照してください。

最小構成のフィット

import ionworks_schema as iws
from ionworks import Ionworks

# 既知パラメータ(フィットしない全項目)
known = iws.direct_entries.DirectEntry(
    parameters={"Ambient temperature [K]": 298.15},
)

# 目的関数: 電流駆動 SPMe シミュレーションと測定電圧を比較
obj_1C = iws.objectives.CurrentDriven(
    data_input="file:examples/data/chen_synthetic_1C/time_series.csv",
    options={"model": {"type": "SPMe"}},
)

# 自由パラメータ
parameters = {
    "Negative particle diffusivity [m2.s-1]": iws.Parameter(
        "Negative particle diffusivity [m2.s-1]",
        initial_value=2e-14,
        bounds=(1e-14, 1e-13),
    ),
    "Positive particle diffusivity [m2.s-1]": iws.Parameter(
        "Positive particle diffusivity [m2.s-1]",
        initial_value=2e-15,
        bounds=(1e-15, 1e-14),
    ),
}

fit = iws.DataFit(
    objectives={"test_1C": obj_1C},
    parameters=parameters,
    cost=iws.costs.SSE(),
    optimizer=iws.optimizers.DifferentialEvolution(),
)

pipeline = iws.Pipeline({"known": known, "fit": fit})

client = Ionworks()
submission = client.pipeline.create(pipeline)
client.pipeline.wait_for_completion(submission.id)
result = client.pipeline.result(submission.id)
print(result.element_results["fit"])

複数の目的関数

複数の目的関数を渡せば、複数の実験(異なる C レートや温度での放電など)に同時にフィットできます。
fit = iws.DataFit(
    objectives={
        "1C": iws.objectives.CurrentDriven(
            data_input="file:.../1C.csv",
            options={"model": {"type": "SPMe"}},
        ),
        "0.5C": iws.objectives.CurrentDriven(
            data_input="file:.../0.5C.csv",
            options={"model": {"type": "SPMe"}},
        ),
    },
    parameters=parameters,
)
各目的関数は単一の結合コストに寄与します。

オプティマイザ

iws.optimizersDataFit で利用可能なオプティマイザを提供します。問題に合うものを選んでください。
スキーマ用途
iws.optimizers.ScipyMinimize(method="L-BFGS-B")滑らかな問題、高速な局所最適化
iws.optimizers.ScipyLeastSquares()残差ベースの最小二乗、事前分布と相性が良い
iws.optimizers.DifferentialEvolution()大域探索、勾配不要
iws.optimizers.CMAES()大域探索、多数の局所最小、デフォルトが堅牢
iws.optimizers.PSO()大域探索、並列化可能な集団探索
コスト関数の選択肢は 目的関数 を参照してください。

マルチスタート

複数の局所最小を持つ問題では、異なる初期点から複数回最適化を実行します。
fit = iws.DataFit(
    objectives=objectives,
    parameters=parameters,
    multistarts=20,
)
パイプラインが初期推測(デフォルトはラテン超方格法)を生成し、並列に実行し、コスト順に全結果を返します。

結果の取得

client.pipeline.wait_for_completion(submission.id)
result = client.pipeline.result(submission.id)
print(result.element_results["fit"])
result.element_results["fit"] はデータフィットの出力(最適パラメータ値、最終コスト、ログ化された軌跡など)をキーとする dict です。エンドツーエンドの例は packages/ionworks-api/examples/pipeline/datafit.py を参照してください。

データフィッティング (理論)

コスト関数の数学、識別可能性、マルチスタート戦略 (英語ガイド)。

目的関数

データ形状に応じたコストの選び方。

正則化

ガウス事前分布でフィットを安定化。

感度解析

実際に拘束されているパラメータを定量化。