Felrakási sorrend optimalizálás Plant Simulation gyártási modellben

Mai történetünk kezdődjék onnan, hogy van már egy, a Plant Simulation segítségével készült szimulációs modellünk, és a megfelelő felrakási sorrend érdekel minket. Általában következő lépésként szeretnék valamilyen módon bizonyos bemeneti paramétereket, mint például a rendszerben lévő paletták számát, vagy a gyártási sorrendtervet stb. „optimálisan” meghatározni.

Az első módszer a manuális optimalizálás, amelyet szisztematikusan előállított kísérlettervekkel (ExperimentManager eszköz használatával) el tudunk végezni, ahol mi állítjuk be a különböző bemeneti paramétereket, azok értékeit és kombinációit. Az elemzés segítségével pedig, a részletesen kiértékelt kísérletek közül, ki tudjuk választani az általunk preferált szempontok szerinti legjobbakat, így meghatározva a beállítandó bemeneti paraméterek értékeit.

Felvetődhet a kérdés, hogy meg lehet-e ezt csinálni valahogyan ennél is „automatikusabb” módon? A válasz igen, a Plant Simulation szoftverben elérhető különféle megoldások közül, most a genetikus algoritmus matematikai optimalizálás módszerét alkalmazó GAWizard objektumot mutatjuk be röviden. Vegyük az alábbi képen látható egyszerű példa modellt. Egy bemenetről robottal szállítószalagra pakoljuk a darabokat, amelyek bekerülnek egy megmunkáló állomásra, majd szintén szállítószalagon a kész darabok elhagyják azt.

A probléma egyszerűnek tűnhet, de valójában közel sem az, miről is van szó:

Van egy sor eleji felrakási tervünk, amely az alábbi ábrán látható T1-T10 termék kódok, a megadott sorrendben. Az egyszerűség kedvéért mindegyikből csak egyet szeretnénk gyártani:

Van egy átállási idő mátrixunk [s] a megmunkáló gép esetében, amely a következő ábrán látható:

A nagy kérdés pedig az, hogy milyen sorrendben gyártsuk le a T1-T10 termékeket, annak érdekében, hogy az átfutási időnk minimális legyen (azaz esetünkben, az átállások száma és ideje minimális legyen). A probléma megoldására használhatjuk a GAWizard eszközt, néhány dolgot szükséges csak beállítani, amelyek rendre a következők:

  • Optimalizálás iránya (valaminek a minimumát vagy maximumát keressük).
  • Generáció szám.
  • Generáció méret (az egyes generációkban lévő szimulációs futások, próbálkozások száma).
  • Optimalizálandó paraméter (húzd és ejtsd módszerrel megadhatjuk a Delivery felrakási tervünket bemenetként, aminek a sorrendjével tud majd játszani az eszköz).
  • Célfüggvény (Fitness, esetünkben ez most csak a szimuláció ideje root.EventController.SimTime). (Mgj.: Természetesen lehetőség van bonyolultabb fitness függvény beállítására is, több célértékkel, különböző súlyokkal.)
  • Megadható sztochasztikus modellbéli paraméterek esetén, hogy minden egyes szimulációs futáshoz mennyi megfigyelés tartozzon, azaz ennyiszeres lesz az összes futások száma).
  • Mgj.: Lehetőség van elosztott szimulációra a Distribution fül alatt (processzor szálakra és más gépekre egyaránt elosztható).

Összefoglalva a lényeg az, hogy megadjuk azokat a bemeneti paramétereket, melyekkel szabadon garázdálkodhat a GAWizard. Röviden annyi történik, hogy az aktuális generációban lévő szimulációs futásokból kiválasztva a legjobbakat, elkészíti a következő generáció futásainak beállításait és így tovább, amíg az általunk megadott generáció számot el nem érjük (vagy korábban meg nem állítjuk), mindezt úgy, hogy folyamatosan tartsunk a szintén általunk megadott célfüggvény minimális vagy maximális irányába, ami esetünkben azt jelenti, hogy minél gyorsabban gyártsuk le az adott termékmennyiséget.

Az alábbi képen látható Run fülön lévő, Reset majd Start gombok lenyomása után megkezdődik az optimalizálás:

Ha minden egyes lehetséges felrakási sorrendtervet ki szeretnénk próbálni, az elég sok tud lenni és sokáig is tud tartani, még egy ilyen egyszerűbbnek látszó optimalizálási feladat esetében is. Képzeljük csak el, mi van akkor, ha jóval többféle terméket gyártunk, különféle kötegekben, és jóval több gépet is használunk a gyártás során, máris óriási megoldási térben kell keresgéljünk, amire persze nincs elég idő. A GAWizard segítségével gyorsan, értelmes időn belül kapunk optimálisnak mondható megoldást, amivel általában már meg is oldottuk a problémánkat. Általánosságban elmondható az, hogy amikor az evolúciós görbénk vízszintesre simul, akkor már elegendő volt a beállított generációszám és nem érdemes tovább futtatni, elértük a kívánt eredményt.

Az alább látható evolúciós ábrán láthatók az adott generációk (Generation, vízszintes irány) esetében elért legjobb, legrosszabb és átlagos megoldások (Fitness, függőleges irány):

Egy másik jellemző diagram a következő ábrán látható Offspring diagram, ahol minden egyes pont egy szimulációs futás (egyed) eredménye:

Mgj.: Ezenfelül HTML jelentés formájában még részletesebb elemzések érhetők el.

A 10 darab termék átfutási ideje az optimalizált majd a kezdeti esetekre, a következő Gantt diagramokon látható:

– Optimalizált

– Kezdeti

Az alábbi összehasonlító Gantt diagramon is jól látható, hogy míg a kezdeti állapotban lévő felrakási terv gyártási ideje 280 másodperc (a fenti diagramokon lévő jelölés szerint 4:40 azaz 4 perc 40 másodperc) volt, addig az optimalizált esetben ez lecsökkent 247 másodpercre (4:07).

Az eredmények alapján kapott optimális felrakási sorrendünk a következő lett:

Érdemes használni a GAWizard-ot, hiszen olyan optimális megoldást, vagy megoldásokat talál meg gyorsan, amire lehet, hogy nem is gondoltunk volna.

You may also like...

Leave a Reply