---
hide-toc: true
---
# Amplify SDK の全体像
機能の詳細に触れる前に、Amplify SDK の全体像と実行手順をまとめます。
Amplify SDK では以下の (1) から (6) までの 6 つのステップに従って組合せ最適化問題の定式化を行い最適化を実行します。
``````{grid} 1 1 2 2
:reverse: true
`````{grid-item}
:padding: 1 0 0 0
```{mermaid}
%%{init:{'theme':'neutral'}}%%
flowchart TB
node_1("VariableGenerator")
node_2("PolyArray")
node_3("Poly")
node_4("Constraint/ConstraintList")
node_5("Model")
node_6("Matrix")
node_7("Result")
node_8{{"solve(model, client)"}}
node_20("ClientA / ClientB / ...")
node_1 --> |"array()"| node_2
node_1 --> |"scalar()"| node_3
node_2 --> |"sum(),
(arithmetics)"| node_3
node_1 --> |"matrix()"| node_6
node_3 --> |"equal_to(),
less_equal(),
..."|node_4
node_3 --> node_5
node_4 --> node_5
node_6 --> node_5
node_5 --> node_8
node_20 ------> node_8
node_8 --> node_7
```
`````
`````{grid-item}
**(1) 決定変数の生成**
: 最初に決定変数を生成するジェネレータ ({py:class}`~amplify.VariableGenerator`) を作成します。
次に、変数ジェネレータから変数 ({py:class}`~amplify.Poly`) あるいは変数配列 ({py:class}`~amplify.PolyArray`) を生成します。
定式化したい問題が二次計画問題である場合は、二次計画問題の係数行列 ({py:class}`~amplify.Matrix`) を作ることもできます。
**(2) 目的関数の定義**
: 変数ジェネレータで生成した変数から目的関数を作成します。
多項式 ({py:class}`~amplify.Poly`) あるいは係数行列 ({py:class}`~amplify.Matrix`) の形式で定義できます。
**(3) 制約条件の定義**
: 制約条件を作成するための関数を用いて多項式から制約条件 ({py:class}`~amplify.Constraint`) を構築します。
複数の制約条件が必要である場合は、制約条件のリスト ({py:class}`~amplify.ConstraintList`) にまとめます。
**(4) 最適化モデルの作成**
: 作成した目的関数と制約条件から最適化モデル ({py:class}`~amplify.Model`) を作成します。
**(5) ソルバークライアントの作成**
: 実行するマシンまたはソルバーを指定し、ソルバークライアント (例: {py:class}`~amplify.FixstarsClient`) を作成します。
**(6) 最適化の実行**
: 最適化モデルとソルバークライアントを指定し、{py:class}`~amplify.solve` 関数を通じて最適化を実行します。
実行結果は {py:class}`~amplify.Result` として返され、最適解の値や最適解の変数の値を取得できます。
`````
``````
各ステップの詳細は以下のページで説明します。
`````{grid} 2
:gutter: 3
````{grid-item-card} 2. 決定変数の作り方
:link: variables
:link-type: doc
定式化の最初のステップとして決定変数の作り方について解説します。
```{div} sd-text-right
[Learn more »](variables.md)
```
````
````{grid-item-card} 3. 多項式と目的関数
:link: objective
:link-type: doc
目的の達成度を表す目的関数を表現する方法について解説します。
```{div} sd-text-right
[Learn more »](objective.md)
```
````
````{grid-item-card} 4. 制約条件の構築
:link: constraint
:link-type: doc
決定変数がとりうる範囲の制約の設定方法と多項式を用いた制約条件オブジェクトの構築を説明します。
```{div} sd-text-right
[Learn more »](constraint.md)
```
````
````{grid-item-card} 5. モデルの定式化
:link: clients
:link-type: doc
組合せ最適化問題の定式化をプログラムコード上で表現する方法について解説します
```{div} sd-text-right
[Learn more »](model.md)
```
````
````{grid-item-card} 6. ソルバークライアント
:link: clients
:link-type: doc
各ソルバーを抽象化したソルバークライアントの作成について解説します。
```{div} sd-text-right
[Learn more »](clients.md)
```
````
````{grid-item-card} 7. 組合せ最適化問題の求解
:link: solve
:link-type: doc
モデルとソルバークライアントを用いて組合せ最適化問題を求解する手順について解説します。
```{div} sd-text-right
[Learn more »](solve.md)
```
````
`````