Indeks
Optimization
(interfejs)DesignShippingNetworkRequest
(komunikat)DesignShippingNetworkResponse
(komunikat)SolveMathOptModelRequest
(komunikat)SolveMathOptModelResponse
(komunikat)SolveShiftGenerationRequest
(komunikat)SolveShiftGenerationResponse
(komunikat)SolveShiftSchedulingRequest
(komunikat)SolveShiftSchedulingResponse
(komunikat)
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 |
---|
Rozwiązuje problem związany z projektowaniem i planowaniem sieci przesyłek liniowych (LSNDSP) na podstawie danych 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 |
---|
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 |
---|
Rozwiązuje problem generowania zmian z podanego elementu |
SolveShiftScheduling |
---|
Rozwiązanie problemu z planowaniem stałych zmian z podanego zakresu |
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 |
Identyfikator problemu lub prośby. |
solver_parameters |
Parametry rozwiązania. |
ports[] |
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[] |
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[] |
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[] |
Lista potencjalnych towarów (tj. kontenerowych) do zaspokojenia przez statki. |
vessel_services[] |
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 |
Identyfikator żądania, z którym jest powiązana ta odpowiedź. |
vessel_services[] |
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[] |
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 |
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 |
Wymagane. Matematyczna reprezentacja zadania optymalizacyjnego do rozwiązania. |
parameters |
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 |
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 |
Opis wyników rozwiązania modelu w żądaniu. |
messages[] |
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 |
Opcjonalnie. Parametry rozwiązania. |
shift_templates[] |
Wymagane. Zestaw szablonów zmian, które określają reguły generowania zmian. |
employee_demands[] |
Wymagane. Łączny popyt, jaki muszą pokryć zmiany wygenerowane przez firmę |
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:
- Każda zmiana wygenerowana w
employee_schedules
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
maximum_employee_count
tego szablonu. - Zbiór przypisanych pracowników zaspokaja zapotrzebowanie w każdym przedziale czasu.
Pola | |
---|---|
solution_status |
Stan zwróconego rozwiązania. Jeśli |
employee_schedules[] |
Zestaw zmian wygenerowanych przez narzędzie do rozwiązywania problemów wraz z liczbą pracowników przypisanych do każdego harmonogramu. |
demand_coverage_violations[] |
Przypadki naruszenia zasięgu popytu na podstawie przypisanego elementu |
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 |
Identyfikator problemu lub prośby. |
solve_parameters |
Parametry do sterowania pojedynczym rozwiązaniem zadania. |
employees[] |
Zaplanowanie wszystkich dostępnych pracowników. |
shifts[] |
Wszystkie zmiany tworzące harmonogram. |
coverage_requirements[] |
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 |
role_ids[] |
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[] |
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[] |
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[] |
Specyfikacja budżetu, w którym wystąpił problem z planowaniem. Domyślny poziom priorytetu każdego z tych wymagań to |
assignments_hint[] |
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:
- 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
.
Pola | |
---|---|
request_id |
Identyfikator żądania, z którym jest powiązana ta odpowiedź. |
solution_status |
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[] |
Lista wszystkich projektów. Każdy element |
status_message |
Jeśli pole |