Package google.research.optimization.v1.workforce

Indeks

Przerwa

Przedział czasu, w którym pracownik przerywa pracę podczas zmiany.

Pola
start_date_time

DateTime

Czas rozpoczęcia przerwy.

duration_minutes

int32

Czas trwania przerwy w minutach.

BreakRule

Reguła określająca, kiedy przerwa może się rozpocząć w ramach zmiany i jak długo trwa. Lista wszystkich możliwych przerw, które zostaną uwzględnione, jest określana w przyrostach co rule_increment_minutes. Jeśli na przykład reguła przerwy modeluje 30-minutową przerwę, która może zaczynać się od 10:00 do 11:00, a przyrost reguły wynosi 20 minut, lista branych pod uwagę przerw to: [10:00, 10:30], [10:20, 10:50], [10:40], 11.

Pola
earliest_start_time

DateTime

Najwcześniejszy czas rozpoczęcia przerwy (włącznie). Można ustawić tylko hours i minutes.

latest_start_time

DateTime

Ostatni czas rozpoczęcia przerwy (włącznie). Można ustawić tylko hours i minutes.

duration_minutes

int32

Czas trwania przerwy w minutach.

rule_increment_minutes

int32

[Opcjonalnie] Zwiększenie czasu w minutach w przypadku wszystkich przerw, których może dotyczyć ta reguła przerwy. Jeśli nie jest skonfigurowana, domyślna wartość to duration_minutes.

BudgetRequirement

Wymagania dotyczące budżetu w danym przedziale czasu.

Pola
total_budget

double

Łączny budżet w danym przedziale czasu. Jeśli priorytet wynosi PRIORITY_MANDATORY, należy podać łączny budżet.

Jeśli zasada total_budget nie jest skonfigurowana, łączny koszt harmonogramu jest zminimalizowany zgodnie z określoną wartością priority. Jeśli na przykład wartość priority budżetu wynosi PRIORITY_MEDIUM, rozwiązanie zminimalizuje koszty przed zredukowaniem wszelkich naruszeń ograniczeń o priorytecie PRIORITY_LOW.

start_date_time

DateTime

Godzina rozpoczęcia obowiązywania tego budżetu. Jeśli godzina rozpoczęcia nie zostanie określona, jest ustawiona na najwcześniejszą godzinę rozpoczęcia wszystkich danych zmian.

end_date_time

DateTime

Godzina zakończenia obowiązywania tego budżetu. Jeśli nie podasz godziny zakończenia, zostanie ustawiona najpóźniejsza godzina zakończenia wszystkich zmian.

priority

Priority

Poziom priorytetu spełnienia wymagań dotyczących budżetu w określonym przedziale czasu. Domyślny priorytet to PRIORITY_LOW. Jeśli priorytet jest ustawiony na PRIORITY_MANDATORY, musisz ustawić total_budget.

Pamiętaj, że jeśli ten priorytet jest wyższy niż inne priorytety ograniczeń, a zasada total_budget jest ograniczona, wynikowy harmonogram może znacznie naruszać zarówno ograniczenia pracowników, jak i wymagania związane z zasięgiem.

CoverageRequirement

Wymaganie dotyczące zakresu ochrony określa liczbę pracowników wymaganych na danych stanowiskach lub umiejętności w określonym przedziale czasu i lokalizacji. Przedziały typu data i godzina w konkretnej lokalizacji nie mogą się nakładać. Zamiast przedziału czasu i lokalizacji możesz też podać listę identyfikatorów zmian. Tylko pracownicy, do których można przypisać daną funkcję (lub którzy mają określone umiejętności), mogą spełnić to wymaganie.

Na danym stanowisku lub w przypadku określonych umiejętności wymóg dotyczący ubezpieczenia jest spełniony, gdy co najmniej target_employee_count pracowników pracuje w danym przedziale czasu (lub na każdą zmianę w okresie shift_ids). Z kolei wymóg ubezpieczenia jest naruszany, jeśli w dowolnym momencie w przedziale czasu (lub dowolnej zmiany w wyniku shift_ids) w danym przedziale czasu zatrudnia się mniej niż target_employee_count pracowników. Więcej pracowników niż target_employee_count nadal spełnia ten wymóg, ale liczba pracowników ogranicza liczbę osób, które je rozwiązały.

Pola
start_date_time

DateTime

Godzina rozpoczęcia wymagania dotyczącego ochrony (włącznie). Jeśli jest ustawione, pole shift_ids musi być puste.

end_date_time

DateTime

Godzina zakończenia wymogu ubezpieczenia (z wyłączeniem). Jeśli jest ustawione, pole shift_ids musi być puste.

location_id

string

Lokalizacja, w której pracownicy są potrzebni. Pole shift_ids nie jest puste. To pole musi być puste.

shift_ids[]

string

Jeśli wymagania dotyczące roli i umiejętności są skonfigurowane, są stosowane indywidualnie do każdego identyfikatora zmiany na tej liście. Jeśli parametr shift_id nie jest pusty, pola start_date_time, end_date_time i location_id muszą być puste.

role_requirements[]

RoleRequirement

Wymagana liczba pracowników, którzy zostaną przypisani do określonych ról w danym przedziale czasu. Dla każdego identyfikatora roli należy podać maksymalnie 1 role_requirement. Domyślny poziom priorytetu każdego z wymagań to PRIORITY_MANDATORY. Te ograniczenia są naruszane, jeśli w dowolnym momencie w danym okresie przypisano mniej niż target_employee_count liczbę pracowników do określonych ról.

skill_requirements[]

SkillRequirement

Wymagana liczba pracowników o określonych umiejętnościach, które są przypisane do zmian w danym przedziale czasu. Dla każdego identyfikatora umiejętności należy podać maksymalnie 1 skill_requirement. Domyślny poziom priorytetu każdego z wymagań to PRIORITY_LOW. Te ograniczenia są naruszane, jeśli w dowolnym momencie w danym okresie nauki posiadało mniej niż target_employee_count pracowników.

RoleRequirement

Wymagana liczba pracowników, którzy zostaną przypisani do określonej roli w danym okresie.

Pola
role_id

string

Identyfikator roli dla wymagania.

target_employee_count

int32

Oczekiwana liczba pracowników przypisanych do danej roli w przedziale czasu.

priority

Priority

Poziom priorytetu tego ograniczenia wymaganego. Domyślny priorytet wszystkich ograniczeń zasobów to PRIORITY_MANDATORY.

SkillRequirement

Wymagana liczba pracowników, którzy pracują w danym okresie i posiadają określone umiejętności.

Pola
skill_id

string

Identyfikator umiejętności, który spełnia wymagania.

target_employee_count

int32

Pożądana liczba pracowników o określonych umiejętnościach pracujących w danym okresie.

priority

Priority

Poziom priorytetu tego ograniczenia wymaganego. Domyślny priorytet wszystkich ograniczeń zasobów to PRIORITY_LOW.

DemandCoverageViolation

Określa naruszenie pokrycia popytu w danym przedziale czasu. Popyt pracowników jest taki sam w całym określonym przedziale czasu.

Pola
start_date_time

DateTime

Data i godzina rozpoczęcia interwału popytu (włącznie). Ta wartość jest określana z dokładnością do minuty.

end_date_time

DateTime

Data i godzina zakończenia przedziału popytu (bez jej uwzględnienia). Ta wartość jest określana z dokładnością do minuty.

coverage_violation

int32

Naruszenie zakresu w określonym przedziale czasu. Wartość dodatnia oznacza, że popyt jest przesadzony, a wartość ujemna, że popyt jest niewystarczający.

Pracownik

Pracownik, który ma zostać zaplanowany.

Pola
id

string

Unikalny identyfikator przypisany do tego pracownika.

role_ids[]

string

Identyfikatory ról, które może wykonywać ten pracownik. Musisz określić co najmniej 1 rolę. Gdy pracownik zostanie przypisany na daną zmianę, otrzyma również 1 rolę z tej listy. Pracownik może mieć przypisaną różne role w określonym czasie.

skill_ids[]

string

Identyfikatory umiejętności posiadane przez tego pracownika. Ta lista może być pusta. Gdy pracownik zostanie przydzielony na zmianę, wykorzystuje wymienione tutaj umiejętności, aby spełnić wymagania umiejętności w trakcie planowanej zmiany.

shift_preferences[]

ShiftPreference

Zmień ustawienia tego pracownika. Podane tu zmiany reprezentują zmiany, na które pracownik chciałby zostać przypisany w okresie planowania. Identyfikatory zmian określone w polu shift_preferences muszą być unikalne. Rozwiązanie spróbuje zmaksymalizować sumę wartości parametru ShiftPreference.preference we wszystkich spełnionych żądaniach (shift_preferences).

scheduling_constraints[]

SchedulingConstraint

Lista ograniczeń planowania dla tego pracownika. Domyślny poziom priorytetu każdego z tych ograniczeń to PRIORITY_MEDIUM. Więcej informacji znajdziesz w danych wyliczeniowych Priority.

resource_constraints[]

ResourceConstraint

Wszelkie dodatkowe ograniczenia harmonogramu, które nie są określone w zasadzie scheduling_constraints, można dodać tutaj do elementu resource_constraints. ResourceConstraint to bardziej abstrakcyjna reprezentacja ograniczania zasobów pracownika. Domyślny poziom priorytetu każdego z tych ograniczeń to PRIORITY_MEDIUM. Więcej informacji znajdziesz w danych wyliczeniowych Priority.

shift_requests[]

ShiftRequest

Lista próśb o zmianę wysłanych przez pracownika. Możesz poprosić o przypisanie pracownika lub zrezygnować z określenia poszczególnych zmian. Każde stałe przypisanie harmonogramu pracownika może być oznaczone etykietą ShiftRequest z priorytetem PRIORITY_MANDATORY. Identyfikator zmiany może występować w maksymalnie 1 prośbie o ustalenie harmonogramu dla tego pracownika. Domyślny poziom priorytetu każdego z tych żądań to PRIORITY_LOW. Więcej informacji znajdziesz w danych wyliczeniowych Priority.

hourly_contract

HourlyContract

Umowa, która określa stałe i nadgodzinne stawki godzinowe dla pracownika.

EmployeeDemand

Określa liczbę pracowników wymaganych do zaspokojenia zapotrzebowania w danym przedziale czasowym DateTime.

Pola
start_date_time

DateTime

Początek przedziału czasu dla danego żądania (włącznie). Wartości te są odczytywane z dokładnością do minuty. Sekundy i wszystkie mniejsze jednostki są ignorowane.

end_date_time

DateTime

Koniec przedziału czasu dla danego żądania (z wyłączeniem). Wartości te są odczytywane z dokładnością do minuty. Sekundy i wszystkie mniejsze jednostki są ignorowane.

employee_count

int32

Liczba pracowników potrzebna do pokrycia zapotrzebowania w tym przedziale czasu.

EmployeeSchedule

Uporządkowana lista zmian odpowiadających pojedynczemu elementowi ShiftTemplate, który ma zostać przypisany do określonej liczby pracowników.

Pola
shift_template_id

string

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

shifts[]

ShiftWithEvents

Lista zmian, do których przypisano employee_count pracowników. Zmiany i wydarzenia wybrane do harmonogramu zostały wygenerowane na podstawie jednego szablonu. Zmiany są sortowane chronologicznie i nie nakładają się na siebie. Jeśli zasada SolverConfig.multi_day_schedule ma wartość prawda, dzień wolny jest domyślnie reprezentowany przez brak zmiany, która zaczyna się tego dnia.

employee_count

int32

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.

Pola
start_date_time

DateTime

Data i godzina rozpoczęcia zmiany. Wartość jest podawana z dokładnością do minuty. Nie podaje się w sekundach ani w mniejszych jednostkach.

end_date_time

DateTime

Data i godzina zakończenia zmiany. Wartość jest podawana z dokładnością do minuty. Nie podaje się w sekundach ani w mniejszych jednostkach.

events[]

Event

Lista zdarzeń uwzględnionych w tej zmianie, zmapowana dokładnie na zdarzenia ShiftTemplate.Event (i w tej samej kolejności). Jeśli SolverConfig.shift_events_can_change ma wartość prawda, godziny rozpoczęcia i zakończenia wydarzeń mogą być różne we wszystkich strefach ShiftWithEvents tego harmonogramu.

Zdarzenie

Określa datę i godzinę rozpoczęcia i zakończenia określonego zdarzenia w przesunięciu wygenerowanym przez rozwiązanie.

Pola
event_template_id

string

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

start_date_time

DateTime

Data i godzina rozpoczęcia wydarzenia. Wartość jest podawana z dokładnością do minuty. Nie podaje się w sekundach ani w mniejszych jednostkach.

end_date_time

DateTime

Data i godzina zakończenia wydarzenia. Wartość jest podawana z dokładnością do minuty. Nie podaje się w sekundach ani w mniejszych jednostkach.

EventTemplate

Szablon określający reguły generowania pojedynczego zdarzenia, które wystąpi podczas zmiany. Wydarzenie może reprezentować spotkanie, przerwę, lunch itp.

Pola
id

string

Unikalny identyfikator tego szablonu.

minimum_minutes_after_shift_start

int32

Minimalna liczba minut po rozpoczęciu zmiany, przez którą to zdarzenie może się rozpocząć.

maximum_minutes_after_shift_start

int32

Maksymalna liczba minut po rozpoczęciu zmiany, przez którą to zdarzenie może się rozpocząć.

duration_minutes

int32

Stały czas trwania tego wydarzenia (w minutach).

start_time_increment_minutes

int32

Przyrost czasu (w minutach) używany do wygenerowania zestawu możliwych czasów rozpoczęcia zdarzeń między minimum_minutes_after_shift_start a maximum_minutes_after_shift_start. Jeśli na przykład minimalna liczba minut po rozpoczęciu zmiany wynosi 30 minut, maksymalna liczba minut po rozpoczęciu zmiany to 45, a czas rozpoczęcia wynosi 5 minut, zdarzenie może nastąpić 30, 35, 40 lub 45 minut po rozpoczęciu zmiany.

HourlyContract

Określa podstawową stawkę godzinową, różnice stawek i mnożniki nadgodzin w celu określenia wynagrodzenia dla pracownika. Pamiętaj, że przepisy obowiązujące w różnych miejscach mogą wymagać innego obliczenia wynagrodzenia za czas pracy. Rozwiązanie określa w przybliżeniu wypłatę nadgodzin, aby zminimalizować całkowity koszt lub osiągnąć budżet (patrz BudgetRequirement). Nie jest to narzędzie do obliczania wynagrodzenia.

Pola
base_hourly_rate

double

Wynagrodzenie za pracę poza godzinami pracy. Jeśli pracowników ma zastosowanie wiele stawek, różnice stawek są stosowane względem tej podstawowej stawki godzinowej. Jeśli istnieje wiele stawek, podstawowa stawka godzinowa powinna być wartością minimalną z nich.

hourly_rate_shift_differentials

map<string, double>

Różnica stawek godzinowych, płatna dodatkowo: base_hourly_rate. Jeśli na przykład podstawowa stawka godzinowa wynosi 30 USD/godz., „shift_1” jest wypłacana w wysokości 40 USD/godz., a „shift_2” – według stawki 45 USD/godz., wtedy reprezentacja proto wygląda tak: base_hourly_rate: 30 hourly_rate_shift_differentials {key: "shift_1" value: 10} hourly_rate_shift_differentials {key: "shift_2" value: 15}.

overtime_periods[]

OvertimePeriod

Lista wszystkich okresów, dla których należy obliczyć nadgodziny. Te okresy nie mogą się nakładać.

OvertimePeriod

Stały i regularnie cykliczny okres (zwykle 168 godzin lub 7 kolejnych okresów 24-godzinnych), który służy do określenia wynagrodzenia za nadgodziny. Każdy okres ma swój mnożnik (np. 1,5) w stosunku do base_hourly_rate oraz limitu liczby godzin, które są uważane za zwykłą pracę (bez dodatkowych godzin). Każda zmiana, która pokrywa się z przedziałami czasu start_date_time (włącznie) i end_date_time (wyłącznie) jest wliczana do łącznej liczby przepracowanych godzin w tym okresie. Jeśli częściowo się pokrywają, zliczane są tylko pokrywające się godziny.

Pola
overtime_multiplier

double

Mnożnik służący do obliczania stawki godzinowej (musi być większa lub równa 1,0). Stawka godzinowa jest zwykle obliczana według wzoru: base_hourly_rate * overtime_multiplier. Jeśli w polu hourly_rate_shift_differentials podano kilka współczynników, rozwiązanie to szacuje współczynnik godzinowy w czasie za pomocą prostej średniej wartości, które miały zastosowanie w danym okresie. Uwaga: przepisy obowiązujące w różnych krajach mogą wymagać innego obliczenia wynagrodzenia za czas pracy. Rozwiązanie określa w przybliżeniu wynagrodzenia w czasie, aby zminimalizować całkowite koszty łączne lub osiągnąć budżet. Nie jest jednak narzędziem do obliczania wynagrodzenia.

start_date_time

DateTime

Godzina rozpoczęcia okresu w dogrywce. Jeśli zmiana pokrywa się w tym czasie, jej godziny są liczone od start_date_time.

end_date_time

DateTime

Godzina zakończenia w dogrywce. Jeśli w tym czasie ta zmiana obejmuje czas, jego godziny są liczone maksymalnie do end_date_time.

maximum_regular_hours

double

Maksymalna liczba godzin pracy, które są wypłacane według standardowej stawki (poza nadgodzinami). Ta ilość musi być dodatnia.

Priorytet

Poziom priorytetu dowolnego ograniczenia wynikającego z grafiku pracownika lub wymagań dotyczących zakresu ochrony. Są to między innymi SchedulingConstraint, ResourceConstraint, ShiftRequest i CoverageRequirement. Ze względu na sprzeczne ograniczenia nie zawsze można spełnić wszystkie wymagania. W związku z tym każdy typ ograniczenia ma priorytet (nadany przez użytkownika lub domyślny), który informuje program do rozwiązywania problemów o względnym znaczeniu wszystkich ograniczeń nadanych do pełnego harmonogramu.

Wartości w polu enum
PRIORITY_UNSPECIFIED Nieznany poziom priorytetu.
PRIORITY_LOW Najniższy priorytet. Ograniczenia z tym priorytetem są mniej ważne niż pozostałe. Są to pierwsi, którzy są uznawani za naruszające zasady, gdy nie można znaleźć wykonalnego rozwiązania.
PRIORITY_MEDIUM Średni priorytet. Ograniczenia z tym priorytetem są ważniejsze niż ograniczenia o priorytecie PRIORITY_LOW, ale mniej ważne niż te o priorytecie PRIORITY_HIGH. Jeśli po złagodzeniu wszystkich ograniczeń o priorytecie PRIORITY_LOW nie można znaleźć realnego rozwiązania, w następnej kolejności pod kątem naruszenia są sprawdzane ograniczenia o priorytecie PRIORITY_MEDIUM.
PRIORITY_HIGH Najwyższy priorytet. Ograniczenia związane z tym poziomem priorytetu są najważniejsze. Jeśli po złagodzeniu ograniczeń o niższym priorytecie nie uda się znaleźć wykonalnego rozwiązania, są one uważane za ostatni wniosek.
PRIORITY_MANDATORY Poziom priorytetu reprezentujący coś, którego program do rozwiązania nie może naruszyć. Jeśli rozwiązanie do rozwiązania zwraca wartość SolutionStatus.INFEASIBLE, może to być spowodowane zbyt wieloma ograniczeniami PRIORITY_MANDATORY.

ResourceConstraint

Ogólne ograniczenie, które ogranicza ilość określonych „zasobów” używanych przez pracownika. Jest to abstrakcyjna wersja bardziej szczegółowego atrybutu SchedulingConstraint, która jest bardziej elastyczna dla użytkownika. Za pomocą tej wiadomości można zamiast tego określić wiele ograniczeń harmonogramu, których nie można określić w tabeli SchedulingConstraint.type.

Pola
priority

Priority

Poziom priorytetu tego ograniczenia zasobów. Domyślny priorytet wszystkich ograniczeń zasobów to PRIORITY_MEDIUM.

resource_usages

map<string, double>

Ilość zasobów używanych przez zmiany. Jeśli na przykład to ograniczenie dotyczy minimalnej i maksymalnej liczby godzin przepracowanych przez pracownika w danym tygodniu, mapa będzie zawierać zmiany, które miały miejsce w tym tygodniu, oraz długość każdej z nich w godzinach.

minimum_resource_usage

double

Minimalne wykorzystanie zasobów, które ma zostać spełnione.

maximum_resource_usage

double

Maksymalne wykorzystanie zasobów dla ograniczenia zasobów do spełnienia.

SchedulingConstraint

Ograniczenie harmonogramu dla konkretnego pracownika. Określone ograniczenie jest stosowane tylko podczas określonego interwału [start_date_time, end_date_time).

Pola
priority

Priority

Poziom priorytetu dla tego ograniczenia harmonogramu. Domyślny priorytet wszystkich ograniczeń planowania to PRIORITY_MEDIUM.

start_date_time

DateTime

Godzina rozpoczęcia, w którym obowiązuje to ograniczenie harmonogramu (włącznie).

end_date_time

DateTime

Godzina zakończenia, w której ma zastosowanie to ograniczenie harmonogramu (z wyłączeniem).

Pole sumy type. Określany typ ograniczenia. Każde ograniczenie jest stosowane tylko w przedziale czasu określonym powyżej. type może mieć tylko jedną z tych wartości:
minimum_minutes

int32

Minimalna liczba minut, jaką pracownik może pracować. Jeśli pracownik został przypisany do zmiany, która (w całości lub częściowo) pokrywa się z przedziałem czasowym, ta liczba jest wliczana do liczby minut.

maximum_minutes

int32

Maksymalna liczba minut, które pracownik może pracować w danym przedziale czasu. Jeśli pracownik został przypisany do zmiany, która (w całości lub częściowo) pokrywa się z przedziałem czasowym, ta liczba jest wliczana do liczby minut.

minimum_consecutive_work_days

int32

Minimalna liczba kolejnych dni, przez które pracownik może pracować. Pracownik pracuje w konkretnym dniu, jeśli został przydzielony do zmiany, która rozpoczyna się w tym dniu. Ta liczba uwzględnia każdą zmianę, do której przypisany jest pracownik, która rozpoczyna się w danym przedziale czasu.

maximum_consecutive_work_days

int32

Maksymalna liczba kolejnych dni, przez które pracownik może pracować. Pracownik pracuje w konkretnym dniu, jeśli został przydzielony do zmiany, która rozpoczyna się w tym dniu. Ta liczba uwzględnia każdą zmianę, do której przypisany jest pracownik, która rozpoczyna się w danym przedziale czasu.

minimum_shift_count

int32

Minimalna liczba zmian, które pracownik może pracować. Ta liczba uwzględnia każdą zmianę, do której przydzielony pracownik został przypisany, i która w pełni pokrywa się z tym przedziałem czasu.

maximum_shift_count

int32

Maksymalna liczba zmian, które pracownik może pracować. Ta liczba uwzględnia każdą zmianę, do której przydzielony pracownik został przypisany, i która w pełni pokrywa się z tym przedziałem czasu.

minimum_rest_minutes

int32

Minimalna liczba minut, przez które pracownik musi odpocząć po zakończeniu jednej zmiany, zanim zostanie przypisany do kolejnej. To ograniczenie dotyczy każdej pary zmian, które są w pełni uwzględnione w metodach [start_date_time, end_date_time].

Przeniesienie

Zmiana określa przedział czasu, w którym pracownicy mogą pracować.

Pola
id

string

Unikalny identyfikator przypisany do tej zmiany.

location_id

string

Identyfikator lokalizacji, w której została przeprowadzona ta zmiana. To pole może być puste.

start_date_time

DateTime

Godzina rozpoczęcia zmiany (włącznie).

end_date_time

DateTime

Godzina zakończenia zmiany (bez jej uwzględnienia). Obecnie rozwiązanie dopuszcza tylko zmiany trwające mniej niż 24 godziny.

break_rules[]

BreakRule

Lista reguł przerw, które występują podczas zmiany. Pracownicy na tej zmianie otrzymują break_rule przerwy, podczas której nie zaspokajają zapotrzebowania na funkcję, którą pełnią. Każde okno czasowe BreakRule musi być w pełni uwzględnione w przedziale czasowym tej zmiany.

ShiftAssignment

Pracownik na potrzeby zmiany roli.

Pola
employee_id

string

Przypisywany identyfikator pracownika.

shift_id

string

Identyfikator zmiany przypisany do pracownika.

role_id

string

Identyfikator roli, do której przypisany jest pracownik na potrzeby tej zmiany.

breaks[]

Break

Lista przerw w ramach tego przypisania zmiany.

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.

ShiftPreference

Preferencja numeryczna określonego identyfikatora przesunięcia.

Pola
shift_id

string

Identyfikator przesunięcia, dla którego określono preferencje.

preference

int32

Większe wartości preferencji oznaczają bardziej pożądaną zmianę.

ShiftRequest

Prośba pracownika o przypisanie lub nieprzypisanie do określonych zmian.

Pola
priority

Priority

Poziom priorytetu tego żądania planowania. Domyślny priorytet wszystkich żądań planowania to PRIORITY_LOW.

shift_ids[]

string

Identyfikatory zmian w żądaniu planowania.

type

WorkStatus

Typ żądania, np. czy zostanie ono przypisane do zestawu zmian.

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.

Pola
id

string

Unikalny identyfikator tego szablonu.

earliest_start_time

TimeOfDay

Najwcześniejsza godzina, o której może rozpocząć się zmiana. Tę wartość określa się za pomocą godzin i minut. Sekundy i nanos są ignorowane.

latest_start_time

TimeOfDay

Najpóźniejszy czas rozpoczęcia zmiany. Tę wartość określa się za pomocą godzin i minut. Sekundy i nanos są ignorowane. Jeśli ta wartość jest mniejsza niż earliest_start_time, przesunięcie generowane przez ten szablon może rozpocząć się przed północą lub później.

duration_minutes

int32

Stały czas trwania zmiany wygenerowanej przez ten szablon.

start_time_increment_minutes

int32

Przyrost czasu (w minutach) używany do wygenerowania zestawu możliwych czasów rozpoczęcia między earliest_start_time a latest_start_time. Jeśli np. najwcześniejsza godzina rozpoczęcia to 8:00, najpóźniejsza godzina rozpoczęcia to 8:30, a jej zmiana wynosi 10 minut, wtedy wszystkie możliwe godziny rozpoczęcia w tym szablonie zmiany to: 8:00, 8:10, 8:20 i 8:30.

days_off_count_per_week

int32

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.

event_templates[]

EventTemplate

Reguły generowania zdarzeń na każdą zmianę. Każde określone zdarzenie obejmuje dokładnie 1 zdarzenie.

minimum_interevent_gap_minutes

int32

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

maximum_employee_count

int32

Maksymalna liczba pracowników, których można przypisać do wszystkich zmian wygenerowanych przez ten szablon.

SolutionStatus

Stan rozwiązania (tj. harmonogramu) podany w odpowiedzi rozwiązania.

Wartości w polu enum
SOLUTION_STATUS_UNSPECIFIED Nieokreślony stan odpowiedzi.
FEASIBLE Zwrócony harmonogram jest wykonalny, ale może nie być optymalny.
OPTIMAL Zwrócony harmonogram jest optymalny.
INFEASIBLE Dla podanych ograniczeń nie ma możliwego harmonogramu. Rozwiązanie może zwrócić tę wartość, jeśli nie można spełnić dowolnego podzbioru ograniczeń o priorytecie PRIORITY_MANDATORY.
NOT_SOLVED Nie znaleziono harmonogramu.
NOT_SOLVED_DEADLINE_EXCEEDED Nie znaleziono harmonogramu w podanym limicie czasu.

SolveParameters

Parametry sterujące jednym rozwiązaniem problemu z planowaniem zmian.

Pola
time_limit

Duration

Maksymalny czas, który musi poświęcić na rozwiązanie problemu. Jeśli nie zostanie skonfigurowana, domyślna wartość to 1 minuta.

Ta wartość nie jest sztywnym limitem i nie uwzględnia nakładów związanych z komunikacją. Przewidywany czas oczekiwania na rozwiązanie problemu może nieznacznie przekroczyć tę wartość.

SolverConfig

Określa dodatkowe parametry potrzebne do rozwiązania problemu z generowaniem zmian.

Pola
time_limit

Duration

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 ShiftTemplates, każde z około 20 możliwymi czasami rozpoczęcia i 2 wydarzeniami z ok. 30 możliwymi czasami rozpoczęcia oraz 2 dni przerwy w tygodniu, zalecane wartości to: <10 s w przypadku szybkich rozwiązań (i prawdopodobnie nieoptymalne), (10 s, 300 s) dla rozwiązań wysokiej jakości i ponad 300 s w przypadku kompleksowych wyszukiwań. Większe instancje mogą wymagać dłuższych limitów czasu.

Ta wartość nie jest sztywnym limitem i nie uwzględnia nakładów związanych z komunikacją. Przewidywany czas oczekiwania na rozwiązanie problemu może nieznacznie przekroczyć tę wartość.

multi_day_schedule

bool

Jeśli zasada ma wartość prawda, funkcja rozwiązania generuje EmployeeSchedule z kilkoma zmianami (np. w celu wygenerowania tygodniowego harmonogramu). W przeciwnym razie każde pole EmployeeSchedule zawiera dokładnie 1 korektę. W harmonogramach wielodniowych zakłada się, że godzina rozpoczęcia zmiany jest taka sama w poszczególnych dniach, a liczba dni wolnych od pracy w takim harmonogramie jest określana przez szablony zmian. Wartość domyślna to false (fałsz).

shift_events_can_change

bool

Jeśli wartość to prawda, wielodniowe zdarzenia EmployeeSchedule mogą obejmować zmiany, w przypadku których czas rozpoczęcia i zakończenia zdarzeń ich wydarzeń różnią się we wszystkich dniach. W przeciwnym razie wszystkie zmiany w określonym EmployeeSchedule muszą mieć ten sam czas rozpoczęcia i zakończenia wydarzenia. W obu przypadkach wszystkie zmiany w harmonogramie wielodniowym mają tę samą godzinę rozpoczęcia i zakończenia. W związku z tym ten parametr jest ignorowany, jeśli multi_day_schedule ma wartość fałsz. Ustawienie tego parametru na wartość true może wydłużyć czas rozwiązywania problemów. Wartość domyślna to false (fałsz).

WorkStatus

Wskazuje, czy pracownik pracuje, czy nie.

Wartości w polu enum
WORK_STATUS_UNSPECIFIED Nieznany stan zadania.
STATUS_WORK Stan przedstawiający pracownika.
STATUS_NOT_WORK Stan oznaczający niepracującego pracownika.