Rozwiązuje problem generowania zmian z podanego elementu SolveShiftGenerationRequest
przez generowanie korekt z określonych szablonów zmian w celu zaspokojenia zapotrzebowania 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 określających reguły generowania zmian. |
employeeDemands[] |
Wymagane. Łączny popyt, jaki muszą pokryć zmiany wygenerowane przez firmę |
Treść odpowiedzi
Odpowiedź na problem z generowaniem zmian. Jeśli zwrócona funkcja solutionStatus
ma wartość SOLVED
, to w funkcji employeeSchedules
jest zwracany zestaw prawidłowych przesunięć wygenerowanych przez rozwiązanie. W przypadku prawidłowego harmonogramu zmian obowiązują następujące właściwości:
- Każda zmiana wygenerowana w
employeeSchedules
jest zgodna z regułami określonymi w dokumencieShiftTemplate
. - Każde zdarzenie wybrane na każdej zmianie jest zgodne z regułami określonymi w dokumencie
ShiftTemplate.Event
. - Łączna liczba pracowników przypisanych do zbioru zmian wygenerowanych na podstawie tego samego szablonu Shift nie przekracza
maximumEmployeeCount
tego szablonu. - Zbiór przypisanych pracowników zaspokaja zapotrzebowanie w każdym 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[] |
Zestaw zmian wygenerowanych przez narzędzie do rozwiązywania problemów wraz z liczbą pracowników przypisanych do każdego harmonogramu. |
demandCoverageViolations[] |
Przypadki naruszenia zasięgu popytu na podstawie przypisanego elementu |
SolverConfig
Określa dodatkowe parametry potrzebne do rozwiązania problemu z generowaniem zmian.
Zapis JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Pola | |
---|---|
timeLimit |
Maksymalny czas, który musi poświęcić na rozwiązanie problemu. Jeśli nie zostanie skonfigurowana, domyślna wartość to 1 minuta. Wybór limitu czasu powinien zależeć od skali problemu. Dla przykładu: gdy rozwiązujemy 7-dniową instancję z 2 Ta wartość nie jest sztywnym ograniczeniem i nie uwzględnia nakładów związanych z komunikacją. Przewidywany czas oczekiwania na rozwiązanie problemu może nieznacznie przekroczyć tę wartość. Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
multiDaySchedule |
Jeśli zasada ma wartość prawda, funkcja rozwiązania generuje |
shiftEventsCanChange |
Jeśli wartość to prawda, wielodniowe zdarzenia |
ShiftTemplate
Szablon określający reguły generowania zmian. Zmiana to jednostka pracy, która określa godzinę rozpoczęcia i zakończenia. Może ona zawierać zdarzenia (np. obiad, przerwy itp.). Zmiana zostanie przypisana w odpowiedzi do konkretnej daty.
Zapis JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
Pola | |
---|---|
id |
Unikalny identyfikator tego szablonu. |
earliestStartTime |
Najwcześniejsza godzina, o której może rozpocząć się zmiana. Wartość tę określa się za pomocą godzin i minut. i nanos są ignorowane. |
latestStartTime |
Najpóźniejszy czas rozpoczęcia zmiany. Wartość tę określa się za pomocą godzin i minut. i nanos są ignorowane. Jeśli ta wartość jest mniejsza niż |
durationMinutes |
Stały czas trwania zmiany wygenerowanej przez ten szablon. |
startTimeIncrementMinutes |
Przyrost czasu (w minutach) używany do wygenerowania zestawu możliwych czasów rozpoczęcia między |
daysOffCountPerWeek |
Stała liczba dni w tygodniu. Pracownik ma dzień wolny, jeśli nie został przydzielony na zmianę rozpoczynającą się tego dnia. Tydzień zaczyna się w niedzielę i trwa 7 dni. |
eventTemplates[] |
Reguły generowania zdarzeń na każdą zmianę. Każde określone zdarzenie obejmuje dokładnie 1 zdarzenie. |
minimumIntereventGapMinutes |
Minimalna liczba minut między końcem jednego wydarzenia a początkiem następnego. |
maximumEmployeeCount |
Maksymalna liczba pracowników, których można przypisać do wszystkich zmian wygenerowanych przez ten szablon. |
TimeOfDay
Przedstawia 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. Podobne typy to 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 takich sytuacjach jak zamknięcie firmy. |
minutes |
Minuty dnia. Wartość musi mieścić się w przedziale od 0 do 59. |
seconds |
Sekundy czasu trwania. Zwykle musi mieścić się w zakresie od 0 do 59. Interfejs API może akceptować wartość 60, jeśli zezwala na użycie sekund przestępnych. |
nanos |
Ułamki sekund w nanosekundach. Musi mieścić się w przedziale od 0 do 999 999 999. |
EventTemplate
Szablon określający reguły generowania pojedynczego zdarzenia, które wystąpi 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 po rozpoczęciu zmiany, przez którą to zdarzenie może się rozpocząć. |
maximumMinutesAfterShiftStart |
Maksymalna liczba minut po rozpoczęciu zmiany, przez którą to zdarzenie może się rozpocząć. |
durationMinutes |
Stały czas trwania tego wydarzenia (w minutach). |
startTimeIncrementMinutes |
Przyrost czasu (w minutach) używany do wygenerowania zestawu możliwych czasów rozpoczęcia zdarzeń między |
EmployeeDemand
Określa liczbę pracowników wymaganych do zaspokojenia zapotrzebowania w danym przedziale czasowym DateTime.
Zapis JSON |
---|
{ "startDateTime": { object ( |
Pola | |
---|---|
startDateTime |
Początek przedziału czasu dla danego żądania (włącznie). Wartości te są odczytywane z dokładnością do minuty. a wszystkie mniejsze są ignorowane. |
endDateTime |
Koniec przedziału czasu dla danego żądania (z wyłączeniem). Wartości te są odczytywane z dokładnością do minuty. a wszystkie mniejsze są ignorowane. |
employeeCount |
Liczba pracowników potrzebna do pokrycia 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 terminie. |
SHIFT_GENERATION_NOT_SOLVED |
Wystąpił problem, który uniemożliwił działanie rozwiązania przez zmianę. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
Nie udało się wygenerować zmian, aby uwzględnić popyt w podanym terminie. |
EmployeeSchedule
Uporządkowana lista zmian odpowiadających pojedynczemu elementowi ShiftTemplate
, który ma zostać przypisany 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órzy powinni zostać przypisani do danego zestawu zmian, aby obsłużyć zapotrzebowanie. |
ShiftWithEvents
Określa datę rozpoczęcia i zakończenia oraz listę stałych zdarzeń przesunięcia wygenerowanego przez rozwiązanie.
Zapis JSON |
---|
{ "startDateTime": { object ( |
Pola | |
---|---|
startDateTime |
Data i godzina rozpoczęcia zmiany. Ta wartość jest określana z dokładnością do minuty. sekund i mniejszych jednostek. |
endDateTime |
Data i godzina zakończenia zmiany. Ta wartość jest określana z dokładnością do minuty. sekund i mniejszych jednostek. |
events[] |
Lista zdarzeń uwzględnionych w tej zmianie, zmapowana dokładnie na zdarzenia |
Zdarzenie
Określa datę i godzinę rozpoczęcia i zakończenia określonego zdarzenia w przesunięciu wygenerowanym 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 określana z dokładnością do minuty. sekund i mniejszych jednostek. |
endDateTime |
Data i godzina zakończenia wydarzenia. Ta wartość jest określana z dokładnością do minuty. sekund i mniejszych jednostek. |
DemandCoverageViolation
Określa naruszenie pokrycia popytu w danym przedziale czasu. Popyt pracowników jest taki sam w całym określonym przedziale czasu.
Zapis JSON |
---|
{ "startDateTime": { object ( |
Pola | |
---|---|
startDateTime |
Data i godzina rozpoczęcia interwału popytu (włącznie). Ta wartość jest określana z dokładnością do minuty. |
endDateTime |
Data i godzina zakończenia przedziału popytu (bez jej uwzględnienia). Ta wartość jest określana z dokładnością do minuty. |
coverageViolation |
Naruszenie zakresu w określonym przedziale czasu. Wartość dodatnia oznacza, że popyt jest przesadzony, a wartość ujemna, że popyt jest niewystarczający. |