Poprawa wydajności aparatu planowania
Aparat planowania zasobów jest używany podczas planowania marszrut dla planowanych i zwolnionych zleceń produkcyjnych. Aparat został pierwotnie wydany w ramach systemu Dynamics AX 2012, a od tego momentu wprowadzono kilka udoskonaleń.
Problem z planowaniem pracy w module produkcyjnym jest niezwykle skomplikowanym problemem kombinatorycznym, w którym czas rozwiązania wzrasta w sposób wykładniczy wraz z liczbą zmiennych decyzji. Często odbiorcy konfigurują marszruty produkcji i powiązane dane w sposób, który powoduje problem z planowaniem, którego nie można rozwiązać w rozsądnym czasie, nawet w przypadku najbardziej nowoczesnego sprzętu. Ten artykuł ułatwi zrozumienie aparatu planowania oraz sposobu, w jaki określone ustawienia mogą mieć wpływ na wydajność.
Jeśli chodzi o poprawę wydajności planowania, ogólne wskazówki zalecają zmniejszenie złożoności problemu, który musi zostać rozwiązany przez aparat. Poniżej przedstawiono niektóre z głównych czynników, które mogą mieć wpływ na wydajność:
- Marszruty z wieloma operacjami
- Marszruty z równoległymi operacjami
- Operacje zawierające więcej niż jeden zasób
- Operacje z wieloma odpowiednimi zasobami
- Używanie łączy stałych
- Używanie ograniczonych zdolności produkcyjnych
- Liczba różnych używanych kalendarzy
- Liczba przedziałów czasu pracy dziennie w kalendarzu
- Łączny czas trwania marszruty
- Uruchamianie wielu aparatów planowania równolegle
Przegląd podstawowego przepływu planowania
Aby zrozumieć, w jaki sposób dana konfiguracja może mieć wpływ na wydajność, ważne jest zrozumienie, w jaki sposób przebiega proces przepływu, zarówno wewnątrz aparatu, jak i w otaczającym go kodzie X++.
Podstawowy proces planowania zamówienia składa się z trzech głównych kroków:
- Ładowanie danych — w tym miejscu modele danych X++ są przekształcane w wewnętrzny model danych aparatu w postaci zadań i ograniczeń.
- Planowanie — jest to główne źródło planowania, które przetwarza dany model i ograniczenia, a następnie generuje wynik. W trakcie tego procesu aparat będzie żądał informacji o czasie pracy i istniejących rezerwacjach zdolności produkcyjnych z X++, jeśli jest to konieczne.
- Zapisywanie danych — wynik aparatu w postaci gniazd rezerwacji zdolności produkcyjnych jest przetwarzany przez kodu X++ w celu zapisania rezerwacji zdolności produkcyjnych i zaktualizowania godzin rozpoczęcia i zakończenia zadań/operacji/zlecenia.
Ładowanie danych do aparatu
Aparat planowania ma bardziej abstrakcyjny model danych niż baza danych Supply Chain Management, ponieważ został on zbudowany jako aparat ogólny, który może obsługiwać różne źródła danych. Pojęcia dotyczące marszruty, operacji dodatkowych i czasu działania muszą zostać „przetłumaczone” na zadanie ogólne i model ograniczeń, które udostępnia dany aparat. Logika tworzenia modelu ma istotną część logiki biznesowej i jest różna w zależności od danych źródłowych. Odpowiedzialna klasa X++ to WrkCtrScheduler
i ma klasy pochodne dla planowanych zleceń produkcyjnych, zwolnionych zleceń produkcyjnych i prognoz projektów.
Rozważmy na przykład trasę podaną w poniższej tabeli i obrazie, która wygląda stosunkowo prosto.
Nr Nr | Priorytet | Czas przezbrajania | Czas procesu | Czas oczekiwania po | Ilość zasobów | Następny |
---|---|---|---|---|---|---|
10 | Główne | 1.00 | 2.00 | 1 | 20 | |
10 | Podrzędna 1 | 1 przypada na wpłatę z zysku na rzecz budżetu państwa | 20 | |||
20 | Główne | 3.00 | 1,00 | 3 | 0 |
Po wysłaniu tego obrazu do aparatu jest on dzielony na osiem zadań, tak jak to pokazano na poniższej ilustracji (należy wybrać obraz, aby go powiększyć).
Standardowe łącze między dwoma zadaniami to FinishStart
oznaczające, że godzina zakończenia jednego zadania musi być wcześniejsza niż godzina rozpoczęcia innego zadania. Ponieważ konfiguracja musi zostać wykonana przez ten sam zasób, który będzie później wykonywać proces, istnieją między nimi ograniczenia OnSameResource
. Między zadaniami podstawowymi i drugorzędnymi dla 10, istnieją łącza StartStart
i FinishFinish
, co oznacza, że zadania jednocześnie muszą się rozpoczynać i kończyć w tym samym czasie, i istnieją ograniczenia NotOnSameResource
, które uniemożliwiają zastosowanie tego samego zasobu jako podstawowego i pomocniczego.
W przypadku operacji 20, gdzie ilość zasobów została ustawiona na 3, zadanie procesu zostało podzielone na trzy odrębne zadania, w których wszystkie zadania muszą być wykonywane dokładnie w tym samym czasie. W takim przypadku grupa marszruty została skonfigurowana tak, aby nie rezerwowała zdolności produkcyjnych dla kolejki po godzinach, dlatego że kolejka ma tylko jedno zadanie.
Aparat planowania rozumie tylko pojęcia dotyczące zadań i nie ma informacji o operacjach. Oznacza to, że podczas planowania operacje są także dzielone na zadania, mimo że nie zostaną utrwalone w bazie danych.
Dla każdego zadania zdefiniujemy także wymagania dotyczące zdolności produkcyjnych zadania (wymaganą liczbę sekund). W zależności od sposobu zdefiniowania wymagań dotyczących zasobów możemy również wysłać do każdego zadania listę wszystkich potencjalnych zasobów, na których to zadanie może być uruchomione, oraz zapotrzebowanie na zdolności produkcyjne dla określonego zasobu. Mimo że podczas konstruowania modelu jest wysyłana lista odpowiednich zasobów, aparat nadal musi sprawdzić, czy przypisanie zasobu jest prawidłowe dla całego czasu trwania zadania.
Elementy wewnętrzne aparatu planowania
Interfejs aparatu planowania
Aby zrozumieć, w jaki sposób aparat działa wewnętrznie, najlepiej jest przeanalizować zewnętrzne funkcje. W kodzie X++ głównym interfejsem jest WrkCtrSchedulerEngineInterface
. Zawiera metody opisane w poniższych podsekcjach.
Aparat ogólny
Metoda | Cel |
---|---|
run |
Planuje wszystkie załadowane zadania i zwraca kod błędu. |
getJobSchedulingSequenceResult |
Pobiera wynik planowania i pierwsze zadanie błędu dla sekwencji oznaczonej określonym zadaniem. |
validateJobCapacityReservations |
Sprawdza poprawność rezerwacji zdolności produkcyjnych dla wszystkich zadań przechowywanych przez aparat. |
setReservationsTimeStamp |
Wysyła sygnaturę czasową do aparatu ustawionego we wszystkich nowych rezerwacjach zdolności produkcyjnych dla zaplanowanych zadań w pamięci podręcznej aparatu. |
addPropertyToGroupAggregation |
Dodaje prefiks właściwości do zbioru właściwości używanego podczas agregowania zdolności produkcyjnych. |
addResource |
Dodaje zasób do puli zasobów aparatu planowania. |
addResourceGroup |
Dodaje grupę zasobów do puli grup zasobów aparatu planowania. |
addResourceGroupMembership |
Dodaje zasób jako element do grupy zasobów. |
addOptimizationGoal |
Dodaje cel optymalizacji planowania (czas trwania lub priorytet). |
Poszczególne zadania
Metoda | Cel |
---|---|
addJobInfo |
Dodaje rekord informacji o zadaniu, który informuje aparat o zaplanowanym zadaniu. |
addConstraintJobEndsAt |
Dodaje ograniczenie, które zadanie ma zakończyć w określonym dniu i o określonej godzinie. |
addConstraintJobStartsAt |
Dodaje ograniczenie, które zadanie ma rozpocząć w określonym dniu i o określonej godzinie. |
addConstraintMaxJobDays |
Definiuje ograniczenie, które może obejmować zadanie w okresie dłuższym niż maksymalna liczba dni. |
addConstraintResourceRequirement |
Umożliwia dodanie ograniczenia, które określa, że zadanie musi zostać zaplanowane w określonym zasobie. |
addJobBindPriority |
Dodaje priorytet powiązania zadania dla pary (zadanie, poziom ograniczeń). Wyższa wartość priorytetu oznacza, że zmienne zadania zostaną powiązane wcześniej. Zadanie będzie przetwarzane przed zadaniami o niższej wartości priorytetu w tej samej kolejności. |
addJobCapacity |
Umożliwia dodanie informacji o ładowaniu zdolności produkcyjnych dla zadania (np. wymagane środowisko uruchomieniowe zadania) niezależnie od zasobu, na którym jest uruchamiane zadanie. |
addJobResourceCapacity |
Dodaje zasób do zbioru zasobów, które mogą być używane do wykonywania zadania i określa zdolności produkcyjne wymagane podczas uruchamiania w tym zasobie. |
addJobGoal |
Dodaje informacje dotyczące celu zadania dla określonego poziomu ograniczenia (najwcześniejsza godzina zakończenia lub najpóźniejsza godzina rozpoczęcia). |
addJobResourcePriority |
Dodaje priorytet, który ma być używany, gdy zadanie jest zaplanowane dla zasobu. |
addJobResourceRuntime |
Określa czas zadania zależny od zasobu, w którym zadanie zostanie zaplanowane. |
addJobRuntime |
Określa czas zadania niezależny od zasobu, w którym zadanie zostanie zaplanowane. |
scheduleJobOnResourceGroup |
Umożliwia oznaczenie zadania planowania na poziomie grupy zasobów. |
setJobResourcePreemptionAllowed |
Określa, czy dla zadania w zasobie jest dozwolone wywłaszczenie (Jeśli aparat może zaplanować zadanie w nieciągłych gniazdach wydajności). |
setRequiredNumberOfResources |
Umożliwia ustawienie liczby zasobów wymaganych do zaplanowania zadania (tylko w przypadku planowania operacji). |
Ograniczenia między zadaniami
Metoda | Cel |
---|---|
addJobLink |
Dodaje łącze (np. zakończenie>rozpoczęcie) między dwoma zadaniami. |
addConstraintEndsDelayed |
Definiuje ograniczenie, które określa, że nie zadanie nie może się zakończyć przed zakończeniem innego zadania i upłynięciem czasu opóźnienia. |
addConstraintJobListWorkingTimeIntersect |
Dodaje ograniczenie określające, że gniazda zdolności produkcyjnych zarezerwowane dla zadań przypadać w przecinających się godzinach pracy dla dwóch zasobów używanych przez zadania. |
addConstraintJobOverlap |
Dodaj ograniczenie określające, w jaki sposób zadania są ustawiane kolejno, gdy dana ilość towaru może zostać przeniesiona między dwoma zasobami, gdy przetwarzanie pierwszego zasobu jeszcze nie zostało zakończone, tak aby drugi zasób mógł rozpocząć przetwarzanie. |
addConstraintNotOnSameResource |
Umożliwia dodanie ograniczenia, które określa, że dwa zadania nie powinny być planowane na tym samym zasobie. |
addConstraintOnSameResource |
Umożliwia dodanie ograniczenia, które określa, że dwa zadania muszą używać tego samego zasobu. |
addJobSameReservations |
Dodaje ograniczenie, które określa, że zadanie musi na końcu mieć te same rezerwacje zdolności produkcyjnych dla tych samych przedziałów czasu, co zadanie główne. |
setPrimaryParallelJob |
Dodaje informacje o tym, jakie zadanie jest zadaniem głównym w zestawie zadań równoległych. |
Zmienna
Sam aparat stanowi zasadniczo specjalistyczny solwer ograniczeń z dodanymi niestandardowymi heurystykami. Solver jest oparty na dwóch głównych elementach: zmiennych i ograniczeniach.
Zmienna
Zmienna oznacza domenę możliwych wartości. Aparat planowania ma dwa typy zmiennych:
- Zmienna DateTime — ma domenę wszystkich dat i godzin, a domena może być ograniczona przez zbliżenie dolnej i górnej granicy czasu zmiennej.
- Zmienna zasobu — ma domenę odpowiednich zasobów, a domena może podlegać ograniczeniom, eliminując zasoby z listy.
Ograniczenie
Ograniczenie działa w odniesieniu do zmiennych przez ograniczenie ich domen, ale jest również zależne od zmiennych, dzięki czemu jest uaktywniane po zmianie zmiennych. Proces „propagacji ograniczeń” oznacza, że warunek ograniczający wykonuje główną funkcję i raportuje z powrotem do logiki głównej w przypadku powodzenia.
Zmienna jest uznawana za powiązaną, jeśli nie może być dalej ograniczona, co dla zmiennej DateTime oznacza, że górna i dolna granica są takie same, a zmienna zasobu ma tylko jeden odpowiedni zasób. Jeśli wszystkie zmienne są powiązane, zostanie znalezione rozwiązanie.
Poziomy ograniczeń
Jeśli planowanie jest wykonywane jako część fazy planowania zapotrzebowania na materiały (MRP), zamówienia zostaną zaplanowane wstecz od daty zapotrzebowania. Jeśli jednak nie można odnaleźć harmonogramu rozpoczynającego się dzisiaj lub późniejszego i kończącego się przed datą zapotrzebowania, kierunek planowania zmieni się na biegnący od daty bieżącej.
Główna reguła biznesowa jest obsługiwana przez uporządkowanie ograniczeń na poziomach. Jeśli podczas używania ograniczeń na najwyższym poziomie nie zostanie znalezione rozwiązanie, ograniczenia na tym poziomie pozostaną usunięte i zostanie użyty poziom niższy. W praktyce oznacza, że w przypadku planowania wstecz model będzie zawierał poziom 1 z celami zadania o najpóźniejszym czasie rozpoczęcia, odpowiadającym maksymalnemu ograniczeniu czasu zakończenia (dacie zapotrzebowania) oraz poziomowi 0 z celami zadania o najwcześniejszym czasie zakończenia i mającym minimalne ograniczenie czasu rozpoczęcia w dniu dzisiejszym.
Algorytm
Główne kroki algorytmu aparatu to:
- Znalezienie sekwencji (łańcuchów zadań), które można rozwiązać osobno.
- Spróbuj znaleźć początkowe rozwiązanie sekwencji dla najwyższego poziomu ograniczeń.
- Posortuj zadania w sekwencji na podstawie celu i priorytetów zadania, co pozwala na znalezienie zadania rozpoczęcia.
- Zapętl zadania w następującej kolejności:
- Znajdź wszystkie ograniczenia, które muszą zostać rozpropagowane i uruchom propagację.
- Jeśli wszystkie zmienne dla zadania zostały powiązane, znaleziono rozwiązanie tego zadania.
- Jeśli nie można powiązać jednej ze zmiennych bez naruszania ograniczeń, wycofaj powiązanie zmiennej, spróbuj użyć innej wartości w domenie (dla zmiennej zasobu) i ponownie uruchom propagację ograniczeń.
- Jeśli nie znaleziono rozwiązania, wszystkie ograniczenia na bieżącym poziomie ograniczeń zostaną usunięte, a poziom ograniczenia obniżony (jeśli są dostępne niższe poziomy), a wyszukiwanie rozwiązania zostanie ponowione przy użyciu nowego zestawu ograniczeń.
- Jeśli znaleziono wykonalne rozwiązanie, rozpocznie się faza optymalizacji, w której zostanie podjęta próba znalezienia lepszego rozwiązania do czasu osiągnięcia limitu czasu optymalizacji lub wyczerpania wszystkich kombinacji zasobów.
Solver ograniczeń nie ma informacji o charakterystyce algorytmu planowania. „Magia” dzieję się w definicji i kombinacji różnych ograniczeń.
Określanie czasu pracy
Duża część ograniczeń (wewnętrznych) w aparacie steruje czasem pracy i zdolności produkcyjnych zasobu. W zasadzie zadaniem jest przechodzenie gniazd czasu pracy zasobu z określonego punktu w danym kierunku i znalezienie długiego interwału, w którym może zmieścić się wymagana wydajność (czas) zadań.
W tym celu aparat musi mieć informacje o czasie pracy zasobu. W przeciwieństwie do danych modelu głównego czas pracy jest ładowany z opóźnieniem, co oznacza, że jest ładowany do aparatu w razie potrzeby. Powodem tego podejścia jest to, że często istnieje w Supply Chain Management czas pracy dla kalendarza przez bardzo długi okres i zazwyczaj istnieje wiele kalendarzy, więc wstępnie ładowane dane mogą być dość duże.
Informacje w kalendarzu są wymagane przez aparat we fragmentach przez wywołanie metody klasy X++ WrkCtrSchedulingInteropDataProvider.getWorkingTimes
. Żądanie dotyczy określonego identyfikatora kalendarza w określonym danym czasu. W zależności od stanu pamięci podręcznej serwera w Supply Chain Management każde z tych żądań może się zakończyć kilkoma wywołaniami bazy danych, co zabiera dużo czasu (w odniesieniu do czystego czasu obliczeniowego). Ponadto, jeśli kalendarz zawiera bardzo rozbudowane definicje czasu pracy z wieloma dziennymi przedziałami czasu pracy, zwiększa to czas trwania ładowania.
Gdy dane czasu pracy są ładowane do aparatu planowania, są zachowywane w wewnętrznej pamięci podręcznej dla określonego kalendarza, co oznacza, że jeśli inne zadania lub zasoby używają tego samego kalendarza, kolejne wyszukiwania mogą być wykonywane szybko z pamięci. Jedną z najczęstszych przyczyn nieprawidłowej wydajności jest użycie osobnego identyfikatora kalendarza dla każdego zasobu, ponieważ konieczne będzie żądanie danych dla każdego z kalendarzy, nawet jeśli zawartość kalendarzy może być taka sama.
Ograniczone zdolności produkcyjne
Jeśli używane są ograniczone zdolności produkcyjne, przedziały czasu pracy z kalendarza są dzielone i zmniejszane na podstawie istniejących rezerwacji zdolności produkcyjnych. Te rezerwacje są również pobierane przy użyciu tej samej klasy WrkCtrSchedulingInteropDataProvider
co kalendarze, ale używają metody getCapacityReservations
. W przypadku planowania w trakcie planowania głównego są brane pod uwagę rezerwacje określonego planu głównego, a jeśli są włączone na stronie Parametry planowania głównego, uwzględniane są także rezerwacje z ustalonych zleceń produkcyjnych. Podobnie podczas planowania zlecenia produkcyjnego jest to również opcja, która uwzględnia rezerwacje z istniejących zamówień planowanych, chociaż nie jest to powszechne, tak jak w poprzednim przypadku.
Użycie ograniczonych zdolności produkcyjnych spowoduje, że planowanie będzie trwać dłużej z kilku powodów:
- Pobieranie informacji o zdolnościach produkcyjnej z bazy danych jest powolną operacją, a buforowanie informacji o zdolnościach produkcyjnych na serwerze zazwyczaj nie jest tak dobre jak w przypadku czasu pracy, ponieważ nie są współużytkowane w zasobach typowych dla kalendarzy.
- Liczba przedziałów czasu pracy do przejścia zwiększa się z powodu podziałów, a aby można było znaleźć rozwiązanie, zwykle należy przeanalizować przedziały dla dłuższego okresu.
- Po zakończeniu planowania konieczne jest sprawdzenie, czy istnieją rezerwacje powodujące konflikt (patrz część „Równoległe uruchamianie aparatów planowania”).
Sprawdzanie kombinacji zasobów
Jeśli sekwencja zadań zawiera tylko standardowe łącza FinishStart
, co oznacza, że formularz jest prostym łańcuchem bez oddziałów, optymalny wynik (widoczny w jednym zamówieniu, nie między kolejnymi zamówieniami) można uzyskać przez znalezienie najlepszego rozwiązania dla pierwszego zadania, a następnie znalezienia najlepszego rozwiązania dla następnego zadania. Najlepszym rozwiązaniem zadania jest znalezienie zasobu, który może uzyskać datę początkową i końcową zadania najbardziej zbliżonego do celu zadania (w procesie planowania od dnia dzisiejszego oznacza to uzyskanie daty zakończenia zadania możliwie najwcześniej) przy zachowaniu tych ograniczeń.
Jeśli istnieją zadania równoległe, znalezienie rozwiązania może wymagać zbadania różnych kombinacji zasobów. Liczba możliwych kombinacji zasobów wynika z liczby zasobów odpowiednich dla połączonych zadań równoległych. Szczególnie w przypadku planowania zamówienia wstecz od daty zapotrzebowania potrzebny jest czas, aby logika mogła określić, że nie ma rozwiązania problemu, który spowoduje, że zadania równoległe nie zmieszczą się przed datą dzisiejszą, co będzie wymagało sprawdzenia wszystkich kombinacji, ponieważ mogą istnieć pewne zasoby o wyższej wydajności lub innym kalendarzu, który może dać wynik. Oznacza to, że jeśli limit czasu nie zostanie skonfigurowany, będzie on uruchomiony przez dłuższy czas przed zmianą kierunku na do przodu.
Ta logika kombinatoryczna oznacza, że dodanie większej liczby odpowiednich zasobów może spowodować wolniejsze uruchamianie aparatu. Jeśli występują problemy z wydajnością podczas wykonywania równoległych operacji i planowania z nieskończonymi zdolnościami produkcyjnymi, można je częściowo rozliczyć, konfigurując projektanta marszrut w celu podjęcia decyzji, który zasób powinien zostać użyty, a następnie bezpośredniego przypisywania zasobu do operacji (ponieważ aparat w większości przypadków zawsze zakończy pobieranie tego samego zasobu, więc wynik końcowy będzie taki sam).
Łącza stałe
Ustawienie typu łącza między dwoma zadaniami na stałe gwarantuje, że nie ma przerwy w przedziale czasu między zakończeniem jednego zadania a początkiem kolejnego. Może to być bardzo przydatne w scenariuszach takich jak wtedy, gdy metal jest podgrzewany w jednym zadaniu, a następnie przetwarzany w następnym zadaniu, gdzie nie jest pożądane schładzane metalu między nimi.
W przypadku standardowych łączy miękkich i planowania do przodu, jeśli marszruta tworzy prosty łańcuch bez oddziałów, można uzyskać wynik, wyszukując rozwiązanie dla pierwszego zadania, które spełnia jego własne ograniczenia, a następnie przechodząc przez łańcuch propagacji czasu zakończenia z poprzedniego zadania do następnego zadania. Jeśli bieżące zadanie nie może znaleźć zdolności produkcyjnych, czas rozpoczęcia dla tego zadania zostanie przesunięty najpóźniej, bez żadnego związku z poprzednimi zadaniami, potencjalnie tworząc przerwy między zadaniami. Jednak w przypadku łączy stałych (szczególnie w związku z ograniczonymi zdolnościami produkcyjnymi) w tym samym scenariuszu fakt, że jedno zadanie późniejsze w łańcuchu zdolności produkcyjnych nie ma możliwości znalezienia zdolności produkcyjnych oznacza, że wszystkie poprzednie zaplanowane zadania muszą być „przeciągnięte” pojedynczo, a w konsekwencji ponownie zaplanowane wiele razy. W szczególności w scenariuszach z wysokim obciążeniem dla wielu zasobów stałe łącza mogą powodować reakcje łańcuchowe, w których zadania mają wpływ na siebie, a wiele iteracji będzie wymagało wykonania przed ustabilizowaniem wyników do wykonalnego harmonogramu.
Uruchamianie aparatów planowania równolegle
Podczas planowania w ramach procesu planowania głównego, w którym używani są pomocnicy, każdy wątek pomocniczy planowania głównego może również pobierać zadania planowania zlecenia produkcyjnego. Oznacza to, że wiele aparatów planowania może być uruchomionych w tym samym czasie. Choć wielowątkowość jest bardzo istotną zaletą wydajności, istnieją również pewne wady funkcjonalne dotyczące planowania.
W module MRP wszystkie zlecenia produkcyjne dla danego poziomu listy składowej (BOM) są planowane w sekwencjach dat zapotrzebowania, co oznacza, że zamówienia z najwcześniejszą datą zapotrzebowania powinny być zaplanowane jako pierwsze i w ten sposób mieć największą szansę na uzyskanie dostępnej zdolności produkcyjnej zasobu. Jednak w przypadku wielu aparatów pobierających z listy nieplanowanych zamówień sekwencja nie jest już zapewniana, ponieważ jeden może zakończyć pracę szybciej niż drugi.
Ponadto podczas planowania przy użyciu ograniczonych zdolności produkcyjnych i gdy wiele wystąpień aparatów próbuje zaplanować zamówienia, które mogą potencjalnie korzystać z tych samych zasobów w tym samym przedziale czasu, może wystąpić stan wyścigu. Liczba takich stanów wyścigu jest rejestrowana w polu Konflikty planowania na stronie historii planów głównych. Logika rozwiązywania konfliktów jest następująca:
- Zaplanuj zamówienie (bez blokady) i pobierz rezerwacje zdolności produkcyjnych.
- Użyj blokady.
- Sprawdź, czy istnieją nowsze rezerwacje zdolności produkcyjnych dla zaplanowanych zasobów w przedziale czasu.
- Jeśli nie, zapisz zdolności produkcyjne i zwolnij blokadę.
- Jeśli tak, zwolnij blokadę i ponownie zaplanuj zamówienie od początku.
Dlatego podczas planowania z wieloma wystąpieniami aparatu wynik nie jest całkowicie określony, ponieważ będzie zależny od dokładnego czasu trwania każdego z wątków.
Wydajność planowania operacji
Chociaż planowanie operacji jest również nazywane wstępnym planowaniem zdolności produkcyjnych, z punktu widzenia aparatu, może to utrudnić rozwiązanie problemu, jeśli są używane ograniczone zdolności produkcyjne, ponieważ więcej danych jest potrzebnych do określenia wykonalności.
Zdolności produkcyjne grupy zasobów zależą od tego, jakie i ile zasobów należy do danej grupy zasobów. Grupa zasobów w sama w sobie nie ma żadnych zdolności produkcyjnych — tylko gdy zasoby są elementami grupy, będą mieć zdolności produkcyjne. Ponieważ członkostwo grupy zasobów może się różnić w miarę upływu czasu, zdolności produkcyjne muszą być oceniane codziennie.
W planowaniu operacji kalendarz grupy zasobów służy do ustalania godzin rozpoczęcia i zakończenia każdej operacji. Oznacza to, że kalendarz grupy zasobów określa limit czasu, w którym operacje są planowane dla jednej operacji w jednym dniu w jednej grupie zasobów. W przeciwieństwie do kalendarza dla określonych zasobów dane dotyczące wydajności kalendarza są ignorowane dla grupy zasobów, ponieważ oznaczają po prostu godziny otwarcia, a nie rzeczywiste zdolności produkcyjne.
Jeśli na przykład czas pracy dla grupy zasobów w określonym dniu wynosi od 8:00 do 16:00, jedna operacja nie może nałożyć większego obciążenia na grupę zasobów, niż może ona zawierać w ciągu 8 godzin, bez względu na ilość zdolności produkcyjnych, która w danym dniu była dostępna dla danej grupy zasobów. Dostępne zdolności produkcyjne mogą jednak dodatkowo ograniczyć obciążenie.
Obciążenie pracą z planowania zadań na wszystkich zasobach uwzględnionych w grupie zasobów jest brane pod uwagę w przypadku obliczania dostępnych zdolności produkcyjnych dla grupy zasobów w danym dniu. Dla każdej daty obliczenie jest następujące:
Dostępna pojemność grupy zasobów = pojemność zasobów w grupie na podstawie ich kalendarza — Zaplanowane zadanie obciążenia zasobów w grupie — Zaplanowane operacje obciążenia zasobów w grupie — Zaplanowane obciążenie operacji w grupie zasobów
Na karcie Zapotrzebowanie na zasoby w operacji marszruty zapotrzebowanie na zasoby można określać przy użyciu danego zasobu (w takim przypadku operacja będzie planowana na podstawie tego zasobu), dla grupy zasobów, dla typu zasobu lub dla jednego lub większej liczby możliwości, umiejętności, kursu lub certyfikatu. Użycie wszystkich tych opcji zapewnia dużą elastyczność w projektowaniu marszruty, a także komplikuje planowanie dla aparatu, ponieważ zdolności produkcyjne muszą być księgowane według „właściwości” (nazwy abstrakcyjnej używanej w aparacie w celu uzyskania możliwości, umiejętności itp.).
Wydajność grupy zasobów dla zdolności produkcyjnych to suma wydajności dla wszystkich zasobów w grupie zasobów o danej zdolności produkcyjnej. Jeśli zasób w grupie ma zdolności produkcyjne, będzie on uwzględniany niezależnie od tego, jaki poziom wydajności jest wymagany.
W planowaniu operacji dostępna wydajność dla danych zdolności produkcyjnych grupy zasobów zostanie zmniejszona po załadowaniu operacji wymagającej danych zdolności produkcyjnych. Jeśli operacja wymaga więcej niż jednej zdolności produkcyjnej, wydajność zostanie zmniejszona dla wszystkich wymaganych zdolności produkcyjnych.
Dla każdej daty wymagane obliczenie jest następujące:
Dostępna pojemność dla zdolności = Pojemność dla zdolności — Zaplanowane obciążenie zasobów z określonymi możliwościami, które są zawarte w grupie zasobów — Zaplanowane obciążenie operacji na zasobach z określonymi możliwościami, które są zawarte w grupie zasobów — Zaplanowane ładowanie operacji w samej grupie zasobów, które wymagają określonej możliwości
Oznacza to, że w przypadku obciążenia określonego zasobu, obciążenie jest brane pod uwagę przy obliczaniu dostępnej wydajności grupy zasobów na jedną zdolność, ponieważ obciążenie określonego zasobu zmniejsza jego udział w wydajności grupy zasobów w zależności od zdolności produkcyjnych, jeśli obciążenie określonego zasobu jest związane z daną zdolnościami produkcyjnymi. Jeśli na poziomie grupy zasobów znajduje się obciążenie, jest ono uwzględniane w obliczeniach dostępnej wydajności grupy zasobów na zdolności produkcyjne tylko wtedy, gdy obciążenie pochodzi z operacji wymagającej określonych zdolności produkcyjnych.
Powyższa logika jest skomplikowana, ponieważ jest taka sama dla każdego typu „właściwości”, więc korzystanie z funkcji planowania operacji o ograniczonych zdolnościach produkcyjnych wymaga załadowania znacznej ilości danych.
Popraw wydajność MRP
Poniższy film z konferencja technicznego zawiera kilka wskazówek dotyczących sposobów zwiększenia wydajności planowania głównego, gdy jest używasz funkcji MRP z przestarzałym aparatem planowania głównego: Pomocy! MRP jest wolny!.
Wyświetlanie danych wejściowych i wyjściowych aparatu planowania
Aby uzyskać szczegółowe informacje dotyczące wejścia i wyjścia procesu planowania, należy włączyć rejestrowanie, przechodząc do Administrowanie organizacją > Ustawienia > Planowanie > Panel śledzenia planowania.
Na tej stronie najpierw wybierz opcję Włącz rejestrowanie w okienku akcji. Następnie uruchom planowanie zlecenia produkcyjnego. Po zakończeniu wróć do strony Panel śledzenia planowania i wybierz opcję Wyłącz rejestrowanie w okienku akcji. Umożliwia odświeżenie strony i wyświetlenie nowego wiersza w tabeli. Wybierz nowy wiersz, a następnie opcję Pobierz w okienku akcji. Spowoduje to udostępnienie skompresowanego folderu. zip zawierającego następujące pliki:
- Log. txt — jest to plik dziennika opisujący kroki, jakie wykona aparat. Jest bardzo rozbudowany i może być nieco przytłaczający, ale jeśli jest używany jako część eksperymentowania z konfiguracją marszruty w celu rozwiązania problemów z wydajnością, pierwszym elementem analizy powinna być różnica w czasie między pierwszym a ostatnim wierszem, co pozwoli uzyskać dokładny czas trwania harmonogramu.
- XmlModel.xml — zawiera model zbudowany w języku X++ i, na którym działa aparat.
JobId
użyty w pliku odpowiadaRecId
z tabeli źródłowej zawierającej zadania (ReqRouteJob
lubProdRouteJob
). Typowym elementem do sprawdzenia w tym pliku jest to, że daty podane wConstraintJobStartsAt
iConstraintJobEndsAt
są zgodne z oczekiwaniami, właściwośćJobGoal
jest poprawnie ustawiona i zadania są ze sobą wzajemnie powiązane przez ograniczeniaJobLink
. - XmlSlots.xml — zawiera wszystkie rezerwacje czasów pracy i zdolności produkcyjnych, których wymaga dany aparat. Czas pracy w kalendarzu i rezerwacje będą wymagane tylko przez aparat dla okresów, w których próbuje on umieścić zadania (i dodatkowy bufor), więc jeśli plik zawiera terminy w dalekiej przyszłości, może to oznaczać problem z konfiguracją. W węzłach
ResourceProperty
będą pokazywane wszystkie zasoby, z którymi skojarzone są grupy zasobów i funkcje, dla których są powiązane okresy. - Result. XML — zawiera wynik uruchomienia planowania.
Należy zauważyć, że funkcja śledzenia może dodawać znaczne obciążenie związane z wydajnością, dlatego służy tylko do badania planowania konkretnych zamówień w kontrolowany sposób. Jeśli ta opcja jest włączona podczas planowania głównego, system szybko osiągnie swój limit rozmiaru i zostanie zatrzymany.
Rozwiązywanie problemów z wydajnością
Zgodnie z informacjami we wszystkich poprzednich sekcjach, istnieją pewne pułapki związane z konfiguracją i użytkowaniem aparatu planowania, co może prowadzić do problemów z wydajnością. Do rozwiązywania takich problemów można użyć następującej listy kontrolnej. Ważne jest, aby przeanalizować wszystkie punkty, ponieważ najczęściej połączenie wielu czynników powoduje problemy.
Wykonywanie planowania jako części MRP bez potrzeby
Chociaż marszruty są używane do celów kontroli produkcji, takich jak wycena i raportowanie, nie trzeba ich uwzględniać podczas MRP. W niektórych przypadkach, gdy dla danego towaru określenie standardowego czasu realizacji produkcji będzie wystarczające do planowania. Aby wyłączyć planowanie marszruty, należy ustawić wartość w polu horyzont czasowy zdolności produkcyjnych na zero. Jeśli planowanie powinno zostać wykonane, horyzont czasowy zdolności produkcyjnych musi zostać starannie ustawiony, ponieważ może nie być konieczne uwzględnienie marszrut w pełnym zakresie horyzontu czasowego zapotrzebowania na MRP.
Należy zauważyć, że jeśli zamówienie nie jest planowane w trakcie MRP, będzie konieczne zaplanowanie podczas ustalania zamówienia planowanego. Oznacza to, że proces ustalania może trwać dłużej, więc w zależności od liczby potwierdzonych sugerowanych planowanych zamówień zysk wydajności w czasie MRP może zostać utracony przy potwierdzaniu.
Marszruta z niepotrzebnymi operacjami
Podczas projektowania marszruty kuszące jest wypróbowanie modelu rzeczywistego ze wszystkimi etapami produkcji. Chociaż może to być przydatne w niektórych przypadkach, nie jest dobrym rozwiązaniem, ponieważ model, na którym musi działać aparat, rośnie (zarówno pod względem zadań, jak i ograniczeń), a w celu wstawienia i zaktualizowania zadań i rezerwacji zdolności produkcyjnych więcej będzie wykonywanych instrukcji SQL. Ponadto istnieje efekt niższego rzędu powodujący konieczność raportowania postępu na zadaniach, który można ograniczyć przez automatyczne księgowania. Jeśli dane nie są używane do niczego, tworzy to niepotrzebne obciążenie.
Zalecane jest tworzenie tylko operacji, które są niezbędne do planowania (zazwyczaj są to zasoby powodujące powstanie wąskiego gardła) i/lub wyceny. Można również zgrupować wiele mniejszych operacji w jedną większą operację, która reprezentuje większą część procesu.
Wiele odpowiednich zasobów dla operacji
Liczba odpowiednich zasobów dla operacji jest określona przez zapotrzebowanie na zasoby określone w relacji operacji. Wymaganie może dotyczyć konkretnego (pojedynczego) zasobu lub może być oparte na członkostwie zasobu w grupie zasobów lub możliwości produkcyjnych.
Jeśli planowanie nie jest wykonywane przy użyciu ograniczonych zdolności produkcyjnych, a wszystkie odpowiednie zasoby mają ten sam kalendarz i efektywność, aparat planowania będzie zawsze kontynuować pobieranie tego zasobu dla operacji, ale tylko po próbie sprawdzenia, czy wszystkie odpowiednie zasoby nie są „lepsze” niż inne. W takim przypadku obciążenie planowania może być znacznie zmniejszone przez stałe przypisanie konkretnego zasobu do operacji w czasie projektowania marszruty.
Marszruta z równoległymi operacjami
Chociaż operacje równoległe (podstawowe/pomocnicze) to zaawansowane narzędzie do modelowania scenariuszy, np. gdy maszyna i operator, są potrzebne do wykonania określonego zadania, to również źródło wielu problemów z wydajnością. Jeśli zapotrzebowanie dla konkretnego zasobu jest przypisane zarówno do operacji głównej, jak i pomocniczej, zwykle nie jest to problem. Jeśli jednak istnieje wiele możliwych zasobów dla każdej z tych operacji, zwiększa to znacznie złożoność obliczeń w planowaniu.
Alternatywą dla stosowania równoległych operacji jest modelowanie par jako zasobów „wirtualnych” (będą one oznaczać zespół, który zawsze będzie się łączyć z daną operacją) lub po prostu niemodelowanie jednej z operacji, jeśli nie powoduje powstania wąskiego gardła.
Marszruta zawierająca więcej niż 1 zasób
Jeśli ilość zasobów potrzebnych dla operacji jest większa niż jeden, wynik jest faktycznie taki sam, jak przy użyciu operacji podstawowych/dodatkowych, ponieważ do aparatu zostanie wysłanych wiele zadań równoległych. Jednak w tym przypadku nie jest możliwe użycie określonych przydziałów zasobów, ponieważ ilość wyższa niż jeden wymaga więcej niż jednego zasobu, który ma zastosowanie do operacji.
Operacja drugorzędna, w której ilość ładowania zasobów jest większa niż jeden, oznacza, że określona ilość zasobów drugorzędnych jest potrzebna dla każdego zasobu operacji podstawowej. Na przykład, jeśli ilość zasobów dla operacji podstawowej jest ustawiona na dwa, a ilość zasobów dla operacji drugorzędnej jest ustawiona na trzy, to dla operacji drugorzędnej potrzeba łącznie sześciu zasobów.
Nadmierne używanie ograniczonych zdolności produkcyjnych
Użycie ograniczonych zdolności produkcyjnych wymaga, aby aparat ładował informacje o zdolnościach produkcyjnych z bazy danych i miał narzut obliczeniowy, ponieważ znalezienie rozwiązania jest trudniejsze w środowiskach, w których zasoby są zarezerwowane blisko ich maksymalnych zdolności produkcyjnych. W związku z tym ważne jest dokładne oszacowanie, czy zasób naprawdę wymaga użycia ograniczonych zdolności produkcyjnych czy można go zarezerwować ponad swoje możliwości. Ponieważ istnieje różnica między zasobami z ograniczonymi zdolnościami produkcyjnymi dotyczące znaczenia ich nierezerwowania ponad możliwości, zaleca się użycie opcji wąskiego gardła dla zasobu w połączeniu z oddzielną wartością planu w sekcji „Horyzont czasowy zdolności produkcyjnych dla zasobów wąskich gardeł”. Użycie koncepcji wąskiego gardła może umożliwić skrócenie horyzontu czasowego ograniczonych zdolności produkcyjnych.
Ustawianie łączy stałych
Standardowy typ łącza marszruty jest miękki, co oznacza, że jest dozwolony odstęp czasowy między godziną zakończenia jednej operacji a początkiem następnej. Zezwolenie na ten proces może mieć negatywny efekt: jeśli materiały lub zdolności produkcyjne nie są dostępne dla jednej z operacji wykonywanych przez bardzo długi czas, produkcja może być w dłuższym czasie bezczynna, co oznacza możliwy wzrost ilości prac w toku. Nie będzie to miało miejsca w przypadku użycia łączy stałych, ponieważ zakończenie i rozpoczęcie muszą być dokładnie zsynchronizowane. Jednak ustawienie łączy stałych sprawia, że problem planowania jest trudniejszy, ponieważ przedziały czasu pracy i zdolności produkcyjnych muszą być obliczane dla dwóch zasobów operacji. Jeśli istnieją również operacje równoległe, powoduje to dodanie znacznego czasu obliczeniowego. Jeśli zasoby dwóch operacji mają różne kalendarze, które się wcale nie nakładają, problemu nie da się rozwiązać.
Zaleca się używanie łączy stałych tylko wtedy, gdy jest to absolutnie konieczne i należy dokładnie przeanalizować, czy jest to konieczne dla każdej operacji związanej z daną marszrutą.
Aby zmniejszyć ilość pracy w toku bez stosowania stałych łączy, należy zaplanować zlecenie dwa razy, zmieniając na przeciwny kierunek drugiego przebiegu. Jeśli pierwszy harmonogram został wykonany wstecz od daty dostawy, drugi powinien zostać wykonany do przodu od zaplanowanej daty rozpoczęcia. Dzięki temu zadania będą kompresowane w możliwie największym stopniu, aby praca w toku była zminimalizowana.
Osobny kalendarz dla każdego zasobu
Jednym z głównych źródeł danych dla aparatu planowania są informacje kalendarza, których ładowanie z bazy danych może być kosztowne. Ponieważ kalendarze są generowane na podstawie szablonów, kuszące jest generowanie kalendarza dla każdego zasobu, a następnie korygowanie informacji w tym kalendarzu, gdy zasób ma przestoje i inne problemy. Jednak ten sposób poważnie ogranicza zdolność aparatu do buforowania danych kalendarza, ponieważ wymaga to żądania nowych danych dla każdego zasobu i może być dużym źródłem problemów z wydajnością. Zamiast tego zaleca się ponowne użycie kalendarzy w możliwie największym stopniu między zasobami, a następnie kontrolowanie zmian czasu przestojów przez przypisanie do okresu innego identyfikatora kalendarza.
Duża liczba przedziałów czasu pracy dziennie w kalendarzu
Ponieważ działanie aparatu polega na sprawdzeniu zdolności produkcyjnych poszczególnych przedziałów czasu, korzystne jest zminimalizowanie liczby gniazd czasu na dzień kalendarzowy. Można to zrobić na przykład analizując, czy w wynikowym harmonogramu jest ważna informacja, że co godzinę pracownicy mają 5-minutową przerwę.
Duże (lub brak) limity czasu planowania
Wydajność aparatu planowania można zoptymalizować przy użyciu parametrów znajdujących się na stronie Parametry planowania. Ustawienia Limit czasu planowania włączony i Limit czasu optymalizacji włączony muszą zawsze mieć wartość Tak. Jeśli jest ustawiona wartość Nie, planowanie może działać bez ograniczeń, jeśli utworzono niemożliwą do realizacji marszrutę z wieloma opcjami.
Wartość opcji Maksymalny czas planowania na sekwencję określa liczbę sekund, przez jaką można najdłużej próbować znaleźć rozwiązanie dla jednej sekwencji (w większości przypadków sekwencja odpowiada jednemu zamówieniu). Wartość, która ma być używana w tym miejscu, zależy od złożoności marszruty i ustawień, takich jak ograniczone zdolności produkcyjne, a maksymalnie 30 sekund jest dobrą wartością początkową.
Wartość Limit czasu prób optymalizacji umożliwia określenie liczby sekund, przez jaką można szukać lepszego rozwiązania niż pierwotnie znalezione. Ma to wpływ tylko na marszruty, które używają równoległych operacji, ponieważ są one niezbędne do testowania różnych kombinacji.
Banknot
Wartości ustawione dla limitów czasu zostaną zastosowane zarówno do planowania zwolnionych zleceń produkcyjnych, jak i planowanych zamówień w ramach modułu MRP. Dlatego ustawienie bardzo wysokich wartości może znacząco zwiększyć czas działania procesu MRP w przypadku działania planu z wieloma zaplanowanymi zleceniami produkcyjnymi.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla