• Nie Znaleziono Wyników

4. IMPLEMENTACJA METODYKI

4.3. O PTYMALIZACJA MACIERZY DRP

W podstawowym arkuszu, w którym będą odbywały się pierwsze obliczenia przedstawiona została klasyczna tablica DRP. Założono, że tablica obejmuje maksymalnie 5 produktów, a jej horyzont czasowy to 13 tygodni. Do tablicy należy wprowadzić informacje na temat planowanej wielkości sprzedaży, zapasu otwarcia i wielkości dostaw już potwierdzonych, których nie należy modyfikować (tzw. zamówienia zablokowane). Ponadto horyzont czasowy samej tablicy jest poszerzony do tygodnia w=17, lecz tylko ze względu na potrzebę obliczenia średniego zapotrzebowania w tygodniu w=13, które wylicza się na podstawie prognozowanej wielkości sprzedaży aż do wspomnianego tygodnia w=17. Tablica DRP dla każdego z produktów zawiera następujące informacje:

• prognoza sprzedaży w hektolitrach, która jest wprowadzana do tablicy przez planistę,

• wielkość dostaw w hektolitrach, która dla zamówień zablokowanych jest wprowadzana przez planistę, a dla zmienianego planu wyliczana na podstawie liczby zamawianych palet,

• zapas zamknięcia w hektolitrach, który dla tygodnia w=1 powinien być wprowadzony przez planistę, a dla kolejnych tygodni oblicza się automatycznie na podstawie planowanych dostaw i prognozy sprzedaży,

• pokrycie zapotrzebowania zapasem w tygodniach, które wylicza się automatycznie na podstawie zapasu zamknięcia i średniego zapotrzebowania,

• średnie zapotrzebowanie w hektolitrach, które wylicza się automatycznie na podstawie prognozy sprzedaży dla kolejnych 4 tygodni.

Rys. 4.1. Fragment tablicy DRP wspierającej planistę w wyznaczaniu tygodniowego zapotrzebowania.

Źródło: Opracowanie własne.

Pod tablicą DRP (Rys. 4.1.) znajdują się trzy obszary z komórkami (Rys. 4.2.), do których wprowadzane są informacje o liczbie zamawianych palet (podstawowa zmienna decyzyjna). Każdy z obszarów podzielony jest na 5 wierszy odpowiadających danemu produktowi oraz 8 kolumn odpowiadających jednemu z tygodni zmienianego planu. Pierwszy obszar o nazwie „Dopełnienie” zawiera komórki z liczbą palet, które zostaną odebrane przy realizacji zamówień niejednorodnych. Jest to obszar komórek powiązanych bezpośrednio z solverem (komórki zmieniane). Drugi obszar o nazwie „Jednorodne” to komórki z liczbą palet, które zostaną odebrane przy realizacji zamówień jednorodnych. Wartości w tych komórkach obliczane są za pomocą heurystyki na podstawie pierwotnych wyliczeń solvera zakładających odbiór niepełnych palet (rozdział 3.3.2). Trzeci obszar o nazwie „Suma” to komórki z informacją o łącznej liczbie zamawianych palet, które zostały obliczone za pomocą formuły sumującej wartości komórek z obszaru „Dopełnienie” i „Jednorodne”.

Rys. 4.2. Obszary komórek z informacją o liczbie zamawianych palet. Źródło: Opracowanie własne.

W=1 W=2 W=3 W=4 W=5 W=6 W=7 W=8 W=9 W=10 W=11 W=12 W=13 W=14 W=15 W=16 W=17 Fpw - prognoza sprzedaży [hl] 148,3 167,0 289,1 154,3 131,9 213,6 178,4 134,6 167,1 159,3 122,2 248,9 220,0 327,7 426,5 471,9 266,2 Dpw - wielkość dostaw [hl] 0,0 262,4 0,0 233,3 116,6 29,2 82,6 194,4 301,3 228,4 184,7 437,4 155,5 n/d n/d n/d n/d Cspw - zapas zamkniecia [hl] 707 802 513 592 577 393 297 357 491 560 622 811 746 n/d n/d n/d n/d Cswpw - pokrycie zapasem [tyg] 3,8 4,1 3,0 3,6 3,3 2,456 2,035 2,045 2,616 2,437 2,035 2,243 2,001 n/d n/d n/d n/d Fpw - średnie zapotrzebowanie [hl] 185,6 197,2 169,6 164,6 173,4 159,9 145,8 174,4 187,6 229,7 305,8 361,5 373,1 n/d n/d n/d n/d

Zmieniany harmonogram Prognoza

Produkt Zamówienia zablokowane

Produkt p=1

Poniżej obszarów z liczbą zamawianych palet (Rys. 4.2.), znajduje się pasek wyboru między dwoma funkcjami celu. Za pomocą odpowiednich przycisków widocznych na pasku, planista może wybrać czy solver powinien minimalizować pokrycie zapotrzebowania zapasem, czy też sam poziom zapasu. Oba kryteria są silnie skorelowane, jednak różny jest czas obliczeń oraz, ze względu na zdefiniowaną poniżej precyzję obliczeń solvera, różne są otrzymywane rezultaty. Na pasku umiejscowione są również pola pokazujące aktualną wartość funkcji celu.

Rys. 4.3. Pasek funkcji celu. Źródło: Opracowanie własne.

Pod paskiem funkcji celu znajduje się pasek przewijania służący ustaleniu precyzji obliczeń. Nie ma ona swojego odzwierciedlenia w modelu matematycznym, ponieważ wynika wprost z niedoskonałości procesu obliczeniowego solvera. Teoretycznie algorytm simplex zastosowany w solverze zawsze znajduje rozwiązanie optymalne.

W praktyce jeśli wartość funkcji celu mnożyło się przez pewną stałą wartość przed rozpoczęciem obliczeń, a dzieliło przez tą samą wartość po ich zakończeniu, to otrzymywano różne rezultaty – zazwyczaj tym lepsze, im większa wartość mnożnika, co opisano szerzej w podrozdziale 5.2.4. Precyzja została zatem określona przez odpowiednie podzielenie lub pomnożenie funkcji celu przez stałą wartość zależną od ustawień suwaka. Im wyższa wartość wskazana przez suwak, tym większa precyzja obliczeń, a co za tym idzie, zwykle otrzymywane rezultaty są lepsze ze względu na przyjętą funkcję celu. Większa precyzja wiąże się również z dłuższym czasem obliczeń. Wartości suwaka zostały ustalone w taki sposób, aby przy niskiej precyzji otrzymywać wynik optymalizacji w ciągu kilku sekund, a przy wysokiej często solver nie jest w stanie w ogóle odszukać rozwiązania optymalnego, nawet w ciągu wielu godzin. Szczegóły kalibracji opisano szerzej w podrozdziale 5.2.3.

Rys. 4.4. Suwak do ustalania precyzji obliczeń. Źródło: Opracowanie własne.

Poniżej suwaka planista znajdzie obszary z ograniczeniami przypisanymi do poszczególnych produktów. Część z ograniczeń jest stała ze względu na charakter problemu (całkowitoliczbowość zamawianych palet), a część może być zmieniana przez planistę (minimalny poziom zapasu, minimalne pokrycie zapotrzebowania zapasem, minimalna liczba zamawianych palet). Oczywiście wartości ograniczeń muszą być wprowadzone rozsądnie, gdyż aplikacja jest skonfigurowana do wspomagania decyzji w problemie rzeczywistym. Nie należy więc formułować ograniczeń, w których liczba zamawianych palet będzie ujemna, czy minimalny poziom zapasu większy od pojemności magazynu.

Rys. 4.5. Obszar do ustawienia wartości ograniczeń dla produktu p=1. Źródło: Opracowanie własne.

Ponadto obszar ograniczeń został uzupełniony o dodatkowe wartości, które można bez większych komplikacji wprowadzić do procesu obliczeniowego:

• maksymalny poziom pokrycia zapotrzebowania zapasem,

• maksymalny poziom zapasu,

• maksymalna liczba zamawianych palet,

• minimalna liczba zamawianych palet.

Ograniczenia te można jednak uaktywnić tylko wtedy, gdy dostępna będzie poszerzona wersja solvera, umożliwiająca zastosowanie większej liczby ograniczeń.

Przy tak zdefiniowanym problemie, którego rozwiązanie ma wspierać aplikacja, osiągnięto już maksymalną dopuszczalną liczbę ograniczeń, jaką jest w stanie uwzględnić solver dostępny w ramach aplikacji MS Excel 2010. Z tego względu aplikacja ignoruje wspomniane powyżej trzy ograniczenia górne oraz jedno dolne, które znajdują się w ukrytych wierszach pod ograniczeniami dotyczącymi poszczególnych produktów. Z tego powodu otrzymane rozwiązanie powinno być skontrolowane manualnie przez planistę pod kątem spełnienia wszystkich rzeczywistych ograniczeń. Wykorzystanie profesjonalnej wersji solvera pozwoliłoby na uwzględnienie dodatkowych ograniczeń, a co za tym idzie na skrócenie czasu obliczeń, jednak na podstawie przeprowadzonych eksperymentów opisanych

w podrozdziale 5.2.4 można twierdzić, że te ograniczenia i tak pozostawałyby nieaktywne, chyba że górne ograniczenia znajdowałyby się bardzo blisko dolnych, np. zapas maksymalny bliski zapasowi bezpieczeństwa, co po uwzględnieniu specyfiki problemu i jego praktycznego aspektu jest niezwykle mało prawdopodobne.

Z tego powodu zalety stosowania powszechnej i nie wymagającej dodatkowych nakładów finansowych wersji solvera przeważają nad zaletami stosowania wersji profesjonalnej. W procesie obliczeniowym wykorzystywano jedynie standardową wersję solvera dostępną w aplikacji MS Excel 2010.

Rys. 4.6. Obszar do ustawienia wartości ograniczeń dla produktu p=1, z widocznymi wartościami ograniczeń górnych (na pomarańczowo) nieuwzględnianych przez aplikację.

Źródło: Opracowanie własne.

Pod obszarami ograniczeń znajdują się cztery pola z komórkami, do których należy wprowadzić rzeczywiste wartości stałych , ℎ, ℎ i . Definicje stałych zostały określone w wykazie najważniejszych oznaczeń i skrótów, a cel ich wprowadzenia i szczegółowy opis znajdują się w rozdziale 3.

Rys. 4.7. Obszar do ustawienia wartości stałych i przeliczników. Źródło: Opracowanie własne.

Poniżej obszaru do ustawienia wartości stałych i przeliczników znajdują się niedostępne dla planisty komórki, w których została zaimplementowana heurystyka oraz wykonywane są obliczenia pomocnicze. Ustawienia samego solvera zostały dobrane w taki sposób, aby zminimalizować konieczność ingerencji w nie przez planistę, który z założenia powinien skupić się na aspekcie logistycznym problemu, a nie na kwestiach technicznych. Wybór metody obliczeniowej, zgodnie z ustaloną wcześniej procedurą rozwiązania to simplex. W pierwszej kolejności optymalizacja przebiegała ze zignorowanymi ograniczeniami całkowitoliczbowymi (zgodnie z 3.3.2). Dokładność ograniczeń, ustawiona dla tego etapu optymalizacji nie odgrywa istotnej roli. Niezależnie od ustawionej wartości w przedziale 0,000001 do 0,1 uzyskiwano dokładnie takie samo rozwiązanie, w zbliżonym czasie.

Maksymalny czas rozwiązania ustalony na 1200 sekund pozostawał w każdym przypadku nieaktywny, gdyż poszukiwanie rozwiązania niecałkowitoliczbowego odbywało się w ciągu maksymalnie kilku sekund.

Rys. 4.8. Okno z parametrami solvera dla optymalizacji niecałkowitoliczbowej.

Źródło: Opracowanie własne.

Aktywne jest skalowanie automatyczne, które jest przydatne, gdy wartości parametrów i rezultatów w zadaniu różnią się o kilka rzędów wielkości [104].

Testy przeprowadzano przy wartości suwaka precyzji wynoszącej 1.

Po przeprowadzonej optymalizacji niecałkowitoliczbowej, następowała automatyczna zmiana parametrów solvera i przejście do optymalizacji całkowitoliczbowej opisanej szczegółowo w podrozdziale 3.4.3.

Rys. 4.9. Okno z parametrami solvera dla optymalizacji całkowitoliczbowej.

Źródło: Opracowanie własne.

Aktywna pozostaje opcja automatycznego skalowania. Odznaczona natomiast została opcja „Ignoruj ograniczenia całkowitoliczbowe”. Dokładność całkowitoliczbowa została ustalona na poziomie 0,0001%, jednak podobnie jak w przypadku dokładności ograniczeń przy optymalizacji niecałkowitoliczbowej, nie jest to istotny parametr.

Otrzymane rozwiązania były identyczne, a czas ich uzyskania zbliżony, niezależnie od wartości parametru z przedziału od 0,000001% do 0,1%. Otrzymane rozwiązania były zawsze całkowitoliczbowe. Testy przeprowadzano analogicznie, jak na wcześniejszym etapie, przy wartości suwaka precyzji wynoszącej 1.

Dokładność ograniczeń ustalona została na poziomie 0,1, co pozwoliło otrzymywać rozwiązania w rozsądnym dla planisty czasie, a jednocześnie dawało wyniki bardzo zbliżone do otrzymywanych przy większej dokładności obliczeń i dużo dłuższym czasie pracy solvera. Zmiana tego parametru o 0,05 powodowała wydłużenie czasu obliczeń z kilku sekund do kilkunastu minut, nawet przy najniższej precyzji obliczeń. Niezależnie od dokładności ograniczeń, otrzymywane rozwiązanie zawsze znajdowało się w zbiorze rozwiązań dopuszczalnych – wszystkie ograniczenia narzucone przez planistę były spełnione.

Maksymalny czas poszukiwania rozwiązania został ustalony na 20 minut, co pozwalało przy ustawieniach solvera dobranych w sposób opisany powyżej, znaleźć rozwiązanie optymalne nawet dla poziomu precyzji 8 przy 10 stopniowej skali.

Szczegóły kalibracji poziomu precyzji opisano szerzej w podrozdziale 5.2.3 Aby proces przebiegał w możliwie szybki i zautomatyzowany sposób optymalizacja odbywa się bez przeglądu wyników iteracji. Nie narzucano ograniczeń maksymalnej liczby podproblemów i maksymalnej liczby rozwiązań dopuszczalnych.