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)

問題の単一の解法を制御するパラメータ。

employees[]

object (Employee)

予約可能なすべての従業員。

shifts[]

object (Shift)

すべてのシフトがスケジュールを形成します。

coverageRequirements[]

object (CoverageRequirement)

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

roleIds[]

string

従業員全体で考えられるすべての役割のリスト。各従業員には、シフトの割り当て可能なロールが少なくとも 1 つ必要です。ロールとは、シフト中の特定の職務(登録看護師、料理長、給仕係など)を指します。シフトに割り当てられた従業員には、特定の 1 つの役割も割り当てられます。

skillIds[]

string

従業員に必要なすべてのスキルのリスト。スキルとは、特定の割り当て可能な仕事とは関係のない、従業員が保有している追加の資格を指します(認定資格、使用言語など)。このリストは空にできます。シフトに割り当てられた従業員は、そのシフトに必要なスキルをすべて満たす必要があります。

locationIds[]

string

スケジュールに含まれる一連のシフトが考えられるすべての場所のリスト。このリストは空にできます。異なる場所を指定すると、たとえば、看護師長が病院のさまざまな部門で多くの看護師をスケジュールする場合や、ホテル管理者が複数のホテルの従業員をスケジュールする場合に役立ちます。

budgetRequirements[]

object (BudgetRequirement)

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

assignmentsHint[]

object (ShiftAssignment)

スケジューリングの問題の暫定的な解決策(ソリューションのヒント)として使用するように割り当てをシフトする。割り当てが割り当て不可能なシフトまたはスケジューリング リクエストと矛盾する場合、割り当てヒントは無視されます。

レスポンスの本文

Workforce Scheduling API に対するレスポンス。返された solutionStatusNOT_SOLVED_DEADLINE_EXCEEDED または INFEASIBLE の場合、レスポンスごとに shiftAssignments は空になります。返された solutionStatusOPTIMAL または 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 でもない場合、このプロトコルの他のフィールドは空になる可能性があります。ステータスが NOT_SOLVED_DEADLINE_EXCEEDED の場合は、実行可能な解決策が見つからない、または実行可能な解決策が存在するかどうかの判断がされず、制限時間に達したことを示します。優先度レベル MANDATORY の制約をすべて満たすことができない場合、リクエストは実行不可能になる可能性があります。

shiftAssignments[]

object (ShiftAssignment)

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

statusMessage

string

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

SolveParameters

シフト スケジューリング問題の単一の解法を制御するパラメータ。

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_MANDATORYShiftRequest で表すことができます。シフト 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] に完全に含まれるシフトのすべてのペアに適用されます。

優先度

従業員のスケジュールまたは適用範囲の要件に対する制約の優先度。これには、SchedulingConstraintResourceConstraintShiftRequestCoverageRequirement が含まれます。制約が競合する可能性があるため、すべての制約を満たすことができるとは限りません。そのため、各タイプの制約には優先度(ユーザーまたはデフォルトにより指定)があり、これによって、完全なスケジュールに適用されるすべての制約の相対的な重要度がソルバーに通知されます。

列挙型
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

残業以外の時間の勤務に対する報酬。社員に複数の料金が適用される場合、この基本の時間給を基準として、料金の差額が適用されます。また、料金が複数ある場合、時間あたりの基本料金はこれらの料金の最低額である必要があります。

hourlyRateShiftDifferentials

map (key: string, value: number)

時間あたりの差額です。baseHourlyRate に上乗せされます。たとえば、基本の時間あたりの料金が $30/時間で、「shift_1」が $40/時間で支払い、「shift_2」が $45/時間で支払われる場合、プロトコル表現は 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 時間、または連続する 7 回の 24 時間期間)。各期間には残業乗数(例: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:1]、[11:1]、[11:1] です。

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

object (DateTime)

休憩の最も早い開始時間(この時間を含む)。設定できるのは hoursminutes のみです。

latestStartTime

object (DateTime)

休憩の最も遅い開始時間(その時間を含む)。設定できるのは hoursminutes のみです。

durationMinutes

integer

休憩の長さ(分単位)。

ruleIncrementMinutes

integer

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

CoverageRequirement

適用範囲要件では、特定の時間枠および特定の場所において、一連の役割/スキルに必要な従業員数を指定します。特定の場所の DateTime 間隔は重複できません。時間枠と場所の代わりに、シフト 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 に個別に適用されます。shiftIds が空でない場合、startDateTimeendDateTimelocationId は空でなければなりません。

roleRequirements[]

object (RoleRequirement)

期間中に指定したロールに割り当てる必要のある従業員数。ロール ID ごとに指定できる role_requirement は 1 つまでです。各要件のデフォルトの優先度は 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 に従って最小化されます。たとえば、予算の priorityPRIORITY_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 指定された制限時間内にスケジュールが見つかりませんでした。