> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ionworks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# シミュレーション

> パラメータ化モデルでバッテリーシミュレーションを実行し、実験を設定して、スタディ内で結果を可視化する

**シミュレーション**は、[`パラメータ化モデル`](/ja/build/parameterized-models)を特定の入力と実験条件で実行した結果です。シミュレーションは Ionworks の中核であり、実験で測定した範囲を超えて[`セル仕様`](/ja/core-concepts/cells)の性能を探索することができます。

シミュレーションは常に[`スタディ`](/ja/simulate/studies)のコンテキスト内で作成・表示されます。

## 新しいシミュレーションの実行

スタディ内から新しいシミュレーションまたはシミュレーションスイープを実行できます。プロセスはシンプルなステップバイステップのワークフローに分かれています。

1. **セル仕様の選択：** まず、シミュレーションしたいセルを選択します。
2. **パラメータ化モデルの選択：** 次に、選択したセル用に作成されたパラメータ化モデルを選択します。パラメータ化モデルは、モデル（数学的フレームワーク）と特定のパラメータを組み合わせたものです。
3. **実験プロトコルの定義：** 以下のいずれかの方法で実験のプロトコルを提供します：
   * **既存のプロトコルから開始** — 検索可能なドロップダウンから保存済みプロトコルを選択
   * **貼り付けまたは入力** — エディタにプロトコルテキストを直接入力（UCP、Arbin、Maccor、Neware、BioLogic、Novonix、その他のサイクラー形式に対応）
   * **ファイルのアップロード** — サイクラーソフトウェアからプロトコルファイルをアップロード
   * **インタラクティブビルダー** — ビジュアルプロトコルビルダーを使ってステップごとにプロトコルを構築
4. **シミュレーションパラメータの設定：** 初期条件（SOC、温度）とプロトコル入力パラメータを設定します。プロトコルが `input["..."]` 式を使用している場合、これらは自動的に検出され、設定可能なフィールドとして表示されます。
5. **設計パラメータの設定（オプション）：** パラメータ化モデルのパラメータを変更して、性能への影響を探索することもできます（例：「Positive electrode thickness \[m]」）。詳細は以下の[設計パラメータ](#design-parameters)を参照してください。

<Note>
  **スイープの実行：** 実験パラメータまたは設計パラメータに対して、カンマ区切りで
  複数の値を入力できます（例：`1, 2, 5`）。Ionworks Studio は入力されたパラメータの
  すべての可能な組み合わせに対してシミュレーションを自動的に作成・実行します。
  UIには実行されるシミュレーションの総数が表示されます。
</Note>

<Info>
  時間と計算リソースを節約するため、Ionworks Studio は同一のシミュレーションが
  既に実行されていないかを自動的に確認します。既存の結果は再利用され、
  新しい結果は将来の使用のために保存されます。
</Info>

<a id="design-parameters" />

## 設計パラメータ

設計パラメータを使用すると、バッテリーモデル内の特定の値をオーバーライドして、セルの物理的・電気化学的特性の変更が性能にどのように影響するかを探索できます。デフォルトでは、シミュレーションはモデルで定義されたパラメータ値を使用します。設計パラメータを使用すると、モデル自体を変更せずにこれらの値を変更できます。

<Tip>
  モデルに定義されたカスタム変数もシミュレーション出力で利用可能です。
  詳細は[カスタム変数](/ja/build/custom-variables)を参照してください。
</Tip>

<Note>
  設計オーバーライドに使用可能なパラメータは、選択したモデルによって異なります。
  モデルで実際に使用されているスカラーパラメータのみが設計パラメータとして
  選択可能です。関数や補間テーブルとして定義されたパラメータは対象外です。
</Note>

### 設計パラメータの使用方法

シミュレーションをセットアップする際、「Design Parameters」セクションが表示され、以下の操作が可能です：

1. **パラメータの追加** - 「Add Design Parameters」をクリックして値のカスタマイズを開始
2. **変更するパラメータの選択** - モデルで使用可能なパラメータのリスト（ジオメトリ、電極特性、セパレータ特性など）から選択
3. **値の設定** - 各パラメータに使用する値を入力

### パラメータ入力方法

追加する各設計パラメータに対して、値の指定方法を選択できます：

#### Discrete

カンマ区切りで特定の値を入力します。テストしたい値が正確に分かっている場合に最も直接的な方法です。

**例：**

* `Negative electrode thickness [m]` に `50e-6, 75e-6, 100e-6` を入力
* これにより正確にこの3つの厚さがテストされます

#### Range

最小値、最大値、およびその間に生成する等間隔のポイント数を指定します。連続的な範囲を探索するのに便利です。

**例：**

* Min: `50e-6`, Max: `100e-6`, Count: `5`
* 自動的に生成される値: `50e-6, 62.5e-6, 75e-6, 87.5e-6, 100e-6`

#### Normal（統計的）

平均値（中心）、標準偏差（広がり）、およびポイント数を指定します。ポイントは正規分布パターン（平均値の前後2標準偏差）に従って分布されます。

**例：**

* Mean: `75e-6`, Std: `10e-6`, Count: `5`
* 中心付近により多くのサンプルを持つ、75ミクロン周辺にクラスタリングされた値が生成されます

### パラメータの組み合わせ

複数の設計パラメータを追加すると、すべての値の組み合わせに対してシミュレーションが実行されます。例えば：

* `Negative electrode thickness`: `50e-6, 75e-6, 100e-6`（3つの値）
* `Negative particle radius`: `3e-6, 5e-6`（2つの値）
* 合計シミュレーション数: **6**（3 x 2）

### 高度な機能：サンプリング方法

大規模なパラメータスイープでは、すべての組み合わせをテストする代わりに、異なるサンプリング方法を選択できます：

* **Grid**（デフォルト） - 指定した値のすべての組み合わせをテスト
* **Latin Hypercube Sampling (LHS)** - より少ないシミュレーションでパラメータ空間を効率的にサンプリング
* **Sobol** - 均一なカバレッジのための低食い違い列
* **Random** - 指定された範囲内でのランダムサンプリング

これらの方法は、多くのパラメータをスイープする際にシミュレーション数の爆発を避けるのに特に有用です。

### 設計パラメータなしの場合

設計パラメータを追加しない場合、シミュレーションは選択したモデルのデフォルト値を使用します。ほとんどのユースケースではこれで問題ありません。設計パラメータは、ベースラインモデルからのバリエーションを探索したい場合にのみ必要なオプション機能です。

## 結果の可視化と比較

シミュレーションが完了すると、スタディの結果ページに追加され、分析のための強力なツールが提供されます。

シミュレーション結果は「実験タイプ」ごとに整理されるため、同一の実験タイプ内で同種の結果を比較できます。例えば、定電流放電におけるC-rateが容量に与える影響を調査する場合などです。

2つのビューを切り替えることができます：

<a id="data-view" />

### データビュー

スタディ内のすべてのシミュレーション結果を含むテーブルです。各シミュレーションの入力と、計算された主要な要約メトリクスが含まれています。このビューを使用して結果をソートおよびフィルタリングし、特定の実行を見つけることができます。

組み込みの[実験テンプレート](/ja/simulate/experiment-templates)を使用してシミュレーションを実行すると、容量、エネルギー、抵抗、電極電位などのメトリクスが自動的に計算され、結果に含まれます。各テンプレートが提供するメトリクスの完全なリストについては、[実験テンプレートリファレンス](/ja/simulate/experiment-templates#template-metrics)を参照してください。

設計パラメータの列はデフォルトで表示されるため、異なるパラメータ値が結果にどのように影響するかをすばやく比較できます。実験パラメータとメトリクスの列はデフォルトでは非表示ですが、列の表示メニューから切り替えることができます。

### 可視化ビュー

シミュレーション結果を可視化および比較するためのカスタマイズ可能なダッシュボードです。

* **プロットの追加：** 「Add Plot」ボタンをクリックして、新しい可視化をダッシュボードに設定・追加します。「time series」（時間または容量に対する変数トレース全体）と「metrics」（単一値、例：「Capacity」vs「C-rate」）から選択できます。
* **カスタムレイアウト：** ダッシュボードに複数のプロットを追加して、異なるシミュレーションを比較したり、異なる変数を確認したりできます。プロットはドラッグ、ドロップ、リサイズして分析に最適なレイアウトを作成できます。
* **インタラクティブ操作：** プロットは完全にインタラクティブで、ズーム、パン、データポイントへのホバーで詳細を確認できます。同じスタディ内で実行した新しいシミュレーションは自動的にプロットに追加されます。

この柔軟な可視化ツールにより、特定の分析ニーズに合わせたシミュレーション結果の包括的なビューを構築できます。

## シミュレーションのキャンセル

シミュレーションがまだ **Pending** または **Processing** 状態であれば、実行中のシミュレーションをキャンセルできます。

1. データビューからシミュレーションを開く
2. 詳細ページの右上エリアにある **Cancel** ボタンをクリック
3. ダイアログでキャンセルを確認

確認すると、シミュレーションとその基盤となるジョブが **Canceled** ステータスに移行します。シミュレーションに関連する子ジョブもキャンセルされます。

<Warning>
  シミュレーションのキャンセルは元に戻せません。既に完了した作業は失われます。
  結果を得るにはシミュレーションを再実行できます。
</Warning>

シミュレーションリストから複数のシミュレーションを一度にキャンセルすることもできます。キャンセルしたいシミュレーションを選択し、**Cancel** 一括アクションを使用します。既に完了したシミュレーションは自動的にスキップされます。

## シミュレーションの再実行

データビューから1つまたは複数のシミュレーションを直接再実行できます。再実行したいシミュレーションを選択し、再実行アクションを使用します。シミュレーションを再実行すると、実験パラメータ、設計パラメータ、パラメータ化モデルを含むすべての元の設定が保持されるため、新しい実行はオリジナルと同じ条件を再現します。

これは以下の場合に便利です：

* 一時的な問題でシミュレーションが失敗し、再試行したい場合
* キャッシュされた結果をバイパスして、新しい実行を強制したい場合
* シミュレーションがキャンセルされ、再度実行したい場合

<Note>
  再実行アクションはデフォルトで強制再実行を使用します。これは、一致する
  キャッシュ結果が存在する場合でも、常に新しいシミュレーションジョブが
  送信されることを意味します。
</Note>

## トラブルシューティング

### シミュレーションがデータを生成しなかったのはなぜですか？

シミュレーションが正常に完了したにもかかわらず、時系列データが記録されないことがあります — プロットは空で、メトリクスも意味を持ちません。この場合、結果ページには以下のどのケースに該当したかを説明する警告が表示されます。理由は、ステップ表と、実行時の `Stop reason` / `Early termination reason` メトリクスから導出されます。

#### すべてのステップがスキップ — データが生成されなかった

> **All steps skipped — no data generated**
> Every step ended immediately because its termination condition was already satisfied before the simulation began.

これは、バッテリーの初期状態がプロトコル内のすべてのステップの終了条件を既に満たしている場合に発生します。例えば、既に完全に放電されたバッテリーを放電しようとした場合や、既に 100% SOC のバッテリーを充電しようとした場合です。

**一般的な原因と対処法：**

| 原因                                                                             | 対処法                                                            |
| ------------------------------------------------------------------------------ | -------------------------------------------------------------- |
| 既に放電済みのバッテリーを放電しようとしている                                                        | シミュレーションパラメータの **Initial SOC** 値を上げる                           |
| 既に満充電のバッテリーを充電しようとしている                                                         | **Initial SOC** 値を下げる                                          |
| C-rate または電流がセルに対して高すぎる — t=0 での瞬時電圧降下が即座に電圧カットオフをトリガーし、ステップ開始前に終了条件が既に満たされている | セルの容量に対して現実的な値にC-rate または電流を下げる（例：2 mAh のコインセルに 50 A の放電は非現実的） |
| 初期状態で電圧カットオフに既に到達している                                                          | シミュレーションが実行できるようにカットオフ電圧または初期条件を調整する                           |

#### プロトコルが早期終了 — データが生成されなかった

> **Protocol ended early — no data generated**
> A termination condition was met before any time series data was recorded.

最初のシミュレーションステップが時系列データを記録する前に、プロトコルがグローバル終了条件（例：*Total time ≥ 0 h*）に到達した場合に発生します。プロトコルに設定された終了条件を確認し、トリガーされた条件を緩和してください — 警告にはその説明が含まれます。

#### データが記録される前に Pause または End ステップに到達した

> **No data generated**
> The protocol reached a pause step before any step ran, so no time series data was recorded. Enable "Treat pause steps as 0-duration rest" to run through pauses.

プロトコルの制御フローが、充電・放電・休止ステップが実行される前に `Pause` または `End` ステップにジャンプした場合に発生します。シミュレーションは `Stop reason` に `Reached pause step` または `Reached end step` のいずれかを設定して終了するため、どちらの補助ステップで停止したかを判別できます。

対処法：

* **Pause ステップ：** **Treat pause steps as 0-duration rest** を有効にすると、Pause がプロトコルを停止させなくなります。このオプションを有効にすると、Pause は瞬時の Rest として動作し、プロトコルは次のステップに進みます。
* **End ステップ：** 最初の反復で End ステップにルーティングされた制御フロー条件を見直してください。

<Tip>
  何が問題だったか分からない場合は、結果ページの**実験プロトコル**パネルで
  解析されたステップとその終了条件を確認してください。
</Tip>

### プロトコル設定エラー

一部の失敗は、ソルバーの問題ではなくプロトコルの設定ミスによって引き起こされます。これらは「予期しないエラーが発生しました」という汎用的なメッセージではなく、具体的で実行可能なメッセージとして表示されます：

| メッセージ                                                                                     | 原因                                              | 対処法                                                        |
| ----------------------------------------------------------------------------------------- | ----------------------------------------------- | ---------------------------------------------------------- |
| **Maximum number of backward jumps (…) exceeded. Protocol may contain an infinite loop.** | `goto` が前のステップブロックに何度もジャンプし、許可されたジャンプ予算を超えています。 | ループに終了条件（サイクル数、容量しきい値など）を追加するか、最終的に前進するように制御フローを再構成してください。 |

## 次のステップ

* 組み込み実験テンプレートを含む[プロトコル](/ja/simulate/protocols)について学ぶ
* [最適化](/ja/optimize/overview)を探索して、最適なパラメータ値を自動的に見つける
