ブロックリファレンス

BLOCKS Reference

最適化

シフト最適化

概要

このブロックは、従業員のシフト管理を自動で最適化するための計画を作成します。これにより、最小の人数で必要な業務をカバーし、労働コストを削減できます。例えば、小売店や病院での看護師のシフト、コールセンターのオペレーター配置、製造業での作業者シフトなど、多種多様なシフト管理業務で活用できます。

従業員の勤務可能な時間、休暇希望、スキルレベル、必要な人員数といった制約条件を考慮しながら、コスト最小化に基づくシフト計画を自動的に作成します。これにより、人手では対応が困難な数十から数百の制約条件のもとでも、公平で最適化されたシフト配置が実現できます。

内部では、状況に応じて処理速度と精度を基準とした計算エンジン(専門的にはソルバーと呼ばれ、D-Wave、SQBM+、Amplify AEなどが該当)が自動的に選択されます。量子コンピューティング技術(量子アニーリングなど)を用いて従来手法の数十倍の速度で計算処理を行います。利用者は技術的な詳細を意識することなく、コスト最小化されたシフト計画のみが得られます。

プロパティ

プロパティ名 説明
ブロック名

フローの中で、このブロックを識別するための表示名を設定します。例えば、「看護師シフト最適化」、「コールセンター人員配置」など、分かりやすい名前を付けることで、フロー全体の可読性が向上します。

GCPサービスアカウント

最適化処理を実行するために、Google Cloud Platform(GCP)のサービスアカウントを選択します。処理に必要な権限を持つアカウントを設定してください。

データセット

BigQueryのデータセットを指定します。(必須)

このデータセットには、最適化計算に使用する入力データテーブルと、計算結果を保存する出力データテーブルが含まれます。

具体的には、従業員情報、グループ情報、勤務可能な時間、シフト要求などが格納されたテーブルをこのデータセット内で準備してください。

従業員データが保存されているテーブル

従業員に関する基本情報(ID、名前など)が格納されたテーブル名を指定します。(必須)

このテーブルには、「person_id(従業員ID)」、「person_name(従業員名)」のカラムが必要です。全てのシフト対象者をこのテーブルに登録します。

table_chart テーブルスキーマを表示 arrow_downward

グループ情報が保存されているテーブル

シフトグループ(勤務体制)に関する情報が格納されたテーブル名を指定します。(必須)

このテーブルには、「group_id(グループID)」、「group_name(グループ名)」のカラムが必要です。例えば、「日勤」「夜勤」「早番」「遅番」といった勤務体制を定義します。

table_chart テーブルスキーマを表示 arrow_downward

従業員の所属グループが保存されているテーブル

各従業員がどのグループ(勤務体制)に所属可能かを定義した関連情報が格納されたテーブル名を指定します。(必須)

このテーブルには、「person_id(従業員ID)」、「group_id(グループID)」、「point(ポイント)」のカラムが必要です。ポイントは、ポイント制約を使用する場合に設定します。

table_chart テーブルスキーマを表示 arrow_downward

アサイン計画が保存されているテーブル

各時間帯における必要人数(アサイン計画)が格納されたテーブル名を指定します。(必須)

このテーブルには、「group_id(グループID)」、「time_index(時間インデックス)」、「assignment(必要人数)」のカラムが必要です。特定の時間帯に、特定のグループで何人必要かを定義します。

table_chart テーブルスキーマを表示 arrow_downward

パラメータが保存されているテーブル

最適化計算の挙動や制約の強さを調整するためのパラメータが格納されたテーブル名を指定します。(必須)

このテーブルには、「assign_coeff(基本配置の係数)」、「assignable(出勤制約)」、「unassignable(休暇制約)」などの設定項目が含まれます。これらは、最適化の計算方法や結果の品質を調整するための重要な設定項目です。

table_chart テーブルスキーマを表示 arrow_downward

従業員のスケジュールが保存されているテーブル

従業員の勤務可能な時間や休暇希望などのスケジュール設定が格納されたテーブル名を指定します。

このテーブルには、「person_id(従業員ID)」、「group_id(グループID)」、「time_index(時間インデックス)」、「type(タイプ)」などのカラムが必要です。「type」には「assignable(出勤可能)」または「unassignable(休暇希望)」を設定します。

table_chart テーブルスキーマを表示 arrow_downward

タイムボックスの設定が保存されているテーブル

時間軸の階層構造(レイヤ)を定義したテーブル名を指定します。

このテーブルには、「layer_id(レイヤID)」、「time_index(時間インデックス)」、「time_title(時間タイトル)」などのカラムが必要です。例えば、月→週→日→時間帯といった階層構造を定義できます。

table_chart テーブルスキーマを表示 arrow_downward

アサイン許容数が保存されているテーブル

従業員の勤務時間の上限や連続勤務の制限などの制約条件が格納されたテーブル名を指定します。

このテーブルには、「person_id(従業員ID)」、「layer_id(レイヤID)」、「type(制約タイプ)」、「min」、「max」などのカラムが必要です。勤務時間の範囲制限や連続勤務の上限を設定できます。

table_chart テーブルスキーマを表示 arrow_downward

従業員の割当てコストが保存されているテーブル

従業員の時間帯別の勤務コストや従業員間の組み合わせコストが格納されたテーブル名を指定します。

このテーブルには、「person_id(従業員ID)」、「layer_id(レイヤID)」、「time_index(時間インデックス)」、「cost(コスト)」などのカラムが必要です。特定の時間帯での勤務コストを個別に設定できます。

table_chart テーブルスキーマを表示 arrow_downward

グループの割当てコストが保存されているテーブル

特定のグループでの従業員ごとの勤務コストが格納されたテーブル名を指定します。

このテーブルには、「group_id(グループID)」、「person_id(従業員ID)」、「layer_id(レイヤID)」、「time_index(時間インデックス)」、「cost(コスト)」のカラムが必要です。

table_chart テーブルスキーマを表示 arrow_downward

グループ間の割当てコストが保存されているテーブル

連続するグループ間での勤務切り替えコストが格納されたテーブル名を指定します。

このテーブルには、「person_id(従業員ID)」、「group_id(現在のグループID)」、「next_group_id(次のグループID)」、「cost(切り替えコスト)」のカラムが必要です。

table_chart テーブルスキーマを表示 arrow_downward

シフト最適化実行に関する情報を格納する変数

最適化処理を実行した際のジョブID(処理識別子)などを格納する変数名を指定します。(必須)

この変数には、実行結果に関する基本的な情報(ジョブIDなど)が格納され、後続の処理ブロックで参照できます。

実行に関する情報を格納するテーブル

最適化計算の実行に関する詳細な情報(メタデータ)を格納するテーブル名を指定します。

指定しない場合、これらのメタデータは保存されません。実行にかかった時間や計算の評価値(エネルギー値)など、処理の詳細情報を記録・分析したい場合に設定します。事前に作成する必要はなく、指定したテーブルがなければ、自動作成されます。既に存在する場合は、追加されます。

table_chart テーブルスキーマを表示 arrow_downward

実行結果を格納するテーブル

最適化計算の結果(具体的なシフト計画)を格納するテーブル名を指定します。

指定しない場合、計算結果は保存されません。最適化結果を保存し、他の処理ブロックから参照したり、後で分析したりする場合は必ず設定してください。事前に作成する必要はなく、指定したテーブルがなければ、自動作成されます。既に存在する場合は、追加されます。

table_chart テーブルスキーマを表示 arrow_downward

ジョブのラベル名

実行する最適化ジョブに付与するラベル名(識別名)を指定します。

複数の最適化処理を区別するために使用します。特に、複数のジョブを同時に実行する場合や、後で特定のジョブの結果を確認する際に役立ちます。

ブロックメモ

このブロックに関するメモを自由に記述できます。

フローの管理やメンテナンス時の情報共有に役立ちます。このメモの内容は、ブロックの実行には影響しません。

テーブルスキーマ

このブロックでは、従業員情報、グループ設定、時間制約など、多数の入力情報(テーブル形式)と、結果を格納する出力情報(テーブル形式)を使用します。それぞれのテーブルがどのような構造を持ち、どのようなデータを含める必要があるかを理解しておくことが重要です。

注:「必須」列の「✓」マークは、その項目が必須であることを示します。「*」付きのものは条件付き必須を示します(詳細は各テーブルの説明を参照)。

1. 従業員データが保存されているテーブル

シフト対象者の基本情報を定義するテーブルです。すべてのシフト管理対象となる従業員をこのテーブルに登録します。

JSONスキーマを表示
[
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "person_name", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員を一意に識別するためのID(例:emp_001nurse_A
person_name 文字列(STRING) 従業員の表示名(例:「田中太郎」、「山田花子」)。省略可能です。

従業員IDは他のすべてのテーブルで参照されるため、一意性を保つことが重要です。従業員名は表示用に使用され、シフト結果の確認時の分かりやすさを向上させるため設定することを推奨します。

settings プロパティとの関連を確認 arrow_upward

2. グループ情報が保存されているテーブル

シフトグループ(勤務体制やチーム)を定義するテーブルです。例えば、「日勤」「夜勤」「早番」「遅番」といった勤務パターンや、「看護師」「介護士」といった職種別グループを定義します。

JSONスキーマを表示
[
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "group_name", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
group_id 文字列(STRING) グループを一意に識別するためのID(例:day_shiftnight_shift
group_name 文字列(STRING) グループの表示名(例:「日勤」、「夜勤」)。省略可能です。

グループは勤務パターンや職種、チームなどを表現するために使用されます。各グループには必要人数や勤務時間などの制約を別途設定できます。

settings プロパティとの関連を確認 arrow_upward

3. 従業員の所属グループが保存されているテーブル

どの従業員がどのグループに所属可能かを定義する関連情報テーブルです。従業員とグループの「多対多」の関係を表現します。

JSONスキーマを表示
[
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "point", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID(上記「1. 従業員データが保存されているテーブル」の person_id と対応)
group_id 文字列(STRING) グループID(上記「2. グループ情報が保存されているテーブル」の group_id と対応)
point 整数(INTEGER) ポイント制約を使用する場合に設定する、Person-Groupの組み合わせに割当てられるポイント。省略可能です。

このテーブルにより、例えば「田中さんは日勤と夜勤の両方に配置可能」「山田さんは日勤のみ配置可能」といった制約を定義できます。1人の従業員が複数のグループに所属可能な場合は、複数の行で定義します。

settings プロパティとの関連を確認 arrow_upward

4. アサイン計画が保存されているテーブル

各時間帯における必要人数(アサイン計画)を定義するテーブルです。特定の時間帯に、特定のグループで何人必要かを設定します。

JSONスキーマを表示
[
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "assignment", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
group_id 文字列(STRING) グループID
time_index 整数(INTEGER) 時間インデックス
assignment 整数(INTEGER) 指定した時間インデックスに対して割り当てる人数

例えば、「日勤グループの9:00-17:00の時間帯に3人必要」といった要求を定義します。最適化エンジンは、この要求を満たすように従業員を配置します。

settings プロパティとの関連を確認 arrow_upward

5. パラメータが保存されているテーブル

最適化計算の挙動や制約の強さを調整するためのパラメータを定義するテーブルです。

JSONスキーマを表示
[
  { "name": "label", "type": "STRING", "mode": "NULLABLE" },
  { "name": "assign_coeff", "type": "FLOAT", "mode": "NULLABLE" },
  { "name": "not_assign_multi_set_per_time_coeff", "type": "FLOAT", "mode": "NULLABLE" },
  { "name": "assignable", "type": "RECORD", "mode": "NULLABLE", "fields": [
    { "name": "coeff", "type": "FLOAT", "mode": "NULLABLE" },
    { "name": "force", "type": "BOOLEAN", "mode": "NULLABLE" }
  ]},
  { "name": "unassignable", "type": "RECORD", "mode": "NULLABLE", "fields": [
    { "name": "coeff", "type": "FLOAT", "mode": "NULLABLE" },
    { "name": "force", "type": "BOOLEAN", "mode": "NULLABLE" }
  ]},
  { "name": "solver_options", "type": "RECORD", "mode": "NULLABLE", "fields": [
    { "name": "normalize", "type": "BOOLEAN", "mode": "NULLABLE" },
    { "name": "backend", "type": "STRING", "mode": "NULLABLE" },
    { "name": "fallback_solver", "type": "INTEGER", "mode": "NULLABLE" }
  ]}
]
カラム名 データ型 必須/条件付き 説明
label 文字列(STRING) 複数の同時実行の時のラベル。省略可能です。
assign_coeff 数値(FLOAT) 基本的な配置係数
not_assign_multi_set_per_time_coeff 数値(FLOAT) 同時間複数グループアサイン不可制約の係数
assignable.coeff 数値(FLOAT) ✓* 出勤制約の係数(force=trueの場合は無視される)
assignable.force 真偽値(BOOLEAN) ✓* 出勤設定を厳守する場合はtrue
unassignable.coeff 数値(FLOAT) ✓* 休暇制約の係数(force=trueの場合は無視される)
unassignable.force 真偽値(BOOLEAN) ✓* 休暇設定を厳守する場合はtrue
solver_options 複合型(RECORD) 計算エンジン固有の詳細設定。通常は設定不要です。

coeffパラメータについては、制約を使用しない場合はnull、自動設定の場合は0、指定値にする場合は0以外の値を設定します。

settings プロパティとの関連を確認 arrow_upward

6. 従業員のスケジュールが保存されているテーブル

従業員の勤務可能な時間や休暇希望などのスケジュール設定を定義するテーブルです。各従業員の出勤可能な日時や休暇希望の日時を細かく設定できます。

JSONスキーマを表示
[
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "type", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID
group_id 文字列(STRING) ✓* グループID。出勤設定(type=assignable)の場合は必須。休暇設定でグループを指定しない場合は省略可能。
time_index 整数(INTEGER) 時間インデックス(layer_3のtime_index値)
type 文字列(STRING) 設定タイプ。「assignable」(出勤可能)または「unassignable」(休暇希望)を指定。

「assignable」は従業員が出勤可能な時間帯を、「unassignable」は休暇を希望する時間帯を表します。同一の従業員・時間インデックスに対して複数のグループで「assignable」が設定されている場合、いずれか1つのグループに配置されます。

settings プロパティとの関連を確認 arrow_upward

7. タイムボックスの設定が保存されているテーブル

時間軸の階層構造(レイヤ)を定義するテーブルです。例えば、月→週→日→時間帯といった階層構造を設定できます。

JSONスキーマを表示
[
  { "name": "layer_id", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "layer_name", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "base_time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "time_title", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
layer_id 整数(INTEGER) レイヤID(0, 1, 2, 3をサポート)
layer_name 文字列(STRING) レイヤの名称(例:「週」「日」「時間帯」)。省略可能です。
base_time_index 整数(INTEGER) 最小単位(layer_3)のtime_index値
time_index 整数(INTEGER) 各レイヤでのtime_index値
time_title 文字列(STRING) 時間インデックスの説明(例:「2024-07-03」「9:00-17:00」)。省略可能です。

レイヤ構造により、「週単位での勤務時間の制限」「日単位での最大の勤務時間」といった階層的な制約を設定できます。layer_3が最も細かい時間単位となります。

settings プロパティとの関連を確認 arrow_upward

8. アサイン許容数が保存されているテーブル

従業員の勤務時間の上限や連続勤務の制限などの詳細な制約条件を定義するテーブルです。

JSONスキーマを表示
[
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "scope_id", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "layer_id", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "type", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "min", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "max", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "enable_zero", "type": "BOOLEAN", "mode": "NULLABLE", "description": "" },
  { "name": "specific", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "limit", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "target_point", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID
scope_id 整数(INTEGER) ✓* スコープID(連続勤務の上限制約の場合は不要)
layer_id 整数(INTEGER) レイヤID。連続勤務の上限制約では3を指定し、それ以外の制約(range, specific, ポイント)では0, 1, 2のいずれかを指定します。
time_index 整数(INTEGER) ✓* 時間インデックス(連続勤務の上限制約の場合は不要)
type 文字列(STRING) ✓* 制約タイプ。「range」または「specific」を指定します。連続勤務の上限制約、ポイント制約の場合は不要です。
min 整数(INTEGER) ✓* type=rangeの場合の最小値
max 整数(INTEGER) ✓* type=rangeの場合の最大値
enable_zero 真偽値(BOOLEAN) ✓* type=rangeの場合に0を許可するかどうか
specific 整数(INTEGER) ✓* type=specificの場合の固定値
limit 整数(INTEGER) ✓* 連続勤務の上限制約を使う場合の上限値
target_point 整数(INTEGER) ✓* ポイント制約を使う場合の目標ポイント数

このテーブルにより、「週40時間以内」「連続5日勤務禁止」「月間目標ポイント100点」といった多様な制約を設定できます。制約タイプに応じて必要な項目が変わります。

settings プロパティとの関連を確認 arrow_upward

9. 従業員の割当てコストが保存されているテーブル

従業員の時間帯別の勤務コストや従業員間の組み合わせコストを定義するテーブルです。コスト最適化を行う場合に使用します。

JSONスキーマを表示
[
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "layer_id", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "pair_person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "cost", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID
layer_id 整数(INTEGER) ✓* レイヤID(0~2)。従業員間コスト制約の場合は不要。
time_index 整数(INTEGER) ✓* 時間インデックス。従業員間コスト制約の場合は不要。
pair_person_id 文字列(STRING) ✓* 従業員間コスト制約を使う場合のペア従業員ID
cost 数値(FLOAT) コスト値

時間帯別の勤務コスト(深夜割増など)や、特定の従業員組み合わせでの追加コスト(経験者と新人のペアコストなど)を設定できます。

settings プロパティとの関連を確認 arrow_upward

10. グループの割当てコストが保存されているテーブル

特定のグループでの従業員ごとの勤務コストを定義するテーブルです。グループ固有のコスト体系を設定する場合に使用します。

JSONスキーマを表示
[
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "layer_id", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "cost", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
group_id 文字列(STRING) グループID
person_id 文字列(STRING) 従業員ID
layer_id 整数(INTEGER) レイヤID(0~2)
time_index 整数(INTEGER) 時間インデックス
cost 数値(FLOAT) グループ固有のコスト

使用する場合は、Belongsテーブルで定義したすべてのグループ-従業員のパターンのコストを設定してください。

settings プロパティとの関連を確認 arrow_upward

11. グループ間の割当てコストが保存されているテーブル

連続するグループ間での勤務切り替えコストを定義するテーブルです。シフト変更に伴う追加コストを考慮する場合に使用します。

JSONスキーマを表示
[
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "next_group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "cost", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID
group_id 文字列(STRING) 現在のグループID
next_group_id 文字列(STRING) 次のグループID
cost 数値(FLOAT) 切り替えコスト

例えば、「日勤から夜勤への切り替えには追加コストが発生する」といったルールを定義できます。このテーブルは、従業員ごと、または全従業員に共通で設定できます。

settings プロパティとの関連を確認 arrow_upward

12. 実行に関する情報を格納するテーブル

最適化処理の実行結果に関するメタデータを保存するテーブルです。処理のパフォーマンスや解の品質に関する詳細情報を記録します。

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": "density", "type": "FLOAT", "mode": "NULLABLE", "description": "" }
  ], "description": "" },
  { "name": "created_at", "type": "TIMESTAMP", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 必須 説明
job_id 文字列(STRING) 最適化処理を実行した際のジョブID
optimization_type 文字列(STRING) 実行された最適化のタイプ(この場合は"shift_all"
solutions 複合型(RECORD)、
繰り返し(REPEATED)
得られた解のリスト(複数の解とその評価値が含まれます)
solutions.solution_index 整数(INTEGER) 解のインデックス番号
solutions.energy 数値(FLOAT) 各解に対応する評価値(エネルギー値)
total_qubit_num 整数(INTEGER) 計算に使用された論理的な変数(qubit)の総数。問題の複雑さの目安となります。
qubo 複合型(RECORD) 最適化問題を数式で表現したQUBOモデルに関する情報。専門的な分析に用います。
qubo.maximum_coeff_ratio 数値(FLOAT) QUBOモデル内の係数の最大値と最小値の比率。解の精度に関わる指標です。
qubo.max 数値(FLOAT) QUBOモデル内の係数の最大値。
qubo.min 数値(FLOAT) QUBOモデル内の係数の最小値。
qubo.density 数値(FLOAT) QUBOモデル内でゼロではない係数の数の割合。
solver_type 整数(INTEGER) 実際に計算に使用された計算エンジン(ソルバー)の種類を示すコード。
created_at タイムスタンプ(TIMESTAMP) この実行データが作成された日時。

これらのメタデータを分析することで、最適化計算のパフォーマンスや結果の品質を客観的に評価できます。また、問題の定式化(従業員やシフト制約の与え方)が適切であったかどうかの判断材料にもなります。

settings プロパティの設定方法を確認 arrow_upward

13. 実行結果を格納するテーブル

最適化計算の実行後、生成される結果が格納されるテーブルです。どの従業員がどの時間帯のどのグループに配置されたかを記録します。

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": "person_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "person_name", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "holiday", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "group_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "group_name", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "time_title", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "assigned", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "created_at", "type": "TIMESTAMP", "mode": "NULLABLE", "description": "" }
]
カラム名 データ型 出力有無 説明
job_id 文字列(STRING) 必須 実行された最適化ジョブのID
energy 数値(FLOAT) 必須 計算結果の評価値(エネルギー値)。値が小さいほど、制約条件をよく満たした良い解であることを示します。
solution_index 整数(INTEGER) 必須 複数の解が得られた場合の、解のインデックス番号
person_index 整数(INTEGER) 必須 システム内部で使用される従業員のインデックス番号
person_id 文字列(STRING) 条件付き 従業員ID
person_name 文字列(STRING) 条件付き 従業員名
holiday 整数(INTEGER) 必須 休暇設定。休暇が設定されている場合は1、そうでなければ0。
group_index 整数(INTEGER) 必須 システム内部で使用されるグループのインデックス番号
group_id 文字列(STRING) 条件付き グループID。従業員がどのグループにも属していない場合はnull。
group_name 文字列(STRING) 条件付き グループ名
time_index 整数(INTEGER) 必須 layer_3の時間インデックス
time_title 文字列(STRING) 条件付き 時間インデックスに対応する説明
assigned 整数(INTEGER) 必須 グループにアサインされた結果。アサインされている場合は1、そうでなければ0。
created_at タイムスタンプ(TIMESTAMP) 必須 実行ジョブの作成時間

「エネルギー値(energy)」は、最適化計算の「良さ」を示す数値です。この値が小さいほど、設定した制約条件をより良く満たしている「良い解」であると解釈できます。assignedが1の行は実際にシフトに配置された従業員・時間・グループの組み合わせを表します。

settings プロパティとの関連を確認 arrow_upward

この情報は役に立ちましたか?