最適化
工程最適化(複数実行)【ベータ版】
MAGELLAN BLOCKSのお問い合わせ機能からお願いします。
このブロックはベータ版です。機能改善や不具合などの情報提供は、概要
このブロックは、製造業や物流業などにおける工程の実行順序と、各工程に割り当てるリソース(機械、作業者など)を複数パターンで同時に最適化します。これにより、異なる条件や制約下での最適化結果を一度に比較検討でき、従来の手動計画と比較して処理時間を短縮し、最適解の精度を向上できます。例えば、複数の製品を複数の機械で加工する際の工程順序、作業者のタスク割り当て、配送ルートの時間調整など、様々な場面で活用できます。
「工程最適化(複数実行)」では、ジョブ(作業の単位)、オペレーション(各ジョブに含まれる個別の工程)、リソース(機械や作業者)の関係を定義し、複数の設定パターンを一括で実行できます。これにより、異なるパラメータ設定での最適化結果を効率的に比較し、最も適した条件を選択できます。
内部では、状況に応じて最適な計算エンジン(専門的にはソルバーと呼ばれ、D-Wave、SQBM+、Amplify AEなどが該当)が自動選択されます。量子コンピューティング技術(量子アニーリングなど)をはじめとする先進技術を用いて高速に計算処理を行います。利用者は技術的な詳細を意識することなく、複数の最適なスケジュール結果が簡単に得られます。
プロパティ
プロパティ名 | 説明 |
---|---|
ブロック名 |
フローの中で、このブロックを識別するための表示名を設定します。例えば、「 |
GCPサービスアカウント |
最適化処理を実行するために、Google Cloud Platform(GCP)のサービスアカウントを選択します。処理に必要な権限を持つアカウントを設定してください。 |
データセット |
BigQueryのデータセットを指定します。(必須) このデータセットには、最適化計算に使用する入力データテーブルと、計算結果を保存する出力データテーブルが含まれます。 具体的には、ジョブ、オペレーション、リソース、複数実行用の設定テーブルなどの情報が格納されたテーブルをこのデータセット内に準備してください。 |
入力テーブル群を指定するテーブル |
複数実行のパラメータ設定と、各実行で使用するテーブル群の情報が格納されたテーブル名を指定します。(必須) このテーブルには、各実行に必要な入力テーブル(ジョブ、オペレーション、リソース、設定など)の名前と、実行ラベルが含まれます。複数の行を設定することで、異なるパラメータや入力データでの最適化を同時に実行できます。 |
最適化実行に関する情報を格納する変数 |
複数の最適化処理を実行した際のジョブID(処理識別子)などを格納する変数名を指定します。(必須) この変数には、各実行結果に関する基本的な情報(ジョブIDなど)が配列形式で格納され、後続の処理ブロックで参照できます。複数実行の場合、各実行の結果情報がまとめて格納されます。 |
ブロックメモ |
このブロックに関するメモを自由に記述できます。 フローの管理やメンテナンス時の情報共有に役立ちます。このメモの内容は、ブロックの実行には影響しません。 |
テーブルスキーマ
このブロックでは、複数実行用の設定テーブルと、各実行に必要な入力テーブル群を使用します。それぞれのテーブルがどのような構造を持ち、どのようなデータを含める必要があるかを理解しておくことが重要です。
注:「必須」列の「✓」マークは、その項目が必須であることを示します。「*」付きのものは条件付き必須を示します(詳細は各テーブルの説明を参照)。
1. 入力テーブル群を指定するテーブル
複数実行のためのパラメータ設定テーブルです。各行が1つの実行パターンを表し、実行ラベルと使用するテーブル群を定義します。
JSONスキーマを表示
[
{"name":"execution_label","mode":"NULLABLE","description":"label for this parameter","type":"STRING"},
{"name":"jobs","mode":"NULLABLE","description":"jobs master table","type":"STRING"},
{"name":"operations","mode":"NULLABLE","description":"operations master table","type":"STRING"},
{"name":"resources","mode":"NULLABLE","description":"resources master table","type":"STRING"},
{"name":"operation_orders","mode":"NULLABLE","description":"operation orders table","type":"STRING"},
{"name":"operation_times","mode":"NULLABLE","description":"operation times table","type":"STRING"},
{"name":"resource_assigns","mode":"NULLABLE","description":"resource assigns table","type":"STRING"},
{"name":"config","mode":"NULLABLE","description":"config table","type":"STRING"},
{"name":"result","mode":"NULLABLE","description":"result table","type":"STRING"},
{"name":"result_job","mode":"NULLABLE","description":"result job table","type":"STRING"}
]
複数の実行パターンを設定する場合は、このテーブルに複数の行を追加します。各行には異なるテーブル名や実行ラベルを設定でき、これにより異なる条件での最適化を並行して実行できます。
2. ジョブテーブル(jobs)
作業(ジョブ)の基本情報を定義するテーブルです。ジョブとは、複数のオペレーション(工程)をまとめた作業の単位を指します。
JSONスキーマを表示
[
{ "name": "job_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "job_name", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
job_id | 文字列(STRING) | ✓ | ジョブを一意に識別するためのID(例:job_001 、product_A ) |
job_name | 文字列(STRING) | ジョブの表示名(例:「製品A製造 」、「注文B処理 」)。省略可能です。 |
ジョブは、製品の製造や注文の処理など、複数の工程を含む作業の単位です。例えば、「製品Aの製造」というジョブには、「材料準備」、「加工」、「検査」、「梱包」などの複数のオペレーションが含まれます。
3. オペレーションテーブル(operations)
個別の工程(オペレーション)の基本情報を定義するテーブルです。
JSONスキーマを表示
[
{ "name": "operation_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "operation_name", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "delivery_time", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
operation_id | 文字列(STRING) | ✓ | オペレーションを一意に識別するためのID(例:op_001 、cutting ) |
operation_name | 文字列(STRING) | オペレーションの表示名(例:「材料切断 」、「品質検査 」)。省略可能です。 |
|
delivery_time | 整数(INTEGER) | オペレーションを完了すべき時刻(納期)。スケジューリング開始時刻からの経過時間で指定します。省略可能です。 |
delivery_time
は、スケジューリング全体の開始時刻を基準とした相対時刻で設定します。例えば、開始時刻が12:00で、あるオペレーションの納期が14:00の場合、delivery_time
は120(分)となります。
4. リソーステーブル(resources)
機械や作業者などのリソース情報を定義するテーブルです。
JSONスキーマを表示
[
{ "name": "resource_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "resource_name", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
resource_id | 文字列(STRING) | ✓ | リソースを一意に識別するためのID(例:machine_01 、worker_A ) |
resource_name | 文字列(STRING) | リソースの表示名(例:「加工機械1号 」、「作業者A 」)。省略可能です。 |
リソースには、機械、作業者、設備、車両など、オペレーションの実行に必要なあらゆる資源が含まれます。
5. オペレーション順序テーブル(operation_orders)
ジョブ内でのオペレーションの実行順序を定義するテーブルです。
JSONスキーマを表示
[
{ "name": "job_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "operation_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "operation_order", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
job_id | 文字列(STRING) | ✓ | ジョブID(上記「2. ジョブテーブル」のjob_id と対応) |
operation_id | 文字列(STRING) | ✓ | オペレーションID(上記「3. オペレーションテーブル」のoperation_id と対応) |
operation_order | 整数(INTEGER) | ✓ | ジョブ内でのオペレーションの実行順序。値が小さいほど先に実行されます。 |
このテーブルで、各ジョブにどのオペレーションが含まれ、どの順序で実行すべきかを定義します。例えば、製品製造ジョブでは「材料準備(order=1)」→「加工(order=2)」→「検査(order=3)」といった順序を設定します。
6. オペレーション時間テーブル(operation_times)
各オペレーションがどのリソースを使用し、どの程度の時間がかかるかを定義するテーブルです。
JSONスキーマを表示
[
{ "name": "operation_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "resource_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "cost_time", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
operation_id | 文字列(STRING) | ✓ | オペレーションID(上記「3. オペレーションテーブル」のoperation_id と対応) |
resource_id | 文字列(STRING) | ✓ | リソースID(上記「4. リソーステーブル」のresource_id と対応) |
cost_time | 整数(INTEGER) | ✓ | オペレーションの処理時間(0以上の整数) |
このテーブルで、どのオペレーションがどのリソースを使用し、どの程度の時間がかかるかを定義します。同一のオペレーションが複数のリソースで実行可能な場合は、複数の行で設定できます。
7. リソース割り当て制限テーブル(resource_assigns)
リソースの使用時間に関する制限を定義するテーブルです(省略可能)。
JSONスキーマを表示
[
{"name":"resource_id","type":"STRING","mode":"NULLABLE","description":""},
{"name":"start_time","type":"INTEGER","mode":"NULLABLE","description":""},
{"name":"end_time","type":"INTEGER","mode":"NULLABLE","description":""},
{"name":"assign_type","type":"STRING","mode":"NULLABLE","description":""}
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
resource_id | 文字列(STRING) | ✓ | リソースID(上記「4. リソーステーブル」のresource_id と対応) |
start_time | 整数(INTEGER) | ✓ | 制限対象の時間帯の開始時刻 |
end_time | 整数(INTEGER) | ✓ | 制限対象の時間帯の終了時刻 |
assign_type | 文字列(STRING) | 制限の種類。現在は「unavailable 」(使用不可)のみサポート |
このテーブルで、特定の時間帯にリソースが使用できない期間(メンテナンス時間、休憩時間など)を定義できます。例えば、start_time=2, end_time=5
の場合、時刻2、3、4、5の連続する期間が使用不可となります。
8. 設定テーブル(config)
最適化計算のパラメータを定義するテーブルです。
JSONスキーマを表示
[
{"name":"label","type":"STRING","mode":"NULLABLE","description":""},
{"name":"time","type":"RECORD","mode":"NULLABLE",
"fields":[
{ "name": "limit", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "step", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
], "description": "" },
{ "name": "operation_order", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "operation_consistency", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "resource_single_operation", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{"name":"resource_unavailable","type":"RECORD","mode":"NULLABLE",
"fields":[
{ "name": "coeff", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "force", "type": "BOOLEAN", "mode": "NULLABLE", "description": "" }
], "description": "" },
{ "name": "cost_time", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "delivery_time", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "resource_job_count", "type": "FLOAT", "mode": "NULLABLE", "description": "" },
{ "name": "table_integrity", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
label | 文字列(STRING) | 複数の同時実行時にラベルに付加される識別子。省略可能です。 | |
time | 複合型(RECORD) | ✓ | 時間に関する設定 |
time.limit | 整数(INTEGER) | スケジューリングの時間制限 | |
time.step | 整数(INTEGER) | 時間の刻み幅 | |
operation_order | 数値(FLOAT) | 作業順序の制約の重み係数 | |
operation_consistency | 数値(FLOAT) | 作業一貫性の制約の重み係数 | |
resource_single_operation | 数値(FLOAT) | リソースの非並列制約の重み係数 | |
resource_unavailable | 複合型(RECORD) | リソースの使用不可に関する制約 | |
resource_unavailable.coeff | 数値(FLOAT) | ✓* | 使用不可の制約の重み係数 |
resource_unavailable.force | 真偽値(BOOLEAN) | ✓* | 使用不可の制約を強制するかどうか(true: 強制、false: ベストエフォート) |
cost_time | 数値(FLOAT) | 処理時間の最小化制約の重み係数 | |
delivery_time | 数値(FLOAT) | 納期誤差の最小化制約の重み係数 | |
resource_job_count | 数値(FLOAT) | リソースごとの使用先ジョブ数の最小化制約の重み係数 | |
table_integrity | 数値(FLOAT) | テーブルの整合性制約の重み係数 |
* resource_unavailable
の設定項目(coeff, force)は、resource_unavailable
自体を定義する場合に必須となります。
各重み係数は、最適化の優先度を調整するために使用します。値が大きいほど、その制約を重視した最適化を実行します。
9. 実行結果テーブル
最適化計算の実行後に生成される結果が格納されるテーブルです。具体的に、どのリソースがどのオペレーションをいつ実行するかが記録されます。
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": "jobshop_job_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "operation_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "resource_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "start_time", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "cost_time", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "delivery_time", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
{ "name": "created_at", "type": "TIMESTAMP", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 出力有無 | 説明 |
---|---|---|---|
job_id | 文字列(STRING) | 必須 | 実行された最適化ジョブのID |
energy | 数値(FLOAT) | 必須 | 計算結果の評価値(エネルギー値)。値が小さいほど、制約条件をよく満たした良い解であることを示します。 |
solution_index | 整数(INTEGER) | 必須 | 複数の解が得られた場合の、解のインデックス番号 |
jobshop_job_id | 文字列(STRING) | 必須 | 最適化対象のジョブID |
operation_id | 文字列(STRING) | 必須 | 実行されるオペレーションID |
resource_id | 文字列(STRING) | 必須 | オペレーションを実行するリソースID |
start_time | 整数(INTEGER) | 必須 | オペレーションの開始時刻 |
cost_time | 整数(INTEGER) | 必須 | オペレーションの処理時間 |
delivery_time | 整数(INTEGER) | 任意 | オペレーションの完了時刻(納期)。オペレーションテーブルで納期が設定されている場合に出力されます。 |
created_at | タイムスタンプ(TIMESTAMP) | 必須 | 実行ジョブの作成時間 |
「エネルギー値(energy
)」は、最適化計算の「良さ」を示す数値です。この値が小さいほど、設定した制約条件をより良く満たしている「良い解」であると解釈できます。複数実行の場合、異なるパラメータ設定での結果を比較する際の指標として活用できます。
10. 実行メタデータテーブル(result_job / Result Meta)
最適化実行時に生成されるメタデータを保存するテーブルです(省略可能)。最適化結果そのものではなく、ソルバー情報、QUBO詳細、制約評価などの実行に関する詳細な技術情報を格納します。
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": "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) | 必須 | 最適化実行時のJob ID |
optimization_type | 文字列(STRING) | 必須 | 最適化のタイプ(shift_all, binpacking, jobshop, strict_allocation, ising など) |
solver_type | 整数(INTEGER) | 必須 | 実行されたsolverの種別(1: dwave, 2: SQBM+, 3: SQBM+_autoising, 4: SQBM+_QP, 5: dwave_CQM, 6: FDA, 7: amplify, 8: Gurobi) |
solutions | 複合型(RECORD) | 任意 | 解の情報配列。各解のsolution_index(解のインデックス)とenergy(エネルギー値)を含む |
total_qubit_num | 整数(INTEGER) | 任意 | 使用された全Qubit数 |
qubo | 複合型(RECORD) | 任意 | QUBO(Quadratic Unconstrained Binary Optimization)の詳細情報。係数の最大値・最小値、密度などの統計情報 |
solver_response | 複合型(RECORD) | 任意 | ソルバーからの応答情報配列。量子処理時間、計算時間、待機時間、実行回数、メッセージなどの詳細な実行情報 |
constraints | 複合型(RECORD) | 任意 | 制約情報の配列。各制約の名前、エネルギー、係数の評価結果 |
created_at | タイムスタンプ(TIMESTAMP) | 必須 | メタデータレコードの作成時間 |
このテーブルは、最適化の実行結果ではなく、実行プロセスの詳細な技術情報を格納します。量子アニーリングやその他のソルバーの実行統計、QUBO問題の特性、制約評価などの情報が含まれ、最適化処理のパフォーマンス分析やデバッグに活用できます。