Programowanie liniowe jest jednym z najczęściej stosowanych sposobów optymalizacji ze względu na dopracowany aparat matematyczny umożliwiający szybkie znajdowanie najlepszego rozwiązania dla problemów, w których występują zależności liniowe. W tym rozdziale pokazane zostaną modele symulacyjne umożliwiające zastosowanie środowiska FlexSim do rozwiązywania tej klasy zadań. Programowanie liniowe jest szczególnym przypadkiem programowania matematycznego, a rozważania na ten temat najlepiej rozpocząć od przykładu praktycznego.
Zadanie. Przedsiębiorstwo produkuje dwa wyroby WA i WB. Podczas procesu produkcji wyrobów zużywa się szereg detali, spośród których dwa są limitowane. Limity wynoszą odpowiednio na detal pierwszy I - 72 000 szt., a na detal drugi II - 100 000 szt. Nakłady limitowanych detali na jednostkę wyrobu przedstawiono w tab. 1.
Dział techniczny przedsiębiorstwa poinformował, że zdolność produkcyjna bardziej ekonomicznego w eksploatacji agregatu nie pozwala wyprodukować więcej niż 4000 szt. wyrobu WB. Nie ma żadnych dodatkowych ograniczeń co do ilości produkcji wyrobu WA. Należy określić optymalne rozmiary produkcji przy założeniu, że zysk realizowany na obu wyrobach jest jednakowy.
Rozwiązanie. W zadaniu nie ma informacji ani na temat liczby agregatów, które posiada przedsiębiorstwo, ani na temat tego, jakie agregaty muszą być wykorzystane. Założono więc wariant polegający na tym, że do dyspozycji przedsiębiorstwa są dwa agregaty. Pierwszy z nich służy do produkcji wyrobu WA, a drugi do produkcji wyrobu WB. Do rozwiązania problemu zaproponowano model jak na rys. 1.
Źródło: projekt własny w środowisku FlexSim.
W rozwiązaniu wykorzystano standardowe elementy z biblioteki programu FlexSim, tj.: dwa obiekty typu Source jako źródła detali I i II, dwa obiekty Source jako liczby wyrobów WA i WB; obiekty Combiner jako sumatory (Agregat 1, Agregat 2) oraz obiekt typu Sink - czyli wyjście wyrobów gotowych. Wszystkie elementy połączono zwykłym portem przepływu (do tego celu używa się lewego klawisza myszy z wciśniętym równocześnie klawiszem A). Elementy połączono od lewej do prawej. W pierwszej kolejności należy wykonać połączenia:
W ten sposób polecenia montażu detali znajdą się na pierwszych portach sumatorów, które sterującą ich własną pracą. Umożliwi to zliczanie liczby gotowych wyrobów wytworzonych w procesie produkcji. Aktualne podłączenia do wszystkich portów można zawsze sprawdzić na podglądzie każdego obiektu: w tym przypadku w obiektach Combiner (jest to zakładka General tego obiektu). Następnie należy wprowadzić limity w źródłach dopływu detali do produkcji, jak pokazano na rys. 2: dla detalu 1 wartość: 72 000 szt., a dla detalu 2 wartość: 100 000 szt., zgodnie z treścią zadania.
W obiektach typu Combiner zmieniono nazwy na Agregat 1 i Agregat 2. Włączono opcję Join, ponieważ detale są montowane na stałe, bez możliwości ich późniejszego rozłączenia. Dalej zdefiniowano ilości potrzebnych detali do produkcji każdego z wyrobów WA i WB. Aby model działał prawidłowo, każdy agregat musi mieć informację, z ilu detali składa się produkowany przez niego wyrób. Wymagane zmiany w agregatach produkcyjnych pokazano na rys. 4.
Dla pierwszego agregatu należy w zakładce Triggers w polu OnReset wprowadzić niestandardowy kod zamknięcia portu wejścia, jak pokazano na rys. 5. Z treści zadania wynika, że bardziej ekonomiczny jest agregat drugi, więc to on musi najpierw zrealizować swój limit produkcji wyrobu WB. Dlatego port wejściowy dla agregatu pierwszego na początku procesu produkcji powinien być zamknięty (rys. 5).
Rysunek 5
Dla drugiego agregatu należy wprowadzić poniższy kod niestandardowy z instrukcjami warunkowymi (zakładka Triggers ? OnExit):
/* Otwórz bieżący port wejściowy przy produkcji mniejszej niż 4000 szt. */
/* W przeciwnym wypadku zamknij bieżący port i otwórz port na maszynie Agregat 1 */
if (getoutput(inobject(current, 1))<4000) {openinput(current);} else
{closeinput(current); openinput(node("Agregat 1", model())); }
Przedstawiony kod umożliwi w pierwszej kolejności realizację 4000 szt. wyrobu WB na drugim, bardziej wydajnym agregacie. Po wykonaniu tej produkcji zostanie otwarty port wejściowy dla pierwszego agregatu, aby mógł on zrealizować pozostałą część produkcji wyrobu WA. Po uruchomieniu modelu zaprojektowanego jak na rys. 1 można zaobserwować proces łączenia poszczególnych detali. Na paletach powstają dwa typy wyrobów, a pojedyncza paleta z detalami symbolizuje jedną sztukę danego wyrobu.
Zmienne dynamiczne, takie jak całkowity czas produkcji czy czasy przetwarzania poszczególnych elementów przepływu, nie są w tym zadaniu rozpatrywane. Po wyprodukowaniu 4000 szt. wyrobów Agregat 2 zatrzymuje się pierwszy. Agregat 1 kontynuuje pracę, aż do wyczerpania zapasu surowców. Jako pierwszy wyczerpuje się Detal 1, dostępny w ilości 72 000 szt., następnie system się zatrzymuje. Wyniki badań modelu symulacyjnego można odczytać na wyjściach poszczególnych obiektów (rys. 1). Przy występujących ograniczeniach surowców możliwa do wykonania optymalna wielkość produkcji wyniesie 6000 szt.: 4000 szt. wyrobu WB i 2000 szt. wyrobu WA. Należy zwrócić uwagę, że jeden wyrób pozostał na maszynie pierwszej jako produkcja w toku. Stąd mamy na wyjściu źródła A wynik 2001 szt. wytworzonych wyrobów, a teoretycznie powinno być 2000 szt. Nie jest to błąd, ale aby takiej sytuacji uniknąć, należałoby jeszcze zamknąć port wejściowy tej maszyny po wyczerpaniu któregokolwiek z surowców. ?
Pytania i zadania
Czy można z menu rozwijanych wprowadzić ograniczenia warunkowe typu if - else, aby nie używać kodu niestandardowego? Czy włączenie funkcji
Pack zamiast
Join w sumatorze zmieni coś w działaniu modelu? Jak można zmienić kolor lub kształt poszczególnych elementów przepływu? W jaki sposób można wygenerować raport ogólny po zakończeniu działania modelu? Czy wprowadzenie pracowników do ręcznego przenoszenia elementów przepływu (detali) wpłynie w jakikolwiek sposób na działanie tego modelu?
1.2. Ustalenie optymalnej struktury produkcji trzech wyrobów
Typowym problemem często występującym w przemyśle jest ustalenie struktury produkcji przy limitowanych ilościach surowców. W tym przypadku do wyszukania rozwiązania zostanie wykorzystany optymalizator OptQuest wbudowany w środowisko symulacyjne.
Zadanie. W przedsiębiorstwie wytwarza się trzy typy produktów: A, B i C. Spośród wielu surowców zużywanych w procesie produkcji dwa są limitowane. Dzienne ograniczenia zużycia surowców wynoszą odpowiednio: I - 25 000 szt. oraz II - 18 000 szt. W tabeli 2 podano jednostkowe zużycia surowców do produkcji poszczególnych wyrobów.
Tabela 2
Surowce
Jednostkowe nakłady surowców na wytworzenie produktu
A
B
C
I
II
20
25
30
15
10
15
Zysk ze sprzedaży poszczególnych wyrobów wynosi dla wyrobu A - 8 zł, dla wyrobu B - 12 zł, a dla wyrobu C - 9 zł za sztukę. Należy określić dzienną strukturę produkcji, umożliwiającą osiągnięcie maksymalnego zysku ze sprzedaży wyrobów gotowych. Przedmiotem analizy problemu będzie:
I. Zbudowanie modelu matematycznego zagadnienia.
II. Zaprojektowanie modelu symulacyjnego dla przedstawionego procesu produkcji.
III. Wykonanie optymalizacji i obliczenie wartości funkcji celu.
Zadanie odnosi się do osiągnięcia wyznaczonego celu za pomocą ograniczonych środków. Cel zapisywany jest w postaci funkcji matematycznej zwanej funkcją celu, której wartość zwykle minimalizuje się lub maksymalizuje. W funkcji celu występują zmienne decyzyjne, które mają wpływ na stopień realizacji założonego celu. W praktyce zazwyczaj są do dyspozycji ograniczone ilości zasobów, najczęściej środków produkcji. Ograniczenia te są zapisywane w postaci układu równań i nierówności, gdzie zmienne decyzyjne spełniają układ warunków ograniczających. Decyzje, które spełniają układ warunków ograniczających, są nazywane decyzjami dopuszczalnymi, a decyzję wybraną spośród decyzji dopuszczalnych, dla której funkcja celu przyjmuje wartość maksymalną lub minimalną, nazywa się decyzją optymalną.
W analizowanym przypadku zastosowano model jednokryterialny, ponieważ zadanie optymalizacji polega na realizacji (optymalizacji) pojedynczego celu. Gdy rozpatrywane są dwa cele lub jest ich więcej, wówczas używa się modelu wielokryterialnego. Jeżeli funkcja celu jest funkcją liniową, a zbiór warunków ograniczających również ma postać układu równań lub nierówności liniowych, to model taki nazwa się zadaniem programowania liniowego (Trzaskalik, 2003, s. 25).
W przypadku problemu wyboru optymalnego asortymentu produkcji należy określić, które wyroby i w jakich ilościach należy produkować. Nie wolno przekroczyć posiadanych zasobów środków produkcji. Zakłada się, że przedsiębiorstwo może produkować n wyrobów. Do ich produkcji są zużywane zasoby, z których część r jest limitowana. Dane są normy zużycia surowców na jednostkę każdego wyrobu, zasoby środków produkcji, ceny lub zyski ze sprzedaży wyrobów gotowych. W realnych warunkach często wymaga się spełnienia dodatkowych kryteriów ograniczających. Może być to informacja związana z popytem lub ograniczeniami dotyczącymi np. minimalnych ilości zamówienia albo maksymalnych ilości towaru, jakie można sprzedać. Zmiennymi decyzyjnymi są ilości produkcji wyrobów, tj. x j - wielkość produkcji j-ego wyrobu. Zapisano to w ogólnym modelu programowania liniowego za pomocą następującego zestawu równań (Kukuła 2006, s. 16):
(1)
przy następujących parametrach: a ij - zużycie i-tego środka produkcji na wytworzenie jednostki j-ego wyrobu ( i = 1, 2, ..., r; j = 1, 2, ..., n); b i - posiadany zasób i-tego środka produkcji; c j - cena lub zysk jednostkowy ze sprzedaży j-ego wyrobu; d j - minimalna ilość j-ego wyrobu, jaką trzeba wyprodukować; g j - maksymalna ilość j-ego wyrobu, którą można sprzedać.
Asortyment produkcji spełniający warunki ograniczające i warunki brzegowe będzie rozwiązaniem dopuszczalnym. Rozwiązaniem optymalnym jest rozwiązanie, dla którego funkcja celu przyjmie wartość maksymalną. W badaniach operacyjnych istnieje wiele sposobów rozwiązywania tego typu problemów w sposób graficzny lub metodami algebry liniowej (patrz np. (Ferguson, 1958; Dantzig, 1998; Kukuła, 2006)). Uniwersalną metodą rozwiązywania zadań z zakresu programowania liniowego jest metoda simpleks. Jest ona jednak żmudna i pracochłonna. Do rozwiązania przedstawionego problemu zastosowano środowisko symulacyjne 3D nowej generacji FlexSim ver. 7.3.6. z wbudowanym modułem optymalizacyjnym OptQuest. Szczegółowy opis poszczególnych funkcji i działania interfejsu programu można znaleźć w jedynym dotychczas wydanych podręczników, np. (Beaverstock, 2011), a także w pomocy użytkownika programu. Wiele materiałów funkcjonuje w sieci online, działa m.in. forum społecznościowe oraz blog użytkowników oprogramowania FlexSim. Wiele opracowań można także znaleźć bazach artykułów naukowych online jak: Google Scholar, Springer itp.
Rozwiązanie. Rozwiązanie problemu zostanie przedstawione w trzech kolejnych punktach.
I. Tego typu zadanie można przedstawić za pomocą równań ograniczających (2) i (3), warunków brzegowych (4) oraz funkcji celu (5). Zmiennymi decyzyjnymi określającymi wielkość produkcji dla poszczególnych wyrobów są elementy: x1, x2, x3.
(2)
(3)
(4)
(5)
Funkcja celu (5) obejmuje kryteria optymalizacyjne dotyczące ilości produktów: A, B i C. Rozwiązanie zadania polega na odnalezieniu wielkości x1, x2, x3, dla których funkcja celu przyjmuje wartość maksymalną ze zbioru decyzji dopuszczalnych.
II. Kluczowym punktem każdego zadania optymalizacyjnego jest zbudowanie prawidłowego modelu symulacyjnego. Umożliwi on odwzorowanie procesu dokładnie w taki sposób, w jaki przebiega on w rzeczywistości. W środowisku symulacyjnym FlexSim najczęściej należy wybrać odpowiednie elementy z biblioteki obiektów po lewej stronie głównego okna programu. Elementy te "naśladują" maszyny, surowce lub wywarzane w rzeczywistości produkty. Logika przepływu badanego procesu jest tworzona przez dodanie odpowiednich połączeń, które umożliwiają przemieszczanie się elementów przepływu; mogą to być np. przejeżdżające samochody, obrabiane detale czy ludzie oczekujący w kolejce na obsługę.
W pewnych niestandardowych sytuacjach należy zmienić domyślne funkcje obiektów lub ręcznie napisać nowe procedury obsługi. W tym zadaniu wystarczy zdefiniować parametry poszczególnych maszyn w oknach ustawień.
Przykładowy model symulacyjny dla rozwiązania omawianego zadania pokazano na rys. 6. Można w nim wyróżnić następujące obiekty: trzy źródła ( Source) symbolizujące ilości produktów A, B, C; dwa źródła symbolizujące ilości potrzebnych surowców I, II; trzy agregaty ( Combiner) realizujące produkcję A, B, C oraz wyjście ( Sink) wyrobów gotowych, zliczające produkcję wyrobów gotowych.
W pokazanym na rys. 6 przykładzie zmieniono domyślne ustawienia sumatorów ( Agregat 1, 2, 3). W zakładce Combiner uaktywniono funkcję Join, za pomocą której odbywa się łączenie surowców z odpowiednich źródeł ( Surowiec 1 i 2), które następnie są przetwarzane w produkty A, B, C. Surowce łączone są na trwałe, bez możliwości ich późniejszego rozdzielenia. Zalecane proporcje surowców (tab. 2) wprowadzono jako Components List - dokonuje się tego w zakładce Combiner obydwu agregatów. Jest to odpowiednio dla produktu A po 20 i 25 jednostek, dla produktu B - po 30 i 15 jednostek, a dla produktu C - po 10 i 15 jednostek surowca. W ten sposób jest realizowany opisany w zadaniu proces produkcyjny. Wprowadzono ograniczenia ilościowe w źródłach surowców do założonych dziennych limitów produkcji.
Rysunek 6
Źródło: projekt własny w programie FlexSim.
Z kolei zmieniając wartości podane w źródłach produktu A, B i C, można zamodelować maksymalne wielkości produkcji dla każdego z trzech wyrobów pod warunkiem, że dwa pozostałe nie są produkowane. W ten sposób otrzymuje się maksymalne wielkości możliwości produkcyjnych dla poszczególnych produktów, które można uzyskać przy istniejących ograniczeniach surowców:
- dla produktu A = 720 szt.; - dla produktu B = 833 szt.; - dla produktu C = 1200 szt.
III. W wyniku jednokrotnego uruchomienia modelu (tzw. wstępnej symulacji) otrzymuje się potrzebne dane, które posłużą jako informacje wejściowe dla optymalizatora. Warunkami ograniczającymi są równania (2), (3), (4), które wprowadzono jako ograniczenia optymalizatora. Funkcja celu (5) stanowi jednokryterialne zadanie optymalizacyjne, które należy maksymalizować. W tym zadaniu występuje jedno kryterium optymalizacji funkcji celu, należy zatem zaznaczyć opcję Single. Ustawienia optymalizatora OptQuest pokazano na rys. 7.
Przy tak sformułowanych założeniach program szuka najlepszego rozwiązania w zbiorze decyzji dopuszczalnych. Dla wszystkich zmiennych wejściowych zastosowano typ całkowitoliczbowy Integer. Należy zaznaczyć, że w całym środowisku programu Flexsim, w tym w OptQuest i ExpertFit, obowiązuje notacja amerykańska, tzn. w zapisie liczb separatorem dziesiętnym jest kropka, i w ten sposób należy wprowadzać wszystkie dane. Tak też wyświetlane są wyniki. W przypadku eksportu danych do arkusza kalkulacyjnego należy zwrócić uwagę na ustawienia programu (np. Excel) dotyczące przyjętego separatora dziesiętnego. Dane dla maksymalizacji celu pobierane są z tabeli globalnej . Surowce zostają zużyte maksymalnie w procesie produkcji. Zbiór rozwiązań wygenerowany przez optymalizator przedstawiono na rys. 8.
Zbiór rozwiązań dopuszczalnych ograniczono do osiemdziesięciu wyników. Są to punkty na rys. 8. Wśród nich znajduje się rozwiązanie optymalne. Górna linia jest granicą funkcji celu. Większym okręgiem zaznaczono trzy najlepsze rozwiązania (Solution 72, 77, 56). Rozwiązanie optymalne (Solution 72) zostało znalezione bardzo szybko, bo już przy siedemdziesiątej drugiej iteracji, z wynikiem 12 750,00 jednostek pieniężnych zysku. Jest to maksymalna wartość funkcji celu (zysk ze sprzedaży) dla postawionych w tym zadaniu ograniczeń.
Rysunek 8
Wyniki najlepszych czterdziestu rozwiązań zwróconych przez optymalizator są podane w tab. 3. Widać, że trzydzieści trzy początkowe rozwiązania wykluczają opłacalność wytwarzania produktu A i jego ilość wynosi 0.
Tabela 3
Solution ID
Rank
Single Objective
Best Iteration
Ilość
A
Ilość
B
Ilość
C
Surowiec I
Surowiec II
Produkcja (wartość)
72
1
12750
72
0
650
550
25000
18000
12750
77
2
12747
72
0
649
551
25000
18000
12747
56
3
12744
72
0
648
552
25000
18000
12744
53
4
12741
72
0
647
553
25000
18000
12741
61
5
12738
72
0
646
554
25000
18000
12738
69
6
12735
72
0
648
551
25000
18000
12735
63
7
12732
72
0
650
548
25000
18000
12732
79
8
12723
72
0
647
551
25000
18000
12723
64
9
12690
72
0
654
538
25000
18000
12690
66
10
12681
72
0
654
537
25000
18000
12681
54
11
12510
72
0
666
502
25000
18000
12510
59
12
12465
72
0
669
493
25000
18000
12465
57
13
12462
72
0
668
494
25000
18000
12462
15
14
12411
72
0
537
663
25000
18000
12411
50
15
12408
72
0
542
656
25000
18000
12408
55
16
12390
72
0
533
666
25000
18000
12390
60
17
12387
72
0
529
671
25000
18000
12387
49
18
12384
72
0
531
668
25000
18000
12384
68
19
12345
72
0
515
685
25000
18000
12345
51
20
12333
72
0
538
653
25000
18000
12333
58
21
12303
72
0
519
675
25000
18000
12303
14
22
12294
72
0
501
698
25000
18000
12294
67
23
12291
72
0
500
699
25000
18000
12291
62
24
12285
72
0
498
701
25000
18000
12285
70
25
12273
72
0
491
709
25000
18000
12273
71
26
12267
72
0
489
711
25000
18000
12267
23
27
12258
72
0
489
710
25000
18000
12258
65
28
12258
72
0
498
698
25000
18000
12258
19
29
12255
72
0
488
711
25000
18000
12255
75
30
12255
72
0
683
451
25000
18000
12255
74
31
12252
72
0
682
452
25000
18000
12252
52
32
12249
72
0
501
693
25000
18000
12249
27
33
12243
72
0
487
711
25000
18000
12243
24
34
12175
72
8
482
703
25000
18000
12175
25
35
12170
72
10
481
702
25000
18000
12170
5
36
12137
72
13
480
697
25000
18000
12137
20
37
12133
72
8
468
717
25000
18000
12133
21
38
12132
72
9
471
712
25000
18000
12132
29
39
12027
72
9
457
727
25000
18000
12027
28
40
11927
72
7
450
737
25000
18000
11927
Dzienne wielkości produkcji wyrobów B i C wynoszą, odpowiednio, 650 szt. i 550 szt. Dla tak zaplanowanej struktury produkcji przedsiębiorstwo osiąga maksymalne zyski ze sprzedaży w wysokości 12 750,00 jednostek pieniężnych. Otrzymano prawidłowy wynik, który został zweryfikowany narzędziem Solver w arkuszu kalkulacyjnym Excel. Zmierzony czas potrzebny do wykonania symulacji przedstawionych rozwiązań wyniósł 41 sekund. Zastosowano standardowy PC z procesorem Intel Core 2 Quad CPU Q8400 2,67 GHz, 4 GB RAM. ?
Zaprezentowana powyżej koncepcja może być podstawą do konstruowania wielu bardziej rozbudowanych modeli optymalizacji liniowej. Warto zauważyć, że model symulacyjny oraz optymalizator działają niezależnie, mimo integracji w jednym pakiecie. Szerszy opis przedstawionego w tym rozdziale problemu można odnaleźć w innych opracowaniach autora, np. (Kaczmar, 2016).
Pytania i zadania
Czy zmiana cen poszczególnych wyrobów gotowych wpłynie na wynik optymalizacji? W jaki sposób wykonać analizę wrażliwości w zakresie wpływu zmiany ceny wyrobów na strukturę produkcji? Omów krótko, jakie typy zmiennych można wprowadzić do optymalizatora? Do czego służy próbnik w środowisku programu? Jakie parametry modelu wypływają na szybkość pracy optymalizatora? Wyjaśnij znaczenie parametrów
Wall Time i
Max Solution optymalizatora. Jeżeli parametr
Wall Time zostanie ustawiony na zero, to jak wpłynie to na wyniki pracy optymalizatora?
1.3. Maksymalizacja zysku przy limitach czasu pracy maszyn
Zadanie. Firma posiada linię produkcyjną, na której są wytwarzane dwa wyroby, A i B. Obróbka wyrobów jest wykonywana kolejno na trzech maszynach: M1, M2, M3. Maszyny te mają określoną żywotność i wymagają konserwacji, a ich limity pracy pomiędzy kolejnymi przerwami wynoszą odpowiednio: M1 - 33 000, M2 - 13 000 i M3 - 80 000 godzin. Zużycie czasu pracy maszyn na produkcję jednostki każdego wyrobu podano w dwóch zestawach danych w tab. 4 i 5. W tabeli 4 czasy obróbki podano w pełnych godzinach, ponieważ jest to obróbka automatyczna, a w tab. 5 do opisu czasu pracy maszyn użyto rozkładu normalnego N(?, ?), gdzie: ? - wartość oczekiwana (średnia) , ? - odchylenie standardowe . W tabeli 5 wartości oczekiwane ? są takie same jak w tab. 4, dodano do nich jedynie odchylenie standardowe. Uwzględniono w ten sposób sytuację, w której obróbka detalu odbywa się z udziałem operatora (pracownik lub grupa pracowników). Wówczas czasy obróbki nie są idealnie powtarzalne jak w przypadku automatów i nie da się ich opisać liczbą całkowitą. Zastosowano więc rozkład statystyczny uwzględniający nierównomierność wykonywanych przez pracownika czynności na skutek czynników takich jak: zmęczenie pracownika, jakość surowca itp.
Zysk ze sprzedaży wyrobu A wynosi 1 zł, a ze sprzedaży wyrobu B - 3 zł. Analiza danych z lat ubiegłych pokazała, że rynek nie może wchłonąć więcej niż 7000 szt. wyrobu B. Należy zaplanować strukturę asortymentową produkcji dla pierwszego i drugiego zestawu danych, tak aby osiągnąć maksymalny zysk ze sprzedaży wyrobów gotowych, oraz zbudować model matematyczny, modele wizualizacyjne do przeprowadzenia eksperymentu symulacyjnego oraz optymalizacji i porównać otrzymane wyniki.
Rozwiązanie - sposób I: eksperyment symulacyjny. Aby lepiej zrozumieć zasady przeprowadzania eksperymentów i w konsekwencji wdrażania w przedsiębiorstwie konkretnych wariantów decyzyjnych, celowo podano opisy czasu pracy maszyn w dwóch zestawach danych. Jako pierwszy zostanie przeprowadzony eksperyment symulacyjny dla danych z tab. 4, czyli w przypadku, gdy produkcja jest zautomatyzowana i odbywa się bez udziału człowieka. Drugi eksperyment odnosi się do danych z tab. 5, gdzie do obsługi maszyny potrzebny jest operator (najczęściej człowiek), a czasy obróbki są opisane rozkładami statystycznymi. Do przeprowadzenia tych obu eksperymentów zbudowano taki sam model procesu jak pokazano na rys. 9. Opisaną produkcję można zwizualizować obiektami dostępnymi w bibliotece programu. W modelu występują dwa źródła symbolizujące wytwarzane ilości wyrobów A i B, trzy maszyny, M1, M2, M3, realizujące obróbkę kaskadowo oraz wyjście gotowych produktów.
Samo uruchomienie przedstawionego modelu w środowisku programu spowoduje wizualizację całego procesu, a jego działanie będzie trwało aż do chwili przerwania przez użytkownika. Ideą eksperymentu jest znalezienie struktury asortymentowej zapewniającej największe zyski dla wybranych przez decydentów przedsiębiorstwa scenariuszy produkcji. W tym celu należy wprowadzić wymagane limity czasu pracy maszyn, a także niezbędny czas przeznaczony na obróbkę jednostki wyrobu. Ograniczenia te zrealizowano przez zaprogramowanie odpowiedniej procedury sterującej dla maszyny M1 w zakładce Triggers ? OnEntry.
Poniżej przedstawiono przykładowy kod programu (w którym uwzględniono odchylenia standardowe) dla procedury realizującej warunki zadania z tab. 5. Dla maszyny M1 należy go wprowadzić w zakładce Triggers ? OnEntry:
/* Zuzycie czasu na jednostke wyrobu I */
if (getitemtype(item)==1) {