A program néhány közlekedési lámpával ellátott útszakasz közlekedését próbálja szimulálni, és nyomon követni a forgalomra tett hatását néhány külső körülménynek, illetve ezen körülmények megváltozásának következményeit.
Például ilyen körülmény a lámpák kapcsolási tulajdonságai, a forgalom érkezésének intenzitása, a forgalom által meghatározott sebesség, lámpák vezérlése.
A program egy egyszerű közlekedési sémát modellez , mely egy útszakaszon öt darab közlekedési lámpát feltételez. Ezen útszakasz forgalmát, telítettségét vizsgáljuk.
A lámpák működése összehangolt, és egy adott sebességre van ütemezve. Ami azt jelenti, hogy az ezen a sebességgel való közlekedés, dugómentesség esetén, csupa zöld lámpát eredményez.
Ez az ütemezett sebesség a forgalom sűrűségének függvényében a futás folyamán változhat, és erről üzenetet is kapunk. A forgalomban résztvevő járművek érkezése több szinten is véletlenszerű.
Ugyanis a program folyamatosan véletlen hosszúságú időszakokat generál (1-5 óra), mely időszaknak meglesznek a maga véletlenszerű jellemzői. Ilyen jellemző például az, hogy az időszakban hány autó érkezése
várható, valamint ezen autók milyen sebességet igyekszenek követni.
A program minden manőverről üzenetet küld, és mindig a legalsó sorban, az útszakasz egyes részeinek telítettségéről, valamint a lámpák pillanatnyi állásáról kapunk információt. A teljes sor jelképezi az
útszakaszt, és a lámpákat I vagy - jel jelöli attól függően, hogy a lámpa jelenlegi állapota piros, vagy zöld.
A lámpák között, és előtt számok vannak. A lámpa előtti szám az adott lámpánál várakozó autók száma. A lámpák közötti másik szám az adott útrészen még haladó autók számát mutatja.
A legelső szám a futtatás ideje alatt az útszakaszra érkező járművek száma, a legutolsó szám pedig azon járművek száma, amelyek már átmentek, mind az öt lámpánál, és elhagyták az útszakaszt.
Beszéljünk először is az előbb megemlített globális változókról:
Lampavar: ennyi időegységenként vált egy lámpa
Lampaseb: egy lámpa mekkora késéssel van az előzőhöz képest
( 5 - 70 km/h , 6- 60 km/h . 7- 50 km/h )
Maxautoora: egy órán belül maximálisan hány autó érkezhet az
útszakaszra
Lampavaltora: egy órán belül hányszor vált egy lámpa
Dugohatar: ha az első lámpánál eléri a várakozó autók száma
ezt az értéket, akkor megváltozik a lámpák kapcsolási sebessége
A program magjában három process osztály található, ezek rendre a
következők:
LAMPAVALT minden lámpához tartozik egy ilyen, az o aktiválásakor vált az adott lámpa.
Az o feladata továbbá a következő lámpa aktiválása a megfelelő késleltetéssel.
LAMPAENGED belőle is tartozik egy minden lámpához , és feladata
hogy aktiválásakor , ha a lámpa zöld akkor a sorában
várakozó autókat tovább engedje.
AUToTIP az egy autót megszemélyesítő process , mely feladata,
hogy a neki megadatott sebességgel számolt haladási
időt figyelembe véve menjen tovább a következő lámpáig , vagy az utolsó lámpa után terminál.
Ezen kívül van még egy eljárás is, amelyet minden process meghív, miután megváltoztatott valamit az útszakaszon.
Az eljárás neve Kiir_forgalom, és feladata az aktuális állapot kiírása, minden lapnyi információ után újrakezdeni ,valamint az ö feladata még a forgalmi telítettség figyelése is, és az esetleges közbeavatkozás.
Ami konkrétan azt jelenti, hogy ha az első lámpa sormérete eléri a dugóhatárt, akkor gyorsítja a lámparendszert, illetve ha alacsony a forgalom
(hosszabb ideig üres ugyanez a sor), akkor lecsökkenti a lámpák sebességét (azaz növeli a késleltetést).
Egy ABC-áruház munkanapjának szimulálása az első vásárló megérkezésétől az utolsó távozásáig. A vásárlók belépnek a bejáraton, ha kell sorba állnak kosárért, majd kosárral a kezükben megkezdik a vásárlást. Némi bolyongás után eljutnak a pultokhoz. Ha van szabad pult odaállnak, ha nincs, akkor sorbaállnak. A pultokat elhagyva előbb utóbb eljutnak a pénztárakhoz. Ha van szabad pénztár odaállnak, ha nincs, akkor ismételten sorbaállnak. Fizetés után a kosarukat leteszik a kijáratnál, majd távoznak. Ha a kijáratnál megfelelő számú kosár összegyűlik, az áruház dolgozói elviszik a kosarakat a bejárathoz. Zárásnál előbb becsukják a bejáratot, majd kiszolgálják a még bent lévő vásárlókat és végül becsukják a kijáratot is.
Ez a program egy nagyon kis farmot szimulál, ahol van egy farmer,
egy szállító, aki a takarmányt szállítja, és két tehén.
A programnak többféle különböző paramétert lehet megadni, ami sokféle és eltérő kimenetelt eredményezhet.
A program indításakor kétféle lehetőség közül választhatunk.
Ha nem 0-t adunk meg, akkor beépített tesztadatokkal fut le a program,
ha 0-t adunk meg, akkor mi adhatjuk meg az induló paramétereket.
Az induló paraméterek jelentése :
honap_hossz : A farmon eltelt idő hossza ( ez relatív, a többi időtartamot ehhez viszonylagosan kell megadni ).
evesido : Ennyi ideig eszik egy tehén.
kezdoosszeg: Ekkora pénzösszeggel indul a farm. (Ebből lehet költeni a tápra.)
ossztap: Ekkora tápmennyiséggel indul a farm. ( Ez növekszik, ha táp érkezik, csökken, ha egy tehén eszik belole. )
tehentap: Ennyi tápot eszik meg egy tehén egyszerre.
hozotttap: Ennyi tápot hoz egyszerre a szállítóautó.
tehenar: Ennyi pénzért fog eladni a farmer egy tehenet.
eladhato: Ekkora súllyal fog eladni egy tehenet.
tapar: Ennyit fizet a farmer a szállítóautónak.
hizas: Ez a hízási tényező, ha X mennyiségű tápot megeszik a tehén,
akkor X*hizas-sal nő a súlya.
kezdosuly: Ekkora súllyal indulnak a farmon a tehenek.
Ezek után látható a szimulációs folyamat a képernyőn, ahol a lényegesebb
adatok időről-időre megjelennek.
A végeredmény az, hogy mennyi pénz maradt vagy folyt be a farmra.
A programot folyamatok alkotják, úgymint: farmer, tehén, autó.
Ezenkívül van benne egy eljárás, ami az adatokat bekéri.
A folyamatok leírása :
farmer :
A folyamat indításakor aktivizálja a két tehén folyamatot,
majd végtelen ciklusban ismétli a következőt :
megvizsgálja, hogy van-e táp. Ha nincs, akkor aktivizálja a táposautó folyamatot. Ezután mindkét tehenet megvizsgálja, hogy elérték-e az eladhatósági súlykorlátot. Ha igen, akkor eladja őket, majd törli őket a folyamatok közül. Végül, ha mindkét tehén el lett adva, akkor saját magát állítja le a folyamat. Ha pedig nem, akkor hátrébb ütemezi magát.
tehen :
A folyamat indításakor a tehén súlya kezdősúly értéket kap. Ezután ha van annyi táp, amennyiből tud enni, akkor eszik, ha nem akkor csak hátrébb ütemezi magát ( amíg meg nem jön a táposautó ).
auto :
Miután aktivizálta öt a farmer, beállítja az új értékeket, majd
felfüggeszti működését.
Lényeges az ütemezés szerepe, ugyanis a farmert csak kevés ideig lehet felfüggeszteni, különben a tehén folyamatok túlfuthatnak azon a korláton, mint amit a farmer ellenőriz.
Számos fejlesztési lehetőséget ad a program, pl.: Ne csak 2 tehén legyen,
hanem több, a farmer vehessen is teheneket, a tehenek tejet is adhatnak,
amit szintén értékesíteni lehet, stb. . Mindez azonban már meglehetősen
nagy feladat lenne.
A program egy fodrászszalon szimulációját valósítja meg.
A fodrászatban dolgoznak fodrászok, hajmosók és pénztárosok.
A program indításakor meg kell adni néhány adatot :
- a hajmosók, hajvágók, pénztárosok számát,
- a hajmosási, hajvágási, fizetési periódus hosszát,
- az egész szimulációs periódus hosszát (természetesen ha lejárt a periódus,
akkor még azután kiszolgálják a fodrászüzletben lévő vendégeket),
- a szimuláció eredményét hova írjuk, ha file-t adunk meg, akkor az eredmény
a SIMULAT.TXT file-ban jelenik meg.
A hajmosókat Németh{n} Gizi-nek hívják, ahol n eleme 1..N hajmosók száma.
A hajvágókat Horváth{n} Rozi-nak hívják, ahol n eleme 1..N hajvágók száma.
A pénztárokat 1-tol pénztárosok számáig sorszámozzuk.
A bejárati ajtón véletlenszerű időközönként bejön egy ember, hogy levágassa a
haját. A belépő emberek nevei Kovács{n} István, ahol n a belépési sorrendnek
megfelelő szám.
Egy ember útja ezután sorrendben a következő :
- amikor van szabad hajmosó, megmossák a haját,
- amikor van szabad hajvágó, levágják a haját,
- amikor van szabad pénztáros, kifizettetik vele a fodrászkodás díját,
- hazamegy.
A program egy gépterem szimulációját végzi. A gépteremben N db gép van,
melyet a felhasználók folyamatosan használnak. A gépek száma határt szab
az aktív felhasználók számának. A user-ek folyamatosan érkeznek, ha kell
várakoznak, majd dolguk végeztével távoznak.
Hogy a gépteremben ne alakulhasson ki feltorlódás egyes felhasználók végett, a rendszergazda kiküldhet felhasználókat a gépteremből a következő okok miatt:
- a felhasználó M ideje van már a gépteremben
- a felhasználó nem megengedett célra használja a gépet (pl. játszik rajta)
Egy irodaházban van egy lift, ami az ügyfeleket szállítja az emeletek között. Az egyes emeleteken lehet liftre várni, ügyintézőre várni, és jó esetben az ügyintézővel az ügyet intézni.
Következő osztályokat definiáltam: