> ## 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.

# プロトコルシミュレーションの実行と結果の取得

> パラメータ化モデルに対して単一のプロトコルシミュレーションまたは DOE バッチを送信し、完了を待って時系列・ステップ・メトリクスデータを取得します。

このクイックスタートでは**プロトコルシミュレーション**を実行します — [Universal Cycler Protocol](/ja/simulate/universal-cycler-protocol) を用意してモデルに対してシミュレーションし、必要に応じて実験計画法（DOE）としてパラメータをスイープします。スタディ内で（Studies ページのように）シミュレーションを実行するには、[スタディ内でのシミュレーション実行](/ja/quickstarts/run-in-study) を参照してください — 同じ呼び出しに `study_id` を渡すだけです。

<Note>
  先にインストールと認証を行います: `pip install ionworks-api` を実行し、`IONWORKS_API_KEY` と `IONWORKS_PROJECT_ID` を設定します。[Python API クライアント](/ja/api-client) ページを参照してください。
</Note>

```python theme={null}
from ionworks import Ionworks

client = Ionworks()

protocol = """
global:
  initial_soc: 1
  temperature: 25
steps:
  - Discharge:
      mode: C-rate
      value: 1
      ends:
        - "Voltage < 2.5"
"""

# --- 単一シミュレーション ---
# `parameterized_model` にはパラメータ化モデルの id、または
# {"capacity": 5.0, "chemistry": "NMC/Graphite"} のようなインラインのクイックモデルを渡します。
response = client.simulation.protocol({
    "parameterized_model": "your-parameterized-model-id",
    "protocol_experiment": {"protocol": protocol, "name": "1C discharge"},
})
result = client.simulation.wait_for_completion(response.simulation_id, timeout=120)

result = client.simulation.get_result(response.simulation_id)
print(result.time_series)   # DataFrame: 時間点ごとに 1 行
print(result.steps)         # DataFrame: プロトコルステップごとに 1 行
print(result.metrics)       # スカラーメトリクスの dict

# --- DOE バッチ: パラメータを複数の値でスイープ ---
responses = client.simulation.protocol_batch({
    "parameterized_model": "your-parameterized-model-id",
    "protocol_experiment": {"protocol": protocol, "name": "thickness sweep"},
    "design_parameters_doe": {
        "sampling": "grid",  # grid | random | latin_hypercube
        "rows": [
            {"type": "range", "name": "Positive electrode thickness [m]",
             "min": 50e-6, "max": 100e-6, "count": 5},
        ],
    },
})
client.simulation.wait_for_completion([r.simulation_id for r in responses], timeout=3600)
results = [client.simulation.get_result(r.simulation_id) for r in responses]
```

**ポイント**

* プロトコルは [Universal Cycler Protocol](/ja/simulate/universal-cycler-protocol)（UCP）YAML で、インラインまたは保存済みプロトコル id で渡します。すべての実行に `parameterized_model`（パラメータ化モデルの id またはインラインのクイックモデル）が必要です。
* **単一** = `client.simulation.protocol(...)`、**バッチ/DOE** = `client.simulation.protocol_batch(...)`。後者は `design_parameters_doe` ブロックの `rows` で、`sampling` 戦略のもとに名前付きパラメータをスイープします。
* `wait_for_completion(...)` は 1 つの id または id のリストを受け付けます。`get_result(id)` は `.time_series` と `.steps` のデータフレーム（`Step count` で結合可能）と `.metrics` の dict を返します。
* データフレームはデフォルトで [polars](/ja/api-client) です。pandas を使う場合はセッション開始時に `set_dataframe_backend("pandas")` を一度呼び出します。

## さらに詳しく

* [シミュレーション](/ja/simulate/simulations) と [スタディ](/ja/simulate/studies)
* [Universal Cycler Protocol](/ja/simulate/universal-cycler-protocol)
* [シミュレーション Python API](/ja/simulate/api)
