Package google.research.optimization.v1

Indeks

Optymalizacja

Interfejs One Platform API przedstawiający zbiór rozwiązań do rozwiązywania problemów optymalizacyjnych na wysokim poziomie operacyjnym. MOE:begin_strip

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

Rozwiązuje problem związany z projektowaniem i planowaniem sieci przesyłek liniowych (LSNDSP) na podstawie danych DesignShippingNetworkRequest.

LSNDSP to złożony problem optymalizacyjny, który ma na celu znalezienie optymalnego projektu i planowania sieci wysyłkowej linii transportu publicznego. Celem jest zminimalizowanie całkowitego kosztu obsługi sieci przy jednoczesnym zaspokojeniu jak największego zapotrzebowania na ładunek między portami.

LSNDSP można podzielić na 2 główne podproblemy: projektowanie sieci i harmonogramy. Podproblem projektowania sieci określa zestaw portów, które będzie obsługiwać sieć, liczbę statków do rozmieszczenia na każdej trasie oraz trasy, które statki będą przebieżeć. Podproblem planowania określa harmonogramy żeglowania statków, biorąc pod uwagę czas potrzebny na przeprawę między portami, czas załadunku i rozładunku ładunku oraz zapotrzebowanie na transport ładunku między portami.

Mówiąc najprościej, LSNDSP polega na wyborze portów do obsługi i liczbie statków oraz planowaniu ich obsługi w taki sposób, aby zminimalizować koszty obsługi sieci przy jednoczesnej maksymalizacji przychodów z zaspokajania popytu na ładunek. Wymagającym podkomponentem LSNDSP jest kierowanie ładunków, które określa, jakie zapotrzebowanie należy spełnić i które trasy kierować do ładunku w celu zmaksymalizowania przychodów.

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

Wykonuje obliczenia modelu wejściowego i zwraca wynik od razu. Skorzystaj z tej opcji, gdy nie potrzebujesz wywołań zwrotnych, przyrostu wartości ani śledzenia postępu rozwiązania.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

Rozwiązuje problem generowania zmian z podanego elementu SolveShiftGenerationRequest przez generowanie korekt z określonych szablonów zmian w celu zaspokojenia zapotrzebowania pracowników.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

Rozwiązanie problemu z planowaniem stałych zmian z podanego zakresu SolveShiftSchedulingRequest przez przypisanie pracowników do zmian w taki sposób, aby ich preferencje dotyczące harmonogramu były zmaksymalizowane przez pracowników i zminimalizowane do zminimalizowania naruszeń ograniczeń dotyczących planowania.

DesignShippingNetworkRequest

Żądanie zawiera instancję LSNDSP i musi zawierać zestaw portów, listę kandydatów na nogi, zestaw klas statków i zbiór żądań towarów do spełnienia.

Pola
request_id

string

Identyfikator problemu lub prośby.

solver_parameters

SolverParameters

Parametry rozwiązania.

ports[]

Port

Lista możliwych portów, które można wywoływać w usługach statku. Żądanie może zawierać tylko identyfikatory portów, które znajdują się na tej liście.

leg_candidates[]

LegCandidate

Lista potencjalnych kandydatów na nogi, które można dodać do usług na statku. Żądanie może zawierać tylko identyfikatory kandydatów nog, które znajdują się na tej liście.

vessel_classes[]

VesselClass

Lista klas statków do świadczenia usług statków. Pamiętaj, że wszystkie statki tej samej klasy są całkowicie wymienne. Żądanie może zawierać tylko identyfikatory klas statków, które znajdują się na tej liście.

commodity_demands[]

CommodityDemand

Lista potencjalnych towarów (tj. kontenerowych) do zaspokojenia przez statki.

vessel_services[]

VesselService

Jako punkt początkowy do optymalizacji można wskazać sieć prawidłowych usług statków (zwykle w obecnym stanie sieci).

DesignShippingNetworkResponse

Odpowiedź zawiera rozwiązanie dla instancji LSNDSP przekazanej w żądaniu. Zawiera prawidłową sieć usług statków i ścieżek popytu. Całkowity popyt na towary przez każdy etap nie może przekraczać pojemności klasy statku obsługującego ten etap. Pamiętaj, że brak obsługi statków, które nie zostały zrealizowane, jest zawsze dobrym rozwiązaniem problemu z projektowaniem i planowaniem sieci przesyłek liniowych.

Pola
request_id

string

Identyfikator żądania, z którym jest powiązana ta odpowiedź.

vessel_services[]

VesselService

Sieć statków. Łączna liczba wykorzystanych statków w poszczególnych klasach nie może przekraczać wartości dostępnej dla danej klasy.

commodity_demand_paths[]

CommodityDemandPath

Lista wszystkich ścieżek popytu, którymi jest realizowany dodatni popyt na towary. Pamiętaj, że niektóre identyfikatory popytu na towary mogą nie zostać uwzględnione, jeśli żadne zapotrzebowanie nie zostało wysłane. Popyt na towary może też być częściowo zaspokajany. W przypadku każdego popytu na towary łączna zrealizowana ilość nie może przekroczyć całkowitego popytu. Ścieżki commodity_demand_path zależą od usług vessel_services (patrz definicja CommodityDemandPath).

SolveMathOptModelRequest

Prośba o jednoargumentowe rozwiązanie zdalne w MathOpt.

Pola
solver_type

SolverTypeProto

Opcjonalnie. Typ rozwiązania matematycznego do rozwiązania zadania liczbowego. Pamiętaj, że jeśli rozwiązanie nie obsługuje konkretnej funkcji modelu, procedura optymalizacji się nie powiedzie.

model

ModelProto

Wymagane. Matematyczna reprezentacja zadania optymalizacyjnego do rozwiązania.

parameters

SolveParametersProto

Opcjonalnie. Parametry do sterowania pojedynczym rozwiązaniem. Parametr allow_output jest obsługiwany w szczególności. W przypadku rozwiązań, które obsługują wywołania zwrotne wiadomości, ustawienie wartości Prawda spowoduje, że serwer zarejestruje wywołanie zwrotne wiadomości. Otrzymane wiadomości zostaną zwrócone w formacie SolveMathOptModelResponse.messages. W przypadku innych rozwiązań ustawienie parametru allow_output na wartość true spowoduje błąd.

model_parameters

ModelSolveParametersProto

Opcjonalnie. Parametry do sterowania pojedynczym rozwiązaniem, które są specyficzne dla modelu wejściowego (w sekcji SolveParametersProto znajdziesz parametry niezależne od modelu).

SolveMathOptModelResponse

Odpowiedź na jednoargumentowe rozwiązanie zdalne w funkcji MathOpt.

Pola
result

SolveResultProto

Opis wyników rozwiązania modelu w żądaniu.

messages[]

string

Jeśli użyto parametru SolveParametersProto.enable_output, będą one zawierać komunikaty logu dotyczące rozwiązań obsługujących wywołania zwrotne wiadomości.

SolveShiftGenerationRequest

Prośba o rozwiązanie zadania z generowaniem zmian. Reguły generowania zmian są określone w każdym szablonie ShiftTemplate. Pojedynczy szablon Shift może wygenerować wiele zmian w odpowiedzi. Zmiany wygenerowane i wybrane przez rozwiązanie muszą być zgodne z regułami określonymi w szablonie zmiany i uwzględniać określone zapotrzebowanie pracowników.

Pola
solver_config

SolverConfig

Opcjonalnie. Parametry rozwiązania.

shift_templates[]

ShiftTemplate

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

employee_demands[]

EmployeeDemand

Wymagane. Łączny popyt, jaki muszą pokryć zmiany wygenerowane przez firmę shift_templates.

SolveShiftGenerationResponse

Odpowiedź na problem z generowaniem zmian. Jeśli zwrócona funkcja solution_status ma wartość SOLVED, to w funkcji employee_schedules 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:

  1. Każda zmiana wygenerowana w employee_schedules jest zgodna z regułami określonymi w dokumencie ShiftTemplate.
  2. Każde zdarzenie wybrane na każdej zmianie jest zgodne z regułami określonymi w dokumencie ShiftTemplate.Event.
  3. Łączna liczba pracowników przypisanych do zbioru zmian wygenerowanych na podstawie tego samego szablonu Shift nie przekracza maximum_employee_count tego szablonu.
  4. Zbiór przypisanych pracowników zaspokaja zapotrzebowanie w każdym przedziale czasu.

Pola
solution_status

ShiftGenerationSolutionStatus

Stan zwróconego rozwiązania. Jeśli solution_status nie ma wartości SOLVED, pole employee_schedules jest puste.

employee_schedules[]

EmployeeSchedule

Zestaw zmian wygenerowanych przez narzędzie do rozwiązywania problemów wraz z liczbą pracowników przypisanych do każdego harmonogramu.

demand_coverage_violations[]

DemandCoverageViolation

Przypadki naruszenia zasięgu popytu na podstawie przypisanego elementu employee_counts w: employee_schedules. Dane employee_demands podane w żądaniu są zagregowane – jeśli 2 przedziały employee_demand się nakładają, żądanie jest sumowane w pokrywającej się części tego przedziału.

SolveShiftSchedulingRequest

Żądanie interfejsu API harmonogramu pracowników. Żądanie określa przynajmniej grupę pracowników, zestaw zmian, zestaw możliwych ról, które może wykonywać pracownik, oraz zestaw wymagań dotyczących zakresu ochrony. Wymagania dotyczące zakresu ochrony określają liczbę pracowników potrzebnych do wypełnienia każdej roli w danym okresie. Pracownicy przypisani do danej zmiany mają też przypisaną 1 (i tylko jedną) rolę na tę zmianę. Nie można przypisać pracowników do 2 pokrywających się zmian. W SolveShiftSchedulingResponse poniżej znajdziesz więcej informacji o tym, co sprawia, że przypisanie zmiany jest prawidłowe.

Dla każdego pracownika można określić dodatkowe ograniczenia harmonogramu, aby jeszcze bardziej ograniczyć występowanie problemu. Wszystkie ograniczenia harmonogramu i wymagania mają nadany priorytet (OBOWIĄZKOWE, WYSOKI, ŚREDNI, NISKI). Rozwiązanie musi spełniać wszystkie ograniczenia z priorytetem PRIORITY_MANDATORY. Rozwiązanie może naruszać ograniczenia o jakimkolwiek innym priorytecie, ale są one minimalizowane według priorytetu. Więcej informacji o sposobie obsługi poziomów priorytetów dla poszczególnych ograniczeń znajdziesz w wyliczeniu Priority.

Rozwiązanie będzie próbowało zmaksymalizować wartości ShiftPreference.preference dla każdego pracownika z uwzględnieniem podanych ograniczeń. Rozwiązanie nie będzie naruszać ograniczenia, aby spełnić więcej preferencji. Naruszy je tylko wtedy, gdy przypisanie planowania jest niemożliwe w ramach danych ograniczeń.

Uwaga o czasie: wszystkie godziny w zadaniu są podawane za pomocą komunikatu DateTime. Ta wiadomość zawiera pole TimeZone. Przyjmuje się, że strefa czasowa jest ustawiona jako strefa czasowa UTC, chyba że użytkownik określi inaczej. Komunikaty typu DateTime należy podawać z dokładnością do minut. Wszystkie sekundy i nanos są ignorowane.

Pola
request_id

string

Identyfikator problemu lub prośby.

solve_parameters

SolveParameters

Parametry do sterowania pojedynczym rozwiązaniem zadania.

employees[]

Employee

Zaplanowanie wszystkich dostępnych pracowników.

shifts[]

Shift

Wszystkie zmiany tworzące harmonogram.

coverage_requirements[]

CoverageRequirement

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 PRIORITY_MANDATORY w przypadku wymagań roli i PRIORITY_LOW w przypadku wymagań dotyczących umiejętności. Więcej informacji znajdziesz w danych wyliczeniowych Priority.

role_ids[]

string

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ę.

skill_ids[]

string

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.

location_ids[]

string

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 oddziałach w szpitalu, a menedżer hotelu chce przydzielić pracowników do kilku hoteli.

budget_requirements[]

BudgetRequirement

Specyfikacja budżetu, w którym wystąpił problem z planowaniem. Domyślny poziom priorytetu każdego z tych wymagań to PRIORITY_LOW. Więcej informacji znajdziesz w danych wyliczeniowych Priority.

assignments_hint[]

ShiftAssignment

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.

SolveShiftSchedulingResponse

Odpowiedź na interfejs API harmonogramu pracowników. W przypadku każdej odpowiedzi pole shift_assignments będzie puste, jeśli zwrócona dyrektywa solution_status ma wartość NOT_SOLVED_DEADLINE_EXCEEDED lub INFEASIBLE. Jeśli zwrócona wartość solution_status ma wartość OPTIMAL lub FEASIBLE, prawidłowe przypisanie przesunięcia jest zwracane w funkcji shift_assignments. Aby zapewnić prawidłowe przypisanie zmiany, obowiązują te właściwości:

  1. Każdy identyfikator pracownika jest zawarty w zbiorze pracowników podanym w żądaniu.
  2. Każdy identyfikator roli przypisany do pracownika jest zawarty w zestawie identyfikatorów ról danego pracownika.
  3. Każdy identyfikator przesunięcia jest zawarty w zestawie korekt podanych w żądaniu.
  4. Każdy identyfikator zmiany nie jest jednym z identyfikatorów zmian dla danego pracownika, których nie można przypisać.
  5. Pracownik nigdy nie zostanie przypisany na 2 pokrywające się zmiany.
  6. W przypadku danego harmonogramu nie narusza to żadnych ograniczeń ani żądań o priorytecie PRIORITY_MANDATORY.

Pola
request_id

string

Identyfikator żądania, z którym jest powiązana ta odpowiedź.

solution_status

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.

shift_assignments[]

ShiftAssignment

Lista wszystkich projektów. Każdy element ShiftAssignment określa pracownika, zakres zmiany, do którego jest przypisany, oraz rolę, do której ma zostać przypisany.

status_message

string

Jeśli pole solution_status nie jest optymalne, to pole może zawierać dodatkowe informacje o rozwiązaniach.