Problem: Układanie harmonogramu zleceń produkcyjnych może być prawdziwym wyzwaniem. Spośród nieograniczonej liczby rozwiązań trzeba wybrać jedno, które nigdy nie jest idealne. Planista produkcji musi pogodzić ze sobą wiele — często wykluczających się — ograniczeń. To zabiera czas i wymaga wiedzy o specyfice procesu technologicznego.
Sortowanie zleceń produkcyjnych to kluczowy etap procesu planowania produkcji. Wpływa przede wszystkim na terminowość realizacji zleceń oraz efektywność linii produkcyjnej. Dodatkowo w ostatnich latach klienci stawiają coraz większe wymagania dla poziomu personalizacji produktów.
To generuje dodatkowe trudności również w planowaniu produkcji, ponieważ wraz z liczbą i różnorodnością zleceń rośnie złożoność i poziom skomplikowania planu. Celem procesu planowania jest przygotowanie kolejki zleceń, która spełni szereg wymagań i ograniczeń — często sprzecznych.
Przykładami takich reguł mogą być np.:
- produkty są pogrupowane rozmiarem (szerokość lub długość) — to zapewni mniejszą liczbę przezbrojeń,
- wszystkie kolory inne niż standardowy muszą być zgrupowane w jedną sekwencję, a każda taka sekwencja musi być oddzielona od innej zdefiniowaną ilością produktów w kolorze standardowym — to np. zapewni czas na czyszczenie sprzętu do lakierowania,
- zlecenia niepełnopaletowe nie mogą występować w grupach większych niż trzy pozycje obok siebie — w przeciwnym razie proces logistyki będzie miał problem z odebraniem wyrobu gotowego (czas taktu produkcji niepełnej palety jest krótszy)
- wyroby ze specjalnym frezowaniem nie mogą występować w grupach większych, niż zdefiniowana liczba — to może zaburzyć takt produkcji
- itd.
Mamy więc do czynienia z problemem, który polega na znalezieniu optymalnego rozwiązania spośród możliwości, których liczba rośnie wykładniczo wraz z wielkością planu produkcyjnego.
Podejście procesowe
W zarządzaniu bardzo sobie cenię podejście procesowe, w którym proces główny jest fraktalem składającym się z mniejszych podprocesów. Każdy z nich powinien mieć swój początek i koniec (wejście oraz wyjście z/do procesu) oraz jasno określony cel. Takie podejście było wyraźne również w poprzednim wpisie o automatyzacji procesu księgowania.
W planowaniu produkcji (proces główny) można wyróżnić wiele podprocesów. Jednym z nich jest układanie kolejności zleceń w planie produkcyjnym. Cel to oczywiście znalezienie optymalnego rozwiązania, które w jak największym stopniu spełni wspomniane wcześniej ograniczenia. Wejściem są zlecenia produkcyjne, a wyjściem te same zlecenia ułożone w odpowiedniej kolejności.
W praktyce firm bez wdrożonego APS zazwyczaj wygląda to tak, że każdy z planistów układa harmonogram na swój własny sposób. Jedni mogą robić to w specjalnej transakcji Z w SAP-ie, a inni tkwić jeszcze w Excelu. Reguły są niby te same, ale każdy ma swoje przyzwyczajenia i robi to trochę “po swojemu”. Może się nawet okazać, że perfekcjoniści próbują dostosować plan do wymagań, których nikt nie oczekuje — tylko po to, żeby plan wyglądał “ładnie”.
Przy kilkunastu obszarach produkcyjnych, gdzie każdy ma osobny zestaw reguł planowania, może powstać chaos, który jest trudny do kontrolowania i zarządzania. Zasady mogą się zmieniać z czasem (zmiana technologii, portfolio produktów itd.). Dodatkowo planiści podczas zastępstw przejmują odpowiedzialność za produkty, których nie znają. Zauważyłem, że w takich sytuacjach układanie planu produkcyjnego może zająć nawet 2x więcej czasu.
Po latach funkcjonowania takiego procesu okazuje się, że:
- cała wiedza jest w głowach specjalistów,
- nikt nie ma pewności czy stosowane zasady są jeszcze aktualne (i czy wysiłek wkładany w ich spełnienie jest uzasadniony),
- kierownik procesu planowania nie może mieć pewności, czy plany produkcyjne są tworzone zgodnie ze standardem (szczególnie podczas zastępstw)
W jaki sposób podszedłem do rozwiązania tego problemu?
- Ustandaryzowaliśmy proces — uaktualniliśmy zasady i ograniczenia, których należy przestrzegać.
- Zamieniłem reguły na logikę — zapisaną w algorytmie.
- Wykorzystałem heurystyki zamiast idealnego rozwiązania.
- Zamknąłem to wszystko w jednym narzędziu — dzięki temu proces zawsze wygląda identycznie, niezależnie od tego kto i co planuje. Planista musi jedynie wybrać właściwy program.
Poniższe dwa obrazki świetnie pokazują co się zmienia przy takim podejściu procesowym do problemu harmonogramowania produkcji.


Dobrze ustandaryzowany proces powinien być możliwie deterministyczny — ten sam input powinien prowadzić do bardzo podobnego outputu. Przedstawione tutaj rozwiązanie to zapewnia.
Rozwiązanie
Aby znaleźć idealną kolejkę zleceń, należałoby przeliczyć wszystkie możliwe sekwencje i wybrać tę jedną najlepszą. To bardzo kosztowne obliczeniowo i najczęściej niemożliwe — przy złożonych planach produkcyjnych liczba możliwych sekwencji będzie bardzo duża. Widzę tutaj pewną analogię do problemu komiwojażera, w którym — od pewnej liczby miast — przeliczenie wszystkich możliwych rozwiązań zajęłoby lata nawet najszybszym superkomputerom.
Zamiast szukać idealnego planu, zastosowałem heurystykę — zestaw reguł i priorytetów, które szybko prowadzą do rozwiązania “wystarczająco dobrego”, gotowego do uruchomienia produkcji. Taką logikę można relatywnie łatwo zaimplementować w kodzie, a jej wykonanie zajmuje co najwyżej kilka sekund.
W praktyce od strony technicznej proces wygląda następująco:
- Planista wczytuje zlecenia do niestandardowej transakcji ZPP, która wyświetla tabelę ze wszystkimi cechami istotnymi przy układaniu sekwencji.
- Planista kopiuje całą zawartość transakcji ZPP i uruchamia skrypt.
- Algorytm sortuje zlecenia i zapisuje do schowka numery ułożonej kolejki (np.: 5, 3, 1… oznacza, że pierwsze zlecenie ma być na pozycji piątej, drugie na pozycji trzeciej, a trzecie będzie otwierało plan produkcyjny itd.)
- Planista wkleja zawartość schowka do specjalnej kolumny w transakcji ZPP, sortuje tabelę i zapisuje numery sekwencyjne do zleceń w SAP-ie.
Upraszczając, cały proces to trzy elementy:
- wejście → lista zleceń
- processing → algorytm
- output → kolejność
Poniższy schemat, pokazuje dokładnie rozpisany przepływ — ujęcie end-to-end w planowaniu produkcji.

Przy tak zorganizowanym procesie użytkownik nie musi rozumieć logiki. Co więcej — jeśli cały system planowania jest ustandaryzowany, a harmonogramowanie (wczytaj zlecenia, uruchom skrypt, posortuj) jest jednym z jego podprocesów, to kolejka zleceń może być przygotowana przez dowolną osobę, która zna proces — nawet jeśli nie ma doświadczenia z daną grupą produktów.
Naturalnie, sercem takiego rozwiązania jest algorytm sortujący zlecenia. Dla planów produkcji, które nie mają sprzecznych, wykluczających się ograniczeń może on być bardzo skuteczny. W innych przypadkach wyniki mogą czasami wymagać “delikatnych szlifów”, bez których i tak będą wystarczająco dobre, aby wykorzystać je w produkcji.
Ja do tworzenia takich algorytmów wykorzystuję Pythona i bibliotekę pandas. Od strony technicznej, w bardzo dużym skrócie, wygląda to tak: program dokonuje iteracji po zleceniach w tabeli szukając dopasowania do aktualnie zdefiniowanych ograniczeń. Po każdym dopasowaniu weryfikuje ograniczenia i szuka kolejnego zlecenia. Jeśli nie udaje się znaleźć zlecenia spełniającego zadane kryteria, algorytm stopniowo rezygnuje z kolejnych ograniczeń. Proces kończy się, kiedy wszystkie zlecenia mają przypisany swój numer sekwencji.
To architekt rozwiązania decyduje o tym, co znajduje się w “czarnej skrzynce”. Dla bardzo dużych i skomplikowanych planów produkcyjnych być może lepsze efekty dałoby się uzyskać poprzez np. wykorzystanie bardziej zaawansowanych metod takich jak algorytmy genetyczne (Genetic Algorithms – GA). Największym wyzwaniem, aby to mogło działać, byłoby przetłumaczenie reguł biznesowych na liczbowy scoring — czyli w jaki sposób ocenić (na liczbach), że jedna kolejka jest lepsza od drugiej. W tym celu należałoby określić wagi wszystkich reguł i zasad, zdefiniować kary za ich niedotrzymywanie itd.
W opisywanym tutaj przypadku wyniki obecnie wykorzystywanych algorytmów dałoby się poprawić wykorzystując prosty algorytm local search. Jego zadaniem byłoby iteracyjne wykonywanie niewielkich zmian w kolejce (np. zamiana pozycji dwóch zleceń) i akceptowanie ich tylko wtedy, gdy poprawiają wynik. Tutaj — ponownie — niezbędna jest funkcja scoringowa, która pozwoli ocenić tę zmianę. Myślę, że to może być dobry materiał na osobny wpis.
Podsumowanie
Niewątpliwą korzyścią takiego rozwiązania jest oszczędność czasu. W tym konkretnym przypadku — przy kilku liniach montażu — szacuję, że jest to przynajmniej 60-90 minut oszczędności każdego dnia.
Czas to jedno. Inną sprawą jest energia i wysiłek intelektualny planistów. Wyobraź sobie sytuację, że masz przed sobą 40 albo 50 zleceń produkcyjnych. Musisz podjąć decyzję od którego z nich zacząć produkcję, które będzie kolejne itd. To proces bardzo angażujący intelektualnie i wymagający podejmowania wielu mikro-decyzji.
Algorytm daje nam heurystykę — rozwiązanie, które jest wystarczająco dobre, ale nie idealne. Czasami wymaga korekty, ale działa w praktyce. I to jest właściwy moment na wykorzystanie zasobów intelektualnych specjalistów planowania produkcji. Od teraz dostają oni gotowy plan, który muszą zatwierdzić (i ewentualnie coś poprawić). To przesuwa rolę specjalistów: z wyraźnie operacyjnej na bardziej ekspercką. I właśnie tak to powinno wyglądać — planiści produkcji powinni zajmować się orkiestracją procesów produkcyjnych, a nie mozolnym układaniem kolejki zleceń.
Efekt biznesowy to nie tylko czas: Wśród kluczowych korzyści należy wymienić również:
- mniejsza zależność od konkretnej osoby (łatwiejsze zastępstwa),
- skrócenie onboardingu,
- stabilność procesu.
Warto zauważyć, że reguły operacyjne zapisane w postaci algorytmów i zamknięte w “czarnej skrzynce”, z której wszyscy korzystają, stają się swego rodzaju Single Point of Truth o procesach. To ułatwia zarządzanie zmianą — jeśli któreś z ograniczeń zmienia się, przestaje być aktualne lub zostaje zmodyfikowane wystarczy zaktualizować logikę w programie.
Uważam, że takie myślenie o procesach może pomóc je lepiej zrozumieć i ustrukturyzować. W planowaniu produkcji jest wiele takich podprocesów, które mają swój wyraźny początek (dane wejściowe) oraz koniec (efekt). Przetwarzanie, które jest “pomiędzy” może bardzo często być w dużym stopniu zautomatyzowane. Przykłady:
- MRP (tworzenie zleceń produkcyjnych i zamówień) lub
- dopasowywanie ilości zleceń do capacity.
Takie podejście może pomóc ustandaryzować i poukładać procesy. To pozwala sprawniej poruszać się po ich zawiłościach specjalistom planowania i czyni cały system łatwiejszym w zarządzaniu.
Przy okazji podejmowania tematu automatyzacji procesów często zapomina się o bardzo istotnej kwestii. Tego typu rozwiązania mogą powodować problemy z retencją wiedzy operacyjnej. Będzie się to przejawiać zarówno przy wielkich transformacjach, jak również małych use case’ach jak ten. O tych pierwszych mamy okazję słyszeć regularnie przy trwającej obecnie rewolucji AI.
Warto więc rozważyć, na ile wiedza “zaszyta w kodzie” jest możliwa do odtworzenia w sytuacji, kiedy zautomatyzowane czynności — z jakiegoś powodu — muszą zostać wykonane manualnie. W razie konieczności warto równolegle budować bazę wiedzy o procesie (spisane standardy). Zautomatyzowany proces, wiedza na temat którego stopniowo “wygasła”, może się zemścić w najmniej oczekiwanym momencie. Mówiąc krótko: fakt, że użytkownik nie musi znać kodu i całej logiki procesu, nie zwalnia organizacji ze znajomości zasad, które są w tym kodzie zapisane.



