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í. Skutečnost, zejména fyzická a lingvistická, 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í.

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 Jednodušší popis modelu (snadnější verifikace) Možnost kontroly sémantiky popisu 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: AutoMod eM-Plant Arena GASP GPSS Simprocess Plant Simulation Simio software – pracuje s diskrétními událostmi, spojitými, a simulacemi založených na využívání agentů. SimPLE++ SimPy SIMSCRIPT II.5, Simula Java modelovací nástroje, Poses++, simulační systém založený na základě diskrétních událostí s modelováním Petriho sítě.

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 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++: objektově 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