Simulační programovací jazyk

Z Multimediaexpo.cz

Simulační programovací jazyky (simulation programming languages) jsou speciální programovací jazyky popisující fungování simulace na počítači a poskytující prostředky, které usnadňují efektivní popis chování modelů, struktury modelů (a jejich propojení komponent) či simulačních experimentů.

Tyto jazyky nejsou přímo určeny pro komunikaci mezi lidmi, ale jsou uměle vytvořeným komunikačním prostředkem, kterým se dorozumívají počítače a další elektronické systémy moderního věku.

Srovnání s přirozeným nebo klasickým umělým jazykem je více než obtížné. Přesto tu je několik podobných znaků, které stojí za zmínku. Především se jedná o pravidelně určený chod, kdy každý příkaz je v daném jazyce přesně definovaný. Předem jsou tedy stanovena přesná pravidla, která se musí bezpodmínečně dodržovat. Otázkou ovšem zůstává, jak se tato situace změní v budoucnu v souvislosti s nástupem programovacích jazyků páté generace a tedy i umělé inteligence.

Simulační programovací jazyky jsou takové jazyky, které jsou využívané k matematickému modelování reálných událostí. Realita, zejména fyzická a linguistická, je složitá a při užití simulačního jazyka k tvorbě takového matematického modelu je tedy dobré nejprve vytvořit jednoduchý, primární matematický model, který je třeba později stále více komplikovat, aby odpovídal zkoumané realitě, a aby tedy informace, kterou o ní výsledná simulace přináší, byla důvěryhodná. Komplikovanost reality, jež jde obtížně vystihnout, je dána zejména prolínáním časových a ostatních aspektů zkoumané reality.

Inteligentní přístup k matematickému modelování se ohlíží také na to, že když se zpracovává problém respektive otázka, s níž se v současnosti setkáváme, měli bychom při tom myslet na budoucnost a svou práci organizovat tak, abychom ve více či méně podobných situacích v budoucnosti mohli více či méně použít výsledků své dosavadní práce, případně naše zjištěné výsledky dosavadní práce, aby mohli použít i jiní.

Obsah

Použitelnost simulačních programovacích jazyků

Simulační programovací jazyky usnadňují vytváření modelů a provádění experimentů. Jsou použitelné pro:

  • práci s abstraktními systémy (báze znalostí,…)
  • programování simulačních modelů (simulační systémy, jazyky, knihovny)
  • experimentování se simulačními modely (simulátory)
  • vizualizaci a vyhodnocování výsledků

Podstata simulačních jazyků

Podstata simulačních jazyků je různá, například existují jazyky rovnicově orientované (programují se zápisem rovnic modelu), blokově orientované (programují se propojováním funkčních bloků, které realizují základní operace, např. integraci, různé matematické funkce atd.), modulově orientované (obsahují moduly představující již hotové modely zařízení nebo procesů a ty se pak propojují pomocí signálů reprezentujících toky hmot a energií) apod. Mají obvykle zabudovány různé numerické metody pro řešení modelových rovnic, dobrou grafickou prezentaci výsledků simulace a možnost práce se vstupními i výstupními datovými soubory. Jsou velmi často oborově zaměřené.

Výhody / Nevýhody

Výhody

Nevýhody:

  • Další jazyk: výuka, překladač, údržba
  • Málo používáno = problémy: cena, chyby, ...

Historie – vývoj simulačních programovacích jazyků

Strojový kód

Za simulační programovací jazyk první generace je považován strojový kód. Jedná se o nejnižší a nejprimitivnější úroveň zápisu programu. Pokud se podíváme na takto zapsaný program, zjistíme, že se skládá z velkého množství velmi jednoduchých instrukcí a pro člověka tedy není příliš srozumitelný. Také práce s ním je značně zdlouhavá a vzhledem k malé přehlednosti se snadno dají udělat chyby, které se následně velmi špatně hledají. Nicméně ve strojovém kódu lze efektivně naprogramovat některé matematické algoritmy.
Postupem času se vyvinulo množství rozličných programovacích simulačních jazyků, které tvoří jakousi „uživatelsky příjemnou“ nadstavbu stojící mezi strojovým kódem a programátorem.

Assembler – o něco vyšší úroveň jazyků

Programovací jazyk druhé generace, assembler, se používá pro programování ve strojovém kódu pomocí symbolických adres, kde jsou jednotlivé instrukce prezentovány mnemotechnickými identifikátory. Assembler je logicky svázán s typem procesoru, ale v jádru všechny nabízejí stejné možnosti, to jest základní matematické operace, přesuny hodnot mezi pamětí a registry a srovnávání hodnot. Programování v assembleru je náročnější a zdlouhavější než ve vyšších jazycích, ale přináší značně efektivní výsledky v podobě úspory paměti a zkrácení doby běhu programu. Těchto výhod se často využívá kombinací strojových rutin naprogramovaných v assembleru a vyšších jazyků.

Problémově orientované jazyky

Jazyky užívající syntaxe vhodné pro řešení daného problému. Psaní skutečného programu dle této synataxe jazyka a logiky modelu se u těchto programovacích jazyků považuje dokonce za nutnost.

Příkladem jsou: Cobol, Fortran, BASIC, Pascal, C, Lisp.

Speciální simulační jazyky

Jsou jazyky, jež jsou upraveny pro psaní simulačních programů. Stále je nutné dodržovat předem definovanou syntaxi příslušného simulačního jazyka.

Příkladem je: SIMSCRIPT, GPSS, SIMULA, MODSIM, ECSL, MOR/DS.

Simulační programy s využitím textového a grafického rozhraní

Jde o jazyky vyznačující se používáním ikon a zástupných symbolů. Program je tvořen v pozadí často bez vědomí uživatele.

Příkladem může být: Xcell+, SIMPROCESS, SIMUL8.

Členění simulačních programovacích jazyků

Simulačních programovacích jazyků existuje celá řada. Můžeme je dělit dle jejich společných rysů, charakteru do několika skupin.

Hlavní dělení simulačních programovacích jazyků

Nejčastěji se udává členění založené na charakteru časové množiny a změn proměnných. To umožňuje simulační jazyky rozdělit do třech hlavních skupin: spojité, diskrétní a kombinované.

Diskrétní simulační jazyky

Pohlížejí na model jako na sled náhodných událostí způsobující změnu stavu. Vyznačují se použitím přesně definovaných a matematicky ohodnocených událostí. Důležitou součástí jazyků založených na diskrétních událostech je schopnost generovat pseudo-náhodná čísla a proměnné z různých rozdělení pravděpodobnosti. Do skupiny diskrétních simulačních jazyků řadíme:

Spojité simulační jazyky

Nahlíží na model jakožto na soubor diferenciálních rovnic.

  • ACSL (Advanced Continuous Simulation Language) podporují textové či grafické specifikace modelu
  • DYNAMO
  • MyM, kompaktní notace specifikuje spojité modely, simulační a vizualizační část prostředí MyM
  • SimApp, jednoduchá simulace dynamických a kontrolních systémů
  • Simgua, nástroje podporující Visual Basic [5]
  • SLAM (Simulation Language for Alternative Modeling)
  • VisSim

Kombinované simulační jazyky

  • AMESim,
  • AnyLogic, obsahuje nástroje podporující systémovou dynamiku, simulace založené na diskrétních událostech, modelování multiagentních simulací
  • Modelica, veřejně dostupný objektově orientovaný jazyk určený pro modelování kompletních fyzikálních systémů
  • EL (EcosimPro Language) – Spojité modelování na základě diskrétních událostí
  • Saber-Simulator – schopnost pracovat s diskrétními událostmi. Simuluje fyzikální jevy v různých oblastech inženýrství (např.: vodní, elektronické, mechanické oblasti, apod.)
  • Simulink – možnost diskrétní či spojité simulace.
  • SPICE – simulace analogových obvodů
  • Z simulační jazyk
  • Scilab obsahuje simulační balíček s názvem Scicos
  • XMLlab – simulace využívající jazyk XML
  • Flexsim - 3D simulační software pro zpracování spojitých, diskrétních událostí, nebo systémů založených na agentech.
  • Simio software pro diskrétní, spojité události, a simulace založené na agentech.
  • EICASLAB – spojité a diskrétní události, diskrétní události schopnost specificky se věnovat podpoře automatické kontroly a řízení designu.
  • TRUE kombinovaný jazyk pro diskrétní i spojité události
  • EJS je prostředí, jež z jeho vlastního jazyka automaticky generuje kód v jazyce JAVA (XML soubory)

Ostatní dělení simulačních programovacích jazyků

Výukové simulační jazyky

Další významnou skupinu tvoří simulační programy používané v akademických kruzích a určené pro výuku a pochopení tvorby simulace. Jde o programy, které jsou jednoduché se základními funkcemi. Využití počítačových simulací ve výuce přináší možnosti hlubšího pochopení dané problematiky v kratším čase a s menšími nároky na edukační schopnosti studentů (např. představivost a obrazotvornost). Počítačové simulace tedy napomáhají zvýšení efektivity výukového procesu.
Na druhou stranu se od samotného počátku využívání počítačových simulací ve výuce studentům vštěpuje zásada, že na výsledky simulace nelze pohlížet s absolutním přístupem, ale vždy s určitou obezřetností a s kontrolou alespoň orientačního výpočtu na základě dosavadních poznatků z teoretického studia. Je třeba mít vždy na paměti, že počítačem poskytnuté výsledky simulace jsou odrazem použitého simulačního modelu. Vytvořit přitom simulační model s takovou přesností, aby jeho chování za všech okolností zcela odpovídalo realitě, je nemožné. Tato skutečnost ovšem není výukovému procesu na obtíž, spíše naopak. Při vytváření výukového simulačního modelu jsou totiž vždy některé jeho „reálné“ vlastnosti záměrně potlačeny nebo zjednodušeny s ohledem na sledované výukové cíle.
Příkladem jazyků, jež studentům pomáhají pochopit průběch a fungování simulace, jsou například jazyky těchto programů: Simprocess (pro diskrétní simulace), Multisim (elektronická laboratoř), Excel (statické, dynamické simulace založené na bázi náhodných proměnných), NetLogo (určené pro Multiagentní simulace) apod.
Klíčem k úspěchu jakéhokoli výukového programu je dobrý scénář. První, na kom závisí úspěch vytvářené aplikace, je tedy zkušený pedagog, který musí mít jasno v tom, co a jakými prostředky chce svým studentům pomocí simulace vysvětlit. Základem scénáře je obvykle nějaký výukový text – skripta, kapitola v učebnici apod.

Dělení dle metody jejich tvorby

Další dělení simulačních programovacích jazyků může být dělení na základě metody jejich tvorby. Pak rozeznáváme těchto sedm skupin:

  • Simulační metody vytvořené na základě metody „udělej si sám“

Do této skupiny řadíme například níže uvedené simulační programy. Fortran, Pascal, C, C++

  • Předepsané knihovny

O něco jednodušší jsou jazyky vytvořené na základě předepsaných knihoven. Řadíme sem např.: GASP, SIMON

  • Simulační programovací jazyky

Do této kategorie spadají takové jazyky, které byly určeny výhradně na simulaci. Příkladem jsou: ECSL, SIMAN, SIMSCRIPT, SIMULA, MOR/DS (výukový)

  • Vývojové diagramy

Simulace odrážející nějaký vývoj. Jde např.: GPSS, HOCUS

  • Programové generátory

Na základě programových generátorů byly stvořeny tyto jazyky: CAPS/ECSL, DRAFT, SIGMA, VS7

  • Vizuální interaktivní simulační systémy

Vizuálních interaktivních systémů využívá k tvorbě např.: SEE-WHY, SIMAN/CINEMA

  • Vizuální interaktivní modelové systémy

Do skupiny vizuálních interaktivních systémů řadíme: Witness, Xcell+, SimFactory, SIMUL8, SIMPROCESS

Nástroje simulačních programovacích jazyků

Simulační program využívá přirozeně také svých simulačních nástrojů.

  • Mezi základní nástroje řadíme:
    • SimLib/C++: oběktově orientovaná knihovna pro jazyk C++ (LGPL)
    • DYMOLA/Modelica: komerční program
    • SciLab: integrované prostředí, jazyk pro numerické výpočty, různé specializované nadstavby (toolkit)
    • SimPack: podprogramy v C a C++, jednoduché, GPL
  • Dále máme mnoho různých podpůrných nástrojů, které doplňují ty základní. Příkladem může být:
    • Vizualizace: Gnuplot, GNU plotutils,…
    • Statistická analýza: GNU R

Kdy a kde používat simulační programovací jazyky

Kdy můžeme použít simulační jazyky a jejich metody k vytváření matematického modelu?

  • Jestliže neexistuje úplná matematická formulace problému nebo nejsou známé analytické metody řešení matematického modelu;
  • Tehdy, kdy analytické metody vyžadují tak zjednodušující předpoklady, že je nelze pro daný model přijmout;
  • Jakmile analytické metody jsou dostupné pouze teoreticky, jejich použití by bylo obtížné a simulační řešení je tedy jednodušší;
  • V ten moment, kde je modelování na počítači jedinou možností získání výsledků v důsledku obtížnosti provádění experimentů ve skutečném prostředí;
  • Jestliže potřebujeme měnit časové měřítko — simulace umožňuje urychlování nebo zpomalování příslušných dějů.

Kde můžeme použít simulační jazyky?

Externí odkazy

  • Kindler, E. Simulační programovací jazyky. Praha: SNTL 1980
  • Křivý I., Kindler, E. Simulace a modelování. Učební texty. Ostrava: Ostravská universita, 2001, text 1 PDF soubor dostupný online
  • Křivý I., Kindler, E. Simulace a modelování. Učební texty. Ostrava: Ostravská universita, 2001, text 2 PDF soubor dostupný online
  • Tomáš Jakeš, Petr Michalik, Problematika tvorby vlastního simulačního programu, PDF soubor dostupný online
  • Petr Peringer, VUT Brno, Modelování a simulace (Verze 2009-09-21), PDF soubor dostupný online
  • Od strojového kódu k programovacím jazykům. Dostupné online
  • Martin Lehký, článek KIVI - Knihovnictví a Informační Věda Informuje,16:25:26 12. 05. 2005, dostupný online