8. Előadás: Szimuláció, I. Wayne L. Winston: Operációkutatás, módszerek és alkalmazások, Aula Kiadó, Budapest, 2003 könyvének 21. fejezete alapján. A szimulációt komplex rendszerek elemzésére, tanulmányozására használjuk. Az elemzéseket tipikusan számítógépes programok futtatásával végezzük el. Az eddig tanulmányozott készletezési illetve sorbanállási modelljeink mind olyanok voltak, amelyeket analitikusan meg tudtunk oldani. Célunk többnyire a felállított modell optimális megoldásának a meghatározása volt. Ha azonban a rendszert teljes általánosságában szeretnénk vizsgálni, akkor mind a készletezési, mind a sorbanálási és egyéb más rendszerek esetében is a rendszer bonyolultsága, a sztochasztikus függőségi viszonyok és más egyebek miatt nem minden valós probléma írható le megfelelően az eddig megismert modellekkel. Ha mégis analitikusan írjuk le a rendszert, akkor olyan sok egyszerűsítő feltétellel kell élnünk, hogy az így kapott megoldások megbízhatatlanok, felhasználásra alkalmatlanok lesznek. Ilyen esetekben a döntéshozó számára a modellezés és elemzés jó alternatív formája lehet a számítógépes szimuláció. A szimulációt olyan módszerként definiálhatjuk, amely egy időben változó valós rendszer működését utánozza. Ennek érdekében általában szimulációs modellt készítünk. A szimulációs modell a vizsgált rendszer működésével kapcsolatos feltevések halmazából áll, melyeket a rendszerben szereplő objektumok közötti matematikai és logikai összefüggésekkel fejezünk ki. A szimulációs eljárás sohasem szolgáltat pontos megoldást, az csak a modell időbeni általában számítógépen történő futtatását vagy végrehajtását jelenti abból a célból, hogy a rendszer működését leíró teljesítménymutatókról szolgáltasson reprezentatív mintát. Így a szimulációs kiértékelés nem más, mint a valós rendszerből vett mintavételi kísérletsor, amely eredményei a mintavételi realizációk. Például egy teljesítménymutató átlagértékére úgy adhatjuk a legjobb becslést, hogy átlagoljuk a mintavétel eredményeit. Minél több mintavételi realizációt tekintünk, annál jobb becsléseket nyerünk. Ugyanakkor más tényezők, mint pl. a szimuláció kezdeti feltételei, a szimulációs időszak hossza és magának a modellnek a pontossága, mind hatással vannak a végső becslés jóságára. 1
A szimuláció előnye, hogy viszonylag egyszerű elméleti alapokon nyugszik, ezért az analitikus módszereknél könnyebb az alkalmazása, melyhez azonban számítógépes ismeretekre is szükség van. A szimulációs modellek közelebb állhatnak a valós rendszer leírásához, mivel jóval kevesebb egyszerűsítő feltételt kell alkalmazni, mint az analitikus modellek esetében. Ha egy szimulációs modellt felépítettünk, akkor azt (estleg apró változtatásokkal) egymásután többször alkalmazhatjuk különböző stratégiák, paraméterek vagy tervek elemzésére. A szimuláció fő hátránya az, hogy önmagában nem optimalizációs módszer. Leggyakrabban mi történne, ha típusú kérdések megválaszolására használják. Van lehetőség arra, hogy szimulációs kiértékeléssel nyert teljesítménymutató optimális értékét megkeressük, azonban ez lassú folyamat lehet, mert a célfüggvény minden egyes értékének a meghatározása külön-külön hosszadalmas szimulációs kiértékelést igényel, ráadásul az így kiszámított teljesítménymutató értéke mindig csak becsült érték, tehát viszonylag pontatlan. 1. Alapvető fogalmak 1.1. Definíció: A rendszer olyan entitások halmaza, amelyek egy logikus végkifejlet érdekében végeznek cselekvéseket és közben kölcsönkapcsolatokra lépnek egymással. A rendszerek általában dinamikusak, helyzetük időben változik. A helyzetváltozások leírásához bevezetjük a rendszer állapotának a fogalmát. 1.2. Definíció: A rendszer állapota olyan változók halmaza, amelyek a rendszer helyzetének leírásához egy adott időpillanatban szükségesek. Tekintsünk a rendszerre példaként egy bankot. Itt a rendszer az ügyfélszolgálatosokból és az ügyfelekből áll, akik várnak a sorukra vagy éppen kiszolgálják őket. Amikor ügyfél érkezik vagy távozik, megváltozik a rendszer helyzete. Hogy ezeket a rendszerben bekövetkező változásokat leírjuk, változók egy halmazát hívjuk segítségül, amelyeket állapotváltozóknak hívunk. Például az éppen foglalt ügyfélszolgálatosok száma, az 2
ügyfelek száma, az egymást követő vevők várakozási ideje és az ügyfelek távozásáig eltelt idő együtt a bank helyzetében beálló minden változást leírnak. Ezért ezeket a változókat ezen rendszer állapotváltozóiként használhatjuk. A rendszerben részt vevő releváns dolgokat entitásnak hívjuk, és az entitások tulajdonságait attribútumnak vagy tényezőnek. Például a bank ügyfeleit ezek szerint entitásnak tekintjük és az ügyfelek jellemzőit (például az ügyfél foglalkozása) attribútumként értelmezzük. A rendszereket csoportosíthatjuk aszerint, hogy diszkrétek vagy folytonosak. 1.3. Definíció: A rendszer diszkrét, ha állapotváltozói csak diszkrét időközönként vagy megszámlálhatóan sok időpontban változnak. A bank a diszkrét rendszerek egy példája, mivel állapotváltozói csak akkor változnak meg, ha ügyfél érkezik, vagy ha kiszolgálása befejeződik és távozik. Ezek a változások diszkrét időközönként történnek. 1.4. Definíció: A rendszer folytonos, ha állapotváltozói időben folytonosan változnak. Egy kémiai folyamat a folytonos rendszerek egy példája. Itt a rendszer helyzete időben folytonosan változik. Az ilyen rendszereket általában differenciálegyenletekkel modellezik, mi azonban csak diszkrét rendszerekkel fogunk foglalkozni. 1.5. Definíció: A statikus szimulációs modell a rendszer leírását adja meg egy adott időpillanatban. A statikus szimulációt Monte Carlo szimulációnak is nevezik. 1.6. Definíció: A dinamikus szimuláció a rendszer időbeni fejlődésének a leírására szolgál. Mindkét típusú szimuláció lehet determinisztikus vagy sztochasztikus. A determinisztikus szimulációs modell nem tartalmaz valószínűségi változókat, míg egy sztochasztikus szimulációs modell egy vagy több valószínűségi változót tartalmaz. A továbbiakban csak diszkrét sztochasztikus modellekkel foglalkozunk. 3
2. Példa diszkrét idejű szimulációra Tekintsünk egy egy kiszolgálóhellyel rendelkező sorbaállási rendszert, amelybe egy populáció (sokaság) tagjai érkeznek be egy szolgáltatás igénybevételére. Ott vagy azonnal kiszolgálják őket, ha a kiszolgálóhely szabad, vagy ha foglalt az, akkor várólistára kerülnek (beállnak a sorba). Ilyen sorbaállási modellel foglalkoztunk analitikusan is, csak akkor fel kellett tennünk, hogy a sorbaállási rendszer M/M/1 típusú, azaz hogy két beérkezés között eltelt idő és a kiszolgálási idő is exponenciális eloszlású. Ez a feltevés sokszor nem helyes, ilyenkor nem tudunk analitikus eredményeket produkálni, azonban a rendszer fő jellemzői meghatározhatóak még akkor is, ha bármilyen eloszlást használunk is a beérkezési és kiszolgálási idők szimulálására, legyenek azok akár korábbi megfigyelésekből összegyűjtött empirikus eloszlások. Ahhoz, hogy egy sorbaállási rendszert szimulálni lehessen, először pontosan specifikálni kell azt. A példánkban feltesszük, hogy az érkező egyedek (entitások) végtelen alapsokaságból jönnek, a sorbaállási rendszer korlátlan várakozási kapacitással rendelkezik, és az ügyfeleket érkezési sorrendben szolgálja ki (F CF S alapon). Feltételezzük továbbá, hogy egyszerre egy ügyfél érkezik véletlenszerűen az 1. táblázatban megadott beérkezési eloszlás szerint. Végül a kiszolgálási időket is véletlenszerűnek tekintjük, mégpedig a 2. táblázatban megadott eloszlás szerintinek. Minden beérkezés és kiszolgálás egymástól függetlenül történik. A kiszolgált ügyfelek visszatérnek az alapsokaságba, ahogyan azt az 1. ábra szemlélteti. Definiálnunk kell azt is, hogy mit értünk a rendszer állapota alatt, és meg kell érteni az események és a mért idő fogalmát a szimuláción belül. A rendszer állapotának a leírására szolgáljanak a következő változók: (1) a rendszerben lévő ügyfelek száma; (2) a kiszolgálóhely helyzete, azaz, hogy szabad vagy foglalt; (3) a következő beérkezésig eltelő idő. A rendszer állapotával szoros kapcsolatban lévő fogalom az esemény. Az eseményt olyan helyzetként definiáljuk, ami a rendszer állapotát azonnal megváltoztatja. A most vizsgált sorbaállási modellünkben két lehetséges esemény van: a rendszerbe való beérkezés és a kiszolgálás végrehajtása után a rendszerből való távozás. A szimuláció során 4
Két beérkezés közteltelt idő (perc) Valószínűség 1 0,20 2 0,30 3 0,35 4 0,15 1. táblázat. Két beérkezés közt eltelt idő eloszlása A kiszolgálási idő (perc) Valószínűség 1 0,35 2 0,40 3 0,25 2. táblázat. A kiszolgálási idő eloszlása 1. ábra. Egy kiszolgálóhelyes sorbaállási rendszer az eseményeket a bekövetkezési időpontjuk feltüntetésével jegyezzük fel. Minden, az eseményekre vonatkozó információt az úgynevezett eseménylista tartalmaz. Ebben a listában tehát nem csak az esemény típusát, hanem a bekövetkezési idejét is tároljuk. Az időt a szimulációban egy változó, a mért idő segítségével adjuk meg. A sorbaállási rendszerünk szimulálását kezdjük üres rendszerrel, és önkényesen tegyük fel, hogy az első esemény egy beérkezés, ami a 0 mért időpontban történik. Ezen beérkezés esetében a rendszer még szabad és azonnal megkezdődik az ügyfél kiszolgálása. Más időpontban történő beérkezések a rendszert szabad vagy foglalt állapotban találhatják. Ha a kiszolgálóhely szabad, megkezdődik az ügyfél kiszolgálása. Ha a kiszolgálóhely foglalt, az ügyfél a várólistára kerül. Ezeket az eseményeket a 2. ábra szemlélteti. 5
2. ábra. Egy beérkezés folyamatábrája A következő lépésben feljegyezzük az első ügyfél távozási idejét: távozás időpontja = jelenlegi mért idő + generált kiszolgálási idő Hasonlóan feljegyezzük a következő beérkezés időpontját: beérkezés időpontja = jelenlegi mért idő + generált beérkezési időtávolság Mindkét esemény feljegyzett időpontjával együtt az eseménylistában fog szerepelni. Ha mindent véghezvittünk az első beérkezéssel kapcsolatban, akkor megnézzük az eseménylistát és meghatározzuk a következő eseményt és annak időpontját. Ha a következő esemény beérkezés, akkor a mért időt a beérkezés időpontjára állítjuk, és végigmegyünk azoknak az akcióknak a sorozatán, amelyeket a beérkezéskor kell végrehajtani (lásd 2. ábra). Ha a következő esemény távozás, akkor a mért időt a távozás időpontjára állítjuk, és lefuttatjuk a távozáskor végrehajtandó akciók sorozatát, azaz ellenőrizzük, hogy a várólista hossza nagyobb-e nullánál. Ha igen, akkor eltávolítjuk az első ügyfelet a sorból, és megkezdjük ennek az ügyfélnek a kiszolgálását úgy, hogy a távozási időpontját kisorsoljuk. Ha pedig senki sem várakozik, akkor a rendszer helyzetét foglaltra állítjuk át. Ezeket a távozáskor végrehajtandó akciókat a 3. ábra szemlélteti. Ezt a fajta szimulációt következő eseményre épülő időváltoztatási mechanizmusnak nevezik a mért idő frissítési technikája miatt. Ekkor a szimuláció mért idejét 6
3. ábra. Egy távozás folyamatábrája mindig a legközelebbi esemény időpontjára állítjuk be, azaz az eseménylista mért idő utáni első elemének az időpontjára. Mivel az állapotváltozók csak valamely esemény bekövetkezése esetén változnak meg, az inaktív időperiódusokat átugorjuk, és eseményről eseményre lépkedünk, és végrehajtjuk a megfelelő akciókat, beleértve a jövőbeli események adatainak a feljegyzését is. Így haladunk egészen addig, amíg egy előre meghatározott leállási feltétel (többnyire a szimulációs idő felső korlátjának a meghaladása) be nem következik. Az így megvalósított szimulációs eljárás során minden egyes lépésben feljegyzünk egy jövőbeli érkezést, vagy távozást. Így tehát mindig új beérkezési időt jegyzünk be, amikor beérkezés történik a rendszerbe és mindig új távozási időt jegyzünk be, amikor távozás történik a rendszerből, kivéve, ha az éppen távozó ügyfél üres rendszert hagy maga után, mely esetben nem kezdődik új ügyfél kiszolgálása, nincs új távozási idő, amelyet be kellene jegyezni az eseménylistába. Ezt feloldandó meg lehet tenni azt, hogy ilyenkor egy fiktív távozási eseményt jegyzünk be az eseménylistába, mely időpontja végtelen nagy, vagy legalábbis a számítógépen ábrázolható legnagyobb szám, de legalább akkora, hogy a tervezett szimulációs időtartamnál feltétlen nagyobb. A teljes szimulációs program folyamatábrája a 4. ábrán látható. 7
4. ábra. Az egy kiszolgálóhelyes sorbaállási rendszer szimulációjának folyamatábrája 8
A 4. ábra folyamatábrájában a változók jelentése rendre a következő: MI = a szimuláció mért ideje KB = a következő beérkezés ideje KT = a következő távozás ideje SZH = a kiszolgálóhely helyzete (1 = foglalt, 0 = szabad) VLH = a várólista hossza MX = a szimulációs futtatás maximális hossza (időegységben) A folyamatábra első blokkjában nyilván a KB = 0,SZH = 0,VLH = 0sKT = 9999 és például MX = 1000 kezdőérték beállításokat kell tenni. Csupán arra kell ügyelni, KT > MX legyen. MI értékét nem szükséges beállítani, az a szimuláció kezdetekor nyilván a KB = 0 értéket fogja kapni. A folyamatábra további elemzésétől eltekintünk, annak alapján bármilyen általános célú programozási nyelven megfelelő kód készíthető. Ennek egyedüli akadálya mostmár csak az, hogy megfelelő eszközzel kell rendelkeznünk a következő véletlen beérkezési idők és az esetenkénti véletlen kiszolgálási idők kisorsolására. Ezzel a következő elődásban fogunk részletesen foglalkozni. Addig a 3. táblázatban adott, előre legenerált véletlen beérkezési és kiszolgálási idők alkalmazásával is lefuttatható a szimuláció. Ügyfél Beérkezési Kiszolgálási száma idő (BI) idő (KI) 1 3 2 2 3 3 2 2 4 3 1 5 4 1 6 2 2 7 1 1 8 3 2 9 3 3. táblázat. Generált beérkezési és kiszolgálási idők 9
Az eredményeket a 4. táblázat, illetve az 5. ábra tartalmazza. Esemény Esemény Vevő vége típusa száma MI SZH V LH KB KT 0 kezdeti értékadás 0 0 0 0 9999 1 beérkezés 1 0 1 0 2 3 2 beérkezés 2 2 1 1 4 3 3 távozás 1 3 1 0 4 6 4 beérkezés 3 4 1 1 7 6 5 távozás 2 6 1 0 7 8 6 beérkezés 4 7 1 1 11 8 7 távozás 3 8 1 0 11 9 8 távozás 4 9 0 0 11 9999 9 távozás 5 11 1 0 13 12 10 távozás 5 12 0 0 13 9999 11 beérkezés 6 13 1 0 14 15 12 beérkezés 7 14 1 1 17 15 13 távozás 6 15 1 0 17 16 14 távozás 7 16 0 0 17 9999 15 beérkezés 8 17 1 0 20 19 4. táblázat. A szimuláció futtatási eredménye 5. ábra. A szimuláció eredményeinek ábrázolása a számegyenesen Az előbb tárgyalt, következő eseményre épülő módszernél a következő eseményre ugrás időtávolsága nagy és kicsi is lehet; azaz ennél a módszernél az időugrások mérete 10
változó. Ezzel szemben azt is megtehetjük, hogy a szimuláció mért idejét állandó t lépésközzel változtatjuk, ahol t egy megfelelő, általában egységnyi hosszúságú időegység. Ezt a megközelítést rögzített léptékű időváltoztatási módszernek nevezzük. Ebben az idő minden egyes léptetése után ellenőrizzük, hogy fel kell-e jegyeznünk eseményt az aktuális idöponthoz. Ha feljegyzünk egy eseményt, akkor végre kell hajtani az eseményhez tartozó akciókat. Ha nem jegyzünk fel eseményt vagy ha már minden teendőt végrehajtottunk erre az időpontra, akkor a szimuláció mért idejét t egységgel léptetjük és megismételjük az eljárást. Ugyanúgy, mint a következő eseményre épülő megközelítésben, itt is egy előre meghatározott leállási feltétel bekövetkezéséig haladunk előre. A rögzített léptékű időváltoztatási módszer általában egyszerűbb a változatlan időlépték miatt. Mégis, a következő eseményre épülő módszer számításigény szempontjából hatékonyabbnak bizonyul. 11