Method: scheduling.solveShiftScheduling

シフトに従業員を割り当てて、特定の SolveShiftSchedulingRequest からの固定シフトのスケジューリングの問題を解いて、スケジューリング設定が最大化され、スケジュール制約違反が最小限に抑えられます。

HTTP リクエスト

POST https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling

この URL は gRPC Transcoding 構文を使用します。

リクエストの本文

リクエストの本文には、次の構造のデータが含まれます。

JSON 表現
{
  "requestId": string,
  "solveParameters": {
    object (SolveParameters)
  },
  "employees": [
    {
      object (Employee)
    }
  ],
  "shifts": [
    {
      object (Shift)
    }
  ],
  "coverageRequirements": [
    {
      object (CoverageRequirement)
    }
  ],
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "locationIds": [
    string
  ],
  "budgetRequirements": [
    {
      object (BudgetRequirement)
    }
  ],
  "assignmentsHint": [
    {
      object (ShiftAssignment)
    }
  ]
}
フィールド
requestId

string

問題またはリクエスト ID。

solveParameters

object (SolveParameters)

問題の 1 つの解き方を制御するパラメータ。

employees[]

object (Employee)

スケジュール可能なすべての従業員。

shifts[]

object (Shift)

スケジュールを作成するすべてのシフト。

coverageRequirements[]

object (CoverageRequirement)

プランニング期間全体のカバレッジ要件。これらは、時間枠またはシフト ID のリストのいずれかにおいて、各役割を担う必要がある従業員、またはスキルを保有する必要がある従業員の数を指定します。適用範囲の要件はすべて、時間枠またはシフト ID のリスト(両方ではなく)で指定する必要があります。カバレッジ要件の期間(指定した場合)を地域ごとに重複させることはできません。これらの各制約のデフォルトの優先度は、ロール要件では PRIORITY_MANDATORY、スキル要件では PRIORITY_LOW です。詳細については、Priority 列挙型をご覧ください。

roleIds[]

string

従業員全体で可能なすべてのロールのリスト。各従業員には、シフトに割り当てることができるロールが少なくとも 1 つ必要です。Role は、シフト中に割り当てられた特定の職務を指します(登録看護師、エグゼクティブ シェフ、ウェイターなど)。従業員がシフトに割り当てられると、単一の特定のロールにも割り当てられます。

skillIds[]

string

従業員全体で獲得し得るすべてのスキルのリスト。スキルとは、従業員が持っている、特定の割り当て可能な職務とは無関係な追加の資格を指します(認定資格、使用言語など)。このリストは空でもかまいません。従業員がシフトに割り当てられると、そのシフトに必要なすべてのスキルを習得する必要があります。

locationIds[]

string

スケジュール内の一連のシフトに対して考えられるすべてのロケーションのリスト。このリストは空でもかまいません。たとえば、看護師のマネージャーが病院の複数の部門で多数の看護師の勤務スケジュールを設定したい場合や、ホテル マネージャーが複数のホテルにまたがって従業員のスケジュールを設定したい場合などに、異なる場所を指定すると便利です。

budgetRequirements[]

object (BudgetRequirement)

スケジューリングの問題の予算の仕様。これらの各要件のデフォルトの優先度は PRIORITY_LOW です。詳細については、Priority 列挙型をご覧ください。

assignmentsHint[]

object (ShiftAssignment)

割り当てをシフトして、スケジューリングの問題への暫定的な解決策(別名、解答ヒント)として使用する。割り当てできないシフトまたはスケジュール リクエストと割り当てが一致しない場合、割り当てのヒントは無視されます。

レスポンスの本文

Workforce Scheduling API に対するレスポンス。各レスポンスで、返された solutionStatus が NOT_SOLVED_DEADLINE_EXCEEDED または INFEASIBLE の場合、shiftAssignments は空になります。返された solutionStatus が OPTIMAL または FEASIBLE の場合、有効なシフト割り当てが shiftAssignments で返されます。シフトの割り当てが有効な場合、次のプロパティが保持されます。

  1. 各従業員 ID は、リクエストで指定された従業員のセットに含まれます。
  2. 従業員に割り当てられた各ロール ID は、その従業員のロール ID のセットに含まれています。
  3. 各シフト ID は、リクエストで与えられた一連のシフトに含まれます。
  4. 各シフト ID は、その従業員の割り当て不可能なシフト ID ではありません。
  5. 1 人の従業員が、重複する 2 つのシフトに割り当てられることはありません。
  6. 指定されたスケジュールで、優先度レベル PRIORITY_MANDATORY の制約またはリクエストに違反はありません。

成功した場合、レスポンスの本文には次の構造のデータが含まれます。

JSON 表現
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
フィールド
requestId

string

このレスポンスが関連付けられているリクエストの ID。

solutionStatus

enum (SolutionStatus)

返されたソリューションのステータス。解答が FEASIBLE または OPTIMAL でない場合、この proto の他のフィールドは空になる可能性があります。ステータスが NOT_SOLVED_DEADLINE_EXCEEDED の場合、実行可能な解決策が見つからなかったり、実行可能な解決策が存在するかどうかを判別することなく、制限時間に達しています。優先度レベル「MANDATORY」の制約をすべて満たすことができない場合、リクエストは不可能なことがあります。

shiftAssignments[]

object (ShiftAssignment)

すべての割り当てのリスト。各 ShiftAssignment では、従業員、そのシフトに割り当てられたシフト、そのシフトの実施に割り当てられたロールを指定します。

statusMessage

string

solutionStatus が最適でない場合、このフィールドには解法に関する追加情報が含まれることがあります。

SolveParameters

シフト スケジューリング問題の 1 つの解き方を制御するパラメータ。

JSON 表現
{
  "timeLimit": string
}
フィールド
timeLimit

string (Duration format)

解法が問題に費やす最大時間。設定しない場合、デフォルトは 1 分です。

この値はハードリミットではなく、通信のオーバーヘッドを考慮していません。問題を解決するために予想されるレイテンシは、この値をわずかに超えることがあります。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"。

従業員

スケジュールを設定する従業員内の従業員。

JSON 表現
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
フィールド
id

string

この従業員に割り当てられた一意の ID。

roleIds[]

string

この従業員が実行できるロール ID。少なくとも 1 つのロールを指定する必要があります。従業員がシフトに割り当てられると、このリストから 1 つのロールにも割り当てられます。この従業員は、スケジュール期間中にさまざまなロールに割り当てられることがあります。

skillIds[]

string

この従業員が所有しているスキル ID。このリストは空でもかまいません。シフトに割り当てられた従業員は、ここにリストされているスキルのサブセットを使用して、割り当てられたシフト期間全体を通じてスキル要件に対応します。

shiftPreferences[]

object (ShiftPreference)

この従業員の設定を変更します。ここで指定するシフトは、スケジューリング期間中に従業員に割り当てることを希望するシフトを表します。shiftPreferences に指定するシフト ID は一意である必要があります。ソルバーは、満たされているすべての shiftPreferences で ShiftPreference.preference 値の合計を最大化しようとします。

schedulingConstraints[]

object (SchedulingConstraint)

この従業員のスケジュールの制約のリスト。これらの各制約のデフォルトの優先度は PRIORITY_MEDIUM です。詳細については、Priority 列挙型をご覧ください。

resourceConstraints[]

object (ResourceConstraint)

schedulingConstraints で指定されていないその他のスケジュール設定の制約を、ここで resourceConstraints に追加できます。ResourceConstraint は、従業員のリソースを制限するための、より抽象的な表現です。これらの各制約のデフォルトの優先度は PRIORITY_MEDIUM です。詳細については、Priority 列挙型をご覧ください。

shiftRequests[]

object (ShiftRequest)

従業員のシフト リクエストのリスト。特定のシフトに従業員の割り当てをリクエストすることも、割り当てないリクエストを指定することもできます。従業員の固定スケジュール割り当ては、優先度 PRIORITY_MANDATORY の ShiftRequest で表すことができます。1 つのシフト ID は、この従業員のスケジュール リクエストに最大 1 つ表示されます。これらの各リクエストのデフォルトの優先度は PRIORITY_LOW です。詳細については、Priority 列挙型をご覧ください。

hourlyContract

object (HourlyContract)

従業員の通常勤務と残業時間給を定めた契約。

ShiftPreference

特定のシフト ID の数値設定。

JSON 表現
{
  "shiftId": string,
  "preference": integer
}
フィールド
shiftId

string

設定が指定されているシフト ID。

preference

integer

優先値が大きいほど、望ましいシフトを示します。

SchedulingConstraint

特定の従業員に対する特定のスケジュール制約。指定された制約は、指定された間隔 [startDateTime, endDateTime) にのみ適用されます。

JSON 表現
{
  "priority": enum (Priority),
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },

  // Union field type can be only one of the following:
  "minimumMinutes": integer,
  "maximumMinutes": integer,
  "minimumConsecutiveWorkDays": integer,
  "maximumConsecutiveWorkDays": integer,
  "minimumShiftCount": integer,
  "maximumShiftCount": integer,
  "minimumRestMinutes": integer
  // End of list of possible types for union field type.
}
フィールド
priority

enum (Priority)

このスケジューリング制約の優先度。すべてのスケジュール制約のデフォルトの優先度は PRIORITY_MEDIUM です。

startDateTime

object (DateTime)

このスケジュール制約が適用される開始時間(両端を含む)。

endDateTime

object (DateTime)

このスケジュール制約が適用される終了時間(この時間を含まない)。

共用体フィールド type。指定する制約のタイプ。各制約は、上で指定した時間枠内でのみ適用されます。type は次のいずれかになります。
minimumMinutes

integer

従業員が勤務できる最短時間(分)。従業員が時間枠に(全体的または部分的に)重複するシフトに割り当てられていた場合、そのシフトが時間枠と重複する時間(分)もこの数に含まれます。

maximumMinutes

integer

時間枠内で従業員が勤務できる最長時間(分)。従業員が時間枠に(全体的または部分的に)重複するシフトに割り当てられていた場合、そのシフトが時間枠と重複する時間(分)もこの数に含まれます。

minimumConsecutiveWorkDays

integer

従業員が勤務できる最短連続日数。従業員は、特定の日に開始されるシフトに割り当てられている場合、その日に勤務します。この数には、その従業員に割り当てられているシフトのうち、その時間枠に始まるものも含まれます。

maximumConsecutiveWorkDays

integer

従業員が勤務できる最長連続日数。従業員は、特定の日に開始されるシフトに割り当てられている場合、その日に勤務します。その従業員に割り当てられたシフトが、その時間枠に始まるものはすべて、この数に含まれます。

minimumShiftCount

integer

従業員が勤務できる最低シフト数。その従業員に割り当てられたシフトが時間枠と完全に重複している場合は、この数に含まれます。

maximumShiftCount

integer

従業員が勤務できるシフトの最大数。その従業員に割り当てられたシフトが時間枠と完全に重複している場合は、この数に含まれます。

minimumRestMinutes

integer

あるシフトの終了後、従業員が別のシフトに割り当てられるまでの休憩時間の最小分数。この制約は、[startDateTime, endDateTime] に完全に含まれているシフトのペアすべてに適用されます。

優先度

従業員のスケジュールまたは補償要件に対する制約の優先度。たとえば、SchedulingConstraint、ResourceConstraint、ShiftRequest、CoverageRequirement などです。競合する制約が存在する可能性があるため、すべての制約を必ずしも満たすとは限りません。そのため、各タイプの制約には優先度(ユーザーまたはデフォルトによる指定)があり、完全なスケジュールに適用されるすべての制約の相対的な重要度をソルバーに伝えます。

列挙型
PRIORITY_UNSPECIFIED 不明な優先度。
PRIORITY_LOW 最も低い優先度。この優先度の制約は、他の制約ほど重要ではありません。適切な解決策が見つからなかった場合、最初に違反と見なされる。
PRIORITY_MEDIUM 優先度: 中。この優先度の制約は、優先度が PRIORITY_LOW の制約よりも重要ですが、PRIORITY_HIGH 優先度の制約よりも重要度は低くなります。優先度 PRIORITY_LOW の制約をすべて緩和しても実現可能な解が見つからなかった場合は、優先度 PRIORITY_MEDIUM の制約が次に違反とみなされます。
PRIORITY_HIGH 最も高い優先度。この優先度の制約が最も重要です。これは、優先度の低い制約を緩和した後、実現可能な解決策が見つからなかった場合に、最後に違反とみなされるものです。
PRIORITY_MANDATORY ソルバーが違反できないものを表す優先度。ソルバーが SolutionStatus.INFEASIBLE を返す場合は、PRIORITY_MANDATORY 制約が多すぎる可能性があります。

ResourceConstraint

特定の「リソース」の量を制限する一般的な制約。使用しないでください。これは、より具体的な SchedulingConstraint の抽象バージョンで、ユーザーにとってより柔軟です。SchedulingConstraint.type で指定できない多くのスケジューリング制約は、代わりにこのメッセージを使用して指定できます。

JSON 表現
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
フィールド
priority

enum (Priority)

このリソース制約の優先度。すべてのリソース制約のデフォルトの優先度は PRIORITY_MEDIUM です。

resourceUsages

map (key: string, value: number)

シフトで使用されるリソースの量。たとえば、この制約が特定の週の従業員の最小労働時間と最長労働時間に適用される場合、このマップには、その週に発生したシフトと各シフトの長さが時間単位で示されます。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

minimumResourceUsage

number

リソース制約を満たすための最小リソース使用量。

maximumResourceUsage

number

リソース制約を満たすための最大リソース使用量。

ShiftRequest

従業員の特定のシフトへの割り当てまたは割り当て解除のリクエスト。

JSON 表現
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
フィールド
priority

enum (Priority)

このスケジュール リクエストの優先度。すべてのスケジューリング リクエストのデフォルトの優先度は PRIORITY_LOW です。

shiftIds[]

string

スケジューリング リクエストのシフト ID。

type

enum (WorkStatus)

リクエストの種類(リクエストが一連のシフトに割り当てられているかどうかなど)。

WorkStatus

従業員が勤務中かどうか。

列挙型
WORK_STATUS_UNSPECIFIED 作業ステータスが不明です。
STATUS_WORK 働いている従業員を表すステータス。
STATUS_NOT_WORK 非勤務従業員を表すステータス。

HourlyContract

従業員の報酬を決定するため、基本時給、料金差、残業の乗数を指定します。勤務地の規制により、残業報酬の計算方法が異なる場合があります。ソルバーは、総費用の近似値を最小化するか、予算を満たすように、残業報酬の概算を出します(BudgetRequirement を参照)。給与計算のためのツールではありません。

JSON 表現
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
フィールド
baseHourlyRate

number

残業以外の勤務時間に対する報酬。従業員に複数のレートが適用される場合は、この基本時間単価を基準にした料金の差が適用されます。また、複数の料金がある場合は、1 時間あたりの基本料金がこれらの料金の最小値である必要があります。

hourlyRateShiftDifferentials

map (key: string, value: number)

時間あたりの料金の差分。baseHourlyRate に上乗せされます。たとえば、基本時間単価が $30/時間の場合、「shift_1」になります。は 1 時間あたり $40 の料金で、「shift_2」は1 時間あたり $45 の料金が支払われる場合、proto 表現は baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15} となります。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

overtimePeriods[]

object (OvertimePeriod)

残業を計算する必要があるすべての期間のリスト。重複する期間は指定できません。

OvertimePeriod

残業報酬の金額を決定するために使用される、固定で定期的に繰り返される期間(通常は 168 時間、または連続する 24 時間 7 回)。各期間には延長戦の乗数(例:1.5)と、baseHourlyRate の通常の勤務時間(残業以外)とみなされる時間数の制限を考慮します。startDateTime(この値を含む)および endDateTime(含まれない)の時間枠と重なるシフトは、その期間の総労働時間数にカウントされます。重複が部分的な場合は、重複する時間のみがカウントされます。

JSON 表現
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
フィールド
overtimeMultiplier

number

残業の時給を計算するための乗数(1.0 以上の値)。通常、残業時間あたりの料金は baseHourlyRate * overtimeMultiplier として計算されます。hourlyRateShiftDifferentials で複数のレートが指定されている場合、ソルバーは、超過期間中に適用されるレートの単純平均を使用して、時間あたりの残業料金を概算します。注: 規制によって、残業報酬の計算方法が異なる場合があります。ソルバーは、総費用の近似値を最小化するか予算を満たすように、残業報酬の概算を出しますが、給与計算ツールとして使用することを意図したものではありません。

startDateTime

object (DateTime)

超過期間の開始時間。この時間帯にシフトが重なる場合、そのシフトの時間は startDateTime からカウントされます。

endDateTime

object (DateTime)

残業期間の終了時間。この時間帯にシフトが重複している場合は、その時間帯が endDateTime までカウントされます。

maximumRegularHours

number

通常の(残業以外の)料金で支払われる業務時間の上限。この数量は正の数で指定してください。

Shift

シフトでは、従業員が勤務できる固定の時間枠を指定します。

JSON 表現
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
フィールド
id

string

このシフトに割り当てられた一意の ID。

locationId

string

このシフトが行われる勤務地の ID。空欄でもかまいません。

startDateTime

object (DateTime)

シフトの開始時間(両端を含む)。

endDateTime

object (DateTime)

シフトの終了時間(この時間を含まない)。現在、ソルバーでは 24 時間未満のシフトのみが許可されます。

breakRules[]

object (BreakRule)

シフト中に発生したブレークルールのリスト。このシフトを行う従業員には、break_rule ごとに休憩が割り当てられ、その間は、自分が担う役割に対する需要をカバーしません。各 BreakRule 時間枠は、このシフトの時間枠内に完全に含める必要があります。

BreakRule

シフト内で休憩を開始できるタイミングとその時間を決定するルール。対象となるすべての挿入点のリストは、ruleIncrementMinutes 単位で決定されます。たとえば、休憩ルールが 10:00 から 11:00 の間に開始できる 30 分の休憩をモデル化していて、ルールの増分が 20 分の場合、考慮される休憩のリストは [10:00, 10:30], [10:20, 10:50], [10:40] [10:10] [10:10] [11:1]

JSON 表現
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
フィールド
earliestStartTime

object (DateTime)

休憩の最も早い開始時間(指定した時間を含む)。hours と minutes のみ設定できます。

latestStartTime

object (DateTime)

ブレークの最も遅い開始時刻(この値を含む)。hours と minutes のみ設定できます。

durationMinutes

integer

休憩時間(分)。

ruleIncrementMinutes

integer

[省略可] このブレークルールで考慮できるすべてのブレークの増分時間(分)。設定しない場合、durationMinutes がデフォルトになります。

CoverageRequirement

適用範囲の要件では、特定の期間や勤務地において、一連の役割やスキルに必要な従業員数を指定します。特定の場所の日時の間隔を重複させることはできません。または、時間枠と場所の代わりに、シフト ID のリストを指定することもできます。この要件を満たすことができるのは、特定の役割を割り当てることができる(または特定のスキルを持つ)従業員のみです。

特定の役割やスキルについて、時間枠内のあらゆる時間帯(または shiftIds のシフトごと)に少なくとも targetEmployeeCount 名の従業員が勤務していれば、カバレッジの要件を満たします。一方、時間枠の任意の時点(または shiftIds のいずれかのシフト)で、時間枠の任意の時点で働く従業員が targetEmployeeCount 人未満の場合、カバレッジ要件に違反します。targetEmployeeCount よりも多くの従業員が勤務していても要件を満たしますが、人員の過剰な配置はソルバーによって最小限に抑えられます。

JSON 表現
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
フィールド
startDateTime

object (DateTime)

保証範囲の要件の開始時間(両端を含む)。設定する場合は、shiftIds を空にする必要があります。

endDateTime

object (DateTime)

保証範囲の要件の終了時間(この時間を含まない)。設定する場合は、shiftIds を空にする必要があります。

locationId

string

従業員が必要な場所。shiftIds は空ではありません。このフィールドは空にする必要があります。

shiftIds[]

string

設定した場合、ロールとスキル要件はこのリスト内のすべてのシフト ID に個別に適用されます。ShiftId が空でない場合は、startDateTime、endDateTime、locationId を空にする必要があります。

roleRequirements[]

object (RoleRequirement)

期間中に指定されたロールに割り当てる必要がある従業員数。ロール ID ごとに最大で 1 つの role_requirement を指定する必要があります。各要件のデフォルトの優先度は PRIORITY_MANDATORY です。時間枠内の任意の時点で、指定されたロールに割り当てられた従業員が targetEmployeeCount 人未満の場合、これらの制約に違反します。

skillRequirements[]

object (SkillRequirement)

時間枠の中でシフトに割り当てる必要がある、指定されたスキルを持つ従業員数。各スキル ID に指定できる skill_requirement は 1 つまでです。各要件のデフォルトの優先度は PRIORITY_LOW です。時間枠内の任意の時点で所定のスキルを持つ従業員が targetEmployeeCount 人を下回ると、これらの制約に違反します。

RoleRequirement

期間中に指定されたロールに割り当てる必要がある従業員数。

JSON 表現
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
フィールド
roleId

string

要件のロール ID。

targetEmployeeCount

integer

期間中にロールに割り当てる必要のある従業員数。

priority

enum (Priority)

この要件制約の優先度。すべてのリソース制約のデフォルトの優先度は PRIORITY_MANDATORY です。

SkillRequirement

指定のスキルを持つ従業員のうち、期間中に業務を行う必要がある人数。

JSON 表現
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
フィールド
skillId

string

要件のスキル ID。

targetEmployeeCount

integer

所定のスキルを持つ、期間中に業務を遂行する従業員の目標数。

priority

enum (Priority)

この要件制約の優先度。すべてのリソース制約のデフォルトの優先度は PRIORITY_LOW です。

BudgetRequirement

特定の期間の予算要件。

JSON 表現
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
フィールド
totalBudget

number

特定の期間の合計予算。優先度が PRIORITY_MANDATORY の場合は、合計予算を指定する必要があります。

totalBudget が設定されていない場合、スケジュールの合計費用が、指定された priority に従って最小化されます。たとえば、予算の priority が PRIORITY_MEDIUM の場合、ソルバーは費用を最小化してから、優先度 PRIORITY_LOW の制約違反を減らします。

startDateTime

object (DateTime)

この予算を適用する開始時間です。開始時間が指定されていない場合は、指定されたすべてのシフトの最も早い開始時間に設定されます。

endDateTime

object (DateTime)

この予算が適用される期間の終了時間。終了時間が指定されていない場合、指定されたすべてのシフトの最も遅い終了時間に設定されます。

priority

enum (Priority)

指定された時間枠内で予算要件を満たすことの優先度。デフォルトの優先度は PRIORITY_LOW です。優先度を PRIORITY_MANDATORY に設定した場合は、totalBudget を設定する必要があります。

この優先度が他の制約の優先度よりも高く、totalBudget が厳しい場合、結果として得られるスケジュールは従業員の制約とカバレッジ要件の両方を大幅に違反する可能性があります。

ShiftAssignment

シフトロールを割り当てる従業員。

JSON 表現
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
フィールド
employeeId

string

割り当てる従業員 ID。

shiftId

string

従業員に割り当てられたシフト ID。

roleId

string

シフトで従業員が割り当てられたロール ID。

breaks[]

object (Break)

このシフト割り当ての休憩のリスト。

休憩

従業員がシフト中に業務を中断する期間。

JSON 表現
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
フィールド
startDateTime

object (DateTime)

休憩の開始時間。

durationMinutes

integer

休憩時間(分)。

SolutionStatus

ソルバーの応答で提供されるソリューション(スケジュール)のステータス。

列挙型
SOLUTION_STATUS_UNSPECIFIED レスポンスの未指定のステータス。
FEASIBLE 返されるスケジュールは可能ですが、最適ではない可能性があります。
OPTIMAL 返されるスケジュールは最適な状態です。
INFEASIBLE 指定された制約には実行可能なスケジュールが存在しません。優先順位が PRIORITY_MANDATORY の制約のサブセットを満たせない場合、ソルバーはこの値を返します。
NOT_SOLVED スケジュールが見つかりませんでした。
NOT_SOLVED_DEADLINE_EXCEEDED 指定された制限時間内にスケジュールが見つかりませんでした。