ブロックリファレンス

BLOCKS Reference

最適化

シフト最適化(複数実行)

概要

このブロックは、人員のシフト管理を複数のパラメータセットで同時に最適化し、最適な人員の配置計画を効率的に比較・検討することを可能にします。例えば、病院の看護師シフト、コールセンターのオペレーター配置、工場の作業員シフトなど、様々な業界での複雑な人員配置の課題に対応できます。

「複数実行タイプ」では、異なる重み付けや制約条件を設定した複数のシナリオを並列実行し、それぞれの結果を比較することで、現実的なビジネス要件に最も適した配置パターンを選択できます。これにより、「コスト最優先」「出勤の希望最優先」「公平性重視」など、様々な方針での最適化結果を一度に得ることができます。

内部では、レイヤー構造(時間の粒度別階層)とスコープ(最適化の対象範囲)を用いて問題を構造化し、量子コンピューティング技術(量子アニーリングなど)をはじめとする先進技術を活用して高速に計算処理を行います。利用者は複雑な技術的詳細を意識することなく、実用的なシフト計画のみが得られます。

プロパティ

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

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

GCPサービスアカウント

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

入力テーブル群を指定するデータセット

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

このデータセットには、シフト最適化計算に使用する複数の入力データテーブル(人員マスタ、グループマスタ、所属関係、制約条件など)と、複数実行用のパラメータテーブル、計算結果を保存する出力データテーブルが含まれます。

入力テーブル群を指定するテーブル

複数実行のパラメータと、各実行で使用する入力テーブル群の情報が格納されたテーブル名を指定します。(必須)

このテーブルには、実行ラベル(execution_label)、人員マスタテーブル(persons)、グループマスタテーブル(groups)、所属関係テーブル(belongs)などの基本的なカラムが必要です。さらに、割当て計画テーブル(assigns)、係数テーブル(coefficients)、結果格納テーブル(result)などのカラムも含まれます。

行ごとに異なるパラメータセットで最適化ジョブが生成されます。

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

結果を格納する変数

最適化処理を実行した際の複数ジョブ全体の情報を格納する変数名を指定します。(必須)

この変数には、各実行のジョブIDや処理状況に関する情報が格納され、後続の処理ブロックで参照できます。具体的には、実行されたジョブのリストと各ジョブの基本的な情報が含まれます。

ブロックメモ

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

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

テーブルスキーマ

このブロックでは、複数実行のパラメータを含む1つの入力情報(テーブル形式)と、各実行で使用される複数の入力テーブル、結果を格納する出力情報(テーブル形式)を使用します。それぞれのテーブルがどのような構造を持ち、どのようなデータを含める必要があるかを理解しておくことが重要です。

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

1. 入力テーブル群を指定するテーブル(複数実行パラメータ)

複数実行のパラメータと、各実行で使用するテーブル群を指定するテーブルです。このテーブルの各行が、それぞれ独立したシフト最適化ジョブとして実行されます。

JSONスキーマを表示
[
  {"name":"execution_label","mode":"NULLABLE","description":"label for this parameter","type":"STRING"},
  {"name":"persons","mode":"NULLABLE","description":"persons master table","type":"STRING"},
  {"name":"groups","mode":"NULLABLE","description":"groups master table","type":"STRING"},
  {"name":"belongs","mode":"NULLABLE","description":"person group relations table","type":"STRING"},
  {"name":"work_types","mode":"NULLABLE","description":"persons work types table","type":"STRING"},
  {"name":"time_indices","mode":"NULLABLE","description":"layer time index table","type":"STRING"},
  {"name":"assigns","mode":"NULLABLE","description":"assigns table","type":"STRING"},
  {"name":"assign_limitations","mode":"NULLABLE","description":"assign limitation table","type":"STRING"},
  {"name":"person_costs","mode":"NULLABLE","description":"person costs table","type":"STRING"},
  {"name":"group_costs","mode":"NULLABLE","description":"group costs table","type":"STRING"},
  {"name":"group_relations","mode":"NULLABLE","description":"group costs table","type":"STRING"},
  {"name":"coefficients","mode":"NULLABLE","description":"coefficient table","type":"STRING"},
  {"name":"result","mode":"NULLABLE","description":"result table","type":"STRING"},
  {"name":"result_job","mode":"NULLABLE","description":"result job table","type":"STRING"}
]

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

カラム名 データ型 必須/条件付き 説明
execution_label 文字列(STRING) 実行時のジョブラベル。複数の同時実行時に各ジョブを識別するために使用されます。
persons 文字列(STRING) 人員マスタテーブルのテーブル名(table_chart 人員マスタ arrow_downward を参照)
groups 文字列(STRING) グループマスタテーブルのテーブル名(table_chart グループマスタ arrow_downward を参照)
belongs 文字列(STRING) 所属関係テーブルのテーブル名(table_chart 所属関係 arrow_downward を参照)
work_types 文字列(STRING) 従業員スケジュール設定テーブルのテーブル名(table_chart 従業員スケジュール設定 arrow_downward を参照)
time_indices 文字列(STRING) タイムボックス設定テーブルのテーブル名(table_chart タイムボックス設定 arrow_downward を参照)
assigns 文字列(STRING) アサイン計画テーブルのテーブル名(table_chart アサイン計画 arrow_downward を参照)
assign_limitations 文字列(STRING) アサイン許容数設定テーブルのテーブル名(table_chart アサイン許容数設定 arrow_downward を参照)
person_costs 文字列(STRING) 従業員コスト設定テーブルのテーブル名(table_chart 従業員コスト設定 arrow_downward を参照)
group_costs 文字列(STRING) グループコスト設定テーブルのテーブル名(table_chart グループコスト設定 arrow_downward を参照)
group_relations 文字列(STRING) グループ関連の割当てコスト設定テーブルのテーブル名(table_chart グループ関連コスト設定 arrow_downward を参照)
coefficients 文字列(STRING) パラメータ設定テーブルのテーブル名(table_chart パラメータ設定 arrow_downward を参照)
result 文字列(STRING) 実行結果を格納するテーブル名(table_chart 実行結果 arrow_downward を参照)。事前に作成する必要はなく、指定したテーブルが存在しない場合は自動で作成されます。既に存在する場合は、結果が追加されます。
result_job 文字列(STRING) 実行に関する情報を格納するテーブル名(table_chart 実行情報 arrow_downward を参照)。事前に作成する必要はなく、指定したテーブルが存在しない場合は自動で作成されます。既に存在する場合は、結果が追加されます。

このテーブルの各行が、1つの独立した最適化ジョブを表します。係数テーブル(coefficients)に複数のレコードがある場合は、それらも別々のジョブとして実行されるため、合計のジョブ数は「このテーブルの行数 × 係数テーブルの行数」となります。

2. 人員マスタ(Persons)

シフト対象となる従業員の基本情報を定義するテーブルです。

JSONスキーマを表示
[
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "person_name", "type": "STRING", "mode": "NULLABLE", "description": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員を一意に識別するためのID(例:EMP001nurse_tanaka
person_name 文字列(STRING) 従業員の表示名(例:「田中太郎」、「看護師_田中」)。省略可能です。
3. グループマスタ(Groups)

アサイン対象となるグループ(配置先)の基本情報を定義するテーブルです。例えば、病院であれば「ICU」「外来」「救急」、工場であれば「製造ライン1」「検査部門」「出荷部門」などのグループを定義します。

JSONスキーマを表示
[
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "group_name", "type": "STRING", "mode": "NULLABLE", "description": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
group_id 文字列(STRING) グループを一意に識別するためのID(例:ICULINE_A
group_name 文字列(STRING) グループの表示名(例:「集中治療室」、「製造ラインA」)。省略可能です。
4. 所属関係(Belongs)

どの従業員がどのグループに所属できるか(配置可能か)を定義するテーブルです。ポイント制約を使用する場合は、人員とグループの組み合わせに対するポイント値も設定できます。

JSONスキーマを表示
[
  { "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "point", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID(人員マスタのperson_idと対応)
group_id 文字列(STRING) グループID(グループマスタのgroup_idと対応)
point 整数(INTEGER) * ポイント制約を使用する場合に必須。その人員とグループの組み合わせに割り当てられるポイント値

このテーブルに登録されていない人員とグループの組み合わせは、配置不可能として扱われます。すべての従業員をすべてのグループに配置可能とする場合は、全ての組み合わせのレコードを作成してください。

5. 従業員スケジュール設定(Work Types)

従業員の出勤・休暇スケジュールを定義するテーブルです。特定の時間に特定のグループで出勤可能(assignable)か、または休暇(unassignable)かを設定できます。

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": "time_title", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "type", "type": "STRING", "mode": "NULLABLE", "description": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID
group_id 文字列(STRING) * グループID。出勤時は必須、休暇時は指定しない場合は全グループが対象
time_index 整数(INTEGER) 時間インデックス(layer_3のtime_index値)
time_title 文字列(STRING) 時間インデックスの説明(例:「2024-07-04-09:00」)
type 文字列(STRING) assignable」(出勤可能)または「unassignable」(休暇)を指定

設定例:

  • 出勤指定: 田中さんが7月4日9時に ICU で出勤可能
  • 休暇指定: 佐藤さんが7月4日終日休暇(group_idは指定しない)
6. タイムボックス設定(Time Indices)

時間の階層構造(レイヤー)を定義するテーブルです。シフト最適化では、時間を複数の粒度で階層的に管理できます(例:月 → 週 → 日 → 時間)。

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": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
layer_id 整数(INTEGER) レイヤーID(0, 1, 2, 3のいずれか。0と3は固定、1と2は任意設定)
layer_name 文字列(STRING) レイヤーの名称(例:「」「時間」)
base_time_index 整数(INTEGER) 最小粒度(layer_3)のtime_index値
time_index 整数(INTEGER) 該当レイヤーでのtime_index値
time_title 文字列(STRING) 時間インデックスの説明

レイヤー概念:

  • Layer 0: 固定レイヤー(time_indexは全て0)
  • Layer 1, 2: カスタムレイヤー(例:週、日)
  • Layer 3: 最小粒度レイヤー(例:時間、シーケンシャルな番号)
7. アサイン計画(Assigns)

各グループに対して、各時間帯で必要な人員数を定義するテーブルです。これが最適化の「目標」となります。

JSONスキーマを表示
[
  { "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "time_index", "type": "INTEGER", "mode": "NULLABLE", "description": "" },
  { "name": "assignment", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
group_id 文字列(STRING) グループID
time_index 整数(INTEGER) 時間インデックス
assignment 整数(INTEGER) そのグループ・時間帯で必要な人員数

例:ICUで7月4日9時〜10時に看護師2名が必要、という場合は assignment = 2 と設定します。

8. アサイン許容数設定(Assign Limitations)

従業員の勤務に関する制約条件を定義するテーブルです。勤務回数の上下限、連続の勤務制限、ポイント制約などを設定できます。

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": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID
scope_id 整数(INTEGER) * スコープID(1〜3)。連続の勤務制限では不要
layer_id 整数(INTEGER) レイヤーID(制約種別により制限あり)
time_index 整数(INTEGER) * 時間インデックス。連続の勤務制限では不要
type 文字列(STRING) * range」(範囲指定)または「specific」(固定値)
min 整数(INTEGER) * type=rangeの場合の最小値
max 整数(INTEGER) * type=rangeの場合の最大値
enable_zero 真偽値(BOOLEAN) * type=rangeの場合、ゼロを許可するか
specific 整数(INTEGER) * type=specificの場合の固定値
limit 整数(INTEGER) * 連続の勤務制限の場合の上限日数
target_point 整数(INTEGER) * ポイント制約の場合の目標ポイント数

制約タイプ例:

  • 勤務の回数範囲: 週に2〜4回勤務(type=range, min=2, max=4)
  • 勤務の回数固定: 月に必ず20回勤務(type=specific, specific=20)
  • 連続の勤務制限: 5日連続勤務まで(limit=5)
9. 従業員コスト設定(Person Costs)

従業員ごとの勤務コストや従業員間の組み合わせコストを定義するテーブルです。

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": "time_title", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "pair_person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "cost", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID
layer_id 整数(INTEGER) * レイヤーID(0〜2)。従業員間コストでは不要
time_index 整数(INTEGER) * 時間インデックス。従業員間コストでは不要
time_title 文字列(STRING) 時間インデックスの説明
pair_person_id 文字列(STRING) * 従業員間コストの場合のペア相手のID
cost 整数(INTEGER) コスト値(大きいほど避けたい組み合わせ)
10. グループコスト設定(Group Costs)

グループと従業員の組み合わせごとのコストを定義するテーブルです。

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": "time_title", "type": "STRING", "mode": "NULLABLE", "description": "" },
  { "name": "cost", "type": "INTEGER", "mode": "NULLABLE", "description": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
group_id 文字列(STRING) グループID
person_id 文字列(STRING) 従業員ID
layer_id 整数(INTEGER) レイヤーID(0〜2)
time_index 整数(INTEGER) 時間インデックス
time_title 文字列(STRING) 時間インデックスの説明
cost 整数(INTEGER) コスト値

使用する場合は、所属関係テーブル(Belongs)で定義したすべての人員-グループ組み合わせのコストを設定してください。

11. グループ関連コスト設定(Group Relations)

連続して異なるグループに配置される場合のコストを定義するテーブルです。

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": "INTEGER", "mode": "NULLABLE", "description": "" }
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
person_id 文字列(STRING) 従業員ID
group_id 文字列(STRING) 最初のグループID
next_group_id 文字列(STRING) 次に配置されるグループID
cost 整数(INTEGER) 連続配置のコスト

例:ICUから救急への連続配置は負担が大きいため高コストを設定、といった用途で使用します。

12. パラメータ設定(Coefficients)

最適化計算の挙動を細かく制御するためのパラメータを設定するテーブルです。このテーブルに複数行がある場合、各行が独立したジョブとして実行されます。

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"}
  ]}
  // その他多数のパラメータ...
]

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須/条件付き 説明
label 文字列(STRING) 複数の同時実行時のジョブラベル識別名
assign_coeff 数値(FLOAT) 基本アサイン係数(必須パラメータ)
not_assign_multi_set_per_time_coeff 数値(FLOAT) 同時間複数グループアサイン不可制約の係数
assignable 複合型(RECORD) * 出勤制約のパラメータ(Work Typesでassignableを使用する場合は必須)
assignable.coeff 数値(FLOAT) * 出勤制約の重み係数
assignable.force 真偽値(BOOLEAN) * 出勤を厳守するか(trueで厳守)
unassignable 複合型(RECORD) * 休暇制約のパラメータ(Work Typesでunassignableを使用する場合は必須)
unassignable.coeff 数値(FLOAT) * 休暇制約の重み係数
unassignable.force 真偽値(BOOLEAN) * 休暇を厳守するか(trueで厳守)

パラメータ設定のルール:

  • 制約を使用しない: null(カラムを登録しない)
  • 自動設定: 0(文字列の場合は"null")
  • 値を指定: 0以外の値

注:Coefficientsテーブルには他にも多数のパラメータがあります。詳細はスキーマ仕様書を参照してください。

13. 実行結果(Results)

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

注:結果テーブルのスキーマは実行時に自動生成されるため、事前の作成は不要です。

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 出力有無 説明
job_id 文字列(STRING) 必須 実行された最適化ジョブのID
energy 数値(FLOAT) 必須 計算結果の評価値(エネルギー値)。値が小さいほど良い解
solution_index 整数(INTEGER) 必須 複数の解が得られた場合の解のインデックス番号
person_index 整数(INTEGER) 必須 従業員の内部インデックス
person_id 文字列(STRING) 任意 配置された従業員のID
person_name 文字列(STRING) 任意 従業員の名前
holiday 整数(INTEGER) 必須 休暇設定(1の場合は休暇)
group_index 整数(INTEGER) 必須 グループの内部インデックス
group_id 文字列(STRING) 任意 配置先のグループID
group_name 文字列(STRING) 任意 グループの名前
time_index 整数(INTEGER) 必須 配置された時間インデックス (layer_3)
time_title 文字列(STRING) 任意 時間インデックスに対応する付帯情報
assigned 整数(INTEGER) 必須 グループへのアサイン結果(1の場合はアサイン)
created_at タイムスタンプ(TIMESTAMP) 必須 実行ジョブの作成日時

このテーブルから、「田中さんが7月4日9時〜10時にICUで配置された」といった具体的なシフト計画を読み取ることができます。

14. 実行情報(Result Job)

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

注:実行情報テーブルのスキーマは実行時に自動生成されるため、事前の作成は不要です。

table_chart 入力テーブル群を指定するテーブルに戻る arrow_upward

カラム名 データ型 必須 説明
job_id 文字列(STRING) 実行された最適化ジョブのID
optimization_type 文字列(STRING) 実行された最適化のタイプ
solutions 複合型(RECORD, REPEATED) 解の情報。解のインデックスとエネルギー値が含まれます。
solutions.solution_index 整数(INTEGER) 解のインデックス番号
solutions.energy 数値(FLOAT) 解の評価値(エネルギー値)。小さいほど良い解です。
solver_type 整数(INTEGER) 使用された計算エンジンの種類コード
total_qubit_num 整数(INTEGER) 計算に使用された論理的な変数(qubit)の総数
created_at タイムスタンプ(TIMESTAMP) 処理が作成された日時

これらの情報により、複数のシナリオ実行結果の品質や計算効率を比較・分析できます。

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