Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a tananyag kezdőlapjára (P)Ugrás a tananyag előző oldalára (E)Ugrás a tananyag következő oldalára (V)Fogalom megjelenítés (nem elérhető funkció)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintése (D)Keresés az oldalon (nem elérhető funkció)Súgó megtekintése (S)

Modellezés és szimuláció / A szimuláció módszertana /4. Keretmodellek

Modellezés és szimuláció

4. Keretmodellek

Ebben a fejezetben általános keretet szeretnénk adni konkrét fizikai, kémiai, biológiai modellek vizsgálatához. Olyan általános modelleket vizsgálunk, melyek segítségével a fenti területeken könnyebb lesz új modelleket készíteni.

Elöljáróban hangsúlyoznunk kell, hogy feltesszük: a valóság jelenségei megismerhető részjelenségekre bonthatók, s ezek a részjelenségek egyetlen időpontban megadott jellemzők (állapot, paraméter) segítségével csatolhatók a valóság többi részéhez, és a fenti peremfeltételek akárhányszor újra megvalósíthatók („csodákkal nem foglalkozunk”).

A modelleket két nagy osztályba soroljuk. Az egyikben a teljes jövőt előre kiszámítjuk (a kezdőállapotból), s azután csak a kiszámított jövő megjelenítése a feladat. A másikban az aktuális állapotból csak a következő időegységbeli állapotot határozzuk meg, majd abból számítjuk a következőt ...

Példa

Ha egy bolygó Nap körüli mozgását akarjuk szimulálni, akkor eljárhatunk úgy is, hogy egy pillanatbeli helyzetéből, sebességvektorából, a bolygó és a Nap tömege segítségével meghatározzuk a pálya egyenletét – „tiszta” matematikai megfontolásokkal –, majd ezt megjelenítjük. Eljárhatunk azonban úgy is, hogy az aktuális helyzetből és sebességből a bolygóra ható pillanatnyi erők segítségével meghatározzuk a bolygó helyét és sebességét a következő időegységben, majd ebből számoljuk az ezt követő időegység adatait.

Mi a szimulációs sorozatunkban elsősorban az utóbbi típusú modellekkel foglalkozunk.

A valós rendszerek, amelyeket modellezni szeretnénk, olyanok lesznek, hogy a rendszer elemei osztályokba sorolhatók, a rendszer állapotát ezen osztályok elemszáma fogja meghatározni, illetve egyes esetekben ezen osztályok térbeli eloszlása, mintázata.

Egyszerűbb esetekben csak egy osztályt vizsgálunk, s minden elemet ebbe sorolunk be, máskor minden osztályban csupán egy elem lesz. A legegyszerűbb pedig az az eset, amikor egy osztály létezik egy elemmel. Ekkor tulajdonképpen egy (néhány) képletet kell folyamatosan számolnunk, mint az alábbi példából is látható:

Példa

Egy 0 tömegű, D rugalmassági együtthatójú, „ideális” rugóra helyezett M tömegű test rezgésének szimulációja. Ismert az s0 kezdeti kitérés, a nehézségi gyorsulás, a k közegellenállási együttható.

A szimuláció alapelve – kicsiny dT időintervallumokat választva, s azzal feltételezéssel élve, hogy dT idő alatt a paraméterek változásai elhanyagolhatóak, a fontos állapothatározók egyszerűen számíthatók, majd ezekből pl. állapotdiagram rajzolható:

Az F erő: F=Fr+Fk+G, Fr=D*s (rugóerő), Fk=k*v (közegellenállás), G=M*g

Az a gyorsulás: a=F/M

A v sebesség: v=a*dT

s kitérés: s=v*dT, s0 kezdeti kitérés: s0=M*g/D M*g=s0*D

Rugó állapotdiagramRugó állapotdiagram.

A rendszer egyes elemei véges sok állapotban lehetnek (diszkrét állapotú modell), s a rendszer elemszáma is mindig véges lesz. Minden egyes elem jövőbeni (következő időpillanat) állapotát csak a rendszer elemeinek adott időpillanatban meglevő állapota és a rendszer paraméterei határozzák meg (utóhatás mentesség – Markov tulajdonság). Most olyan feladatokkal fogunk foglalkozni, melyekben egy populációt vizsgálunk, s ezt mindig valamilyen egyedek összességének fogjuk fel (pl. atom, molekula, sejt, élőlény, társadalom stb.). Programjainkban ezért az egyes egyedekről kell valamilyen információt tárolnunk. Erre a célra táblázatokat használunk:

Ha az egyedek térbeli elhelyezkedésére nincs szükségünk, akkor egy vektort használunk, amelyben az egyes egyedek szimuláció szempontjából fontos jellemzői írjuk le.

Ha fontos az egyedek közötti szomszédság megállapítása – mozgás vagy kapcsolat szempontjából –, akkor két lehetőségünk van. Az egyszerűbb esetben a szimulációs teret ábrázoljuk, amelynek minden helyén vagy egy egyed szerepel, vagy pedig üres. A szimulációs tér ábrázolására kézenfekvő egy kétdimenziós táblázat (mátrix).

Megjegyzés

A 3 dimenziót főleg praktikus okok (ábrázolhatóság) miatt kerüljük, továbbá a legtöbb modellünkben ez már nem hozhat sok újat a 2 dimenzióhoz képest.

Ebben az esetben a fontos kérdés: kit tekintünk egy adott hely szomszédjának? A kérdésre kétféle válasz lehet: vagy a négyzetrácsbeli 4 oldalszomszédot választjuk szomszédnak, vagy pedig a 4 sarokszomszédot is.

Négyzetrácsos tér 4, illetve 8 szomszéddalNégyzetrácsos tér 4, illetve 8 szomszéddal.

Mindkét esetben geometriai problémák lépnek fel, ha megpróbálunk középső pontból eljutni valamelyik sarokszomszédba:

A sarokszomszéd távolsága 4, illetve 8 szomszédos esetben.A sarokszomszéd távolsága 4, illetve 8 szomszédos esetben.

A 4 szomszédos esetben a sarokszomszédba jutás 2 időegységbe kerül, azaz mintha az ábrán látható zöld derékszögű háromszög átfogó hosszúsága a két befogó hosszúságának összege lenne. A 8 szomszédos esetben a sarokszomszédba jutás 1 időegységet igényel, azaz olyan derékszögű háromszöget tételez fel, aminek mindhárom oldala azonos hosszúságú. Nyilvánvalóan mindkettő képtelenség.

Geometriából tudhatjuk, hogy a sík háromféle szabályos sokszöggel fedhető le, az általunk használt négyzetek mellett háromszögekkel és hatszögekkel is. A hatszöges lefedésben három szimmetriatengely fedezhető fel, nevezzük ezeket i-, j-, illetve k-tengelynek!

Hatszögrácson három szimmetriatengely van.Hatszögrács.

A i-tengely mentén i értéke állandó, tőle jobbra növekszik, balra pedig csökken. A j-tengely mentén j állandó, ettől balra növekszik, jobbra pedig csökken. A k-tengelytől felfelé csökken k értéke, lefelé pedig növekszik.

Hatszögrács 6 szomszéddal.Hatszögrács szomszédokkal.

Ilyen szabályszerűségek esetén a szomszédok kezelése algoritmizálható. Hatszögrács alakú programozási struktúrák azonban nincsenek.

Megfigyelhető azonban, hogy így a három index összege mindig ugyanaz – az (i,j,k) indexű hely bármely szomszédjánál az egyik index változatlan, a másik eggyel csökken, a harmadik eggyel nő – lehet például minden helyre i+j+k=0. Emiatt k értéke i-ből és j-ből mindig számítható, azaz ábrázolásban elég egy hagyományos mátrix, csupán a szomszédság meghatározásához kell a három index.

Könnyen belátható ugyanakkor, hogy a „hamis” geometriájú tér a jelenségek jellegét általában nem befolyásolja, csak a számított jellemzők pontos értékét. Ha erre nincs szükségünk, akkor maradhatunk a négyzetrácsos síklefedés mellett.

Elképzelhető ebben az esetben is az egyedek ábrázolása egy vektorban, ekkor azonban a vektornak tartalmaznia kell az egyes egyedek térbeli elhelyezkedését leíró adatokat – pl. a koordinátákat.

Ebben – és a következő – fejezetben az általánosabb esetet követjük, mindig NxM-es táblázatokat – eseménytér – használunk, melyben N és M értékét (azért, hogy statisztikailag értékelhető eredményt kapjunk) legalább 100-nak választjuk.

Két alapvető keretmodellt fogunk létrehozni, a következő elvek alapján:

A két keretmodell közös része:

A feladat megoldása:
Tájékoztató kiírás
Ciklus amíg szükséges
Adatok beolvasása
A kísérletsorozat elvégzése
A kísérletsorozat összesítése
Ciklus vége
Eljárás vége.

Itt egy általános feladat megoldási elvet használtunk, amely egy feladat többszöri megoldására szólít fel.

A kísérletsorozat elvégzése:
Ciklus amíg kell újabb kísérlet
Kezdő táblázat feltöltés
Kezdőábra rajzolás
A feladat konkrét megoldása
Kísérletösszesítés
Ciklus vége
Eljárás vége.

Mindkét keretmodell esetén még egy felbontást készítünk, valamilyen változást szeretnénk nyomon követni, amely lehet:

Az utóbbit az állapotváltozás speciális esetének foghatjuk fel, csupán a későbbi hivatkozások érdekében vizsgáljuk különállóan.

Adott egy NxM-es táblázat, amelyen eseményeket figyelhetünk meg. A táblázat egy eleme egy egyedet (atom, molekula, sejt, élőlény, társadalom stb.) jelent, amelynek két fajtáját (populációt) fogjuk ábrázolni. A táblázatot valamilyen kezdeti – megadott – eloszlás alapján – általában véletlenszerűen – kitöltjük. Ezután kezdődhetnek a változások, az „események”, amit „A feladat konkrét megoldása” eljárás fog elvégezni.

4.1. Folytonos keretmodell

A változtatást úgy valósítjuk meg, hogy kiválasztjuk – valamilyen szabály – szerint a táblázat egy (vagy több) elemét, majd az ott levő egyed felhasználásával módosítjuk a táblázatot.

A feladat konkrét megoldása:
Ciklus amíg szükséges
Szimulációs lépés[1 elem módosítása]
A módosított elem kiírása
Ciklus vége
Eljárás vége.

Olyan ciklust, mint amelyet ebben a programban használtunk, akkor írunk, amikor a ciklus befejeződésének előidézését a program majdani használójára akarjuk bízni, mivel azt, hogy a szimulációt mennyi ideig érdemes követni, a használó szubjektív véleménye alapján döntheti el.

Folytonos diffúziós modell

A módosítás folyamata itt másképpen történik: kiválasztunk egy elemet a táblázatból, majd megcseréljük környezetének egy véletlenszerűen kiválasztott elemével. A változás itt mozgást jelent!

A feladat konkrét megoldása:
Ciklus amíg szükséges
(i,j):=véletlen hely(N,M)
(p,q):=véletlen szomszéd(i,j)
Csere( (i,j),(p,q) )
Eredménykiírás
Ciklus vége
Eljárás vége.

Vissza a tartalomjegyzékhez

4.2. Diszkrét (generációs) keretmodell

Egy új táblázatot kell készíteni úgy, hogy az első táblázat valamennyi elemét módosítjuk valamilyen szabály szerint és a továbbiakban csak az új táblázattal (új generáció) foglalkozunk.

A feladat konkrét megoldása:
Ciklus amíg szükséges
A táblázat kiírása
Szimulációs lépés [Új táblázat készítése]
Régi táblázat :=Új táblázat
Ciklus vége
Eljárás vége.

Diszkrét diffúziós modell

A módosítás folyamata itt úgy történik, hogy a táblázat összes elemével végzünk valamilyen mozgást.

A feladat konkrét megoldása:
Ciklus amíg szükséges
Ciklus i=1-től N-ig
Ciklus j=1-től M-ig
(p,q):=véletlen szomszéd(i,j)
Csere( (i,j),(p,q) )
Ciklus vége
Ciklus vége
Eredménykiírás
Ciklus vége
Eljárás vége.

Vissza a tartalomjegyzékhez

4.3. Sejtautomata-elvű keretmodell

A mozgást szemléltető modellek alapvető problémája a szimulációs program sebessége lesz. A megfigyelt térrész növelésekor a megoldást kivárhatatlanul hosszú idő alatt kapjuk csak meg. Ez a probléma sokkal élesebben vetődik fel akkor, amikor a mozgás, az „áramlás” bonyolultabb szabályok szerint megy végbe. Erre a problémára adnak választ a sejtautomata-elvű modellek.

Osszuk fel a vizsgált térrészt azonos méretű cellákra (sejtekre)! Minden egyes sejtre meg fogjuk adni az állapotát (pl. adott időpillanatban mennyi molekulát, energiát, egyéb elemi objektumot tartalmaz). A diszkrét keretmodellre építhetjük a sejtautomata típusú modelleket, az összes sejt párhuzamos (azonos időbeli) állapotváltozását fogjuk megadni. Minden egyes sejt következő időpillanatbeli állapota függ egyrészt a saját állapotától, másrészt pedig szomszédai, valamilyen környezete állapotától (de a távolhatást nem engedjük meg). Ezt az állapotváltozást írja le az ún. állapotátmenet-függvény.

A szomszédság kérdése: a választott időegységtől függően többnyire 4 vagy 8 szomszédot veszünk figyelembe. v*Δt << a esetén a 4 a jó közelítés, ahol v: az áramlás sebessége, Δt: az időegység, a: a sejt-„kocka” oldalhossza.

Meggondolandó: hogyan kapjuk a diffúzió véletlenszerű mozgásából az állapotátmenet függvényt? Erre a kérdésre a választ úgy kaphatjuk meg, ha – feltételezve, hogy minden cellán belül egyenletes az eloszlás (a sebességeloszlás is) – meghatározzuk, hogy a cellában levő molekulák hány százaléka képes egy időegység alatt elhagyni a cellát (ez a diffúziós sebesség).

Tartalmazza a sejttér régi állapotát az R(N,M) mátrix, az újat pedig az U(N,M). A modellben nemnegatív (valós) számok fogják azonosítani az egyes sejtek állapotait, illetve -1 fogja jelölni azokat a sejteket, amelyek mintegy falat határoznak meg a sejttérben, azaz nem változhatnak, s rajtuk keresztül a mozgás sem történhet. Célszerű lesz kezdetben az a feltételezés, hogy sejtterünk szélein ilyen fal típusú sejtek találhatóak.

Ez a modell homogén és izotróp teret feltételez (a diffúzió sebessége helytől és iránytól független). Az általános algoritmusban a szimulációs lépés a következő elemi lépésekből áll:

Szimulációs lépés:
U:=R
Ciklus i=1-től N-ig
Ciklus j=1-től M-ig
Ha U(i,j) nem fal akkor Változás(i,j)
Ciklus vége
Ciklus vége
Eljárás vége.

A változás azt jelenti, hogy a sejttér adott pontjára a környezetből anyag (energia) áramlik. Megadhatjuk az állapotátmenet függvényt, vagy pedig azt az algoritmust, amellyel ezt az átmenetet megvalósítjuk. Ez utóbbi:

Változás(i,j):
Belépés(i,j,i-1,j)
Belépés(i,j,i,j-1)
Belépés(i,j,i+1,j)
Belépés(i,j,i,j+1)
Eljárás vége.

Minden egyes sejtből a teljes anyagmennyiség D-szerese fog kiáramlani 4 szomszédja közül mindegyikbe (D<<1/4):

Belépés(i,j,k,l):
Ha U(k,l) nem fal akkor U(k,l):=U(k,l)-D*R(k,l); U(i,j):=U(i,j)+D*R(k,l)
Eljárás vége.

Vissza a tartalomjegyzékhez

Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.
Készült az "Országos koordinációval a pedagógusképzés megújításáért” című TÁMOP-4.1.2.B.2-13/1-2013-0007 pályázat keretében.
(ISBN 978-963-284-631-6)

A tananyag az ELTESCORM keretrendszerrel készült