最適化
シフト最適化
概要
このブロックは、従業員のシフト管理を自動で最適化するための計画を作成します。これにより、最小の人数で必要な業務をカバーし、労働コストを削減できます。例えば、小売店や病院での看護師のシフト、コールセンターのオペレーター配置、製造業での作業者シフトなど、多種多様なシフト管理業務で活用できます。
従業員の勤務可能な時間、休暇希望、スキルレベル、必要な人員数といった制約条件を考慮しながら、コスト最小化に基づくシフト計画を自動的に作成します。これにより、人手では対応が困難な数十から数百の制約条件のもとでも、公平で最適化されたシフト配置が実現できます。
内部では、状況に応じて処理速度と精度を基準とした計算エンジン(専門的にはソルバーと呼ばれ、D-Wave、SQBM+、Amplify AEなどが該当)が自動的に選択されます。量子コンピューティング技術(量子アニーリングなど)を用いて従来手法の数十倍の速度で計算処理を行います。利用者は技術的な詳細を意識することなく、コスト最小化されたシフト計画のみが得られます。
プロパティ
プロパティ名 | 説明 |
---|---|
ブロック名 |
フローの中で、このブロックを識別するための表示名を設定します。例えば、「 |
GCPサービスアカウント |
最適化処理を実行するために、Google Cloud Platform(GCP)のサービスアカウントを選択します。処理に必要な権限を持つアカウントを設定してください。 |
データセット |
BigQueryのデータセットを指定します。(必須) このデータセットには、最適化計算に使用する入力データテーブルと、計算結果を保存する出力データテーブルが含まれます。 具体的には、従業員情報、グループ情報、勤務可能な時間、シフト要求などが格納されたテーブルをこのデータセット内で準備してください。 |
従業員データが保存されているテーブル |
従業員に関する基本情報(ID、名前など)が格納されたテーブル名を指定します。(必須) このテーブルには、「 |
グループ情報が保存されているテーブル |
シフトグループ(勤務体制)に関する情報が格納されたテーブル名を指定します。(必須) このテーブルには、「 |
従業員の所属グループが保存されているテーブル |
各従業員がどのグループ(勤務体制)に所属可能かを定義した関連情報が格納されたテーブル名を指定します。(必須) このテーブルには、「 |
アサイン計画が保存されているテーブル |
各時間帯における必要人数(アサイン計画)が格納されたテーブル名を指定します。(必須) このテーブルには、「 |
パラメータが保存されているテーブル |
最適化計算の挙動や制約の強さを調整するためのパラメータが格納されたテーブル名を指定します。(必須) このテーブルには、「 |
従業員のスケジュールが保存されているテーブル |
従業員の勤務可能な時間や休暇希望などのスケジュール設定が格納されたテーブル名を指定します。 このテーブルには、「 |
タイムボックスの設定が保存されているテーブル |
時間軸の階層構造(レイヤ)を定義したテーブル名を指定します。 このテーブルには、「 |
アサイン許容数が保存されているテーブル |
従業員の勤務時間の上限や連続勤務の制限などの制約条件が格納されたテーブル名を指定します。 このテーブルには、「 |
従業員の割当てコストが保存されているテーブル |
従業員の時間帯別の勤務コストや従業員間の組み合わせコストが格納されたテーブル名を指定します。 このテーブルには、「 |
グループの割当てコストが保存されているテーブル |
特定のグループでの従業員ごとの勤務コストが格納されたテーブル名を指定します。 このテーブルには、「 |
グループ間の割当てコストが保存されているテーブル |
連続するグループ間での勤務切り替えコストが格納されたテーブル名を指定します。 このテーブルには、「 |
シフト最適化実行に関する情報を格納する変数 |
最適化処理を実行した際のジョブID(処理識別子)などを格納する変数名を指定します。(必須) この変数には、実行結果に関する基本的な情報(ジョブIDなど)が格納され、後続の処理ブロックで参照できます。 |
実行に関する情報を格納するテーブル |
最適化計算の実行に関する詳細な情報(メタデータ)を格納するテーブル名を指定します。 指定しない場合、これらのメタデータは保存されません。実行にかかった時間や計算の評価値(エネルギー値)など、処理の詳細情報を記録・分析したい場合に設定します。事前に作成する必要はなく、指定したテーブルがなければ、自動作成されます。既に存在する場合は、追加されます。 |
実行結果を格納するテーブル |
最適化計算の結果(具体的なシフト計画)を格納するテーブル名を指定します。 指定しない場合、計算結果は保存されません。最適化結果を保存し、他の処理ブロックから参照したり、後で分析したりする場合は必ず設定してください。事前に作成する必要はなく、指定したテーブルがなければ、自動作成されます。既に存在する場合は、追加されます。 |
ジョブのラベル名 |
実行する最適化ジョブに付与するラベル名(識別名)を指定します。 複数の最適化処理を区別するために使用します。特に、複数のジョブを同時に実行する場合や、後で特定のジョブの結果を確認する際に役立ちます。 |
ブロックメモ |
このブロックに関するメモを自由に記述できます。 フローの管理やメンテナンス時の情報共有に役立ちます。このメモの内容は、ブロックの実行には影響しません。 |
テーブルスキーマ
このブロックでは、従業員情報、グループ設定、時間制約など、多数の入力情報(テーブル形式)と、結果を格納する出力情報(テーブル形式)を使用します。それぞれのテーブルがどのような構造を持ち、どのようなデータを含める必要があるかを理解しておくことが重要です。
注:「必須」列の「✓」マークは、その項目が必須であることを示します。「*」付きのものは条件付き必須を示します(詳細は各テーブルの説明を参照)。
1. 従業員データが保存されているテーブル
シフト対象者の基本情報を定義するテーブルです。すべてのシフト管理対象となる従業員をこのテーブルに登録します。
JSONスキーマを表示
[
{ "name": "person_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "person_name", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
person_id | 文字列(STRING) | ✓ | 従業員を一意に識別するためのID(例:emp_001 、nurse_A ) |
person_name | 文字列(STRING) | 従業員の表示名(例:「田中太郎 」、「山田花子 」)。省略可能です。 |
従業員IDは他のすべてのテーブルで参照されるため、一意性を保つことが重要です。従業員名は表示用に使用され、シフト結果の確認時の分かりやすさを向上させるため設定することを推奨します。
2. グループ情報が保存されているテーブル
シフトグループ(勤務体制やチーム)を定義するテーブルです。例えば、「日勤」「夜勤」「早番」「遅番」といった勤務パターンや、「看護師」「介護士」といった職種別グループを定義します。
JSONスキーマを表示
[
{ "name": "group_id", "type": "STRING", "mode": "NULLABLE", "description": "" },
{ "name": "group_name", "type": "STRING", "mode": "NULLABLE", "description": "" }
]
カラム名 | データ型 | 必須/条件付き | 説明 |
---|---|---|---|
group_id | 文字列(STRING) | ✓ | グループを一意に識別するためのID(例:day_shift 、night_shift ) |
group_name | 文字列(STRING) | グループの表示名(例:「日勤 」、「夜勤 」)。省略可能です。 |
グループは勤務パターンや職種、チームなどを表現するために使用されます。各グループには必要人数や勤務時間などの制約を別途設定できます。
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人の従業員が複数のグループに所属可能な場合は、複数の行で定義します。
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人必要」といった要求を定義します。最適化エンジンは、この要求を満たすように従業員を配置します。
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以外の値を設定します。
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つのグループに配置されます。
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が最も細かい時間単位となります。
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点」といった多様な制約を設定できます。制約タイプに応じて必要な項目が変わります。
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) | ✓ | コスト値 |
時間帯別の勤務コスト(深夜割増など)や、特定の従業員組み合わせでの追加コスト(経験者と新人のペアコストなど)を設定できます。
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テーブルで定義したすべてのグループ-従業員のパターンのコストを設定してください。
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) | ✓ | 切り替えコスト |
例えば、「日勤から夜勤への切り替えには追加コストが発生する」といったルールを定義できます。このテーブルは、従業員ごと、または全従業員に共通で設定できます。
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) | ✓ | この実行データが作成された日時。 |
これらのメタデータを分析することで、最適化計算のパフォーマンスや結果の品質を客観的に評価できます。また、問題の定式化(従業員やシフト制約の与え方)が適切であったかどうかの判断材料にもなります。
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の行は実際にシフトに配置された従業員・時間・グループの組み合わせを表します。