メインコンテンツへスキップ

最適化の実行

このガイドでは、Ionworks Studio で最適化を実行するための完全なワークフローを説明します。

前提条件

最適化を開始する前に、以下を確認してください:

ステップ 1: 最適化に名前を付ける(オプション)

最適化リストから識別できるように、最適化に説明的な名前を付けるか、名前を空白のままにして自動生成させることができます。
  1. プロジェクトの Optimizations ページに移動します
  2. New Optimization をクリックしてテンプレートを選択します。組み込みのシステムテンプレート(Design または Charge)または作成したプロジェクトテンプレートから選択できます。
  3. オプションで最適化の名前を入力します(例: “Fast charge protocol v2” や “Electrode thickness sweep”)
名前を空白のままにすると、Ionworks がユニークな名前を自動生成します(例: “Optimization a1b2c3d4”)。最適化の詳細ページからいつでも名前を変更できます。
実行の目標や設定を説明する名前を選びましょう。プロジェクト内に 複数の最適化がある場合、結果の比較が容易になります。

ステップ 2: セルとモデルを選択する

最適化に使用するセル仕様とパラメータ化されたモデルを選択します。

セル仕様

Cell & Model セクションで、ドロップダウンからセルを選択します。セル仕様は以下を提供します:
  • 公称容量(C-rate を電流に変換するために使用)
  • 電圧制限(実験のデフォルト値として使用)
  • 化学情報

パラメータ化されたモデル

次に、最適化中のシミュレーションに使用するパラメータ化されたモデルを選択します。
  1. ドロップダウンからモデルを選択します
  2. 選択したセルと互換性のあるモデルのみが表示されます
  3. モデルのパラメータ値が最適化のベースラインとなります
パラメータ化されたモデルは、すべてのパラメータの開始点を提供します。 最適化中は、明示的に最適化に追加したパラメータのみが変動し、 その他はモデルの値のまま維持されます。

ステップ 3: 目的関数を設定する

目的関数は達成したい目標を定義します。各目的関数には実験、ゴール、およびオプションの制約条件が含まれます。

目的関数を追加する

  1. Add Objective をクリックして新しい目的関数を作成します
  2. 説明的な名前を付けます(例: “charge_time”, “energy_density”)

実験を定義する

実験は実行するシミュレーションプロトコルを指定します。UCP 形式で入力します:
- CC Charge:
    - Charge:
        mode: Current
        value: Input["I_charge"]
        ends:
          - "Voltage > 4.2"
- CV Hold:
    - Charge:
        mode: Voltage
        value: 4.2
        ends:
          - "C-rate < 0.05"
最適化したいパラメータを参照するには Input["parameter_name"] 構文を使用します。
UCP 実験の global 設定initial_temperature が含まれている場合、オプティマイザはシミュレーションの 初期温度と環境温度をその値に自動的に設定します(摂氏からケルビンに変換)。 同様に、initial_state_typeinitial_state_value は初期充電状態または 電圧の設定に使用されます。これらを別個のパラメータとして追加する必要は ありません。

カスタム変数を追加する(オプション)

派生量に基づいて最適化する必要がある場合:
  1. Custom Variables セクションで Add Variable をクリックします
  2. Variable Name を入力します(例: “Anode Potential”)
  3. PyBaMM Expression を入力します(例: pybamm.CoupledVariable("Negative electrode surface potential difference [V]")
  4. フィールドからフォーカスを外すと式が検証されます
カスタム変数は、ゴールや制約条件の変数ドロップダウンで利用可能になります。

ゴールを追加する

ゴールは最大化または最小化する対象を定義します:
  1. Add Goal をクリックします
  2. ゴールを設定します:
    • Name: 説明的な名前(例: “minimize_time”)
    • Weight: 相対的な重要度(デフォルト: 1.0)
    • Action: “Maximize” または “Minimize”
    • Variable: 最適化する出力変数
    • Metric Type: 値の抽出方法(以下を参照)
    • Value(交差メトリクスの場合): 交差点
Metric Type のオプション:
タイプユースケース値フィールド
Maximumピーク値(例: 最高温度)不要
Minimum最低値(例: 最小アノード電位)不要
Mean平均値不要
Sum累積合計不要
PointBased単一ポイントの値不要
Time特定の時間での値秒単位の時間(終了時は -1)
SOC特定の SOC での値分数としての SOC(0-1)
Voltage特定の電圧での値V 単位の電圧

実験ステップに対するバリデーション

各目的関数には Validate against experiment steps トグル(デフォルトで有効)があります。有効な場合、オプティマイザはシミュレーションが実験プロトコルで定義されたすべてのステップを完了したかどうかを確認します。ステップがスキップされたり到達しなかった場合、評価にペナルティが課されます。 最適化によってシミュレーションがすべてのステップを完了する前に終了する可能性がある場合は、このトグルを無効にしてください。例えば、オプティマイザが早期カットオフ条件をトリガーする積極的なパラメータの組み合わせを探索している場合などです。このような場合でも、オプティマイザは不完全な実験に対するペナルティなしに、部分的なシミュレーションから有用な情報を抽出できます。

制約条件を追加する

制約条件は遵守すべき制限を定義します:
  1. Add Constraint をクリックします
  2. 制約条件を設定します:
    • Name: 説明的な名前(例: “no_plating”)
    • Penalty: 違反に対する重み(デフォルト: 1e6)
    • Action: “GreaterThan” または “LessThan”
    • Constraint Value: しきい値
    • Variable: 制約する出力変数
    • Metric Type: 値の抽出方法
例: リチウム析出の防止
Name: anode_potential_constraint
Action: GreaterThan
Constraint Value: 0
Variable: Negative electrode surface potential difference [V]
Metric Type: Minimum
これにより、シミュレーション全体を通じて最小アノード電位が 0V を超えることが保証されます。

ステップ 4: パラメータを設定する

パラメータはオプティマイザが調整できる値を定義します。

パラメータを追加する

  1. Add Parameter をクリックします
  2. ドロップダウンからパラメータを選択します(カテゴリ別にグループ化)
  3. Initial Value(初期値)を設定します(デフォルトではモデルの値)
  4. Lower Bound(下限値)を設定します
  5. Upper Bound(上限値)を設定します
実験内で Input["parameter_name"] として参照されるパラメータは、 自動的に “Experiment Inputs” グループに表示されます。モデルパラメータは それぞれのグループ(Cell、Anode、Cathode など)に表示されます。

パラメータのバリデーション

最適化の実行前に、Ionworks は追加したすべてのパラメータが少なくとも 1 つの目的関数で実際に使用されていることを検証します。 有効なパラメータの使用には以下が含まれます:
  • 直接的なモデルパラメータ(例: Positive electrode thickness [m]
  • Input["parameter_name"] を介して実験ステップで参照されるパラメータ
  • 式を通じてモデルパラメータにリンクされたパラメータ
  • 制約条件やペナルティの式で使用されるパラメータ
  • 初期充電状態パラメータ(例: Initial SOC [%], Initial voltage [V]
  • UCP の global 設定からの温度パラメータ(例: Initial temperature [K], Ambient temperature [K]
バリデーションが失敗した場合、以下を一覧表示するエラーが表示されます:
  • 未使用のパラメータ
  • モデルが実際に使用しているパラメータ
  • 類似のパラメータ名の候補(タイプミスの場合)
エラーの例:
The following fit parameters are not used by any objective's model
and are not referenced by any expression that maps to a model
parameter: ['Electrolyte viscosity']. The model uses these parameters:
['Positive electrode thickness [m]', ...]. Remove the unused parameters
or add expressions that link them to model parameters.
モデルに直接含まれていないパラメータが必要な場合は、式を介してリンク できます。例えば、scale_factor パラメータを定義し、 "Positive electrode thickness [m]": 100e-6 * scale_factor のような式で使用します。

パラメータの範囲

範囲は以下の条件を満たすように選択してください:
  • 物理的に現実的であること
  • 製造能力の範囲内であること
  • 有意義な最適化を可能にする十分な広さがあること
  • 非物理的な解を避けるのに十分な狭さであること

ステップ 5: アルゴリズムを設定する

問題に合わせて最適化アルゴリズムを微調整します:

オプティマイザ

最適化アルゴリズムを選択します。デフォルトは Differential Evolution で、ハイパーパラメータのチューニングなしに信頼性の高い解を見つけるグローバルオプティマイザです。
  • Differential Evolution(デフォルト) — 適応的な変異と交叉を使用して探索空間を探索する集団ベースのグローバルオプティマイザ。ノイズの多い問題や多峰性の問題に堅牢。内部でグローバル探索を行うため、デフォルトは 1 マルチスタート。
  • XNES / CMA-ES — 異なる問題構造に適した集団ベースの進化戦略。より広い範囲をカバーするために複数のマルチスタート(デフォルト: 4)を使用。
  • PSO — 群知能による広範な探索を行うパーティクルスウォームオプティマイザ。デフォルトは 1 マルチスタート。
  • Nelder-Mead — 勾配フリーのシンプレックス法。高速だが局所最適解に収束する可能性があるため、複数のマルチスタート(デフォルト: 4)を推奨。
比較表については最適化の概要を参照してください。

非同期評価モード

分散ワーカーが利用可能な場合、集団ベースのオプティマイザは自動的に非同期評価モードを使用します。このモードでは、オプティマイザは候補評価をワーカーに送信し、バッチ全体の完了を待つのではなく、結果が到着するとすぐに処理します。これにより、個々のシミュレーションの所要時間にばらつきがある場合のスループットが向上します。 手動での設定は不要です。インフラストラクチャがサポートしている場合、非同期モードは自動的に有効になります。詳細は並列化を参照してください。

マルチスタート数

独立した最適化実行の数を制御します。デフォルトはオプティマイザによって異なります。グローバルオプティマイザ(Differential Evolution、PSO)のデフォルトは 1、ローカルオプティマイザのデフォルトは 4 です。
トレードオフ
1最速; グローバルオプティマイザには十分
2-4ローカルオプティマイザに対して良いバランス
8-16高い信頼性、実行時間が長い
32最大の信頼性、重要な最適化向け
推奨: Differential Evolution(デフォルト)の場合は 1 マルチスタートから始めてください。XNES や CMA-ES のようなローカルオプティマイザの場合は 4 から始めてください。実行間で結果に一貫性がない場合は増やしてください。

ステップ 6: 最適化を実行する

  1. Form Data Preview セクションで設定を確認します
  2. Create Optimization をクリックします
  3. 進捗を監視できる最適化の詳細ページにリダイレクトされます

最適化中

最適化の実行中は、以下を監視できます:
  • Status: 現在のフェーズ(pending、processing、completed、failed、または canceled)
  • Progress: 実行中のマルチスタート
  • Iteration History: 反復ごとのコスト関数値

最適化のフェーズ

  1. Pending: ジョブがキューに入っている
  2. Processing: マルチスタート最適化を実行中
  3. Combining Results: すべての開始点から最良の結果を検索中
  4. Completed: 最終結果が利用可能
  5. Canceled: ユーザーによって最適化がキャンセルされた
終端エラー状態(Completed の代わりになる場合あり):
  • Failed: 処理中にエラーが発生した
  • Canceled: 完了前にジョブがキャンセルされた

ステップ 7: 結果を確認する

完了したら、最適化結果を確認します:

最適パラメータ

テーブルには、各パラメータについて初期値/ベースライン値と比較した最適値が表示されます。

パフォーマンス比較

以下の主要メトリクスを比較します:
  • Baseline: 初期パラメータ値を使用した結果
  • Optimized: 最適パラメータ値を使用した結果

反復履歴

収束プロットは、最適化中にコスト関数がどのように変化したかを示します。以下に注目してください:
  • 段階的な減少(良好)
  • 大きな正のジャンプ(制約違反)
  • 長いフラットな領域(オプティマイザが収束した可能性が高い)
最適化アルゴリズムはコストを最小化するように実装されています。そのため、 ゴールと制約条件は最適化ループとの統合時にこの規約に合わせて定式化 されます。これにより、収束は常に最小化として表示されます。

時系列プロット

ベースラインと最適化されたケースの間でシミュレーション出力(電圧、電流など)を比較し、最適化によってパフォーマンスがどのように改善されたかを理解します。

最適化のキャンセル

Pending または Processing 状態の実行中の最適化をキャンセルできます。

詳細ページから

  1. キャンセルしたい最適化に移動します
  2. Cancel ボタンをクリックします(最適化がアクティブな間のみ表示されます)
  3. ダイアログでキャンセルを確認します

リストページから

  1. プロジェクトの Optimizations ページに移動します
  2. 1 つ以上のアクティブな最適化を選択します
  3. Cancel 一括アクションをクリックします
  4. キャンセルを確認します
すでに完了した最適化は、一括キャンセル時に自動的にスキップされます。 確認すると、最適化ジョブとそのすべての子ジョブ(個別のマルチスタート実行)が Canceled 状態に移行します。キャンセル前に完了していた作業は失われます。
最適化のキャンセルは元に戻せません。結果が必要な場合は、 新しい最適化を作成して実行する必要があります。

最適化の編集

最適化を作成した後、名前と説明はいつでも更新できます。これは、異なる設定を反復しながら最適化リストを整理するのに役立ちます。

編集方法

編集ダイアログは 2 つの場所から開くことができます:
  • 最適化リストから — 任意の最適化行の三点メニューをクリックし、Edit を選択します
  • 最適化詳細ページから — ヘッダーの Edit ボタンをクリックします
ダイアログでは、最適化の名前説明を変更できます。Save Changes をクリックして適用します。
名前と説明のみ編集可能です。パラメータ、目的関数、制約条件、 またはアルゴリズム設定を変更するには、最適化をクローンして 更新された設定で新しいものを作成してください。

最適化のクローン

完了した最適化の Clone をクリックすると、同じセル、モデル、パラメータ、目的関数、アルゴリズム設定が事前入力された新しい最適化が作成されます。これは、初期結果に基づいてパラメータの範囲を狭めたり、新しい制約条件を追加するなど、わずかな調整で再実行したい場合に便利です。

最適化の削除

最適化とそのすべての結果を完全に削除できます。詳細ページから 1 件ずつ削除する方法と、リストページから一括で削除する方法があります。

詳細ページから

  1. 削除したい最適化に移動します
  2. Delete ボタンをクリックします
  3. ダイアログで削除を確認します

リストページから

  1. プロジェクトの Optimizations ページに移動します
  2. 行のチェックボックスで 1 つ以上の最適化を選択します
  3. ツールバーの Delete 一括アクションをクリックします
  4. ダイアログで削除を確認します
各最適化は個別に削除されるため、失敗があれば行ごとに通知され、残りの選択項目の削除は続行されます。完了時には削除に成功した件数を示すトーストが表示されます。
一括 Delete アクションは、optimization:delete 権限を持つユーザーにのみ 表示されます。削除権限を持たないユーザーでも、optimization:update 権限が あれば一括 Cancel アクションは引き続き利用できます。
この操作は元に戻せません。削除した最適化とそのすべての結果は完全に削除されます。

ベストプラクティス

シンプルに始める

以下から始めましょう:
  • 少ないパラメータ(2-4)
  • 広い範囲
  • 少ないマルチスタート(2-4)
  • 少ない反復回数(50)
問題を理解してから複雑さを増やしてください。

制約条件の充足を確認する

最適結果が制約に違反する場合:
  • ペナルティ値を増やす
  • パラメータ範囲を狭める
  • 制約が物理的に達成可能かどうかを確認する

結果を検証する

最適化後:
  • 最適パラメータでシミュレーションを実行して検証する
  • 結果が物理的に妥当かどうかを確認する
  • 製造公差を考慮する

反復的に改善する

最適化は多くの場合、反復的なプロセスです:
  1. 初期最適化を実行する
  2. 結果を確認して範囲を調整する
  3. パラメータや制約条件を追加/削除する
  4. 調整した設定で再実行する

トラブルシューティング

ソルバー障害時の部分的な解

ソルバーがシミュレーション中に数値エラー(例: 特定のパラメータの組み合わせによる不安定性)に遭遇した場合、クラッシュする代わりに、障害発生時点までの結果を含む部分的な解を返します。目的関数はこの部分的な時系列を直接使用し、シミュレーションの成功した部分からオプティマイザに実データを提供します。 部分的な解は、評価を完全に失うのではなく、シミュレーションの成功部分から意味のある勾配情報をオプティマイザが受け取るため、収束を改善します。

最適化が失敗する場合

  • パラメータの範囲が現実的かどうかを確認する
  • 実験の構文が有効かどうかを検証する
  • 制約条件が達成可能かどうかを確認する
  • モデルと実験の互換性を確認する

収束が悪い場合

  • 最大反復回数を増やす
  • パラメータ範囲を狭める
  • 目的関数を簡素化する
  • 競合する制約条件がないか確認する

結果に一貫性がない場合

  • マルチスタート数を増やす
  • 複数の局所最適解がないか確認する
  • 制約条件のペナルティを見直す

次のステップ