Method: scheduling.solveShiftGeneration

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 (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
Pola
solverConfig

object (SolverConfig)

Opcjonalnie. Parametry rozwiązania.

shiftTemplates[]

object (ShiftTemplate)

Wymagane. Zestaw szablonów zmian, które określają reguły generowania zmian.

employeeDemands[]

object (EmployeeDemand)

Wymagane. Całkowity zapotrzebowanie pracowników, które musi uwzględnić zmiany generowane przez firmę shiftTemplates. Przedziały daty i godziny określone w poszczególnych EmployeeDemand muszą być rozłączne i nie sąsiadują ze sobą.

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ą:

  1. Każda zmiana wygenerowana w employeeSchedules jest zgodna z regułami określonymi w odpowiednich ShiftTemplate.
  2. Każde zdarzenie wybrane na każdą zmianę jest zgodne z regułami określonymi w odpowiednich ShiftTemplate.Event.
  3. Łączna liczba pracowników przypisanych do zbioru zmian wygenerowanych na podstawie tego samego szablonu ShiftTemplate nie może przekraczać maximumEmployeeCount wartości tego szablonu.
  4. 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 (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
Pola
solutionStatus

enum (ShiftGenerationSolutionStatus)

Stan zwróconego rozwiązania. Jeśli solutionStatus nie ma wartości SOLVED, employeeSchedules jest puste.

employeeSchedules[]

object (EmployeeSchedule)

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

string (Duration format)

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 ShiftTemplates, z których każde ma około 20 możliwych czasów rozpoczęcia i 2 zdarzenia z około 30 możliwymi godzinami rozpoczęcia i 2 dni wolne w tygodniu, zalecane wartości to: poniżej 10 s w przypadku szybkich rozwiązań (i prawdopodobnie nieoptymalnie), (10 s, 300 s) w przypadku rozwiązań wysokiej jakości i >300 s w przypadku wyczerpującego wyszukiwania. Większe instancje mogą wymagać dłuższych limitów czasu.

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 „s”. Przykład: "3.5s".

multiDaySchedule

boolean

Jeśli ma wartość prawda, rozwiązanie generuje zadania EmployeeSchedule obejmujące kilka zmian (np. w celu wygenerowania tygodniowego harmonogramu). W przeciwnym razie każda EmployeeSchedule zawiera dokładnie jedną zmianę. W harmonogramach wielodniowych założono, że godzina rozpoczęcia zmiany jest taka sama we wszystkich dniach, a liczba dni wolnych w takim harmonogramie jest określana na podstawie szablonów zmian. Wartość domyślna to false (fałsz).

shiftEventsCanChange

boolean

Jeśli ma wartość prawda, kilkudniowe EmployeeSchedule mogą obejmować zmiany, których godzina rozpoczęcia i zakończenia różni się w zależności od dnia. W przeciwnym razie wszystkie zmiany w konkretnym elemencie EmployeeSchedule muszą mieć tę samą godzinę rozpoczęcia i zakończenia wydarzenia. W obu przypadkach wszystkie zmiany w harmonogramie wielodniowym mają tę samą godzinę rozpoczęcia i zakończenia. Dlatego ten parametr jest ignorowany, jeśli multiDaySchedule ma wartość Fałsz. Jeśli ma wartość Prawda, może to wydłużyć czas rozwiązywania problemów. Wartość domyślna to false (fałsz).

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 (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
Pola
id

string

Unikalny identyfikator tego szablonu.

earliestStartTime

object (TimeOfDay)

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

object (TimeOfDay)

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ść earliestStartTime, przesunięcie wygenerowane przez ten szablon może rozpocząć się przed północą lub po niej.

durationMinutes

integer

Stały czas trwania zmiany generowanej przez ten szablon.

startTimeIncrementMinutes

integer

Przyrost czasu (w minutach) używany do wygenerowania zestawu możliwych czasów rozpoczęcia z zakresu od earliestStartTime do latestStartTime. Jeśli na przykład najwcześniejsza godzina rozpoczęcia to 8:00, ostatni to 8:30, a przyrost czasu rozpoczęcia wynosi 10 minut, wszystkie możliwe godziny rozpoczęcia w tym szablonie zmiany to 8:00, 8:10, 8:20 i 8:30.

daysOffCountPerWeek

integer

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[]

object (EventTemplate)

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

integer

Minimalna liczba minut między zakończeniem jednego wydarzenia a początkiem następnego.

maximumEmployeeCount

integer

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

integer

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

integer

Minuty w ciągu dnia. Wartość musi mieścić się w przedziale od 0 do 59.

seconds

integer

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

integer

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

string

Unikalny identyfikator tego szablonu.

minimumMinutesAfterShiftStart

integer

Minimalna liczba minut od rozpoczęcia zmiany, po której może rozpocząć się to zdarzenie.

maximumMinutesAfterShiftStart

integer

Maksymalna liczba minut od rozpoczęcia zmiany, po której może rozpocząć się to zdarzenie.

durationMinutes

integer

Stały czas trwania tego zdarzenia w minutach.

startTimeIncrementMinutes

integer

Przyrost czasu (w minutach) używany do wygenerowania zestawu możliwych czasów rozpoczęcia zdarzenia z okresu od minimumMinutesAfterShiftStart do maximumMinutesAfterShiftStart. Jeśli na przykład minimalna liczba minut po rozpoczęciu zmiany to 30, maksymalna liczba minut po rozpoczęciu zmiany to 45, a przyrost czasu rozpoczęcia wynosi 5 minut, zdarzenie może mieć miejsce 30, 35, 40 lub 45 minut po rozpoczęciu zmiany.

EmployeeDemand

Określa liczbę pracowników wymaganą do zaspokojenia zapotrzebowania w danym przedziale czasu DateTime.

Zapis JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
Pola
startDateTime

object (DateTime)

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

object (DateTime)

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

integer

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 (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
Pola
shiftTemplateId

string

Identyfikator szablonu, który został użyty do wygenerowania tego zbioru zmian.

shifts[]

object (ShiftWithEvents)

Lista zmian, do których przypisano employeeCount pracowników. Zmiany i wydarzenia wybrane dla harmonogramu zostały wygenerowane na podstawie jednego szablonu. Zmiany są sortowane chronologicznie i nie nakładają się na siebie. Jeśli SolverConfig.multi_day_schedule ma wartość prawda, dzień wolny jest domyślnie oznaczany brakiem zmiany zaczynającej się od tego dnia.

employeeCount

integer

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 (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
Pola
startDateTime

object (DateTime)

Data i godzina rozpoczęcia zmiany. Ta wartość jest podawana z dokładnością do minuty; nie podaje się sekund ani mniejszych jednostek.

endDateTime

object (DateTime)

Data i godzina zakończenia zmiany. Ta wartość jest podawana z dokładnością do minuty; nie podaje się sekund ani mniejszych jednostek.

events[]

object (Event)

Lista zdarzeń uwzględnionych w tym przesunięciu, zmapowana dokładnie na zdarzenia ShiftTemplate.Event i w tej samej kolejności. Jeśli zasada SolverConfig.shift_events_can_change ma wartość prawda, czas rozpoczęcia i zakończenia wydarzeń może się różnić w zależności od wybranego dnia (ShiftWithEvents).

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 (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
Pola
eventTemplateId

string

Identyfikator szablonu, który został użyty do wygenerowania tego zdarzenia.

startDateTime

object (DateTime)

Data i godzina rozpoczęcia wydarzenia. Ta wartość jest podawana z dokładnością do minuty; nie podaje się sekund ani mniejszych jednostek.

endDateTime

object (DateTime)

Data i godzina zakończenia wydarzenia. Ta wartość jest podawana z dokładnością do minuty; nie podaje się sekund ani mniejszych jednostek.