1. Amplify SDK の全体像

機能の詳細に触れる前に、Amplify SDK の全体像と実行手順をまとめます。

Amplify SDK では以下の (1) から (6) までの 6 つのステップに従って組合せ最適化問題の定式化を行い最適化を実行します。

        %%{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(),<br>(arithmetics)"| node_3
  node_1 --> |"matrix()"| node_6
  node_3 --> |"equal_to(),<br>less_equal(),<br>..."|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
    
(1) 決定変数の生成

最初に決定変数を生成するジェネレータ (VariableGenerator) を作成します。 次に、変数ジェネレータから変数 (Poly) あるいは変数配列 (PolyArray) を生成します。 定式化したい問題が二次計画問題である場合は、二次計画問題の係数行列 (Matrix) を作ることもできます。

(2) 目的関数の定義

変数ジェネレータで生成した変数から目的関数を作成します。 多項式 (Poly) あるいは係数行列 (Matrix) の形式で定義できます。

(3) 制約条件の定義

制約条件を作成するための関数を用いて多項式から制約条件 (Constraint) を構築します。 複数の制約条件が必要である場合は、制約条件のリスト (ConstraintList) にまとめます。

(4) 最適化モデルの作成

作成した目的関数と制約条件から最適化モデル (Model) を作成します。

(5) ソルバークライアントの作成

実行するマシンまたはソルバーを指定し、ソルバークライアント (例: FixstarsClient) を作成します。

(6) 最適化の実行

最適化モデルとソルバークライアントを指定し、solve 関数を通じて最適化を実行します。 実行結果は Result として返され、最適解の値や最適解の変数の値を取得できます。

各ステップの詳細は以下のページで説明します。

2. 決定変数の作り方

定式化の最初のステップとして決定変数の作り方について解説します。

決定変数の作り方
3. 多項式と目的関数

目的の達成度を表す目的関数を表現する方法について解説します。

多項式と目的関数
4. 制約条件の構築

決定変数がとりうる範囲の制約の設定方法と多項式を用いた制約条件オブジェクトの構築を説明します。

制約条件の構築
5. モデルの定式化

組合せ最適化問題の定式化をプログラムコード上で表現する方法について解説します

ソルバークライアント
6. ソルバークライアント

各ソルバーを抽象化したソルバークライアントの作成について解説します。

ソルバークライアント
7. 組合せ最適化問題の求解

モデルとソルバークライアントを用いて組合せ最適化問題を求解する手順について解説します。

組合せ最適化問題の求解