Darázs-modell

Szlávi Péter

2000-2012

 

 

 

 

 

 

 

Tartalom

1. Elvárások. 2

2. A problémák. 3

2.1. Állapotok, állapotváltoztatás, programkezelés. 3

2.2. Képernyők. 3

2.3. Billentyűkezelés. 3

2.4. Tájékoztató. 3

2.5. Grafikus képernyő. 4

2.6. Összefoglalás. 5

2.7. Szimulációs keret 5

3. A keretprogram... 6

4. Feladatok. 6

Alapfeladat 6

Célfeladat 7

Szorgalmi feladat 7

5. A teljes anyag. 8

 

 


1. Elvárások

Az elvárásokat legjobban az alábbi, futás során keletkezett ábrasor fejezi ki.

1. ábra. Egy futási kép – Tájékoztató

 

2. ábra. Egy futási kép – Paraméterezés

 

3. ábra. Egy futási kép – Futás közben

Mindenekelőtt lássunk egy próbát! (DarazsMo.exe)

2. A problémák

A kezelés és a látvány, valamint a szimuláció specifikus problémái és megoldásötletei.

2.1. Állapotok, állapotváltoztatás, programkezelés

Normál / Lépésenkénti / Csendes / Vége

TÜzemMódok típus, ÜzemMód állapotváltozó

2.2. Képernyők

Karakteres – tájékoztatás, paraméterezés

Grafikus – modellezés

Miért célszerű ez így? Miért nem csak karakteres vagy csak grafikus képernyő?

2.3. Billentyűkezelés

Billentyűfigyelés, várakozás-kijelzés, állapotmódosítás (ÜzemMód állapotváltozó)

2.4. Tájékoztató

Egyszerű szerkezetű (=előre a képernyőre tördelt) Text fájlból, karakteres képernyőre, lapozottan.

Text-kezelési minimum – emlékeztető:

ˇ         Var f:Text; {karakterfájl} sor:String[80]; {egy sorát ebben olvassuk majd be}

ˇ         Assign(f,fN); {$i–} Reset(f); {$i+} hiba:=IOResult<>0; {ellenőrzött nyitás}

ˇ         Eof(f) {=vége-e az f fájlnak?}

ˇ         Readln(f,sor); {egy sor beolvasása f-ből sor-ba}

ˇ         Close(f); {f lezárása}

2.5. Grafikus képernyő

Felépítése, állandó részei (keret, cím, idő, help-sor), ablakfajták (grafikon / eseménytér)

Turbo grafikai[1] „egyszer-egy” – emlékeztető:

ˇ         Graph unit                                 ˇ     InitGraph                                ˇ      Detect

ˇ         SetViewPort, GetMaxX…       ˇ     ClearViewPort                       ˇ      SetLineStyle, SolidLn…

ˇ         SetTextJustify, CenterText…   ˇ     Rectangle                               ˇ      OutTextXY

A Grafikon-ablak műveletei:

ˇ         Létrehozás paraméterek szerint (hol, mekkora, cím, …)

ˇ         (Első) kirajzolás (az ablak „statikus” részeinek megjelenítése)

ˇ         Teljes grafikon kirajzolás (pl. Csendes üzemmód után, vagy eloszlásgörbe)

ˇ         Eloszlásdiagram – csak a változó oszlop adminisztrálása, és üzemmódfüggően kirajzolása

ˇ        IdőDiagram kirajzolás – az új oszloppal bővítés (adminisztrálással), és –üzemmódfüggően– kirajzolása shift-eléssel

4. ábra. Eloszlásdiagram

5. ábra. Idődiagram

Az Eseménytér-ablak műveletei

ˇ         Eseménytér kirajzolása

ˇ         Elemi esemény követése

 

 

6. ábra. Eseménytér-ablak

2.6. Összefoglalás

A probléma forrása az, hogy bár előre tudhatók azok a végkifejletek, amelyek bekövetkezhetnek, de hogy mikor, és milyen mértékben azt a futás végén lehet csak tudni. Tehát a megjelenítendő információnak van előre megfogalmazható szöveges része, amelyekbe beleillesztendők a futás aktualitásai.

Megoldásötlet: a szövegben elhelyezni olyan speciális jeleket, amelyekről beolvasás közben or­dít, hogy milyen aktualitást kell a helyére illeszteni. Tehát a megoldás algoritmusa hasonlít a tájékoztatóéra, azzal a különbséggel, hogy soronként ellenőrizni kell a speciális jelek meglétét, és esetleg be kell oda illeszteni a hozzátartozó aktualitás értékét.

2.7. Szimulációs keret

Modell-reprezentáció – a modell alapadatai:

ˇ         T – idő

ˇ         N,K – össz-darázs-szám, bal dobozbeli darázsszám (modell-specifikus)

ˇ         UzemMod: TUzemModok – aktuális üzemmód

ˇ         Darazs – darazsak holléte (modell-specifikus)

ˇ         dobozTerkep – szabad/foglalt helyek nyilvántartása (modell-specifikus)

ˇ         darazsKep – darázs rajza (modell-specifikus)

Modell-implemetáció – a modell nagyvonalú algoritmusa (Pascal-ul):

  UzemMod:=Lepesenkenti;
 
Tajekoztato;

  Inicializalas; T:=0;

  KezdoKepernyo;

  EredmenyMegjelenites;

  While not VegeE do

  Begin

    SzimulaciosLepes;

    Inc(T);

    EredmenyMegjelenites;

  End;

  OsszefoglaloMegjelenites;

Az eljárások/függvények rövid leírása:

ˇ        Tájékozató:

L. feljebb

ˇ        Inicializálás:

Paraméterbeolvasás (modell-specifikus)

Grafikonok parametrizálása

Eseménytér inicializálása

Darázskép-generálás (modell-specifikus)

Darazsak elhelyezése (modell-specifikus)

ˇ        KezdőKépernyő

Grafikus képernyőre váltás

Grafikus képernyő (-alap)elkészítése (ablakok kirajzolása)

ˇ        EredményMegjelenítés

Aktuális idő kiírása

Grafikus ablakok frissítése (a változó adatok módosítása)

ˇ        VégeE

Billentyűfigyelés –üzemmódtól függően: várakozás–

Végállapot-figyelés (modell-specifikus)

(Esetleg) kijelzés frissítés (Csendes → Normál / Lépésenkénti)

ˇ        SzimulációsLépés

A lényeg – modellváltozók módosítása (modell-specifikus)

Az eseménytér módosítása (ha kell)

ˇ        ÖsszefoglalóMegjelenítés

Konklúzió levonása – a végidőt, az össz- és a baloldali dobozbeli darázs-számot tartalmazó, előre gyártott, fájlban levő szöveg megjelenítése (a szöveg: modell-specifikus)

       L. a keretprogram OsszefoglaloMegjelenites eljárásában

Összefoglaló ábrák megjelenítése (modell-specifikus)

3. A keretprogram

L. DarazsKe.pas.

Megértendő fogalmak, részek:

ˇ         a feltételes fordítás lényege és itteni célja

ˇ         a típusok – főleg a THisztAblak

ˇ         a globális adatok – főleg a T, N, K, Darazs, DobozTerkep

ˇ         az ablak-műveletek célja, paraméterezése

ˇ         az inicializálás feladatai (és a fejlesztési kényszer miatt keletkezett TP2FP… konverziós függvények)

ˇ         a ’kezdő képernyő’ feladatai

ˇ         az eredménymegjelenítés feladatai

ˇ         a vége-e függvény (többletszolgáltatásai)

ˇ         az ’összefoglaló megjelenítés’ kulisszatitkai

4. Feladatok

Alapfeladat

A keretprogramban az ’(*ide kell a kód*)’ megjegyzéssel megjelölt részek kitöltése:

ˇ         Tajekoztato teljes megvalósítása

ˇ         Inicializalas-ban

o  az N és a K tisztességes beolvasása,

o  az eseménytér inicializálásából a darazsak elhelyezése a Darazs-ban és a DobozTerkep kitöltése

ˇ        SzimulaciosLepes-ben

o  az átrepülő darázs kiválasztása,

o  az eseménytér régi dobozából törlése,

o  az eseménytér új dobozában hely keresése, és elhelyezése

A jövőbe mutató célfeladat

A Darázs-modell keretprogramjából olyan szimulációs keretprogram elkészítése, amely a ké­sőbbiekben jobb kiindulópontul szolgálhatna, mint a Darázs-modellé. Azaz a biztosan fölösleges részeket ki kell hagyni. Annyit lehet előre tudni, hogy a későbbi modelljeinkben a „mozgó alkat­részeket” (a mostani darazsakat) már elegendő lesz egy valamilyen színes ttyel jelölni, és csak egyetlen reakciótérben zajlanak majd az események (nem lesz több doboz).

Szorgalmi feladat

Illesszünk be egy új diagramot a programba, amelyen megjelenítjük azt az eloszlást, amelyet a darázs-modell a konkrét paraméterekhez jósol. Ezt elegendő egyetlen egyszer kirajzolni, hiszen az idealizált végállapotot szemlélteti. Az összefoglalóban kiírjuk, hogy kezdetben és a végén mennyi volt az empirikus és az elméleti eloszlás „távolsága”. (Az elméleti eloszlás (N,½)-para­méterű binomiális eloszlás.[2])

Ezt a távolságot pl. az alábbi módon definiálhatjuk:

Ha N elemből áll az eloszlást reprezentáló sorozat (e0, …, eN), akkor két ilyen távolsága legyen

 

Hogy mire is gondolok? Álljon néhány jellemző kép az elérendő cél bemutatására!

 

7. ábra. Egy futási kép a szimuláció elejéről (T=141)

 

8. ábra. Egy futási kép a futás legvégén (T=23847)

 

9. ábra. Egy futási kép – Összefoglaló

 

5. A teljes anyag

Ez a kézirat, források, lefordított kódok, súgófájl... : Darazs.zip.

 



[1]     A Free Pascal implementálói elfogadták a Borland Turbo grafikáját (TG), és egy az egyben megvalósították a saját rendszerükben.

      TG részletesebb leírását itt találja: http://pascal-programming.info/lesson8.php

[2]     http://hu.wikipedia.org/wiki/Binomi%C3%A1lis_eloszl%C3%A1s