Rozwiąż problem z generowaniem zmian na podstawie danych SolveShiftGenerationRequest
, generując zmiany z określonych szablonów zmian, aby zaspokoić potrzeby pracowników.
Żądanie HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
Adres URL używa składni transkodowania gRPC.
Treść żądania
Treść żądania zawiera dane o następującej strukturze:
Zapis JSON |
---|
{ "solverConfig": { object ( |
Pola | |
---|---|
solverConfig |
Opcjonalnie. Parametry rozwiązania. |
shiftTemplates[] |
Wymagane. Zestaw szablonów zmian, które określają reguły generowania zmian. |
employeeDemands[] |
Wymagane. Całkowity zapotrzebowanie pracowników, które musi uwzględnić zmiany generowane przez firmę |
Treść odpowiedzi
Odpowiedź na zadanie generowania zmian. Jeśli solutionStatus
zwraca wartość SOLVED
, zbiór prawidłowych przesunięcia wygenerowanych przez funkcję rozwiązania jest zwracany w funkcji employeeSchedules
. W przypadku prawidłowego harmonogramu zmian następujące właściwości obejmują:
- Każda zmiana wygenerowana w
employeeSchedules
jest zgodna z regułami określonymi w odpowiednichShiftTemplate
. - Każde zdarzenie wybrane na każdą zmianę jest zgodne z regułami określonymi w odpowiednich
ShiftTemplate.Event
. - Łączna liczba pracowników przypisanych do zbioru zmian wygenerowanych na podstawie tego samego szablonu ShiftTemplate nie może przekraczać
maximumEmployeeCount
wartości tego szablonu. - Grupa przypisanych pracowników zaspokaja zapotrzebowanie w każdym podanym przedziale czasu.
W przypadku powodzenia treść żądania zawiera dane o następującej strukturze:
Zapis JSON |
---|
{ "solutionStatus": enum ( |
Pola | |
---|---|
solutionStatus |
Stan zwróconego rozwiązania. Jeśli |
employeeSchedules[] |
Zbiór zmian wygenerowanych przez rozwiązanie wraz z liczbą pracowników przypisanych do każdego harmonogramu. |
SolverConfig
Określa dodatkowe parametry do rozwiązania problemu generowania zmian.
Zapis JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Pola | |
---|---|
timeLimit |
Maksymalny czas, jaki rozwiązanie powinno poświęcić na rozwiązanie problemu. Jeśli nie jest skonfigurowana, domyślna wartość to 1 minuta. Wybór limitu czasu powinien zależeć od wielkości problemu. Na przykład przy rozwiązywaniu 7-dniowej instancji z 2 elementami Ta wartość nie jest sztywnym limitem i nie uwzględnia opłat za komunikację. Oczekiwany czas oczekiwania na rozwiązanie problemu może nieznacznie przekraczać tę wartość. Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
multiDaySchedule |
Jeśli ma wartość prawda, rozwiązanie generuje zadania |
shiftEventsCanChange |
Jeśli ma wartość prawda, kilkudniowe |
ShiftTemplate
Szablon określający reguły generowania zmian. Zmiana to jednostka pracy, która określa godzinę rozpoczęcia i zakończenia oraz może obejmować wydarzenia (np. lunch lub przerwy). W odpowiedzi zostanie przypisana zmiana do określonej daty.
Zapis JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
Pola | |
---|---|
id |
Unikalny identyfikator tego szablonu. |
earliestStartTime |
Najwcześniejsza godzina, o której może się rozpocząć zmiana. Tę wartość podaje się za pomocą godzin i minut; sekundy i nano są ignorowane. |
latestStartTime |
O której godzinie może być ostatnia zmiana w ciągu dnia. Tę wartość podaje się za pomocą godzin i minut; sekundy i nano są ignorowane. Jeśli ta wartość jest mniejsza niż wartość |
durationMinutes |
Stały czas trwania zmiany generowanej przez ten szablon. |
startTimeIncrementMinutes |
Przyrost czasu (w minutach) używany do wygenerowania zestawu możliwych czasów rozpoczęcia z zakresu od |
daysOffCountPerWeek |
Stała liczba dni wolnego w tygodniu. Pracownik ma określony dzień wolny, jeśli nie zostanie przypisany na zmianę, która zaczyna się tego dnia. Tydzień trwa 7 dni i zaczyna się w niedzielę. |
eventTemplates[] |
Reguły generowania zdarzeń dla każdej zmiany. Dla każdej zmiany zostanie uwzględnione dokładnie 1 zdarzenie dla każdego podanego zdarzenia. |
minimumIntereventGapMinutes |
Minimalna liczba minut między zakończeniem jednego wydarzenia a początkiem następnego. |
maximumEmployeeCount |
Maksymalna liczba pracowników, których można przypisać do wszystkich zmian generowanych przez ten szablon. |
TimeOfDay
Reprezentuje porę dnia. Data i strefa czasowa są nieistotne lub zostały określone w innym miejscu. Interfejs API może zezwolić na sekundy przestępne. Powiązane typy: google.type.Date
i google.protobuf.Timestamp
.
Zapis JSON |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
Pola | |
---|---|
hours |
Godziny dnia w formacie 24-godzinnym. Wartość powinna mieścić się w zakresie od 0 do 23. Interfejs API może zezwolić na wartość „24:00:00” w sytuacjach takich jak godzina zamknięcia firmy. |
minutes |
Minuty w ciągu dnia. Wartość musi mieścić się w przedziale od 0 do 59. |
seconds |
Sekundy minut czasu. Wartość musi mieścić się w przedziale od 0 do 59. Interfejs API może zezwolić na wartość 60, jeśli zezwala na sekundy przestępne. |
nanos |
Ułamki sekund w nanosekundach. Wartość musi mieścić się w przedziale od 0 do 999 999 999. |
EventTemplate
Szablon określający reguły generowania pojedynczego zdarzenia, które ma miejsce podczas zmiany. Wydarzenie może reprezentować spotkanie, przerwę, lunch itp.
Zapis JSON |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
Pola | |
---|---|
id |
Unikalny identyfikator tego szablonu. |
minimumMinutesAfterShiftStart |
Minimalna liczba minut od rozpoczęcia zmiany, po której może rozpocząć się to zdarzenie. |
maximumMinutesAfterShiftStart |
Maksymalna liczba minut od rozpoczęcia zmiany, po której może rozpocząć się to zdarzenie. |
durationMinutes |
Stały czas trwania tego zdarzenia w minutach. |
startTimeIncrementMinutes |
Przyrost czasu (w minutach) używany do wygenerowania zestawu możliwych czasów rozpoczęcia zdarzenia z okresu od |
EmployeeDemand
Określa liczbę pracowników wymaganą do zaspokojenia zapotrzebowania w danym przedziale czasu DateTime.
Zapis JSON |
---|
{ "startDateTime": { object ( |
Pola | |
---|---|
startDateTime |
Początek przedziału czasu dla danego zapotrzebowania (włącznie). Wartości te są odczytywane z dokładnością do minuty. Wszystkie mniejsze jednostki są ignorowane. |
endDateTime |
Koniec przedziału czasu dla danego zapotrzebowania (wyłącznie). Wartości te są odczytywane z dokładnością do minuty. Wszystkie mniejsze jednostki są ignorowane. |
employeeCount |
Liczba pracowników potrzebnych do zaspokojenia zapotrzebowania w tym przedziale czasu. |
ShiftGenerationSolutionStatus
Stan rozwiązania podany w odpowiedzi rozwiązania.
Wartości w polu enum | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
Nieokreślony stan odpowiedzi. |
SHIFT_GENERATION_SOLVED |
Rozwiązanie znalazło rozwiązanie w podanym limicie czasu. |
SHIFT_GENERATION_NOT_SOLVED |
Wystąpił problem, który uniemożliwił rozwiązanie w przypadku wprowadzania zmian. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
Nie udało się wygenerować zmian w celu zaspokojenia popytu w podanym okresie. |
EmployeeSchedule
Uporządkowana lista zmian odpowiadająca jednemu ShiftTemplate
, która ma zostać przypisana do określonej liczby pracowników.
Zapis JSON |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
Pola | |
---|---|
shiftTemplateId |
Identyfikator szablonu, który został użyty do wygenerowania tego zbioru zmian. |
shifts[] |
Lista zmian, do których przypisano |
employeeCount |
Liczba pracowników, których należy przypisać do tego zestawu zmian, aby zaspokoić popyt. |
ShiftWithEvents
Określa datę rozpoczęcia i zakończenia oraz listę stałych zdarzeń zmiany wygenerowanej przez rozwiązanie.
Zapis JSON |
---|
{ "startDateTime": { object ( |
Pola | |
---|---|
startDateTime |
Data i godzina rozpoczęcia zmiany. Ta wartość jest podawana z dokładnością do minuty; nie podaje się sekund ani mniejszych jednostek. |
endDateTime |
Data i godzina zakończenia zmiany. Ta wartość jest podawana z dokładnością do minuty; nie podaje się sekund ani mniejszych jednostek. |
events[] |
Lista zdarzeń uwzględnionych w tym przesunięciu, zmapowana dokładnie na zdarzenia |
Zdarzenie
Określa datę oraz godzinę rozpoczęcia i zakończenia określonego zdarzenia w ramach zmiany wygenerowanej przez rozwiązanie.
Zapis JSON |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
Pola | |
---|---|
eventTemplateId |
Identyfikator szablonu, który został użyty do wygenerowania tego zdarzenia. |
startDateTime |
Data i godzina rozpoczęcia wydarzenia. Ta wartość jest podawana z dokładnością do minuty; nie podaje się sekund ani mniejszych jednostek. |
endDateTime |
Data i godzina zakończenia wydarzenia. Ta wartość jest podawana z dokładnością do minuty; nie podaje się sekund ani mniejszych jednostek. |