最適化
割当て最適化
概要
このブロックは、リソースからコンテナへの最適な割り当てを自動で計算する割り当て最適化ブロックです。配送車両への荷物の割り当て、作業から人への割り当て、設備からリソースの割り当てなど、様々なビンパッキング問題に対応できます。効率の向上やコスト削減を実現し、複雑な最適化計画を効率よく作成できます。
例えば配送領域では、配送場所(荷物)を複数の配送車両に最適振り分けし、車両の積載容量を最大限活用しつつ、配送コストを最小化した配送計画を作成します。作業分担では、作業項目を適切な人員に割り当てることで、スキルや稼働状況を考慮した効率的な業務計画を立案できます。また、カテゴリ別の制約や依存関係、同じコンテナへの割り当て制約など、実際のビジネスで必要な複雑な条件にも対応しています。
内部では、状況に応じて最適な計算エンジン(D-Wave、SQBM+、Amplify AEなど)が自動的に選択され、量子コンピューティング技術や先進的なアルゴリズムを用いて高速に最適化処理を行います。利用者は技術的な詳細を意識することなく、最適な割り当て計画のみが簡単に得られます。
プロパティ
プロパティ名 | 説明 |
---|---|
ブロック名 |
フローの中で、このブロックを識別するための表示名を設定します。例えば、「 |
GCPサービスアカウント |
最適化処理を実行するために、Google Cloud Platform(GCP)のサービスアカウントを選択します。処理に必要な権限を持つアカウントを設定してください。 |
データセット |
BigQueryのデータセットを指定します。(必須) このデータセットには、最適化計算に使用する入力データテーブルと、計算結果を保存する出力データテーブルが含まれます。 具体的には、配送場所の情報や配送車両の情報などが格納されたテーブルをこのデータセット内に準備してください。 |
配送場所データが保存されているテーブル |
配送場所(荷物)に関する情報が格納されたテーブル名を指定します。(必須) このテーブルには、「 |
配送車データが保存されているテーブル |
配送車両に関する情報が格納されたテーブル名を指定します。(必須) このテーブルには、「 |
配送場所、配送車の関連データが保存されているテーブル |
配送場所と配送車の関連情報が格納されたテーブル名を指定します。(必須) このテーブルには、「 |
カテゴリと配送場所の関連データが保存されているテーブル |
カテゴリと配送場所の関連情報が格納されたテーブル名を指定します。 カテゴリ別の制約を使用する場合に設定が必要です。このテーブルには、「 |
同じ配送車に割り当てたい関連データが保存されているテーブル |
同じサブカテゴリの配送場所を同じ配送車に割り当てたい場合の設定が格納されたテーブル名を指定します。 このテーブルには、「 |
同じ配送車に割り当てたくない関連データが保存されているテーブル |
異なるサブカテゴリの配送場所を同じ配送車に割り当てたくない場合の設定が格納されたテーブル名を指定します。 このテーブルには、「 |
配送場所の依存関係のデータが保存されているテーブル |
配送場所間の依存関係が格納されたテーブル名を指定します。 特定の配送場所を配送する前に、別の配送場所を先に配送する必要がある場合に使用します。このテーブルには、「 |
パラメータが保存されているテーブル |
最適化計算の挙動や優先順位を調整するためのパラメータが格納されたテーブル名を指定します。(必須) このテーブルには、「 |
結果を格納する変数 |
最適化処理の結果の概要情報を格納する変数名を指定します。 この変数には、実行結果に関する基本的な情報が格納され、後続の処理ブロックで参照できます。省略可能です。 |
割当て最適化実行に関する情報を格納する変数 |
最適化処理を実行した際のジョブID(処理識別子)などを格納する変数名を指定します。(必須) この変数には、実行結果に関する詳細な情報(ジョブIDなど)が格納され、後続の処理ブロックで参照できます。 |
実行に関する情報を格納するテーブル |
最適化計算の実行に関する詳細な情報(メタデータ)を格納するテーブル名を指定します。 指定しない場合、これらのメタデータは保存されません。実行にかかった時間や計算の評価値(エネルギー値)など、処理の詳細情報を記録・分析したい場合に設定します。事前に作成する必要はなく、指定したテーブルがなければ、自動作成されます。既に存在する場合は、追加されます。 |
実行結果を格納するテーブル |
最適化計算の結果(具体的な配送計画)を格納するテーブル名を指定します。 指定しない場合、計算結果は保存されません。最適化結果を保存し、他の処理ブロックから参照したり、後で分析したりする場合は必ず設定してください。事前に作成する必要はなく、指定したテーブルがなければ、自動作成されます。既に存在する場合は、追加されます。 |
ジョブのラベル名 |
実行する最適化ジョブに付与するラベル名(識別名)を指定します。 複数の最適化処理を区別するために使用します。特に、複数のジョブを同時に実行する場合や、後で特定のジョブの結果を確認する際に役立ちます。 |
ブロックメモ |
このブロックに関するメモを自由に記述できます。 フローの管理やメンテナンス時の情報共有に役立ちます。このメモの内容は、ブロックの実行には影響しません。 |
実行モード |
最適化処理の実行モードを選択します。
|
テーブルスキーマ
このブロックでは、複数の入力情報(テーブル形式)と、結果を格納する出力情報(テーブル形式)を使用します。それぞれのテーブルがどのような構造を持ち、どのようなデータを含める必要があるかを理解しておくことが重要です。
注:「必須」列の「✓」マークは、その項目が必須であることを示します。「*」付きのものは条件付き必須を示します(詳細は各テーブルの説明を参照)。
1. 配送場所データが保存されているテーブル
配送場所(荷物)の基本情報を定義するテーブルです。配送する荷物の場所や重量などを設定します。
JSONスキーマを表示
[
{ "name": "location_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "location_name", "type": "STRING", "mode": "NULLABLE", "description": ""},
{ "name": "latitude", "type": "FLOAT", "mode": "NULLABLE", "description": ""},
{ "name": "longitude", "type": "FLOAT", "mode": "NULLABLE", "description": ""},
{ "name": "baggage", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
location_id | 文字列(STRING) | ✓ | 配送場所を一意に識別するためのID(例:depot_001 、customer_A ) |
location_name | 文字列(STRING) | 配送場所の表示名(例:「営業所1 」、「顧客A 」)。省略可能です。 |
|
latitude | 数値(FLOAT) | * | 配送場所の緯度。距離制約(item_distance)を使用する場合は必須です。 |
longitude | 数値(FLOAT) | * | 配送場所の経度。距離制約(item_distance)を使用する場合は必須です。 |
baggage | 整数(INTEGER) | ✓ | 積み荷の量(例:重量、体積、個数など) |
group_id | 文字列(STRING) | * | グループID。同一コンテナへの割当制約や、同一グループコンテナに割り当てる荷物グループ数の最小化制約を使用する場合に必須です。 |
baggage
は、その配送場所における荷物の量を表します。配送車の容量制約に直接関わる重要な値です。
2. 配送車データが保存されているテーブル
配送車両の基本情報を定義するテーブルです。車両の積載容量やコストなどを設定します。
JSONスキーマを表示
[
{ "name": "container_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "container_name", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "capacity", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "cost", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "sequence_no", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
container_id | 文字列(STRING) | ✓ | 配送車を一意に識別するためのID(例:truck_001 、vehicle_A ) |
container_name | 文字列(STRING) | 配送車の表示名(例:「トラック1号 」、「車両A 」)。省略可能です。 |
|
capacity | 整数(INTEGER) | * | 積載可能量(最大容量)。assign_all_item.type = 'capacity' または assign_item_weight_to_container_capacity 制約を使用する場合は必須です。 |
cost | 数値(FLOAT) | * | 積載コスト(車両を使用する際のコスト)。container_priority.type = 'uniform' 制約を使用する場合は必須です。 |
group_id | 文字列(STRING) | * | グループID。同一グループコンテナに割り当てる荷物グループ数の最小化制約を使用する場合は必須です。 |
sequence_no | 整数(INTEGER) | * | 配送車の順序。順序制約を使用する場合は必須です。 |
capacity
は配送車の最大積載量を、cost
は車両使用時のコストを表します。コストが小さいほど優先的に使用されます。
3. 配送場所、配送車の関連データが保存されているテーブル
配送場所と配送車の関連情報を定義するテーブルです。どの配送場所がどの配送車に割り当て可能かを設定します。
JSONスキーマを表示
[
{ "name": "location_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "container_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "cost", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "enabled", "type": "BOOLEAN", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
location_id | 文字列(STRING) | ✓ | 配送場所ID(上記「1. 配送場所データが保存されているテーブル」のlocation_id と対応) |
container_id | 文字列(STRING) | ✓ | 配送車ID(上記「2. 配送車データが保存されているテーブル」のcontainer_id と対応) |
cost | 数値(FLOAT) | ✓ | 関連のコスト(この配送場所をこの配送車に割り当てる際のコスト)。container_priority.type = 'by_item' を設定した場合に使用されます。 |
enabled | 真偽値(BOOLEAN) | ✓ | この関連を有効にするかのフラグ(true: 割り当て可能、false: 割り当て不可) |
このテーブルは、配送場所と配送車の間の関連性を表現します。enabled
がfalseの場合、その配送場所はその配送車に割り当てられません。
4. カテゴリと配送場所の関連データが保存されているテーブル
カテゴリ分類と配送場所の関連情報を定義するテーブルです。配送場所をカテゴリ別に分類して制約を適用する場合に使用します。
JSONスキーマを表示
[
{ "name": "category_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "category_sub_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "location_id", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
category_id | 文字列(STRING) | ✓ | カテゴリを表すID(例:food 、electronics ) |
category_sub_id | 文字列(STRING) | ✓ | 同一カテゴリID内における、各配送場所が属するサブカテゴリのID(例:frozen 、fresh ) |
location_id | 文字列(STRING) | ✓ | 配送場所ID(上記「1. 配送場所データが保存されているテーブル」のlocation_id と対応) |
このテーブルは、配送場所を階層的にカテゴリ分類するために使用します。例えば、食品カテゴリ内の冷凍品サブカテゴリなど。
5. 同じ配送車に割り当てたい関連データが保存されているテーブル
同じサブカテゴリの配送場所を同じ配送車に割り当てるための設定テーブルです。
JSONスキーマを表示
[
{ "name": "category_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "category_sub_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "weight", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
category_id | 文字列(STRING) | ✓ | カテゴリを表すID |
category_sub_id | 文字列(STRING) | ✓ | サブカテゴリを表すID |
weight | 数値(FLOAT) | ✓ | 重み(大きいほど同じサブカテゴリの配送場所が同じ配送車に割り当てられやすくなる) |
weight
の値が大きいほど、同じサブカテゴリに属する配送場所を同じ配送車に割り当てようとする力が強くなります。
6. 同じ配送車に割り当てたくない関連データが保存されているテーブル
異なるサブカテゴリの配送場所を同じ配送車に割り当てないための設定テーブルです。
JSONスキーマを表示
[
{ "name": "category_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "category_sub_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "pair_category_sub_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "weight", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
category_id | 文字列(STRING) | ✓ | カテゴリを表すID |
category_sub_id | 文字列(STRING) | ✓ | 分離したいサブカテゴリID |
pair_category_sub_id | 文字列(STRING) | ✓ | category_sub_idと分離したい別のサブカテゴリID |
weight | 数値(FLOAT) | * | 重み(大きいほど異なるサブカテゴリが同じ配送車に割り当てられにくくなる)。assign_specified_category_item_to_different_container で制約型を指定した場合はnull可 |
このテーブルは、特定のサブカテゴリ同士を同じ配送車に載せたくない場合(例:冷凍品と常温品を分ける)に使用します。
7. 配送場所の依存関係のデータが保存されているテーブル
配送場所間の依存関係を定義するテーブルです。特定の配送場所を配送する前に、別の配送場所を先に配送する必要がある場合に使用します。
JSONスキーマを表示
[
{ "name": "location_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "previous_location_id", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
location_id | 文字列(STRING) | ✓ | 配送場所ID |
previous_location_id | 文字列(STRING) | ✓ | 先に配送する必要がある配送場所のID |
このテーブルは、配送順序に制約がある場合に使用します。例えば、倉庫から商品を取得してから顧客に配送する場合など。
8. パラメータが保存されているテーブル
最適化計算の挙動をより細かく制御するためのパラメータを設定するテーブルです。
JSONスキーマを表示
[
{"name":"label","type":"STRING","mode":"NULLABLE"},
{ "name": "assign_all_item", "type": "RECORD", "mode": "NULLABLE", "description": "", "fields": [
{ "name": "type", "type": "STRING", "mode": "NULLABLE" },
{ "name": "coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "constraint_type", "type": "STRING", "mode": "NULLABLE" }
]
},
{ "name": "container_capacity_limit", "type": "RECORD", "mode": "NULLABLE", "description": "", "fields": [
{ "name": "one_hot_connect_detail_coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "equal_connect_detail_and_detail_coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "exclusive_detail_and_connect_detail_coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "equal_base_and_detail_connect_coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "one_or_zero_detail_coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "constraint_type", "type": "STRING", "mode": "NULLABLE" }
]},
{ "name": "container_priority", "type": "RECORD", "mode": "NULLABLE", "description": "", "fields": [
{ "name": "coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "type", "type": "STRING", "mode": "NULLABLE" }
]},
{ "name": "item_distance", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "minimize_containers_by_item", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "assign_item_weight_to_container_capacity", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "assign_equally_item_weight_to_container", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "assign_all_items_to_container_or_none", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "assign_same_group_item_to_same_container", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "minimize_item_group_num_by_container_group", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "assign_same_category_item_to_same_container", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "assign_specified_category_item_to_different_container", "type": "RECORD", "mode": "NULLABLE", "description": "", "fields": [
{ "name": "coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "constraint_type", "type": "STRING", "mode": "NULLABLE" }
] },
{ "name": "assign_item_by_container_sequence", "type": "RECORD", "mode": "NULLABLE", "description": "", "fields": [
{ "name": "coeff", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "constraint_type", "type": "STRING", "mode": "NULLABLE" }
]},
{"name":"solver_options","type":"RECORD","mode":"NULLABLE",
"fields":[
{ "name": "normalize", "type": "BOOLEAN", "mode": "NULLABLE" },
{ "name": "backend", "type": "STRING", "mode": "NULLABLE" },
{ "name": "max_search_trial", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "search_order", "type": "STRING", "mode": "NULLABLE" },
{"name": "dwave", "type": "RECORD", "mode": "NULLABLE", "fields": [
{ "name": "params_type", "type": "STRING", "mode": "NULLABLE" },
{ "name": "params_version", "type": "STRING", "mode": "NULLABLE" },
{ "name": "params_time_limit", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "info_qubit_info", "type": "STRING", "mode": "NULLABLE" },
{ "name": "info_timing", "type": "STRING", "mode": "NULLABLE" },
{ "name": "info_debug_level", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "info_response", "type": "STRING", "mode": "NULLABLE" }
]},
{ "name": "sbm", "type": "RECORD", "mode": "NULLABLE", "fields": [
{ "name": "params_type", "type": "STRING", "mode": "NULLABLE" },
{ "name": "params_version", "type": "STRING", "mode": "NULLABLE" },
{ "name": "params_algo", "type": "STRING", "mode": "NULLABLE" },
{ "name": "params_steps", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_loops", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_timeout", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_maxwait", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_maxout", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_target", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "params_dt", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_C", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_iter", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_alpha", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "params_timeoutx", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "info_qubit_info", "type": "STRING", "mode": "NULLABLE" },
{ "name": "info_response", "type": "STRING", "mode": "NULLABLE" },
{ "name": "info_timing", "type": "STRING", "mode": "NULLABLE" },
{ "name": "info_exec", "type": "STRING", "mode": "NULLABLE" }
]},
{ "name": "amplify", "type": "RECORD", "mode": "NULLABLE", "fields": [
{ "name": "params_time_limit", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_num_gpus", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_num_outputs", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "params_penalty_calibration", "type": "BOOLEAN", "mode": "NULLABLE" },
{ "name": "info_response", "type": "STRING", "mode": "NULLABLE" },
{ "name": "info_timing", "type": "STRING", "mode": "NULLABLE" },
{ "name": "info_exec", "type": "STRING", "mode": "NULLABLE" }
]}
]
},
{"name":"amplify_token","type":"STRING","mode":"NULLABLE"}
]
パラメータについては下記のように設定することで制約を制御できます。
- 制約を使用しない: null(BigQueryに登録する時にカラムを登録しない)
- 制約のパラメータ自動設定: 0
- 制約のパラメータを指定値にする: 0以外の値
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
label | 文字列(STRING) | 複数の最適化処理を実行する際のジョブラベル(識別名)。省略可能です。 | |
assign_all_item | 複合型(RECORD) | 全ての荷物を配送車に割り当てる制約。省略可能です。 | |
assign_all_item.type | 文字列(STRING) | ✓* | 制約のタイプ。「capacity 」(容量制約)または「simple 」(単純制約)を指定 |
assign_all_item.coeff | 数値(FLOAT) | ✓* | 制約の強さ(重み係数)。値が大きいほど、全荷物を割り当てようとする傾向が強まります。 |
assign_all_item.constraint_type | 文字列(STRING) | 制約の実装タイプ。「constrained 」(制約型)または「penalty 」(ペナルティ型、デフォルト) |
|
container_priority | 複合型(RECORD) | 配送車の優先度制約。コストが少ない配送車を優先的に使用します。 | |
container_priority.coeff | 数値(FLOAT) | ✓* | 制約の強さ(重み係数) |
container_priority.type | 文字列(STRING) | ✓* | コスト計算タイプ。「uniform 」(配送車のコストを使用)または「by_item 」(関連テーブルのコストを使用) |
item_distance | 数値(FLOAT) | 距離制約。近い配送場所を同じ配送車に割り当てる制約です。省略可能です。 | |
minimize_containers_by_item | 数値(FLOAT) | 荷物ごとの配送車数を最小化する制約。省略可能です。 | |
assign_item_weight_to_container_capacity | 数値(FLOAT) | 荷物の量を考慮して配送車の容量を超えないようにする制約。省略可能です。 | |
assign_equally_item_weight_to_container | 数値(FLOAT) | 各配送車に荷物を均等に割り当てる制約。省略可能です。 | |
assign_all_items_to_container_or_none | 数値(FLOAT) | 全ての荷物を配送車に割り当てるか、割り当てないかの制約。省略可能です。 | |
assign_same_group_item_to_same_container | 数値(FLOAT) | 同一グループの荷物を同じ配送車に割り当てる制約。省略可能です。 | |
minimize_item_group_num_by_container_group | 数値(FLOAT) | 同一グループの荷物を同じ配送車に割り当てる最小化制約。省略可能です。 | |
assign_same_category_item_to_same_container | 数値(FLOAT) | 同一カテゴリの荷物を同じ配送車に割り当てる制約。省略可能です。 | |
assign_specified_category_item_to_different_container | 複合型(RECORD) | 特定カテゴリの荷物を異なる配送車に割り当てる制約。省略可能です。 | |
assign_item_by_container_sequence | 複合型(RECORD) | 配送車の順序(sequence_no)に基づいて荷物を割り当てる制約。省略可能です。 | |
solver_options | 複合型(RECORD) |
使用する計算エンジン(ソルバー)固有の詳細な設定。通常は設定不要です。省略可能です。 主な設定項目。
|
|
amplify_token | 文字列(STRING) | * | Amplify AEソルバーを使用する場合に必須の認証トークン。省略可能です。 |
container_capacity_limit | 複合型(RECORD) | 配送車の容量に関する詳細な制約。省略可能です。 |
* assign_all_item
や container_priority
の設定項目は、それぞれの親項目を定義する場合に必須となります。
各パラメータの値は、一般的に以下のように設定します。
- 制約を使用しない場合: そのカラム自体をテーブルに含めない(
null
扱い) - 自動パラメータ設定を利用する場合:
0
を設定 - 特定の値を指定する場合:
0
以外の数値を設定
9. 実行に関する情報を格納するテーブル
最適化処理の実行結果に関するメタデータを保存するテーブルです。処理のパフォーマンスや解の品質に関する詳細情報を記録します。
JSONスキーマを表示
[
{ "name": "job_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "optimization_type", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "solver_type", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "solutions", "type": "RECORD", "mode": "REPEATED", "fields": [
{ "name": "solution_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "energy", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
], "description": "" },
{ "name": "total_qubit_num", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "qubo", "type": "RECORD", "mode": "NULLABLE", "fields": [
{ "name": "maximum_coeff_ratio", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "max", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "min", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "max_positive", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "min_positive", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "max_negative", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "min_negative", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "nonzero_num", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "density", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
], "description": "" },
{ "name": "problem", "type": "RECORD", "mode": "REPEATED", "fields":[
{ "name": "id", "type": "STRING", "mode": "NULLABLE" },
{ "name": "qpu_sampling_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_anneal_time_per_sample", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_readout_time_per_sample", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_access_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_access_overhead_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_programming_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_delay_time_per_sample", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "total_post_processing_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "post_processing_overhead_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "charge_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "run_time", "type": "INTEGER", "mode": "NULLABLE" }
], "description": "" },
{ "name": "solver_response", "type": "RECORD", "mode": "REPEATED", "fields":[
{ "name": "id", "type": "STRING", "mode": "NULLABLE" },
{ "name": "qpu_sampling_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_anneal_time_per_sample", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_readout_time_per_sample", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_access_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_access_overhead_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_programming_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "qpu_delay_time_per_sample", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "total_post_processing_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "post_processing_overhead_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "charge_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "run_time", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "calculation_time", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "wait_time", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "num_runs", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "message", "type": "STRING", "mode": "NULLABLE" }
], "description": "" },
{ "name": "constraints", "type": "RECORD", "mode": "REPEATED", "fields":[
{ "name": "solution_index", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "name", "type": "STRING", "mode": "NULLABLE" },
{ "name": "energy", "type": "FLOAT", "mode": "NULLABLE" },
{ "name": "coeff", "type": "STRING", "mode": "NULLABLE" }
], "description": "" },
{ "name": "created_at", "type": "TIMESTAMP", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須 | 説明 |
---|---|---|---|
job_id | 文字列(STRING) | ✓ | 最適化処理を実行した際のジョブID |
optimization_type | 文字列(STRING) | ✓ | 実行された最適化のタイプ(この場合は"binpacking" ) |
solutions | 複合型(RECORD)、 繰り返し(REPEATED) |
得られた解のリスト(複数の解とその評価値が含まれます) | |
solutions.solution_index | 整数(INTEGER) | ✓ | 解のインデックス番号 |
solutions.energy | 数値(FLOAT) | ✓ | 各解に対応する評価値(エネルギー値) |
total_qubit_num | 整数(INTEGER) | 計算に使用された論理的な変数(qubit)の総数。問題の複雑さの目安となります。 | |
qubo | 複合型(RECORD) | 最適化問題を数式で表現したQUBO(Quadratic Unconstrained Binary Optimization)モデルに関する情報。専門的な分析に用います。 | |
qubo.maximum_coeff_ratio | 数値(FLOAT) | QUBOモデル内の係数の最大値と最小値の比率。解の精度に関わる指標です。 | |
qubo.max | 数値(FLOAT) | QUBOモデル内の係数の最大値。 | |
qubo.min | 数値(FLOAT) | QUBOモデル内の係数の最小値。 | |
qubo.nonzero_num | 整数(INTEGER) | QUBOモデル内でゼロではない係数の数。 | |
qubo.density | 数値(FLOAT) | QUBOモデル内でゼロではない係数の数の割合。 | |
solver_type | 整数(INTEGER) | ✓ | 実際に計算に使用された計算エンジン(ソルバー)の種類を示すコード。 |
solver_response | 複合型(RECORD)、 繰り返し(REPEATED) |
計算エンジンからの応答データ。専門的な分析に用います。 | |
constraints | 複合型(RECORD)、 繰り返し(REPEATED) |
設定された各制約条件がどの程度満たされたかなどの詳細情報。 | |
created_at | タイムスタンプ(TIMESTAMP) | ✓ | この実行データが作成された日時。 |
このテーブルから得られる情報の中で、特に注目すべき点をいくつか紹介します。
total_qubit_num
: これは、最適化問題を解くために内部的に使用された変数(論理qubit)の数を示します。この数値が大きいほど、問題が複雑であることを意味します。qubo.maximum_coeff_ratio
:QUBOモデルにおける係数の最大値と最小値(絶対値)の比率です。一般的に、この値が小さい(例えば、103~105程度)ほど、計算精度が良くなり、解が安定する傾向があります。qubo.density
:QUBOモデルの密度、つまりゼロではない係数の割合を示します。この値が大きい(密な問題である)ほど、一般的に計算精度が出にくく、計算時間が増加する傾向があります。solver_type
:どの種類の計算エンジン(ソルバー)が使用されたかを示します。- 1:D-Wave社の量子コンピュータ(dwave)
- 2:シミュレーテッドバイナリマシン(SQBM+) - 古典コンピュータ上のシミュレーション
- 3:SQBM+(パラメータ自動調整タイプ)
- 4:SQBM+(QP)
- 5:D-Wave社の制約付き量子モデル(dwave_CQM)
- 6:FDA
- 7:Amplify社の提供する計算エンジン(amplify)
これらのメタデータを分析することで、最適化計算のパフォーマンスや結果の品質を客観的に評価できます。また、問題の定式化(配送場所や車両、制約の与え方)が適切であったかどうかの判断材料にもなり、設定の調整や改善する際に役立ちます。
10. 実行結果を格納するテーブル
最適化計算の実行後に生成される結果が格納されるテーブルです。具体的に、どの配送場所がどの配送車に割り当てられたかが記録されます。
JSONスキーマを表示
[
{ "name": "job_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "energy", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "solution_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "locations", "type": "RECORD", "mode": "REPEATED", "fields": [
{ "name": "location_id", "type": "STRING", "mode": "NULLABLE" },
{ "name": "location_index", "type": "INTEGER", "mode": "NULLABLE" },
{ "name": "lat", "type": "FLOAT", "mode": "NULLABLE", "description": "latitude" },
{ "name": "lng", "type": "FLOAT", "mode": "NULLABLE", "description": "longitude" },
{ "name": "baggage", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
], "description": "" },
{ "name": "container_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "container_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 出力有無 | 説明 |
---|---|---|---|
job_id | 文字列(STRING) | 必須 | 実行された最適化ジョブのID |
energy | 数値(FLOAT) | 必須 | 計算結果の評価値(エネルギー値)。値が小さいほど、制約条件をよく満たした良い解であることを示します。 |
solution_index | 整数(INTEGER) | 必須 | 複数の解が得られた場合の、解のインデックス番号 |
locations | 複合型(RECORD)、 繰り返し(REPEATED) |
必須 | 配送車が訪問する配送場所のリスト(複数の場所情報が含まれます) |
locations.location_id | 文字列(STRING) | 条件付き | 割り当てられた配送場所のID |
locations.location_index | 整数(INTEGER) | 必須 | システム内部で使用される配送場所のインデックス番号 |
locations.lat | 数値(FLOAT) | 必須 | 配送場所の緯度 |
locations.lng | 数値(FLOAT) | 必須 | 配送場所の経度 |
locations.baggage | 整数(INTEGER) | 必須 | その配送場所の積み荷量 |
container_id | 文字列(STRING) | 条件付き | 配送場所が割り当てられた配送車のID |
container_index | 整数(INTEGER) | 必須 | システム内部で使用される配送車のインデックス番号 |
「エネルギー値(energy
)」は、最適化計算の「良さ」を示す数値です。この値が小さいほど、設定した制約条件をより良く満たしている「良い解」であると解釈できます。