Method: scheduling.solveShiftGeneration

従業員の需要をカバーするために、指定されたシフト テンプレートからシフトを生成することで、指定された SolveShiftGenerationRequest に基づくシフト生成の問題を解決します。

HTTP リクエスト

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

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

リクエスト本文

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

JSON 表現
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
フィールド
solverConfig

object (SolverConfig)

省略可。ソルバーのパラメータ。

shiftTemplates[]

object (ShiftTemplate)

必須。シフトを生成するルールを指定する、シフト テンプレートのセット。

employeeDemands[]

object (EmployeeDemand)

必須。shiftTemplates によって生成されたシフトがカバーする必要がある従業員需要の合計。各 EmployeeDemand に指定する DateTime 間隔は、互いに素なものにする必要があり、隣接しないようにすることができます。

レスポンスの本文

シフト生成の問題に対するレスポンス。返された solutionStatusSOLVED の場合、ソルバーによって生成された有効なシフトのセットが employeeSchedules に返されます。有効なシフト スケジュールの場合、次のプロパティが保持されます。

  1. employeeSchedules で生成された各シフトは、対応する ShiftTemplate で指定されたルールに従います。
  2. 各シフトで選択される各イベントは、対応する ShiftTemplate.Event で指定されたルールに従います。
  3. 同じ ShiftTemplate から生成された一連のシフトに割り当てられた従業員の合計数は、そのテンプレートの maximumEmployeeCount 個以内です。
  4. 割り当てられた従業員のセットが、所定の間隔ごとに需要に対応します。

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

JSON 表現
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
フィールド
solutionStatus

enum (ShiftGenerationSolutionStatus)

返されたソリューションのステータス。solutionStatusSOLVED でない場合、employeeSchedules は空になります。

employeeSchedules[]

object (EmployeeSchedule)

ソルバーによって生成された一連のシフトと、各スケジュールに割り当てられた従業員数。

SolverConfig

シフト生成問題を解くための追加のパラメータを指定します。

JSON 表現
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
フィールド
timeLimit

string (Duration format)

解法が問題に費やすべき最長時間。設定しない場合、デフォルトは 1 分です。制限時間の選択は、問題の規模によって異なります。たとえば、2 つの ShiftTemplates で 7 日間のインスタンスを解く場合、それぞれが最大 20 の開始時刻があり、2 つのイベントで約 30 の開始時刻があり、週に 2 日休みがある場合、推奨値は、高速ソリューションの場合は 10 秒未満(最適ではない可能性が高い)、(10 秒、300 秒)で高品質なソリューション、(10 秒、300 秒)で、網羅的な検索になります。インスタンスの規模が大きいほど、制限時間が長くなる可能性があります。

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

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

multiDaySchedule

boolean

true の場合、解法は複数のシフトを含む EmployeeSchedule を生成します(1 週間のスケジュールを生成するためなど)。それ以外の場合、各 EmployeeSchedule にはシフトが 1 つだけ含まれます。複数日にわたるスケジュールでは、シフトの開始時刻がどの日も同じであると想定され、そのようなスケジュールの休日数は、シフト テンプレートによって決定されます。デフォルトは false です。

shiftEventsCanChange

boolean

true の場合、複数日のEmployeeScheduleに、イベントの開始時間と終了時間が日によって異なるシフトが含まれる可能性があります。それ以外の場合、特定の EmployeeSchedule のシフトはすべて、予定の開始時間と終了時間を同じにする必要があります。どちらの場合も、複数日にわたるスケジュールのシフトの開始時刻と終了時刻はすべて同じになります。そのため、multiDaySchedule が false の場合、このパラメータは無視されます。このパラメータを true に設定すると、解決時間が長くなることがあります。デフォルトは false です。

ShiftTemplate

シフトを生成するルールを指定するテンプレート。シフトとは、開始時間と終了時間を指定する作業単位です。イベント(昼食、休憩など)が含まれる場合もあります。シフトは回答の特定の日付に割り当てられます。

JSON 表現
{
  "id": string,
  "earliestStartTime": {
    object (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
フィールド
id

string

このテンプレートの一意の ID。

earliestStartTime

object (TimeOfDay)

シフトを開始できる最も早い時間。この値は、時間と分で指定します。秒とナノは無視されます。

latestStartTime

object (TimeOfDay)

シフトを開始する最も遅い時刻。この値は、時間と分で指定します。秒とナノは無視されます。この値が earliestStartTime より小さい場合、このテンプレートによって生成されるシフトは、午前 0 時前または深夜 0 時以降に開始される場合があります。

durationMinutes

integer

このテンプレートによって生成されたシフトの固定期間。

startTimeIncrementMinutes

integer

earliestStartTime から latestStartTime までの一連の開始時間を生成するために使用される時間間隔(分単位)。たとえば、最も早い開始時刻が 8:00、最も遅い開始時刻が 8:30、開始時刻が 10 分の場合、このシフト テンプレートの開始時刻は 8:00、8:10、8:20、8:30 になります。

daysOffCountPerWeek

integer

週ごとの固定日数。その日に始まるシフトが割り当てられていない場合、その従業員には特定の休日が与えられます。1 週間は 7 日間で、日曜日から始まります。

eventTemplates[]

object (EventTemplate)

シフトごとのイベントを生成するためのルール。指定した各イベントのシフトごとに 1 つのイベントのみが含まれます。

minimumIntereventGapMinutes

integer

イベントの終了から次のイベントの開始までの最小時間(分)。

maximumEmployeeCount

integer

このテンプレートによって生成されたすべてのシフトに割り当てることができる従業員の最大数。

TimeOfDay

1 日のうちの時刻を表します。日付とタイムゾーンは意味を持たないか、他の場所で指定されています。API は、うるう秒を許可するようにできます。関連する型は、google.type.Dategoogle.protobuf.Timestamp です。

JSON 表現
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
フィールド
hours

integer

時間(24 時間形式)。0~23 である必要があります。API ではビジネスの終了時間などのシナリオにおいて、値 "24:00:00" を許可することもできます。

minutes

integer

分。0~59 である必要があります。

seconds

integer

秒。通常、0~59 である必要があります。API がうるう秒を許可する場合、値 60 が許可されます。

nanos

integer

秒の小数部分(ナノ秒単位)。0~999,999,999 である必要があります。

EventTemplate

シフト中に発生する単一のイベントを生成するためのルールを指定するテンプレート。イベントは、会議、休憩、昼食などを表します。

JSON 表現
{
  "id": string,
  "minimumMinutesAfterShiftStart": integer,
  "maximumMinutesAfterShiftStart": integer,
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer
}
フィールド
id

string

このテンプレートの一意の ID。

minimumMinutesAfterShiftStart

integer

シフトが始まってからこのイベントが開始できる最小時間(分)。

maximumMinutesAfterShiftStart

integer

シフト開始後にこのイベントが開始できる最大時間(分)。

durationMinutes

integer

このイベントの固定時間(分単位)。

startTimeIncrementMinutes

integer

minimumMinutesAfterShiftStart から maximumMinutesAfterShiftStart までの一連のイベント開始時間を生成するために使用される時間間隔(分単位)。たとえば、シフト開始後の最小分数が 30 分、シフト開始後の最大分数が 45 分、開始時間の増分が 5 分の場合、イベントはシフト開始後 30 分、35 分、40 分、または 45 分後に発生します。

EmployeeDemand

指定された DateTime 間隔で需要をカバーするために必要な従業員数を指定します。

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

object (DateTime)

需要の期間の開始(その期間を含む)。これらの値は分単位まで読み取られます。秒とそれより小さい単位は無視されます。

endDateTime

object (DateTime)

指定された需要の期間の終了(この値は含まない)。これらの値は分単位まで読み取られます。秒とそれより小さい単位は無視されます。

employeeCount

integer

この期間の需要に対応するために必要な従業員数。

ShiftGenerationSolutionStatus

ソルバーのレスポンスで提供されるソリューションのステータス。

列挙型
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED レスポンスのステータスが指定されていません。
SHIFT_GENERATION_SOLVED 解法は指定された制限時間内に解法を見つけました。
SHIFT_GENERATION_NOT_SOLVED ある問題により、ソルバーがシフトを生成できなかった。
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED 指定された時間内に需要に対応するためのシフトを生成できませんでした。

EmployeeSchedule

複数の従業員に割り当てる 1 つの ShiftTemplate に対応するシフトの順序付きリスト。

JSON 表現
{
  "shiftTemplateId": string,
  "shifts": [
    {
      object (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
フィールド
shiftTemplateId

string

このシフトのセットの生成に使用されたテンプレートの ID。

shifts[]

object (ShiftWithEvents)

employeeCount 名の従業員が割り当てられているシフトのリスト。スケジュールで選択したシフトとイベントは、1 つのテンプレートから生成されています。シフトは時系列で並べ替えられ、重複することはありません。SolverConfig.multi_day_schedule が true の場合、休日はその日から始まるシフトがないということによって暗黙的に表されます。

employeeCount

integer

需要に対応するために、このシフトセットに割り当てる必要がある従業員の数。

ShiftWithEvents

開始日と終了日、およびソルバーによって生成されたシフトの固定イベントのリストを指定します。

JSON 表現
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
フィールド
startDateTime

object (DateTime)

シフトの開始日時。この値は分単位で指定されます。秒以下の単位は指定されません。

endDateTime

object (DateTime)

シフトの終了日時。この値は分単位で指定されます。秒以下の単位は指定されません。

events[]

object (Event)

このシフトに含まれるイベントのリスト。ShiftTemplate.Event に正確にマッピングされ、同じ順序でマッピングされます。SolverConfig.shift_events_can_change が true の場合、予定の開始時間と終了時間は、このスケジュールの ShiftWithEvents 全体で変わる可能性があります。

イベント

ソルバーによって生成されたシフト内の特定のイベントの開始と終了の DateTime を指定します。

JSON 表現
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
フィールド
eventTemplateId

string

このイベントの生成に使用されたテンプレートの ID。

startDateTime

object (DateTime)

イベントの開始日時。この値は分単位で指定されます。秒以下の単位は指定されません。

endDateTime

object (DateTime)

イベントの終了日時。この値は分単位で指定されます。秒以下の単位は指定されません。