Generaattorin rakenne 1. Parseri 1a. Mallin lukeminen -Parseri lukee mallia rivi kerrallaan -Rakenteet havaintaan '{' ja '}' merkeistä -Jos luetaan rakenne, luodaan Entity olio -Entity olio ja sen nimi lisätään HashMap tyyppiseen olioon -Jos luetaan muuttujan määritys, luodaan Variable olio -Nimi, onko dataa, onko funktionaalinen, mihin entityyn se liittyy, millä rivillä datassa, mikä sen yhtälö on? -Jos variable olio on rakenteen sisällä, lisätään se kyseiseen entity olioon -Lopuksi Entity oliot linkitetään kutsumalla niille link(HashMap mapper) metodia 1b. Simulointiteknisten parametrien lukeminen -Globaalit asetukset luetaan muuttujiin -Ehdotusjakaumat, kierrosten lukumäärä, algoritmi, jne, luetaan Variable olioihin -Tiedostosta luetaan rivi, josta selvitetään muuttujan nimi -Variable listoista etsitään oikea olio nimen perusteella -Oliota ei löydy -> virheilmoitus -Ehdoitusjakaumat talletetaan Distribution olioina! 1c. Datan läpikäyminen -Käydään entity oliot läpi -Jokaisen datatiedoston pituus käydään läpi ja tämä lisätään Entity olioon -Samaan aikaan puuttuvat arvot korvataan nollilla ja kirjoitetaan uutta binäärimatriisia... -Sarakkeista lasketaan montako arvoa puuttu -Lopuksi Entity olioon liittyviin Variable olioihin päivitetään puuttuvien muuttujien lukumäärä 1d. Kokoojaolion luominen -Luodaan kokoojaolio (entity ja variable kokoelmat, globaalit sim.tek. parametrit) 2. Jakaumaolioiden luonti (tämä täytyy tehdä ennen parsetusta!!!) -NAGin jakaumille luodaan oliot -Käyttäjän omille jakaumille luodaan oliot (?) 3. Linkitys ja Fortran lausekkeiden luonti 3a. -Variable oliot käydään läpi ja linkitetään !-Selvitä ehdotusjakauma ja korvaa... ("proposal" kenttä) ! -Etsi jakaumaolio nimen perusteella, kovakoodaa... ! -Jakaumaoliolta saadaan laskutoimitus -Jos muuttuja on stokastinen -Selvitetään pistetodennäköisyys jakauma nimen perusteella -Luodaan kyseisen jakauman olio -Käydään Variable oliot läpi ja etsitään riippuvuudet parametrien nimien perusteella -Affects kenttien päivitykset (!) -Lisätään jakauman olioon linkit parametreihin !-Spatiaalisuus erikoistapauksena ! -Spatiaalisuus linkitettynä listana (?) fortranissa ! -For silmukka tai jotain... -Jos muuttuja on funktionaalinen (-Korvataan ^ merkki **:llä, e^... korvataan exp(...)) -Selvitetään mistä muuttujista olio riippuu -Käydään Variable-oliot läpi ja etsitään riippuvuudet nimen perusteella -Affects ja Depends kenttien päivitykset (!) 3b. Hyväksymisuskottavuuden muodostaminen tapahtuu näin. Huom tämä tehdään myöhemmin (olkoon muutuja t) -Variable luokan metodi generoi tämän{ -P(t') ja P(t) muodostetaan jakaumaolion avulla -käydään "Affects" linkit läpi -Jos Kyseesä on stokastinen muuttuja -Muodosta P(...|..., t', ...) ja P(...|..., t, ...) jakaumaolion avulla -Selvitä onko muuttuja globaali/sarake/matriisi... -Jos kyseessä on funktionaalinen muuttuja -Muodosta laskukaava (korvaa viitteet oliohin...) (???) -Seuraa "Affects" linkkiä ja toista... -Kokoa laskukaava ja palauta se !!! Algoritmi !!! } -Jokin generaattorin metodi tekee tämän{ -Generoi ehdoitus (Variable oliosta saadaan Distribution olio) -Todennäköisyys (muodostetaan jakaumaolion avulla, kutsuu metodia) -Arvo randomi luku -Katso päivitetäänkö -Päivitä jos päivitetään -Seuraa "affects" linkkiä ja päivitä kaikki funktionaaliset muuttujat } 4. Fortran ohjelman tietorakenteiden koodaaminen -Entity olio kertoo tarvittavan taulukon koon -Variable olion puutuvat arvot kenttä... (datalle) - ... 5. Alkuarvojen, datan, spatiaalisen matriisin lukemisen koodaaminen -Data -Alkuarvo -Spatiaalisuus -Puuttuvat arvot datassa! 6. Päivitys-strategian koodaaminen -Helppo, 2 vaihtoehtoa 7. Ehdotuksien + päivittämisen koodaaminen 7a. Random -Päivitettävä muuttuja arvotaan -Switch lauseke -Generointi, uskottavuuden laskeminen, randomi luku, päivitetäänkö?, funktionaaliset muutujat -Jokin metodi tekee tämän 7b. Järjestyksessä -Käydään jokainen taulukko järjestyksessä läpi -Jokaiseen taulukon läpikäyntiin liittyy oma ehdotus + uskottavuus... -Laskeminen samalla tapaa... 8. Tulostuksen koodaaminen