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

# 最適化テンプレート

> セル設計および急速充電最適化向けに、パラメータ、目的関数、制約があらかじめ構成された Design・Charge テンプレートを提供します

# 最適化テンプレート

最適化テンプレートは、一般的な最適化シナリオに対して事前設定された出発点を提供します。各テンプレートは、特定のニーズに合わせてカスタマイズ可能なデフォルトのパラメータ、目的関数、実験、制約条件を定義しています。

<a id="template-types" />

## テンプレートタイプ

Ionworks Studio には 2 種類の最適化テンプレートがあります:

* **システムテンプレート** — Ionworks が提供する組み込みテンプレート（Design、Charge）。読み取り専用で、すべてのプロジェクトで利用可能です。
* **プロジェクトテンプレート** — 特定のプロジェクト内で作成するテンプレート。そのプロジェクトのメンバーのみに表示され、完全に編集・削除できます。

プロジェクトの最適化テンプレートページを開くと、システムテンプレートとプロジェクト固有のテンプレートの両方が表示されます。**Type** 列でテンプレートが "System" か "Project" かを確認できます。

## 利用可能なシステムテンプレート

### Design テンプレート

**Design** テンプレートは、バッテリーセルの最適な幾何学的パラメータや材料パラメータを見つけるセル設計最適化に最適化されています。

**デフォルト設定:**

* **目的関数:** 容量またはエネルギー密度の最大化
* **パラメータ:** 電極の厚さ、空隙率、粒子サイズ
* **制約条件:** 製造上の制限、安全性要件

**一般的なユースケース:**

* ターゲットアプリケーションに対する電極厚み比の最適化
* エネルギー密度と出力特性のバランス調整
* レート特性のための最適な粒子サイズの探索

### Charge テンプレート

**Charge** テンプレートは、安全性の制約条件を遵守しながら充電時間を最小化する最適な電流プロファイルを見つける充電プロトコル最適化向けに設計されています。

**デフォルト設定:**

* **目的関数:** 充電時間の最小化（0-100% または 0-80%）
* **パラメータ:** 各ステップの充電電流
* **制約条件:** アノード電位 > 0V（リチウム析出を回避するため）

**一般的なユースケース:**

* 多段定電流（MSCC）充電の最適化
* 急速充電プロトコルの設計
* 充電速度とバッテリー寿命のバランス調整

## テンプレートの構造

各最適化テンプレートは以下で構成されています:

### パラメータセクション

最適化するモデルパラメータを定義します:

```json theme={null}
{
  "parameters": {
    "I_charge_1": {
      "bounds": [-5.0, -0.5],
      "initial_value": -2.0
    },
    "I_charge_2": {
      "bounds": [-5.0, -0.5],
      "initial_value": -1.5
    }
  }
}
```

* **bounds**: パラメータの \[最小値, 最大値] 範囲
* **initial\_value**: 最適化の開始点

<Note>
  充電電流について、PyBaMM では**充電に負の値**を使用します（正の値
  \= 放電）。したがって、充電電流 -2.0 A は 2.0 A で充電することを意味します。
</Note>

### 目的関数セクション

実行する実験と最適化対象を定義します:

```json theme={null}
{
  "objectives": {
    "charge_objective": {
      "experiment": "...",
      "metrics": {
        "charge_time": {
          "action": "Minimize",
          "weight": 1.0,
          "metric": {
            "type": "Time",
            "variable": "Time [s]",
            "value": -1
          }
        }
      },
      "constraints": {
        "anode_potential": {
          "action": "GreaterThan",
          "penalty": 1000000,
          "metric": {
            "type": "Minimum",
            "variable": "Anode potential [V]"
          },
          "value": 0
        }
      }
    }
  }
}
```

### 実験の定義

実験は [UCP 形式](/ja/simulate/universal-cycler-protocol)で定義されます。テンプレートでは `Input["parameter_name"]` 構文を使用して最適化可能なパラメータを参照します:

```yaml theme={null}
- CC Charge Step 1:
    - Charge:
        mode: Current
        value: Input["I_charge_1"]
        ends:
          - "Voltage > 4.0"
- CC Charge Step 2:
    - Charge:
        mode: Current
        value: Input["I_charge_2"]
        ends:
          - "Voltage > 4.2"
- CV Hold:
    - Charge:
        mode: Voltage
        value: 4.2
        ends:
          - "C-rate < 0.05"
```

## カスタム変数

テンプレートでは**カスタム変数**を定義できます。これは、PyBaMM の式を使用してシミュレーション出力から計算される派生量です。モデル出力として直接利用できない量に基づいて最適化したい場合に便利です。

### カスタム変数の作成

カスタム変数は目的関数ごとに以下の内容で定義されます:

* **名前**: 変数の説明的な名前
* **式**: PyBaMM の式文字列

**式の例:**

```python theme={null}
# Specific energy (Wh/kg)
pybamm.Variable("Energy [Wh]") / pybamm.Parameter("Cell mass [kg]")

# Anode surface potential difference
pybamm.CoupledVariable("Negative electrode surface potential difference [V]")
```

<Tip>
  カスタム変数は、"Voltage \[V]" や "Current \[A]" などのモデル変数と
  並んで、ゴールや制約条件の変数ドロップダウンで利用可能になります。
</Tip>

## メトリクスタイプ

テンプレートでは、シミュレーション結果から値を抽出するためにさまざまなメトリクスタイプを使用します:

### 集約メトリクス

時系列から単一の値を計算します:

| タイプ            | 説明                 |
| -------------- | ------------------ |
| **Maximum**    | シミュレーション中の最大値      |
| **Minimum**    | シミュレーション中の最小値      |
| **Mean**       | 時間平均値              |
| **Sum**        | 累積合計               |
| **PointBased** | 変化しない値（例: セルプロパティ） |

### 交差メトリクス

特定のポイントで変数を評価します:

| タイプ         | 値フィールド        | 説明                                                |
| ----------- | ------------- | ------------------------------------------------- |
| **Time**    | 秒（スカラーまたはリスト） | 指定した時間での値（終了時は -1）。複数の時間を1回の評価で読み取るためのリストも受け付けます。 |
| **SOC**     | 0-1           | 指定した SOC に達した時の値                                  |
| **Voltage** | ボルト           | 指定した電圧に達した時の値                                     |

**例: SOC 80% に達するまでの時間**

```json theme={null}
{
  "type": "SOC",
  "variable": "Time [s]",
  "value": 0.8
}
```

**例: 複数の時間で電圧をサンプリング**

`Time` メトリクスに時間のリストを渡すと、1回の評価で各時点の変数値を読み取れます。メトリクスは時間ごとに1つの値を順番に返します。

```json theme={null}
{
  "type": "Time",
  "variable": "Voltage [V]",
  "value": [60, 300, 600, -1]
}
```

<Note>
  `Time` メトリクスのベクトル形式は、サイクル単位やステップ単位のサブソリューションを
  スライスする必要がない、連続的で実験を伴わないソルブを対象としています。
  `DesignObjective` 内では未サポートです。スカラーの `value` を使用するか、メトリクスを
  `StepwiseMetric` / `CyclewiseMetric` でラップして対象セグメントを指定してください。
</Note>

## テンプレートのカスタマイズ

テンプレートを選択すると、すべての値が事前入力されますが、完全に編集可能です:

1. **パラメータの変更** - パラメータの追加/削除、範囲の調整
2. **目的関数の編集** - 実験プロトコルの変更、ゴールの追加/削除
3. **制約条件の調整** - 制約のしきい値とペナルティの変更
4. **カスタム変数の追加** - 特定のニーズに合わせた派生量の作成
5. **アルゴリズムの設定** - マルチスタート数と最大反復回数の設定

<Info>
  テンプレートは出発点を提供するものです。特定のセル化学、フォームファクタ、
  最適化目標に合わせてカスタマイズすることをお勧めします。
</Info>

<a id="copying-templates-between-projects" />

## 最適化をテンプレートとして保存

最適化のパラメータ、目的関数、制約条件を再利用したい構成に調整し終えたら、最適化リストから直接、新しいプロジェクトテンプレートとして保存できます。フォームを手動で作り直す必要はありません。

最適化をテンプレートとして保存するには:

1. プロジェクトの**最適化**リストを開きます。
2. 再利用したい最適化の行の三点メニューをクリックします。
3. **テンプレートとして保存**を選択します。
4. ダイアログで**テンプレート名**(必須)と、任意で説明を入力します。
5. **テンプレートを保存**をクリックします。

Studio は新しいプロジェクトレベルのテンプレートを作成し、最適化の保存済み構成をそのままコピーして、テンプレートの詳細ページに遷移します。そこから名前変更や編集、テンプレートを使った新しい最適化の起動が行えます。

<Note>
  最適化の保存済み構成とテンプレートの `initial_form_data` は同じスキーマを共有
  しているため、`validate_against_experiment_steps` のような設定、反復メトリクス
  ラッパー、カスタム変数は完全に保持されます。テンプレートはフォーム表示から
  再導出されたものではなく、最適化が実際に実行した内容と一致したままになります。
</Note>

<Warning>
  テンプレート名はプロジェクト内で一意である必要があります。同じ名前のテンプレートが
  既に存在する場合、保存は失敗します。別の名前を選んで再試行してください。
</Warning>

テンプレートとして保存できるのは、ソースの最適化に有効な保存済み構成がある場合のみです。完全な構成がない状態で作成された最適化(例:部分的にインポートされたドラフト)はテンプレートに変換できません。先に有効な構成で最適化を再実行してください。

## プロジェクト間でのテンプレートのコピー

システムテンプレートを含む任意のテンプレートを、組織内の別のプロジェクトにコピーできます。これは、複数のプロジェクト間でテンプレート設定を再利用したい場合や、カスタマイズ可能なシステムテンプレートのプロジェクト固有バージョンを作成したい場合に便利です。

テンプレートをコピーするには:

1. プロジェクトの最適化テンプレートリストを開きます
2. コピーしたいテンプレートの三点メニューをクリックします
3. **Copy to project** を選択します
4. ダイアログからターゲットプロジェクトを選択します
5. **Copy** をクリックします

コピーされたテンプレートは、独立して編集可能な新しいプロジェクトテンプレートとしてターゲットプロジェクトに表示されます。

<Note>
  テンプレート名はプロジェクト内でユニークである必要があります。ターゲットプロジェクトに
  同じ名前のテンプレートが既に存在する場合、コピーは失敗します。まずターゲット
  プロジェクト内の競合するテンプレートの名前を変更して名前を空けてから、
  コピーを再試行してください。
</Note>

## テンプレートの権限

テンプレートの権限はプロジェクトレベルで管理されます:

| アクション     | 必要なプロジェクトロール                 |
| --------- | ---------------------------- |
| テンプレートの表示 | Viewer、Contributor、または Admin |
| テンプレートの作成 | Contributor または Admin        |
| テンプレートの編集 | Contributor または Admin        |
| テンプレートの削除 | Admin                        |

<Info>
  システムテンプレートはすべてのユーザーに対して読み取り専用です。
  システムテンプレートを変更するには、まずプロジェクトにコピーしてください。
  コピーは完全に編集可能なプロジェクトテンプレートになります。
</Info>

## 次のステップ

* [最適化の実行](/ja/optimize/running-optimization)ガイドでステップバイステップの手順を確認する
* [シミュレーションのドキュメント](/ja/simulate/simulations)で基盤となるシミュレーションプロセスを理解する
