Rozwiązanie problemu z planowaniem stałych zmian z podanego zakresu SolveShiftSchedulingRequest
przez przypisanie pracowników do zmian w taki sposób, że pracownicy preferencje planowania są zmaksymalizowane, a naruszenia ograniczeń związane z planowaniem są zminimalizowane.
Żądanie HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling
Adres URL używa składni transkodowania gRPC.
Treść żądania
Treść żądania zawiera dane o następującej strukturze:
Zapis JSON |
---|
{ "requestId": string, "solveParameters": { object ( |
Pola | |
---|---|
requestId |
Identyfikator problemu lub prośby. |
solveParameters |
Parametry do sterowania pojedynczym rozwiązaniem zadania. |
employees[] |
Zaplanowanie wszystkich dostępnych pracowników. |
shifts[] |
Wszystkie zmiany tworzące harmonogram. |
coverageRequirements[] |
Wymagania dotyczące ochrony dla całego horyzontu planowania. Określają one liczbę pracowników, którzy muszą wykonywać poszczególne role lub posiadać określone umiejętności w określonym przedziale czasu lub na liście identyfikatorów zmian. Wszystkie wymagania dotyczące zakresu ochrony muszą być określone za pomocą przedziałów czasowych lub listy identyfikatorów zmian (ale nie obie). Przedziały czasu (jeśli są podane) dotyczące wymagań związanych z zasięgiem nie mogą się pokrywać w przypadku danej lokalizacji. Domyślny priorytet każdego z tych ograniczeń to |
roleIds[] |
Lista wszystkich możliwych ról na rynku pracy. Każdy pracownik musi mieć co najmniej 1 rolę, którą można mu przypisać na potrzeby zmiany. Rola oznacza konkretne zadanie wykonywane podczas zmiany (np.dyplomowana pielęgniarka, szef kuchni, kelner itp.). Gdy pracownik zostanie przydzielony na zmianę, otrzymuje też 1 konkretną rolę. |
skillIds[] |
Lista wszystkich umiejętności dostępnych na rynku pracy. Umiejętność odnosi się do wszelkich dodatkowych kwalifikacji pracowników (np.certyfikatów, używanych języków itp.), które nie są związane z przydzielonym stanowiskiem. Ta lista może być pusta. Gdy pracownik zostanie przydzielony na zmianę, musi spełnić wszystkie umiejętności potrzebne na tej zmianie. |
locationIds[] |
Lista wszystkich możliwych lokalizacji dla zbioru zmian w harmonogramie. Ta lista może być pusta. Określenie różnych lokalizacji może być przydatne, gdy na przykład kierowniczka pielęgniarki chce zaplanować pracę wielu pielęgniarek w różnych placówkach w szpitalu, a menedżer hotelu chce zaplanować pracę w kilku hotelach. |
budgetRequirements[] |
Specyfikacja budżetu, w którym wystąpił problem z planowaniem. Domyślny poziom priorytetu każdego z tych wymagań to |
assignmentsHint[] |
Przenoszenie przypisań, które mają być wstępnym rozwiązaniem problemu planowania (tzw. wskazówka). Wskazówki dotyczące przypisań są ignorowane, jeśli przypisanie jest sprzeczne z zmianą, której nie można przypisać, lub z żądaniem planowania. |
Treść odpowiedzi
Odpowiedź na interfejs API harmonogramu pracowników. W przypadku każdej odpowiedzi pole shiftAssignments
będzie puste, jeśli zwrócona dyrektywa solutionStatus
ma wartość NOT_SOLVED_DEADLINE_EXCEEDED
lub INFEASIBLE
. Jeśli zwrócona wartość solutionStatus
ma wartość OPTIMAL
lub FEASIBLE
, prawidłowe przypisanie przesunięcia jest zwracane w funkcji shiftAssignments
. Aby zapewnić prawidłowe przypisanie zmiany, obowiązują te właściwości:
- Każdy identyfikator pracownika jest zawarty w zbiorze pracowników podanym w żądaniu.
- Każdy identyfikator roli przypisany do pracownika jest zawarty w zestawie identyfikatorów ról danego pracownika.
- Każdy identyfikator przesunięcia jest zawarty w zestawie korekt podanych w żądaniu.
- Każdy identyfikator zmiany nie jest jednym z identyfikatorów zmian dla danego pracownika, których nie można przypisać.
- Pracownik nigdy nie zostanie przypisany na 2 pokrywające się zmiany.
- W przypadku danego harmonogramu nie narusza to żadnych ograniczeń ani żądań o priorytecie
PRIORITY_MANDATORY
.
W przypadku powodzenia treść żądania zawiera dane o następującej strukturze:
Zapis JSON |
---|
{ "requestId": string, "solutionStatus": enum ( |
Pola | |
---|---|
requestId |
Identyfikator żądania, z którym jest powiązana ta odpowiedź. |
solutionStatus |
Stan zwróconego rozwiązania. Jeśli rozwiązanie nie jest wykonalne ani OPTYMALIZOWANE, inne pola tego protokołu mogą być puste. Stan NOT_SOLVED_DEADLINE_EXCEEDED oznacza, że limit czasu został osiągnięty bez znalezienia możliwego rozwiązania lub ustalenia, czy istnieje możliwe rozwiązanie. Żądania mogą być niewykonalne, jeśli nie można spełnić ograniczeń poziomu priorytetu OBOWIĄZKOWE. |
shiftAssignments[] |
Lista wszystkich projektów. Każdy element |
statusMessage |
Jeśli pole |
SolveParameters
Parametry sterujące jednym rozwiązaniem problemu z planowaniem zmian.
Zapis JSON |
---|
{ "timeLimit": string } |
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. 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ą „ |
Pracownik
Pracownik, który ma zostać zaplanowany.
Zapis JSON |
---|
{ "id": string, "roleIds": [ string ], "skillIds": [ string ], "shiftPreferences": [ { object ( |
Pola | |
---|---|
id |
Unikalny identyfikator przypisany do tego pracownika. |
roleIds[] |
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. |
skillIds[] |
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. |
shiftPreferences[] |
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 |
schedulingConstraints[] |
Lista ograniczeń planowania dla tego pracownika. Domyślny poziom priorytetu każdego z tych ograniczeń to |
resourceConstraints[] |
Wszelkie dodatkowe ograniczenia harmonogramu, które nie są określone w zasadzie |
shiftRequests[] |
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ą |
hourlyContract |
Umowa, która określa stałe i nadgodzinne stawki godzinowe dla pracownika. |
ShiftPreference
Preferencja numeryczna określonego identyfikatora przesunięcia.
Zapis JSON |
---|
{ "shiftId": string, "preference": integer } |
Pola | |
---|---|
shiftId |
Identyfikator przesunięcia, dla którego określono preferencje. |
preference |
Większe wartości preferencji oznaczają bardziej pożądaną zmianę. |
SchedulingConstraint
Ograniczenie harmonogramu dla konkretnego pracownika. Określone ograniczenie jest stosowane tylko podczas określonego interwału [startDateTime,
endDateTime)
.
Zapis JSON |
---|
{ "priority": enum ( |
Pola | |
---|---|
priority |
Poziom priorytetu dla tego ograniczenia harmonogramu. Domyślny priorytet wszystkich ograniczeń planowania to |
startDateTime |
Godzina rozpoczęcia, w którym obowiązuje to ograniczenie harmonogramu (włącznie). |
endDateTime |
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: |
|
minimumMinutes |
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. |
maximumMinutes |
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. |
minimumConsecutiveWorkDays |
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. |
maximumConsecutiveWorkDays |
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. |
minimumShiftCount |
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. |
maximumShiftCount |
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. |
minimumRestMinutes |
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 [ |
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ść danego „zasobu” używane 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
.
Zapis JSON |
---|
{
"priority": enum ( |
Pola | |
---|---|
priority |
Poziom priorytetu tego ograniczenia zasobów. Domyślny priorytet wszystkich ograniczeń zasobów to |
resourceUsages |
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. Obiekt zawierający listę par |
minimumResourceUsage |
Minimalne wykorzystanie zasobów, które ma zostać spełnione. |
maximumResourceUsage |
Maksymalne wykorzystanie zasobów dla ograniczenia zasobów do spełnienia. |
ShiftRequest
Prośba pracownika o przypisanie lub nieprzypisanie do określonych zmian.
Zapis JSON |
---|
{ "priority": enum ( |
Pola | |
---|---|
priority |
Poziom priorytetu tego żądania planowania. Domyślny priorytet wszystkich żądań planowania to |
shiftIds[] |
Identyfikatory zmian w żądaniu dotyczącym harmonogramu. |
type |
Typ żądania, na przykład czy jest ono przypisane do zestawu zmian czy nie. |
WorkStatus
Informacja o tym, 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. |
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 nadgodziny. Rozwiązanie określa w przybliżeniu kompensację w czasie, aby minimalizować procentowy całkowity koszt lub osiągnąć budżet (patrz BudgetRequirement
). Nie jest to narzędzie do obliczania listy płac.
Zapis JSON |
---|
{
"baseHourlyRate": number,
"hourlyRateShiftDifferentials": {
string: number,
...
},
"overtimePeriods": [
{
object ( |
Pola | |
---|---|
baseHourlyRate |
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. |
hourlyRateShiftDifferentials |
Różnica stawek godzinowych, płatna dodatkowo: Obiekt zawierający listę par |
overtimePeriods[] |
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 baseHourlyRate
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 startDateTime
(włącznie) i endDateTime
(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.
Zapis JSON |
---|
{ "overtimeMultiplier": number, "startDateTime": { object ( |
Pola | |
---|---|
overtimeMultiplier |
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: |
startDateTime |
Godzina rozpoczęcia okresu w dogrywce. Jeśli zmiana pokrywa się w tym czasie, jej godziny są liczone od |
endDateTime |
Godzina zakończenia w dogrywce. Jeśli w tym czasie ta zmiana obejmuje czas, jego godziny są liczone maksymalnie do |
maximumRegularHours |
Maksymalna liczba godzin pracy, które są wypłacane według standardowej stawki (poza nadgodzinami). Ta ilość musi być dodatnia. |
Shift
Zmiana określa przedział czasu, w którym pracownicy mogą pracować.
Zapis JSON |
---|
{ "id": string, "locationId": string, "startDateTime": { object ( |
Pola | |
---|---|
id |
Unikalny identyfikator przypisany do tej zmiany. |
locationId |
Identyfikator lokalizacji, w której została przeprowadzona ta zmiana. To pole może być puste. |
startDateTime |
Godzina rozpoczęcia zmiany (włącznie). |
endDateTime |
Godzina zakończenia zmiany (bez jej uwzględnienia). Obecnie rozwiązanie dopuszcza tylko zmiany trwające mniej niż 24 godziny. |
breakRules[] |
Lista reguł przerw, które występują podczas zmiany. Pracownicy na tej zmianie otrzymują |
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 ruleIncrementMinutes
. 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.
Zapis JSON |
---|
{ "earliestStartTime": { object ( |
Pola | |
---|---|
earliestStartTime |
Najwcześniejszy czas rozpoczęcia przerwy (włącznie). Można ustawić tylko |
latestStartTime |
Ostatni czas rozpoczęcia przerwy (włącznie). Można ustawić tylko |
durationMinutes |
Czas trwania przerwy w minutach. |
ruleIncrementMinutes |
[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 |
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.
W przypadku danej roli lub umiejętności wymaganie ochrony jest spełnione, gdy w danym momencie w danym okresie (lub na każdą zmianę w shiftIds
) pracuje co najmniej targetEmployeeCount
osób. Z kolei wymóg dotyczący zakresu ochrony jest naruszany, jeśli w dowolnym momencie w danym przedziale czasu (lub dowolnej zmianie w wyniku shiftIds
) liczba pracowników pracujących w danym okresie jest mniejsza niż targetEmployeeCount
. Więcej pracowników niż targetEmployeeCount
nadal spełnia ten wymóg, ale liczba pracowników ogranicza liczbę osób, które je rozwiązały.
Zapis JSON |
---|
{ "startDateTime": { object ( |
Pola | |
---|---|
startDateTime |
Godzina rozpoczęcia wymagania dotyczącego ochrony (włącznie). Jeśli jest ustawione, pole |
endDateTime |
Godzina zakończenia wymogu ubezpieczenia (z wyłączeniem). Jeśli jest ustawione, pole |
locationId |
Lokalizacja, w której pracownicy są potrzebni. Pole |
shiftIds[] |
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 identyfikatory shiftId nie są puste, pola |
roleRequirements[] |
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 |
skillRequirements[] |
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 |
RoleRequirement
Wymagana liczba pracowników, którzy zostaną przypisani do określonej roli w danym okresie.
Zapis JSON |
---|
{
"roleId": string,
"targetEmployeeCount": integer,
"priority": enum ( |
Pola | |
---|---|
roleId |
Identyfikator roli dla wymagania. |
targetEmployeeCount |
Oczekiwana liczba pracowników przypisanych do danej roli w przedziale czasu. |
priority |
Poziom priorytetu tego ograniczenia wymaganego. Domyślny priorytet wszystkich ograniczeń zasobów to |
SkillRequirement
Wymagana liczba pracowników, którzy pracują w danym okresie i posiadają określone umiejętności.
Zapis JSON |
---|
{
"skillId": string,
"targetEmployeeCount": integer,
"priority": enum ( |
Pola | |
---|---|
skillId |
Identyfikator umiejętności, który spełnia wymagania. |
targetEmployeeCount |
Pożądana liczba pracowników o określonych umiejętnościach pracujących w danym okresie. |
priority |
Poziom priorytetu tego ograniczenia wymaganego. Domyślny priorytet wszystkich ograniczeń zasobów to |
BudgetRequirement
Wymagania dotyczące budżetu w danym przedziale czasu.
Zapis JSON |
---|
{ "totalBudget": number, "startDateTime": { object ( |
Pola | |
---|---|
totalBudget |
Łączny budżet w danym przedziale czasu. Jeśli priorytet wynosi Jeśli zasada |
startDateTime |
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. |
endDateTime |
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 |
Poziom priorytetu spełnienia wymagań dotyczących budżetu w określonym przedziale czasu. Domyślny priorytet to Pamiętaj, że jeśli ten priorytet jest wyższy niż inne priorytety ograniczeń, a zasada |
ShiftAssignment
Pracownik na potrzeby zmiany roli.
Zapis JSON |
---|
{
"employeeId": string,
"shiftId": string,
"roleId": string,
"breaks": [
{
object ( |
Pola | |
---|---|
employeeId |
Przypisywany identyfikator pracownika. |
shiftId |
Identyfikator zmiany przypisany do pracownika. |
roleId |
Identyfikator roli, do której przypisany jest pracownik na potrzeby tej zmiany. |
breaks[] |
Lista przerw w ramach tego przypisania zmiany. |
Przerwa
Przedział czasu, w którym pracownik przerywa pracę podczas zmiany.
Zapis JSON |
---|
{
"startDateTime": {
object ( |
Pola | |
---|---|
startDateTime |
Czas rozpoczęcia przerwy. |
durationMinutes |
Czas trwania przerwy w minutach. |
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. |