Kas yra simuliavimas
Bendriniu lygmeniu simuliavimas yra laikomas pažinimo forma. (Pažinimas = veiksmas arba žinių įgijimo procesas.) Yra trys pagrindiniai metodai informacijai (žinioms) apie objektyvią tikrovę įgyti: eksperimentas, analizė, simuliavimas. Paimkime vieną praktinį pavyzdį, kuris pademonstruos šios tris metodus. Tiriama sistema – degalinė su vienu darbuotoju. Klausimas toks: „Kiek vidutiniškai laiko vienas automobilis praleidžia degalinėje?“. Atsakymą gauti galime pasitelkę tris metodus:
Eksperimentas: pasiimkite chronometrą ir išmatuokite laiką, kiek vienas automobilis praleidžia laiko degalinėje. Susumuokite visus laikus ir gautą skaičių padalinkite iš automobilių skaičiaus.
Analizė: naudokite eilių teorijos formulę, kad tiesiogiai apskaičiuotumėte vidutinį laiką, praleistą sistemoje. Norėdami panaudoti formulę, turėsite sugalvoti tam tikrą eilės modelį, kuris supaprastins realią sistemą. Taip pat jums reikės kai kurių kiekybinių parametrų (atvykimo intensyvumas – atvažiuojančių automobilių skaičius per laiko vienetą ir aptarnavimo intensyvumas – aptarnaujamų automobilių skaičius per laiko vienetą).
Simuliavimas: parašykite simuliavimo modelį, kuris generuoja atsitiktinai atvažiuojančius automobilius ir paslaugų trukmę. Jis taip pat turi tinkamai sekti visas veiklas, kad šios atitiktų realią sistemą. Taip pat turi būti suprogramuotas stebėjimas, statistinių duomenų rinkimas ir vertinimas (įvertinkite kiekvieno automobilio praleistą laiką, susumuokite šiuos laikus, suskaičiuokite automobilių skaičių, pabaigoje apskaičiuokite ir parodykite vidurkį).
Šie trys metodai negali būti vertinami nuo geriausio iki blogiausio, nes visi jie turi tam tikrų privalumų ir trūkumų. Jie gali būti lyginami tik konkretaus atvejo kontekste, atsižvelgiant į įvairius kriterijus. Tačiau kai kurie pagrindiniai faktai yra akivaizdūs:
Eksperimentas yra tiksliausias metodas, kurį reikėtų naudoti visada, kai tik įmanoma. Deja, dažnai eksperimento metodas gali būti:
- Per daug pavojingas (branduolinio reaktoriaus elgesys kritinėse situacijose, nusileidimas lėktuvu su vienu neveikiančiu varikliu ir pan.)
- Per brangus (visi atvejai, kurie sukelia vienokią ar kitokią žalą, ilgi eksperimentai, tiriantys duomenų tinklo pralaidumą naudojant nuomojamas telefono linijas ir pan.)
- Visiškai neįmanomas, jei tiriama sistema nėra prieinama (galimų alternatyvų įvertinimas projektavimo etape).
Analizė (dažniausiai matematinė) paprastai grindžiama tvirtomis prielaidomis, kurios retai būna teisingos praktiniame pritaikyme. Kitas galimas analizės metodo trūkumas yra pernelyg sudėtingi naudojami prietaisai ir (arba) per daug laiko užtrunkantis skaičiavimas. To pavyzdys yra aptarnavimo sistemų analizė. Kita vertus, naudojant formules dažniausiai rezultatai yra gaunami greitai ir galima išbandyti daugybę alternatyvų paprasčiausiai įterpiant skirtingas parametrų reikšmes į formulę(es). Eksperimentiniai metodai dažniausiai užtrunka daug daugiau laiko. Kita analizės problema yra būtinų parametrų prieinamumas. Tikslūs duomenys apskaičiavimui ne visada yra žinomi arba jų neįmanoma gauti projektavimo etape. Naudojant apytikslius duomenis arba duomenis, paimtus iš kitų panašių sistemų, sumažėja rezultatų patikimumas.
Simuliavimas taip pat yra eksperimentinis metodas. Užuot eksperimentuojant su realia sistema, eksperimentai atliekami su simuliavimo modeliu (kurio dizainas yra kertinis akmuo simuliavimo studijose). Tačiau šis metodas turi keletą svarbių trūkumų:
- Per daug sudėtingas simuliavimo modelių kūrimas. Programuoti simuliavimo modelius naudojant bendrąsias kalbas, pvz., paskalio (angl. Pascal) yra per sunku. Yra kitų efektyvių simuliavimo kalbų, tačiau jų įvaldymas yra didelė pradinė investicija, kuri ne visada atsiperka. Yra simuliavimo įrankių, pagrįstų tam tikra grafine technika, kuri supaprastina ar net automatizuoja tam tikros klasės sistemų simuliavimo modelių kūrimą. Jei norite sužinoti daugiau apie vieną iš tokių įrankių, apsilankykite puslapyje Petri Nets.
- Ribotos žinios apie simuliuojamą sistemą. Pirmiausia reikia žinoti kai kuriuos kiekybinius parametrus. Aukščiau pateiktame pavyzdyje būtina sugeneruoti atsitiktinius intervalus tarp atvykimo ir aptarnavimo laiko. Čia simuliavimas yra daug lankstesnis metodas nei analizė – simuliavimo kalbos palaiko atsitiktinių skaičių generavimą praktiškai bet kokiu pasiskirstymu. Minėtame pavyzdyje abu atsitiktiniai parametrai gali būti pagrįsti bet kokiais (pvz., eksperimentiškai gautais) pasiskirstymais. Nepaisant to, bet kokiam pasiskirstymui reikia arba kelių parametrų (jei jis yra teorinis), arba pasiskirstymo funkcijos (jei pasiskirstymas apskaičiuojamas matuojant). Sistemoje taip pat gali pasitaikyti tokių aspektų (dažniausiai projektavimo stadijoje), kurių neįmanoma kiekybiškai įvertinti ir reikia susitaikyti su tuo, kad gali būti aspektų, kurių mes nežinome ir negalime nuspėti.
- Per daug laiko atimantis skaičiavimas. Pavyzdys yra didelio masto sistemų, kuriose lygiagrečiai veikia daug komponentų, analizė. Kadangi realaus lygiagretumo taikymas nėra įprastas, tokios sistemos yra simuliuojamos vieno procesoriaus vykdoma programa. Tada lygiagrečių komponentų veikla atliekama po vieną (net jei vartotojui sudaromas lygiagretumo įspūdis ir simuliavimo modelio kūrimo metu jis „galvoja lygiagrečiai“). To rezultatas yra tai, kad simuliuojamas modelis gali būti daug lėtesnis lyginant su realiu laiku (1 sekundė modelio laiko užima 10 minučių procesoriaus laiko). Tai, žinoma, panaikina galimybę simuliavimą taikyti valdant realiuoju laiku.
Bendra pagrindinė taisyklė gali būti tokia:
„Jei eksperimento metodas yra įmanomas, naudokite jį. Tai geriausias metodas, nes atsižvelgiama į visus aspektus. Net jei projektavimo etape buvo naudojami kiti metodai, eksperimentas gali būti naudojamas atlikti galutinį sistemos vertinimą. Jei eksperimentas yra neįmanomas, pabandykite rasti kitą tinkamą analizės metodą. Jei rasti nepavyksta, naudokite simuliavimo metodą.“
Simuliavimas yra ne tik paskutinė priemonė, kurios reikia greibtis, kaip tai atrodo aukščiau pateiktoje taisyklėje. Iš tiesų, simuliavimas gali padėti suprasti analizuojamą sistemą ne tik atsakant į iš pradžių pateiktus klausimus. Labai dažnai simuliavimo modelio kūrimas yra pirmas atvejis, kai atsižvelgiama į tam tikrus dalykus. Simuliuojamos sistemos specifikacija gali (ir dažnai tai daro) atskleisti sistemos projektavimo klaidas ar neaiškumus. Taigi simuliavimas gali padėti išvengti brangių, jau paruoštos sistemos, atnaujinimų ateityje.
Tolydusis simuliavimas
Tolydaus simuliavimo kalbos buvo sukurtos šeštojo dešimtmečio pabaigoje kaip analoginių kompiuterių simuliatoriai. Modeliavimas analoginiais kompiuteriais grindžiamas analoginės elektroninės sistemos sukūrimu, kurios elgsena apibūdinama tuo pačiu matematiniu modeliu (diferencialinių lygčių rinkiniu), kaip ir tiriama sistema. Elektroninė sistema sukurta sujungiant standartinius blokus, daugiausia paremtus operaciniais stiprintuvais, modifikuotais veikti kaip integratoriai, sumatoriai ir kiti funkciniai mazgai. Tada vartotojas atlieka eksperimentus su šia elektronine sistema, pritaikydamas tinkamas įvestis ir fiksuodamas įtampą tam tikruose išvesties taškuose (osciloskopas, braižytuvas). Kintanti įtampa reiškia laiko funkciją, kuri yra tokia pati kaip funkcija, kuri apibūdina pokyčius pradinėje sistemoje, kurios fizinės savybės gali būti visiškai skirtingos (mechaninis poslinkis, temperatūra ir kt.). Pagrindinė analoginių kompiuterių problema yra tam tikrų operacijų, tokių kaip dauginimas, kai kurių funkcijų generavimas, vėlavimų generavimas ir kt., analoginis įgyvendinimas. Skaitmeniniai kompiuteriai visas šias funkcijas atlieka labai lengvai, todėl šiandien tolydus simuliavimas atliekamas tik jais. Tačiau, yra viena operacija, kurią analoginiai kompiuteriai atlieka geriau – integravimas. Skaitmeniniuose kompiuteriuose naudojamas skaitmeninis integravimas, kuris paprastai yra lėtesnis ir ne toks tikslus, lyginant su analoginio integratoriaus integravimu. Kai kuriose specialiose programose, kurioms reikalingas greitas atsakas, naudojami hibridiniai kompiuteriai, kuriuose yra ir analoginės ir skaitmeninės dalys, sujungtos A/D ir D/A keitikliais. Skaitmeninė dalis atlieka viską, išskyrus integraciją. Ji apskaičiuoja integratorių įvestis, kurias D/A keitikliai konvertuoja į analoginius signalus, įvedamus į analoginius integratorius. Jų išvestys traktuojamos priešingai. Skaitmeninė dalis taip pat kontroliuoja analoginės dalies sujungimą, kuri skaičiavimo metu gali keistis.
Tolydaus simuliavimo kalbų klasifikacija
Į blokus orientuotos simuliavimo kalbos yra pagrįstos analoginių kompiuterių metodika. Sistema turi būti išreikšta kaip blokinė schema, apibrėžianti funkcinių vienetų ir jų kiekybinių parametrų tarpusavio ryšį. „Programavimas“ – tai blokų tarpusavio ryšio įvedimas ir jų aprašymas. Tada pridedami teiginiai ir (arba) direktyvas, kurios valdo simuliavimą. Jei sistema apibrėžiama kaip lygčių rinkinys, jį reikia konvertuoti į blokinę diagramą. Šis konvertavimas yra nesudėtingas procesas. Blokai, dažniausiai pasitaikantys daugumoje tolydaus simuliavimo blokų kalbų, yra: integratoriai, ribotuvai, delsos, daugikliai, histerezė, pastovios reikšmės, sumatoriai, laikikliai, stiprinimas (koeficientas) ir kt.
Į išraišką orientuotos tolydžios kalbos yra pagrįstos raiškų (lygčių), kurios atspindi matematinį modelį, rašymu. Tai reiškia, kad modeliuojama sistema turi būti išreikšta lygčių rinkiniu. Tada pridedami teiginiai ir (arba) direktyvas, kurios valdo simuliavimą. Kai kurios kalbos įgalina sistemos apibrėžimo būdus tiek blokais, tiek išraiškomis. Simuliavimo valdymas reiškia, kad galima pasirinkti: integravimo metodą (nes kai kurios kalbos siūlo daugiau), integravimo žingsnį, kintamuosius (blokų išvestis), kurias reikia stebėti, duomenų rinkimo spausdinimui ir (arba) braižymui intervalus, išvesčių mastelius (kas gali būti daroma automatiškai), simuliavimo trukmę, pakartojimų skaičių ir tam tikrų reikšmių keitimo juose būdus ir kt.
Atsisiųskite failą models1.zip, kuriame yra keli tolydaus simuliavimo modeliai, parašyti turbo paskalio (ang. Turbo Pascal) kalba. Modeliai kuriami naudojant paprastą tolydaus simuliavimo aplinką, pagrįstą į išraišką orientuotu metodu ir gali būti lengvai modifikuojami, kad būtų galima modeliuoti bet kokias kitas diferencialinėmis lygtimis aprašytas sistemas.
Diskretus simuliavimas
Diskretusis simuliavimas yra susijęs su sistemomis, kurių dinamika (dėl abstrakcijos lygio) gali būti laikoma įvykių seka atskirais laiko momentais. Esminis diskretaus simuliavimo kalbos dalykas yra tinkamos modelio veiklų sekos kontrolės būdas. Tai taip pat yra būdas, kuriuo vartotojas turi „matyti pasaulį“, naudodamas kalbą ir diskretaus simuliavimo kalbų klasifikavimo pagrindą.
Diskretaus simuliavimo kalbų klasifikacija
Į struktūrinę schemą orientuotas kalbas puikiai pavaizduoja GPSS (bendrosios paskirties simuliavimo sistemos) kalba, kuri turi daugelį versijų ir egzistuoja įvairiuose kompiuteriuose. Vartotojas turi žiūrėti į sistemos dinamiką kaip į vadinamųjų operacijų srautą per blokinę diagramą. Operacijos yra generuojamos, jos keliauja per blokų tinklą ir pabaigoje yra sunaikinamos. Blokuose operacijos gali būti atidėtos, apdorojamos ir perduodamos kitiems blokams. Blokus programoje atstoja teiginiai, kurie atlieka modelio veiklas.
Į veiklą orientuotos kalbos nėra pagrįstos aiškiu būsimų veiklų planavimu. Kiekvienai veiklai vartotojas apibūdina sąlygą, kuriai esant veikla gali vykti (tai taip pat apima planavimą, jei sąlyga pasiekia tam tikrą laiką). Simuliavimo valdymo algoritmas nuolat didina laiką ir tikrina visų veiklų sąlygas. Šio metodo trūkumas akivaizdus – kiekviename žingsnyje būtina įvertinti visas sąlygas, o tai gali užtrukti labai ilgai. Kita vertus, konceptualiai jis yra paprastas, o algoritmas gali būti lengvai įgyvendinamas pasitelkus bendras aukšto lygio kalbas (yra simuliavimo kalbų, pagrįstų šiuo metodu, tačiau jos nėra plačiai naudojamos). Atsisiųskite failą models2.zip, kuriame yra du paprastos eilių sistemos modeliai (turbo paskalio kalba), kuriuose demonstruojamas į veiklą orientuotas metodas. Kartu su šiais modeliais yra keletas vienetų, kurie atlieka operacijas pagal dvipusiai susietus sąrašus, kurie vėliau naudojami krūvoms ir eilėms įgyvendinti.
Į įvykį orientuotos kalbos yra pagrįstos tiesioginiu būsimų įvykių planavimu ir atšaukimu. Šis modelis yra labai paprastas. Vartotojas turi žiūrėti į simuliuojamą sistemos dinamiką kaip į santykinai nepriklausomų įvykių seką. Kiekvienas įvykis gali suplanuoti ir (arba) atšaukti kitus įvykius. Sistema turi registruoti suplanuotus įvykius. Štai kodėl kiekvienas įvykis vaizduojamas įvykio pranešimu, kuriame yra užfiksuotas įvykio laikas, tipas ir kiti vartotojo duomenys. Įvykių pranešimai saugomi kalendoriuje, kuriame pranešimai apie įvykį tvarkomi numatytu laiku. Užbaigus įvykių eigą, sistema iš kalendoriaus pašalina įvykio pranešimą su mažiausiu laiku, atnaujina modelio laiką ir pradeda atitinkamą veiksmų seką. Tai kartojama tol, kol kalendorius lieka tuščias arba kol dėl kitų priežasčių sustoja programa. Planavimas, tai įvykių pranešimų įterpimas į kalendorių numatytu laiku, atšaukimas – jų pašalinimas. Metodas, pagrįstas aiškiu įvykių išreiškimu, vadinamas diskrečiųjų įvykių simuliacija, kuris kartais apibendrinamas kaip diskretusis simuliavimas. Vienas iš šios kalbų grupės atstovų yra SIMSCRIPT kalba (tačiau jos II.5 versija palaiko ir į procesą orientuotą simulaivimą).
Į procesą orientuotos kalbos yra pagrįstos tuo, kad visi įvykiai yra priklausomi. Įvykis paprastai yra ankstesnių įvykių pasekmė. Kitaip tariant, dažnai įmanoma apibrėžti įvykių sekas, kurios gali būti vertinamos kaip simuliavimo modelio subjektai aukštesniame hierarchijos lygyje. Įvykių seka vadinama procesu. Priešingai nei įvykiai, procesai turi laiko dimensijas. Procesais pagrįstos abstrakčios sistemos beveik prilygsta tikrovei, kuri visada yra sudaryta iš įvairių objektų, kurie egzistuoja ir veikia paraleliai, sąveikaudami vienas su kitu. Proceso būdas stebėti sistemos dinamiką yra labai natūralus. Dažniausiai procesas modeliuoja realaus objekto veiklą. Manoma, kad į procesą orientuotas diskretus simuliavimas yra geriausias būdas sukurti diskretaus simuliavimo modelius. Šios kalbų grupės atstovai yra MODSIM, SIMSCRIPT II.5 ir Simula kalbos sistemos klasė SIMULATION.
Objektinis simuliavimas
Objektinis simuliavimas (OOS) gali būti laikomas specialiu objektinio programavimo (OOP) atveju. Kai kurie OOP principai, tokie kaip įvairus trukdančių objektų skaičius, simuliavimo aplinkoje buvo naudojami ilgą laiką, dažnai vartojant kitą terminiją. Simula kalba (anksčiau vadinama Simula 67) yra pirmoji tikroji į objektą orientuota kalba. Kadangi jai yra daugiau nei 30 metų, ji vis dar turi daugumą (ir visus svarbiausius) OOP mechanizmus ir principus. Kai kurie dalykai, pvz., klasės, paveldėjimas, virtualūs metodai ir t.t., Simula kalboje apibrėžti egzistuoja jau ilgą laiką, kol juos iš naujo atrado pastarųjų metų OOP bumas. Norėdami daugiau sužinoti apie Simula, apsilankykite ASU (Simula vartotojų asociacijos) puslapyje. Taip pat galite perskaityti dokumentą Introduction to OOP in Simula, paremtą Maltos universitete Simula 30-mečio proga pristatyta kalba. MODSIM yra kita objektinio simuliavimo kalba.
Toliau pateikiamos dažniausiai priimtos OOS funkcijos:
1. Algoritmas arba sistemos dinamika išreiškiama lygiagrečiai egzistuojančiais ir tarpusavyje sąveikaujančiais objektais (aktoriais). Kiekvienas objektas yra apibrėžiamas pagal jo:
- parametrus (kuriems generuojant objektus gali būti priskirtos tikrosios reikšmės);
- atributus (taip pat vadinamus vidiniais atributais arba vertės atributais);
- metodais (dar vadinamais veiksmų arba procedūrų atributais);
- gyvenimą, kuris reprezentuoja veiklą, pradėtą kuriant objektą.
Objektai gali sąveikauti šiais būdais:
- tiesiogine prieiga prie parametrų ir atributų;
- abipusiu metodų iškvietimu;
- bendravimu ir objektų gyvenimo sinchronizavimu.
Paprasčiau tariant: objektas = duomenys + procedūros, vadinamos inkapsuliavimu. Labai dažnai objekto duomenys ar jų dalis yra paslėpti, o reikšmes galima pasiekti ir keisti tik naudojant (gerai apibrėžtus) metodus. Ši sąvoka vadinama informacijos slėpimu.
2. Panašūs objektai (aktoriai) grupuojami į klases, dar vadinamas prototipais. Klasė apibrėžia objektus, turinčius tuos pačius parametrus, atributus, metodus ir gyvenimus. Klasės deklaracija yra interpretuojama kaip modelis. Galima sukurti bet kokį skaičių atskirų objektų (aktorių), vadinamų objektų egzemplioriais. Egzemplioriai gali skirtis savo parametrų ir (arba) atributų reikšmėmis. Būtina aiškiai atskirti klasę ir objektų egzempliorius, sugeneruotus naudojant klasės deklaraciją. Klasė taip pat gali būti interpretuojama kaip žinios apie tam tikro tipo objektus. Tokias žinias reprezentuoja duomenų dalis ir operacijos, kurias galima atlikti su duomenimis. Tai panašu į abstrakčių duomenų tipus, tačiau klasės yra daug turtingesnės. Abstraktus duomenų tipas šiame kontekste gali būti laikomas prastesne klase, kurioje nenaudojamas paveldėjimas.
3. Objektai gali būti klasifikuojami hierarchiškai pagal vadinamąjį paveldėjimą. Labai dažnai vartojamas poklasio terminas. X klasės Y poklasis paveldi visus parametrus, atributus ir metodus iš X klasės. Jo deklaracija gali pridėti bet kokį skaičių papildomų parametrų, atributų ir metodų. Poklasis taip pat gali pridėti veiklų į pirminės klasės gyvenimą. Poklasis gali būti naudojamas kaip pirminė kitų poklasių klasė ir pan. Kai kurios OOP kalbos (ne Simula) įgalina daugkartinį paveldėjimą. Šiuo atveju poklasis gali paveldėti iš daugiau nei vienos pirminės klasės. Poklasis gali būti interpretuojamas kaip išsamesnės žinios nei tos, kurias apibrėžia pirminė klasė. Taigi, pirminė klasė apibrėžia bendrąsias žinias, kurias toliau galima dar labiau specializuoti poklasių deklaracijomis neribojamu žingsnių skaičiumi. Paveldėjimas tam tikru būdu prieštarauja stipriam kalbų, tokių kaip paskalio, rašymui. Paprastai galima deklaruoti atskaitos kintamuosius, kurie gali nurodyti tam tikros klasės egzempliorių ir visų jos poklasių egzempliorius. Tada gali būti pageidautina, kad tam tikri metodai elgtųsi skirtingai, atsižvelgiant į nurodytą esamą objekto egzempliorių, o tai gali dinamiškai keistis programos vykdymo metu. Šią sąvoką, vadinamą polimorfizmu, palaiko mechanizmas, vadinamas vėlyvuoju susiejimu, o naudojami metodai vadinami virtualiais metodais, kurie gali keistis bet kuriame hierarchijos lygyje.
4. Lygiagrečiam objektų egzempliorių egzistavimui reikalingi įrenginiai, palaikantys bendradarbiavimą ir jų gyvenimo sinchronizavimą. Objekto gyvenimas nebūtinai turi laiko dimensiją, išskyrus OOS atveju. Simula objektai gali sąveikauti be laiko sąvokos. Simula sistemos klasė SIMULATION apibrėžia klasę „procesas“, kurios gyvybė egzistuoja laike. Procesams bendrauti ir sinchronizuoti savo gyvenimams yra tam tikri įrenginiai.
Internetinis simuliavimas
Internetas kartu su Java ir JavaScript suteikia neįtikėtinų problemų sprendimo galimybių. Vietoje daug laiko atimančio programinės įrangos paketų atsisiuntimo ir įdiegimo, galima tiesiogiai atidaryti įvairius problemų sprendėjus, ypač tokioms problemoms, kurios nėra dažnos ir nereikalauja ilgai trunkančių skaičiavimų. Kaip pirmąjį žingsnį šia kryptimi, parašiau paprastus simuliavimo modelius JavaScript, kurie išsprendžia ir imituoja vienos eilės sistemas ir eilių tinklus. Atsidarykite On-Line Solvers & Simulators puslapį, kuriame nedelsiant galite išbandyti simuliavimą.
Šaltiniai
Šiame puslapyje yra ištrauka iš teksto:Sklenar, J.: Simulation (University of Malta, 2000) kuri yra naudojama keliuose su operacijų tyrimais susijusiuose kursuose, dėstytuose Maltos universitete.
Taip pat daug dalykų galite rasti internete, nes visos paieškos sistemos pateikia daugybę įrašų, įvedus žodį „simuliavimas“. Galite pradėti nuo šių nuorodų, kuriose yra kitų nuorodų, šaltinių, informacijos apie institucijas, konferencijas ir kt.
AIS AI & Simulation Research Group
Musings at OutSights
Informs College on Simulation
DIRO Simula home
EUROSIS
EUROSIM
Society for Modelling and Simulation International
Original article: https://staff.um.edu.mt/jskl1/simul.html