VYSOK ´
E U ˇ
CEN´I TECHNICK ´
E V BRN ˇ
E
BRNO UNIVERSITY OF TECHNOLOGYFAKULTA INFORMA ˇ
CN´ICH TECHNOLOGI´I
´
USTAV INTELIGENTN´ICH SYST ´
EM ˚
U
FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMSSIMUL ´
ATOR ˇ
ZELEZNI ˇ
CN´IHO STAV ˇ
EDLA
BAKAL ´
A ˇ
RSK ´
A PR ´
ACE
BACHELOR’S THESIS
AUTOR PR ´
ACE
BED ˇ
RICH HOVORKA
AUTHOR
FAKULTA INFORMA ˇ
CN´ICH TECHNOLOGI´I
´
USTAV INTELIGENTN´ICH SYST ´
EM ˚
U
FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMSSIMUL ´
ATOR ˇ
ZELEZNI ˇ
CN´IHO STAV ˇ
EDLA
SIMULATOR OF RAILWAY INTERLOCKING
BAKAL ´
A ˇ
RSK ´
A PR ´
ACE
BACHELOR’S THESIS
AUTOR PR ´
ACE
BED ˇ
RICH HOVORKA
AUTHOR
VEDOUC´I PR ´
ACE
Ing. DAVID MARTINEK
SUPERVISOR
Zad´
an´ı
1. Prostudujte funkce a souˇc´asti elektronick´eho ˇzelezniˇcn´ıho stavˇedla pouˇz´ıvan´eho pro ˇr´ızen´ı provozu v ˇzelezniˇcn´ıch stanic´ıch.
2. Prostudujte simulaˇcn´ı metody pouˇziteln´e pro realizaci simul´atoru ˇzelezniˇcn´ı s´ıtˇe v ˇ ze-lezniˇcn´ı stanici, zejm´ena diskr´etn´ı, spojitou a kombinovanou simulaci. Navrhnˇete vhodn´y simulaˇcn´ı pˇr´ıstup, ˇci kombinaci pˇr´ıstup˚u pro realizaci tohoto simul´atoru. Na-vrhnˇete vhodn´y form´at dat pro reprezentaci modelu ˇzelezniˇcn´ı s´ıtˇe.
3. Navrhnˇete a implementujte vybranou ˇc´ast simul´atoru a demonstrujte funkˇcnost na dostateˇcnˇe n´azorn´em modelu.
4. Diskutujte z´ıskan´e v´ysledky a dalˇs´ı moˇzn´e smˇery v´yvoje.
Kategorie: Modelov´an´ı a simulace
Implementaˇcn´ı jazyk: Java, nebo podle vlastn´ıho uv´aˇzen´ı
Operaˇcn´ı syst´em: Windows, Linux
Literatura: Podle pokyn˚u vedouc´ıho
Datum zad´an´ı: 1. listopadu 2006
Licenˇcn´ı smlouva je uloˇzena v archivu Fakulty informaˇcn´ıch technologi´ı Vysok´eho uˇcen´ı technick´eho v Brnˇe.
Abstrakt
Stavˇedlo je dispeˇcersk´e zaˇr´ızen´ı pro ˇr´ızen´ı dopravy. Dispeˇcer urˇcuje nastavov´an´ım v´yhybek a semafor˚u cestu vlak˚um. V t´eto pr´aci se zab´yv´am n´avrhem a v´ystavbou z´akladu simul´atoru takov´eho zaˇr´ızen´ı v jazyce Java. Nastudoval jsem funkce tohoto zaˇr´ızen´ı. Zab´yval jsem se strukturou cel´e aplikace a implementoval chov´an´ı z´akladn´ıch prvk˚u.
Kl´ıˇcov´
a slova
ˇ
zelezniˇcn´ı stavˇedlo, kombinovan´a simulace, XML, Java, OOP
Abstract
Railway interlocking is a dispatching facility for traffic control. The dispatcher controls train paths by setting switches and signals. In this thesis, I describe the design and implemen-tation of a simple simulator of the facility in the Java language. I have studied functions of this facility. I interested with structure of whole application. And I implemented behaviour of foundamental elements.
Keywords
railway interlocking, combined simulation, XML, Java, OOP
Citace
Bedˇrich Hovorka: Simul´ator ˇzelezniˇcn´ıho stavˇedla, bakal´aˇrsk´a pr´ace, Brno, FIT VUT v Brnˇe, 2007
Prohl´
aˇsen´ı
Prohlaˇsuji, ˇze jsem tuto bakal´aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım Ing. Davida Martinka. Uvedl jsem vˇsechny liter´arn´ı prameny a publikace, ze kter´ych jsem ˇcerpal.
. . . . Bedˇrich Hovorka
10. kvˇetna 2007
c
Bedˇrich Hovorka, 2007.
Tato pr´ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe in-formaˇcn´ıch technologi´ı. Pr´ace je chr´anˇena autorsk´ym z´akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´avnˇen´ı autorem je nez´akonn´e, s v´yjimkou z´akonem definovan´ych pˇr´ıpad˚u.
Obsah
1 Uvod´ 2
1.1 Etapy a c´ıle . . . 2
2 Modelovan´y syst´em a existuj´ıc´ı implementace 4 2.1 Zelezniˇˇ cn´ı stavˇedlo . . . 4
2.2 Existuj´ıc´ı implementace . . . 4
3 Teorie 6 3.1 Numerick´e metody . . . 6
3.2 Modelov´an´ı a simulace . . . 7
3.2.1 Diskr´etn´ı simulace . . . 7
3.2.2 Spojit´a simulace . . . 8
3.2.3 Kombinovan´a simulace . . . 8
4 Pouˇzit´e jazyky a n´astroje 10 4.1 XML . . . 10 4.1.1 Analyz´atory XML . . . 10 4.2 Java . . . 11 4.3 JDisco . . . 12 4.3.1 R´ızen´ı simulaceˇ . . . 12 5 N´avrh a implementace 13 5.1 Rozdˇelen´ı do modul˚u – bal´ık˚u . . . 13
5.2 S´ıt’ a datov´y model . . . 15
5.2.1 Prvky s´ıtˇe . . . 16
5.2.2 Dynamick´a konfigurace a cesty v s´ıti . . . 17
5.2.3 Datov´y soubor . . . 17
5.3 Simulace . . . 17
5.3.1 Vstupnˇe-v´ystupn´ı body – InOut . . . 17
5.3.2 J´ızda vlaku . . . 18
5.4 Pˇr´ıklad – V´yhybna . . . 18
6 Z´avˇer 21 6.1 N´amˇety na rozˇs´ıˇren´ı . . . 21
´
Uvod
V t´eto bakal´aˇrsk´e pr´aci jsem se zab´yval problematikou dopravn´ı simulace. Moje pr´ace spoˇc´ıvala v nastudov´an´ı souˇc´ast´ı syst´emu, experimentov´an´ım s existuj´ıc´ımi implementacemi her ˇr´ızen´ı ˇzelezniˇcn´ı dopravy, nalezen´ım vhodn´e simulaˇcn´ı knihovny a jako hlavn´ı ˇcinnost´ı – n´avrhem a implementac´ı z´akladu simul´atoru. Nejprve bylo tˇreba navrhnout strukturu aplikace, vnitˇrn´ı reprezentac´ı modelu a form´at dat. Pot´e jsem mohl s vnitˇrn´ı reprezentac´ı implementovat grafick´e rozhran´ı umoˇzˇnuj´ıc´ı editaci. D´ale jsem se uˇz zab´yval pˇredevˇs´ım simulaˇcn´ım modelem.
V druh´e kapitole pˇredstav´ım modelovan´y syst´em. Jeho chov´an´ı je l´epe uk´azat na jiˇz existuj´ıc´ıch programech.
V tˇret´ı kapitole se zm´ın´ım o numerick´em ˇreˇsen´ı diferenci´aln´ıch rovnic. V dalˇs´ı sekci naraz´ıte na z´akladn´ı pojmy z modelov´an´ı a simulace. Letmo se zm´ın´ım i o tom co to je diskr´etn´ı, spojit´a a kombinovan´a simulace, u kombinovan´e trochu podrobnˇeji.
Ve ˇctvrt´e kapitole popisuji sp´ıˇse neˇz bˇeˇznˇe zn´am´e vlastnosti pouˇzit´ych n´astroj˚u, vlastn´ı postˇrehy a pˇr´ıklady z implementace. To plat´ı hlavnˇe o sekc´ıch o Javˇe a XML. V sekci o simulaˇcn´ı knihovnˇe jDisco struˇcnˇe vysvˇetl´ım, jak se pouˇz´ıv´a, aby nedoˇslo k nˇekter´ym nedorozumˇen´ım, co jsem musel d´ale v implementaci ˇreˇsit a co ne.
Do p´at´e kapitoly sem vybral, podle m´eho, d˚uleˇzit´e myˇslenky z n´avrhu a popisu imple-mentace. Do podrobnost´ı zach´az´ım v pˇr´ıpadˇe, ˇze mi to pˇripad´a nutn´e. Nejprve se zam´yˇsl´ım nad celkovou strukturou aplikace. Pot´e pop´ıˇsu organizaci prvk˚u v syst´emu. N´asledov´ano popisem jak je implementov´ana simulace. A nakonec pˇredstav´ım pˇr´ıklad demonstruj´ıc´ı, to co bylo naimplementov´ano.
V z´avˇereˇcn´e kapitole projdu nˇekter´a moˇzn´a rozˇs´ıˇren´ı, zejm´ena ty kter´e ´uzce navazuj´ı na souˇcasnou implementaci. Toto sekci n´asleduje jiˇz jen zhodnocen´ı cel´e pr´ace.
Nˇekter´e n´azvoslov´ı bylo pouˇzito z [1] a existuj´ıc´ıch implementac´ı. Tak´e n´azvy v obr´azk´ach a sch´ematech budou vˇetˇsinou anglicky, aby odpov´ıdaly zdrojov´ym k´od˚um. Pro pochopen´ı tohoto textu pˇredpokl´ad´am, ˇze ˇcten´aˇr je alespoˇn zbˇehlejˇs´ım studentem informatiky a rozum´ı pojm˚um z diskr´etn´ı a numerick´e matematiky, algoritm˚u a objektov´e orientace.
Pˇr´ıklad odkazu do zdrojov´ych soubor˚u:Example.
1.1
Etapy a c´ıle
Co bylo implementov´ano pˇred bakal´aˇrsk´ym projektem
Bˇehem Semestr´aln´ıho projektu vytvoˇril prototyp objektov´eho modelu s´ıtˇe, zejm´ena statick´e vlastnosti. Na z´akladˇe toho jsem navrhl XML form´at a implementoval tov´arnu pro naˇc´ıt´an´ı
a ukl´ad´an´ı. V r´amci projektu do Modelov´an´ı a simulace jsem vytvoˇril kombinovan´y model pohybu vlaku podle dan´e posloupnosti semafor˚u a hran (ne v s´ıti). Do pˇredmˇetu Tvorba uˇzivatelsk´ych rozhran´ı jsem odevzdal jednoduch´y grafick´y editor v´yˇse zm´ınˇen´eho modelu s´ıtˇe, kter´y zobrazuje s´ıt’ v zaˇzit´em sch´ematu obdobn´em tomu pouˇzit´em v elektronick´ych stavˇedlech. Vˇse jsem bˇehem bakal´aˇrsk´eho projektu doplnil do n´asleduj´ıc´ıch c´ıl˚u:
C´ıle bakal´aˇrsk´eho projektu
Vytvoˇrit j´adro pˇrenositeln´eho programu:
• na z´akladˇe nastudovan´ych podklad˚u navrhnout rozˇsiˇriteln´y syst´em tˇr´ıd, propojiteln´e komunikuj´ıc´ı moduly
• Dynamick´e vlastnosti a chov´an´ı z´akladn´ıch prvk˚u – semafor, v´yhybka, kolej • Pohyb a lokalizace vlak˚u v s´ıti
• Datov´a struktura pro manipulaci z cestou, zejm´ena stavˇen´ı cest (bez jejich ruˇsen´ı) • Vytvoˇrit pˇr´ıklad, kter´y demonstruje funkˇcnost v´yˇse zm´ınˇen´ych c´ıl˚u
Modelovan´
y syst´
em a existuj´ıc´ı
implementace
V t´eto kapitole budou struˇcnˇe pops´any funkce modelovan´eho syst´emu. D´ale uvedu nˇekter´e jiˇz existuj´ıc´ı aplikace. Budou zde zm´ınˇena i fakta, kter´a je tˇreba br´at v ´uvahu, i kdyˇz jejich implementace nebyla dokonˇcena.
2.1
Zelezniˇ
ˇ
cn´ı stavˇ
edlo
ˇZelezniˇcn´ı stavˇedlo je zaˇr´ızen´ı, kter´e umoˇzˇnuje ˇr´ıdit dopravn´ı s´ıt’ nˇejak´eho uzlu ˇci trat’ov´eho ´
useku z jednoho m´ısta. Ovl´ad´a chov´an´ı nˇekolika prvk˚u. Napˇr´ıklad nastavuje sign´aly na semaforech a pˇrestavuje v´yhybky. Nˇekter´a dneˇsn´ı stavˇedla maj´ı poˇc´ıtaˇcov´e rozhran´ı a jsou ovl´ad´ana jedn´ım dispeˇcerem. Ten kaˇzd´emu vlaku vymez´ı urˇcitou cestu, tak ˇze zad´a poˇc´ateˇcn´ı a c´ılov´y semafor. Na stavˇedlu je pak, aby naˇslo nejvhodnˇejˇs´ı neobsazenou cestu. 1. Pokud ji nenajde z d˚uvodu obsazen´ı vˇsech moˇznost´ı uloˇz´ı poˇzadavek (dvojici – poˇc´atek a c´ıl) do fronty. Pˇri uvolˇnov´an´ı kolej´ı testuje moˇznost sestavit prvn´ı prvek ve frontˇe. Frontu je moˇzn´e editovat.
2. V opaˇcn´em pˇr´ıpadˇe nastav´ı prvky v cestˇe
Toto souvis´ı i z bezpeˇcnost´ı. Syst´em nesm´ı na kaˇzd´e koleji dovolit v´ıce neˇz jednu vlakovou cestu1. Jak m˚uˇze takov´y simul´ator vypadat prozrad´ı n´asleduj´ıc´ı sekce.
2.2
Existuj´ıc´ı implementace
Pro lepˇs´ı pˇredstavu jak takov´a aplikace funguje zde popisuji nˇekter´e jiˇz existuj´ıc´ı simul´atory ˇr´ızen´ı ˇzelezniˇcn´ı dopravy. Sice se vesmˇes jedn´a o hry, ale svoj´ı koncepc´ı se bl´ıˇz´ı k trenaˇz´eru re´aln´eho syst´emu. Zachov´avaj´ı si vˇsak jednoduchost ovl´ad´an´ı. Pouˇzil jsem je tak´e jako prostˇredek pro anal´yzu syst´emu. Experimentov´an´ım s tˇemito programy jako metodou zpˇ et-n´eho inˇzen´yrstv´ı2 lze nastudovat strukturu a chov´an´ı vˇetˇsiny syst´emu. Kaˇzd´y m´a sv´a n´arodn´ı specifika (detaily v pravidlech ˇr´ızen´ı), vˇsak mnoho princip˚u je spoleˇcn´ych, kter´e popisuji u prvn´ıho. U dalˇs´ıch zmiˇnuji jiˇz jen rozd´ıly.
1Existuj´ı i tzv. posunov´e, ale ty zat´ım neuvaˇzuji 2
Staniˇc´aˇr
Tento hern´ı simul´ator m´a modelovat ˇcesk´e JOP. Uˇzivatel si zvol´ı ˇcas a stanici. Stanice a vlaky je uloˇzena v 1 velk´em XML souboru. Pot´e se mu zobraz´ı kolejiˇstˇe a seznam vlak˚u v syst´emu. Nyn´ı m˚uˇze ovl´adat jednotliv´e prvky a sledovat chov´an´ı syst´emu. Do kolejiˇstˇe urˇcen´ymi m´ısty vj´ıˇzdˇej´ı vlaky (podle j´ızdn´ıho ˇr´adu, gener´ator s exponenci´aln´ım rozloˇzen´ım doby mezi generov´an´ımi). ´Ukolem dov´est vlaky na m´ısto podle j´ızdn´ıho ˇr´adu a udrˇzet plynulost dopravy. Kaˇzd´a stanice ˇci vˇetˇs´ı syst´em m´a sv˚uj z´asobn´ık (tak je zde naz´yvan´a FIFO fronta) povel˚u, kam se uloˇz´ı kdyˇz zrovna nemohou b´yt vykon´any. U kaˇzd´eho vlaku je moˇznost prohl´ıˇzet j´ızdn´ı ˇr´ad (ˇcas, zast´avka, ˇc´ıslo koleje). Stanice je moˇzn´e vytv´aˇret vlastn´ı v oddˇelen´em editoru. D´ale je tu i editor j´ızdn´ıch ˇr´ad˚u. V souˇcasn´e verzi funguje tato hra pod .NET 2.0 ve Windows. Dˇr´ıvˇejˇs´ı verze byly spustiteln´e v dotGNU.
SimSig
Tento britsk´y simul´ator podporuje sice v´ıce stanic, ale kaˇzd´a m´a sv˚uj vlastn´ı instal´ator. Funkˇcnˇe je obs´ahlejˇs´ı. Um´ı simulovat v´ypadek elektˇriny, n´ahodn´e v´yluky v r˚uzn´ych ˇc´astech s´ıtˇe. a dalˇs´ı poruchy vlak˚u a s´ıt’ov´ych prvk˚u. Je tu tak´e urˇcit´a m´ıra automatick´eho ˇr´ızen´ı i v rozvˇetven´em kolejiˇsti (proveden´ı j´ızdn´ıho ˇr´adu). Sice urˇcen´a pro Windows, ale na rozd´ıl od pˇredch´azej´ıc´ıho sem ji spustil i ve wine3.
Gordikon, Multikon, Brno S´ıt’ je nastavena napevno. Oproti ostatn´ım jsou na zaˇc´atku simulace tak´e vlaky um´ıstˇeny na kolej´ıch v s´ıti, nejenom, ˇze napˇred mus´ı vstoupit do syst´emu zvl´aˇstn´ım prvkem v s´ıti, coˇz je re´alnˇejˇs´ı.
3
Teorie
V t´eto kapitole popisuji nˇekter´e teoretick´e z´aklady. Pojmy jakomnoˇzina ˇci relace pˇ redpo-kl´ad´am, ˇze ˇcten´aˇr zn´a.
3.1
Numerick´
e metody
K v´ypoˇctu diferenci´aln´ıch rovnic na ˇc´ıslicov´ych poˇc´ıtaˇc´ıch b´yvaj´ı nejvhodnˇejˇs´ı numerick´e metody, nebot’ jsou zde operace prov´adˇeny diskr´etnˇe. Spojit´e v´ypoˇcty je nutn´e na nˇe pˇrev´est. A pr´avˇe t´ımto pˇrevodn´ım prostˇredkem jsou numerick´e metody. V z´avislosti na pouˇzit´ı je nezbytn´e prozkoumat jejich vlastnosti jako je pˇresnost a stabilita ˇreˇsen´ı. Touto problema-tikou se podrobnˇeji zab´yv´a [10]. Zmenˇsov´an´ım kroku se zvyˇsuje pˇresnost v´ypoˇctu (r˚uznˇe u r˚uzn´ych metod), vˇsak pˇri velmi mal´ych kroc´ıch uˇz hraje roli nepˇresnost element´arn´ıch operac´ı ˇc´ıslicov´e aritmetiky.
Jako pˇr´ıklad zde uv´ad´ım jednokrokovou metodu ˇreˇsen´ı ODR z poˇc´ateˇcn´ımi podm´ınkami – Runge-Kutta-Fehlberg (rovnice 3.1 - 3.7), protoˇze je d´ale v t´eto pr´aci pouˇzita. Je p´at´eho ˇr´adu a nav´ıc m˚uˇzeme mezihodnoty kn zkombinovat na aproximaci ˇctvrt´eho ˇr´adu (rovnice
3.8). Z t´e pak m˚uˇzeme vypoˇc´ıtat odhad chyby yn+1−y∗n+1 . Vyuˇzit´ı tˇechto vlastnost´ı viz sekce 3.2. Na obr´azku 3.1 vid´ıme jej´ı pouˇzit´ı, kdyˇz oˇcek´av´ame v´ysledek bl´ızk´y polynomu druh´eho stupnˇe.
k1 = f(xn, yn), (3.1) k2 = f(xn+ 1 4h, yn+ 1 4hk1), (3.2) k3 = f(xn+ 3 8h, yn+ 1 32h(3k1+ 9k2)), (3.3) k4 = f(xn+ 12 13h, yn+ 1 2 197h(1 932k1−7 200k2+ 7 296k3)), (3.4) k5 = f(xn+h, yn+h( 439 216k1−8k2+ 3 680 513 k3− 845 4 104k4)), (3.5) k6 = f(xn+ 1 2h, yn+h(− 8 27k1+ 2k2− 3 544 2 565k3+ 1 859 4 104k4− 11 40k5)) (3.6) yn+1 = yn+h( 16 135k1+ 6 656 12 852k3+ 28 561 56 430k4− 9 50k5+ 2 55k6) (3.7) yn∗+1 = yn+h( 25 216k1+ 1 408 2 565k3+ 2 197 4 104k4− 1 5k5) (3.8)
-20 -15 -10 -5 0 5 -1 0 1 2 3 4 5 6 analytic result aprox inf(0) substepk2
Obr´azek 3.1: Demonstrace kroku metody
3.2
Modelov´
an´ı a simulace
V t´eto sekci uv´ad´ım z´akladn´ı pojmy z modelov´an´ı a simulace. Podrobnosti v [11,6]
Syst´em je cokoliv u ˇceho m˚uˇzeme popsat jeho chov´an´ı. M˚uˇze b´yt re´aln´y i imagin´arn´ı. Napˇr´ıklad ˇzelezniˇcn´ı s´ıt’ s vlaky a ˇr´ıd´ıc´ımi prvky.
Prvek syst´emu je element´arn´ı, d´ale nedˇeliteln´a, ˇc´ast syst´emu. Vz´ajemn´a interakce prvk˚u urˇcuje chov´an´ı cel´eho syst´emu. Napˇr´ıklad kolejov´y odd´ıl. Zde z´aleˇz´ı na m´ıˇre abstrakce.
Model je syst´em, kter´y napodobuje vlastnosti a chov´an´ı p˚uvodn´ıho syst´emu.
Modelov´an´ı je postupn´e vytv´aˇren´ı model˚u. Z pozorov´an´ı a studov´an´ı syst´emu vznikne
konceptu´aln´ı model, coˇz je soubor neurˇcit´ych informac´ı (n´astin). Z nˇej vytv´aˇr´ıme
abstraktn´ı model – form´aln´ı popis syst´emu. A z toho pak izomorfn´ım zobrazen´ım naprogramujeme simulaˇcn´ı model.
Simulace Z´ısk´av´an´ı nov´ych znalost´ı o syst´emu experimentov´an´ım se simulaˇcn´ım modelem.
Re´aln´y ˇcas skuteˇcn´y ˇcas, ve kter´em bˇeˇz´ı model
Modelov´y ˇcas ˇcasov´a osa modelu
Strojov´y ˇcas ˇcas, kter´y byl potˇrebn´y k v´ypoˇctu (tj. jak dlouho byl procesor pˇrepnut do kontextu dan´eho procesu)
3.2.1 Diskr´etn´ı simulace
Stav vˇsech prvk˚u je definov´an pouze v diskr´etn´ıch ˇcasov´ych okamˇzic´ıch. Bˇehem tohoto okamˇziku je provedena atomick´a operace zvan´a ud´alost, kter´a tento stav m˚uˇze zmˇenit.
model_time = event.time event.behaviour()
3.2.2 Spojit´a simulace
Stav kaˇzd´eho prvku je definov´an v kaˇzd´em okamˇziku vymezen´eho ˇcasov´eho intervalu. Abs-traktn´ım modelem jsou algebraick´e, diferenˇcn´ı ˇci diferenci´aln´ı rovnice a jejich soustavy. U jednokrokov´ych metod lze na z´akladˇe odhadu chyby mˇenit krok a t´ım urychlit v´ypoˇcet. Metoda uveden´a v sekci 3.1m´a takov´e vlastnosti.
#zneplatnˇen´ı pˇredch´azej´ıc´ıch zmˇen (derivace=0)
for variable in all_variables : variable.state_fix() #v´ypoˇcet zmˇen stav˚u z pˇredch´azej´ıc´ıch
for continous in all_cont_processes : continous.derivatives() integrate() #krok numerick´e metody s posunem modelov´eho ˇcasu
3.2.3 Kombinovan´a simulace
Syst´em obsahuje spojit´e i diskr´etn´ı prvky. ˇR´ızen´ı simulace mus´ı pˇri v´ypoˇctu spojit´ych stav˚u mˇenit krok, aby dokroˇcila k napl´anovan´e diskr´etn´ı ud´alosti. D´ale mus´ı detekovat stavov´e podm´ınky a napl´anovat proveden´ı ud´alosti k podm´ınce pˇriˇrazen´e. Z numerick´ych metod jsou proto vhodn´e jednokrokov´e, protoˇze u nich z´aleˇz´ı jen na pˇredchoz´ım v´ysledku.
Petriho s´ıt’ pˇri vytv´aˇren´ı kombinovan´eho modelu
Bˇehem n´avrhu aplikace jsem pouˇzil Petriho s´ıt´ı k pˇrehledn´emu vyj´adˇren´ı proces˚u. Takto jsem si l´epe pˇredstavil pr˚ubˇeh simulace a jak ho m´am vyj´adˇrit v programovac´ım jazyce. Vesmˇes se jednalo o C/E s´ıtˇe, tj. m´ısto, zde zvan´e podm´ınka, obsahuje maxim´alnˇe jednu znaˇcku a pˇrechod, zde naz´yvan´y ud´alost, je provediteln´y v pˇr´ıpadˇe, ˇze vˇsechny podm´ınky pˇred n´ım plat´ı a podm´ınky za n´ım neplat´ı. V z´avislosti na lepˇs´ım vyj´adˇren´ı jsem pˇrechody prohl´asil bud’ za ud´alosti reaguj´ıc´ı na stavovou podm´ınku, kter´a ruˇs´ı platnost znaˇcky pˇred n´ı, nebo za spojit´y proces a m´ısto za n´ım je stavov´a podm´ınka, na kterou ˇcek´a n´asleduj´ıc´ı ud´alost.
Mimo jin´e jsem je tak´e mohl ovˇeˇrit pomoc´ı n´astroje CESim (viz [8]), pokud se s´ıt’ dala vyj´adˇrit, aniˇz by to bylo na ´ukor pˇrehlednosti. Napˇr´ıklad s´ıt’ na obr´azku 6.1 je t´ımto n´astrojem ovˇeˇren´a.
V s´ıti na obr´azku 3.2 se nav´ıc nach´azej´ı extern´ı podm´ınky a priorita. Proces se vrac´ı do stejn´eho stavu – tj. je pˇred n´avˇestidlem , kdyˇz vlak dojede k dalˇs´ımu n´avˇestidlu nebo zmˇenou sign´alu skonˇcilo ˇcek´an´ı pˇred n´ım. Podm´ınky
”red“ a”allowing signal“ pˇredstavuj´ı stav tohoto n´avˇestidla a samozˇrejmˇe vˇzdy1 plat´ı pr´avˇe jedna z nich. Podm´ınkou
”v ≤ 0, next red“ a prioritou oˇsetˇruji moˇznost zastaven´ı na konci n´asleduj´ıc´ıho bloku, kter´emu pˇrech´azelo rozjet´ı na jeho zaˇc´atku.
1
Pouˇ
zit´
e jazyky a n´
astroje
Tato kapitola popisuje jazyky resp. n´astroje, kter´e jsem pouˇzil ve sv´e pr´aci. S Javou a XML sem se sezn´amil jiˇz dˇr´ıve, proto nechci zach´azet do podrobnost´ı. Uv´ad´ım zde hlavnˇe rysy jazyk˚u resp. n´astroj˚u t´ykaj´ıc´ı se t´eto pr´ace jako zd˚uvodnˇen´ı, proˇc sem tyto jazyky ˇci n´astroje pouˇzil a pˇr´ıpadnˇe pro co byly v m´e v m´e pr´aci nevhodn´e.
4.1
XML
XML je standardizovan´y znaˇckovac´ı jazyk pro ukl´ad´an´ı r˚uzn´ych typ˚u dat. Rozˇsiˇruje text o znaˇcky, zvan´e tagy, ty jsou uzavˇreny do < >, maj´ı n´azev a mohou m´ıt nˇekolik atribut˚u. Tagy jsou poˇc´ateˇcn´ı (zaˇc´ınaj´ı<), koncov´e (zaˇc´ınaj´ı< /) nebo “obojetn´e” (poˇc´ateˇcn´ı s /
pˇred >). Vyuˇz´ıv´a v r˚uzn´ych oblastech, jako napˇr´ıklad webov´e str´anky, vektorov´a grafika, katastr nemovitost´ı, serializace objekt˚u (v JavaBeans), a samozˇrejmˇe tak´e pro ukl´ad´an´ı model˚u v M&S (napˇr. Ptolemy II.).
XML definuje obecnou syntaxi, ve kter´e je moˇzn´e vytv´aˇret vlastn´ı znaˇcky. Vnitˇrn´ı re-prezentaci pˇredstavuje n-´arn´ı strom r˚uzn´ych typ˚u uzl˚u jako element, atribut, text atd. Data tedy mohou b´yt rozm´ıstˇena hierarchicky podle logick´ych vazeb. Snadno se rozˇsiˇruje a podporov´an mnoho jazyky, coˇz umoˇzˇnuje vytv´aˇren´ı datov´ych form´at˚u postupnˇe proto-typov´an´ım. D´ıky jmenn´ym prostor˚um lze do dokumentu jednoho typu vloˇzit ˇc´ast jin´eho (tˇreba jiˇz existuj´ıc´ıho). Napˇr´ıklad do popisu dopravn´ı s´ıtˇe, jeˇz pˇredstavuje hlavnˇe topologii, lze pˇridat ke kaˇzd´e cestˇe jej´ı geometrick´e vlastnosti pomoc´ı extern´ıho vektorov´eho grafick´eho form´atu. Pro strojovou v´ymˇenu dat je to v´yborn´y jazyk, vˇsak pro ruˇcn´ı z´apis, ˇci dokonce programov´an´ı (napˇr. XSLT) se mi zd´a nevhodn´y. ˇCasto je vhodn´e jej pˇred odesl´an´ım pˇres s´ıt’ zkomprimovat, nebot’ se zde projevuje nev´yhoda tohoto typu znaˇckov´an´ı – opakovan´a informace nav´ıc.
4.1.1 Analyz´atory XML
Validace dokument˚u Lexik´aln´ı a syntaktick´a pravidla jsou stejn´a pro vˇsechna XML. Tv˚urce XML aplikace urˇcuje aˇz s´emantiku. ˇC´asteˇcnˇe mu mohou b´yt n´apomocny n´asleduj´ıc´ı definiˇcn´ı n´astroje. Pro urˇcen´ı jak m´a vypadat tzv. spr´avnˇe formulovan´y dokument v XML slouˇz´ı Definice typu dokumentu (DTD), kde se urˇc´ı metadata – co m˚uˇze dokument obsa-hovat za tagy, jak´e maj´ı atributy a co mohou obsahovat, ale jen na ´urovni prvk˚u XML, chyb´ı napˇr´ıklad typov´a kontrola atribut˚u ap. Tud´ıˇz DTD nestaˇcilo a muselo vzniknout XML Schema [2], coˇz je XML aplikace popisuj´ıc´ı nav´ıc tak´e objektov´e vazby mezi znaˇckami.
Pro zvolen´ı XML jako datov´eho form´atu hovoˇr´ı tak´e to, ˇze jiˇz existuj´ı analyz´atory pro r˚uzn´e jazyky Postaraj´ı se o lexik´aln´ı a syntaktickou anal´yzu podle obecn´e XML gramatiky a pˇr´ıpadnˇe provedou validaci. Existuj´ı dva hlavn´ı – SAX a DOM. SAX proch´az´ı dokumen-tem a vol´a metody zaregistrovan´ehoHandleru, kdyˇz naraz´ı na zaˇc´atek ˇci konec elementu. Bˇehem tohoto pr˚uchodu m˚uˇze b´yt provedena i validace. Pˇri anal´yze DOM se pouˇzije SAX k pˇrevodu textu na standardizovanou vnitˇrn´ı podobu dokumentu (strom). Proto se pouˇz´ıv´a sp´ıˇse v programech, kter´e potˇrebuj´ı n´ahodn´y pˇr´ıstup k r˚uzn´ym ´urovn´ım dokumentu, jako jsou editory a prohl´ıˇzeˇce. Avˇsak m´a-li aplikace vlastn´ı lepˇs´ı vnitˇrn´ı reprezentaci dat ˇci je tˇreba prov´adˇet dlouh´e sekvenˇcn´ı transformace, je vhodnˇejˇs´ı SAX. V´ıce o XML v [5]
4.2
Java
Java je obecn´y objektovˇe-orientovan´y programovac´ı jazyk. Jeho hlavn´ı v´yhodou je, ˇze se spouˇst´ı v prostˇred´ı virtu´aln´ıho stroje, jehoˇz implementace je dostupn´a pro mnoho beˇzn´ych operaˇcn´ıch syst´em˚u. Takˇze umoˇzˇnuje vyv´aˇret pˇrenositeln´e spustiteln´e soubory. Vybral jsem jej, ˇze s t´ımto jazykem m´am nejv´ıc zkuˇsenost´ı. K implementaci jsem nakonec zvolil verzi 6 Standard Edition. Existuje i pˇrekladaˇc v GCC je vˇsak s nejnovˇejˇs´ı ofici´aln´ı verz´ı nekompa-tibiln´ı. Nav´ıc od verze 7 by mˇela b´yt otevˇren´a jiˇz i ofici´aln´ı verze (viz projekt OpenJava). Existuje mnoho publikac´ı – napˇr. [9,12]. Java od sv´eho vzniku proˇsla ˇradou inovac´ı, leccos bylo doplnˇeno a nˇekter´e knihovn´ı tˇr´ıdy jsou zavrˇzen´e. Proto nˇekter´e informace ve starˇs´ı literatuˇre jsou zastaral´e. Nejspolehlivˇejˇs´ım zdrojem je tedy [3]. V Javˇe jsem zvykl´y ps´at k´od tak, ˇze n´azvy promˇenn´ych a metod samy o sobˇe komentuj´ı.
Kontejnery (Kolekce) Jsou obdobou STL z C++ a slouˇz´ı k ukl´ad´an´ı pˇredem nedefi-novan´eho mnoˇzstv´ı dat. V Javˇe jsou to objekty, tedy sami mohou b´yt prvky jin´e kolekce. Napˇr´ıkladMapslouˇz´ı k vytv´aˇren´ı zobrazen´ı objektu na objekt, ˇc´ımˇz sniˇzuje vytv´aˇren´ı refe-renc´ı pˇr´ımo v objektech a tedy i z´avislost k´odu jedn´e tˇr´ıdy na jinou. Problematika kontejner˚u je v´ıce rozvedena v [7], avˇsak pˇri pouˇzit´ı Javy 5 je tˇreba br´at zˇretel na to, ˇze kontejnery jsou parametrizovan´e. Skl´ad´an´ım kolekc´ı jsem vytvoˇril vlastn´ı datov´e struktury. Pˇredevˇs´ım jsem doplnil nebo zcela definoval rozhran´ı a implementoval neoptimalizovan´e prototypy. Z nich se mohou vyvinout ´uloˇziˇstˇe pˇr´ımo na m´ıru, vˇsak si st´ale mohou zachovat urˇcitou m´ıru obec-nosti. Napˇr´ıkladArray2DMapv rychlosti je srovnateln´a sTreeMap, ale nejˇcastˇeji volanou je pr´avˇe vybr´an´ı poloˇzky a prov´ad´ı se za kritick´ych v´ypoˇct˚u. Zde ˇslo hlavnˇe o to minimalizovat vytv´aˇren´ı kl´ıˇcov´ych objekt˚u dvojic´ı cel´ych ˇc´ısel a pˇritom zachovat kompatibilitu zMap.
V´yhody a nev´yhody Svou syntax´ı v´ıce inklinuje k obecn´ym jazyk˚um (C, C++), pˇresto mnoˇzstv´ım standardn´ıch knihoven doh´an´ı mnoh´y skriptovac´ı jazyk. Pˇr´ısn´a statick´a ty-pov´a kontrola m˚uˇze na prvn´ı pohled zdrˇzovat v´yvoj, ale pˇri spr´avn´em n´avrhu a pouˇzit´ı vhodn´ych editor˚u naopak zrychluje odladˇen´ı, protoˇze se m˚uˇzu soustˇredit hlavnˇe na logick´e chyby v k´odu. Co vˇsak narozd´ıl od skriptovac´ıch jazyk˚u postr´ad´a je podpora funkcion´aln´ıho programov´an´ı. Pro modelov´an´ı komplexn´ıch syst´em˚u se strukturami s rekurzivn´ı agregac´ı (napˇr. cesta, kter´a je podtˇr´ıdou dr´ahy, rozsekan´a na ˇc´asti, kter´e jsou tak´e podtˇr´ıdami dr´ahy) je pro urˇcen´ı zpr´avy pos´ılan´e vˇsem ˇc´astem z cesty bych radˇeji implementoval pomoc´ı de-legace a referenc´ı na metody. Zde totiˇz m˚uˇze vzniknout ne´umˇern´e mnoˇzstv´ı podobn´eho (rozkop´ırovan´eho k´odu), coˇz jsem ˇc´asteˇcnˇe vyˇreˇsil pomoc´ı reflexe, ale toto ˇreˇsen´ı je nee-fektivn´ı, protoˇze se mus´ı nal´ezt metoda podle ˇretˇezce se jm´enem a ty ˇretˇezce
”evidovat“ nav´ıc.
bych mohl o kombinovanou simulaci rozˇs´ıˇrit. Ale proˇc, kdyˇz existuje jiˇz hotov´a, celkem snadno pouˇziteln´a knihovna. Nav´ıc se ob´av´am, ˇze by tato implementace sama o sobˇe vy-dala minim´alnˇe na jeden samostatn´y projekt. Dalˇs´ı moˇznost´ı je spojen´ı pˇres nativn´ı metody s knihovnou v jin´em jazyce (napˇr. SIMLIB). To je tak´e ˇcasovˇe n´aroˇcn´e.
JDisco – [6] je bal´ık javov´ych tˇr´ıd pro popis a simulaci kombinovan´ych model˚u. Byla vyvinuta na Roskilde University v D´ansku. Existuj´ı zde dva typy proces˚u: diskr´etn´ı a
spojit´y (jak bylo ˇreˇceno v 3.2). Mezi napl´anovan´ymi diskr´etn´ımi procesy jsou neaktivn´ı f´aze,ve kter´ych mohou b´yt aktivn´ıspojit´e. Pro popis spojit´ych promˇenn´ych slouˇz´ı tˇr´ıda
jDisco.Variable. Ta m´a dva hlavn´ı atributy: okamˇzitou hodnotu – state a okamˇzitou derivaci – rate. Spojit´e procesy vytvoˇr´ım zdˇedˇen´ım od jDisco.Continuous a povinnou implementac´ı metodyderivatives, ve kter´e se pop´ıˇs´ı vztahy mezi promˇenn´ymi. Obˇe tyto tˇr´ıdy maj´ı metody start a stop, jimiˇz m˚uˇzu urˇcit, kdy m´a bˇeˇzet spojit´y v´ypoˇcet jejich zavol´an´ım v popisu ud´alosti. Jinak ˇreˇceno lze takto definovat intervaly spojitosti proces˚u ˇci promˇenn´ych. Zdˇedˇen´ım odjDisco.Processa implementov´an´ım metody actions vznikne diskr´etn´ı proces. Implementac´ı rozhran´ıjDisco.Condition vytvoˇr´ım stavovou podm´ınku na kterou bude proces ˇcekat ve volan´ı metodywaitUntil. D´ale bal´ık obsahuje dalˇs´ı tˇr´ıdy pro zjednoduˇsen´ı popisu modelu, tak´e nˇekolik numerick´ych metod (r˚uzn´e Monitory). Nebudu zde dˇelat jejich v´yˇcet. Dokumentaci t´eto knihovny sem pˇridal2 k programov´e dokumentaci sv´e pr´ace. V´ıce tedy tam.
4.3.1 R´ızen´ı simulaceˇ
Simulace je ˇr´ızena na pozad´ı zvolen´ym Monitorem, kter´y je zodpovˇedn´y za to, ˇze se: 1. stav modelu mˇen´ı spojitˇe mezi ud´alostmi
2. diskr´etn´ı ud´alosti provedou ve spr´avn´y ˇcas 3. provede sbˇer informac´ı o chov´an´ı modelu
Spojit´e procesy pracuj´ı paralelnˇe a jsou synchronizov´any s diskr´etn´ımi, kter´e jsou pomoc´ı kalend´aˇre prov´adˇeny kvaziparalelnˇe. V jednom okamˇziku simulace bˇeˇz´ı tedy bud’ jeden diskr´etn´ı proces nebo Monitor ˇr´ıd´ı v´ypoˇcet nˇekolika spojit´ych. Proces je javov´e vl´akno vzd´avaj´ıc´ı se procesoru tˇesnˇe pˇred zavol´an´ım Object.waitna sebe, zavol´a Object.notify
procesu n´asleduj´ıc´ım v kalend´aˇri.
1
SimPack, JDEVS, pak nˇekolik stejnojmenn´ych JSim˚u a JavaSim˚u
2
Kapitola 5
N´
avrh a implementace
Tato kapitola je zamˇeˇrena na struˇcn´y popis implementovan´ych souˇc´ast´ı. Podrobnosti obsa-huje programov´a dokumentace a zdrojov´e soubory. Nejprve je pops´ana celkov´a struktura zdrojov´ych k´od˚u a pot´e rozvedeny jednotliv´e souˇc´asti, pˇredevˇs´ım ty nejd˚uleˇzitˇejˇs´ı.
5.1
Rozdˇ
elen´ı do modul˚
u – bal´ık˚
u
´Uplnˇe nejprve je tˇreba si uvˇedomit a m´ıt na pamˇeti celkovou strukturu aplikace, i kdyˇz z n´ı zat´ım budou implementov´any nˇekter´e ˇc´asti. Mohlo by se st´at, ˇze nˇeco naimplementuji a pak to budu pracnˇe pˇredˇel´avat1, protoˇze to nep˚ujde spojit. Na obr´azku 5.1jsou ve vyˇsˇs´ı abstrakci zn´azornˇeny z´akladn´ı funkˇcn´ı moduly aplikace a komunikaci mezi nimy, tak jak jsem pˇredpokl´adal na zaˇc´atku n´avrhu. Program m´a pracovat ve dvou m´odech: editace a simulace. Zde jsem se rozhodl, ˇze bude lepˇs´ı vytvoˇrit si ob´alku pro pˇr´ıstup k datov´emu mo-delu. M´ody maj´ı spoleˇcn´e operace, ale tak´e ty, kter´e jsou moˇzn´e jen v tom urˇcit´em m´odu. Toto tedy zapouzdˇruje rozhran´ı2Contexta jeho podrozhran´ı. Jeho zat´ım jedin´a
implemen-tace DefaultContextna prvn´ı pohled vypad´a jako jako vˇsevˇedouc´ı tˇr´ıda ˇci jako odkladna neum´ıstiteln´ych funkˇcnost´ı. Faktem ale je, ˇze jsou zde vˇetˇsinou soustˇredˇeny metody, pro-pojuj´ıc´ı r˚uzn´e ˇc´asti programu. Pro z´aklad projektu vˇsak nepotˇrebuji m´ıt zat´ım dvˇe r˚uzn´e implementace, postaˇc´ı db´at na oddˇelov´an´ı pomoc´ı rozhran´ı. Ale umoˇzˇnuje to, ˇze simulaˇcn´ı kontext nebude jen v pamˇeti, ale m˚uˇze b´yt sd´ılen mezi aplikacemi napˇr´ıklad po s´ıti nebo v datab´azi.
Mezi moduly (bal´ıky) vznikaj´ı z´avislosti, tj. k´od jednoho bal´ıku se odkazuje na jin´y. Zvl´aˇst’ nepˇr´ıjemn´e jsou cyklick´e, kter´e nejsou znakem dobr´eho n´avrhu, pokud vznikaj´ı neˇr´ızenˇe ve velk´em mnoˇzstv´ı. Je-li snaha vytv´aˇret moduly co nejv´ıc nez´avisl´e, bude k´od znovupouˇzitelnˇejˇs´ı. Na obr´azku5.2jsou zn´azornˇeny stanoven´e z´avislosti modul˚u v souˇcasn´e implementaci. Pˇredpokl´ad´am, ˇze ˇcten´aˇri z toho vyplynou i tranzitivn´ı. T´eto z´asady jsem drˇzel aˇz na nˇejak´e v´yjimky, zanˇeˇz v budoucnu pravdˇepodobnˇe zaplat´ım. Zpˇetn´a z´avislost dat na kontextu je ale ˇreˇsena pˇres rozhran´ı. Nav´ıc tˇreba tˇr´ıda AbstractPathje sp´ıˇse z´akladem pro bal´ık ˇr´ızen´ı.
Vˇsechny bal´ıky z obr´azku 5.2 jsou tak´e z´avisl´e na bal´ıku util, ten uˇz je z´avisl´y jen na standardn´ıch knihovn´ach. Zejm´ena na kolekc´ıch, kter´e rozˇsiˇruje o dalˇs´ı potˇrebn´e datov´e
1bˇehem n´avrhu nelze m´ıt na mysli vˇsechny detaily, obzvl´aˇst’ tam kde se mˇen´ı poˇzadavky – tak se sem
tam provede menˇs´ı pˇredˇel´avka
editing
inner model
structure changes
simulation
state changes
control
low level commands
commands
state
Obr´azek 5.1: Z´akladn´ı struktura aplikace a tok dat
gui
xml
sim
context
objects
struktury, jako napˇr´ıklad neorientovan´y graf. O tˇechto struktur´ach v´ıce na stranˇe11. V n´ a-sleduj´ıc´ıch podkapitol´ach pop´ıˇsi dalˇs´ı bal´ıky jednotlivˇe.
5.2
S´ıt’ a datov´
y model
V t´eto sekci je bl´ıˇze pops´ana vnitˇrn´ı reprezentace s´ıtˇe. [13] ˇC´asteˇcnˇe jsem se inspiroval tak´e v [4].
Z pohledu dispeˇcera je to neorientovan´y graf G = (U, H). Ke kaˇzd´e dvojici objekt˚u (uzel1, uzel2) kde uzel1 6= uzel2 je pˇriˇrazen maxim´alnˇe jeden objekt hrany. Tento graf (pˇredevˇs´ım jeho uzly) je um´ıstˇen ve dvourozmˇern´em prostoru s celoˇc´ıseln´ymi indexy. Tento prostor je jak´ysi pseudorastr – matice objekt˚u. Hrana je rozdˇelena na ˇc´asti a ty vyplˇnuj´ı voln´e buˇnky na pˇr´ımce3 mezi nimy. V kaˇzd´e buˇnce se samozˇrejmˇe m˚uˇze nach´azet nejv´yˇse
jeden objekt. Uzly jsou na hrany propojeny pomoc´ı urˇcen´ı okol´ı buˇnky (pˇri editaci je nalezena), kter´e zapouzdˇruje v´yˇctov´y typ Cell.Segment. Kaˇzd´a buˇnka m´a mnoˇzinu seg-ment˚u4 , a pouze do tohoto okol´ı lze ke kaˇzd´e dvojici (segment, uzel) lze pˇripojit
ma-xim´alnˇe jednu hranu. Z pohledu vlaku se blok, pˇredstavovan´y hranou, m˚uˇze skl´adat z v´ıce odd´ıl˚u, mezi nimiˇz jsou dispeˇcerem neovlivniteln´a (automatick´a) n´avˇestidla. D´ale existuje tzv. TrackFacility – je to nejmenˇs´ı i v´ıce-odd´ılov´a jednotka, ve kter´e se m˚uˇze nach´azet maxim´alnˇe jeden vlak. Na obr´azku 5.3 jsou zn´azornˇeny stavy koleje a co m˚uˇze vyvolat
reserved
occupied
free
train
train
command
command
Obr´azek 5.3: ˇZivotn´ı cyklusTrackFacility
jejich pˇrechod. Tyto stavy jsou diskr´etn´ı a vyj´adˇril jsem je pomoc´ı v´yˇctov´eho typu. Mˇelo by b´yt jasn´e, ˇze vlak m˚uˇze vjet pouze na rezervovanou kolej, tak´e ˇze rezervovat nelze pokud jiˇz je rezervovan´a ˇci obsazen´a. Rezervuje ji pˇr´ıkaz dispeˇcera a obsazuje resp. uvolˇnuje vlak.
3
Bresenham˚uv algoritmus
4
jsou n´asleduj´ıc´ı uzly orientovan´e.
V´yhybka je nastavena bud’ na hlavn´ı smˇer nebo do odboˇcky
Hlavn´ı n´avˇest mˇen´ıc´ı se sign´al
Vstupnˇe-v´ystupn´ı bod pˇredstavuje extern´ı kolejov´y syst´em. Nebo m˚uˇzou b´yt jako rozˇs´ıˇren´ı propojeny dva uvnitˇr modelu bez simulaˇcn´ıho Workeru – podpora mimo´urovˇnov´ych kˇr´ıˇzen´ı.
Zakonˇcen´ı koleje konstantn´ı n´avˇest
”St˚uj“
• Hrany:TrackBlockObr´azek5.4zn´azorˇnuje odvozen´ı bloku od dr´ahy. Jednu z moˇzn´ych hran pˇredstavuje jednoduch´a kolejSimpleTrackBlock. Je toTrackFacilitys jedn´ım odd´ılem. Dalˇs´ımi hranami mohou b´yt mezistaniˇcn´ı ´useky:
Automatick´y blok m´a v´ıce odd´ıl˚u – viz strana21
Poloautomatick´y blok facility, 1 hlavn´ı odd´ıl + 2 pˇredstaniˇcn´ı
« i n t er f ace » T rac kS ec ti on + en t er () + l eave () + ge tT rac k B l oc k() « i n t er f ace » P a t h + ge tL as tP a t hS emap h ore () + max S pee d() + reverse P a t h() + ge tFi rs t() + ge tL as t() + eq u a l s W i t h E l emen t s () « i n t er f ace » T rac k B l oc k + ge tN ex tT rac kS ec ti on () + i s I nner E l emen t () + ge tJ o i n () + max S pee d() « i n t er f ace» D eq u e « i n t er f ace» T rac kF ac ilit y + ge t S t a t e () « i n t er f ace » T rac k + i s F ree F rom () + se tU p P a th() + i s S e tU p P a th() + cance l P a t h S e t u p () + ge t S econ d E n d() + l eng t h() + max S pee d() + en d s ()
5.2.2 Dynamick´a konfigurace a cesty v s´ıti
Rezervovan´e koleje a dovoluj´ıc´ı sign´aly pˇredstavuj´ı jednu ˇci v´ıce tzv.
”postaven´ych vlakov´ych cest“. Tato cesta se j´ızdou vlaku postupnˇe rozpad´a a m˚uˇze se za urˇcit´ych podm´ınek mˇenit. Form´alnˇe je to cesta z teorie graf˚u tj. posloupnost uzl˚u a neobsazen´ych hran, ale s ohledem na konfiguraci prvk˚u – konkr´etnˇeji:
• poˇc´ateˇcn´ı a koncov´y uzel je n´avˇestidlo ve smˇeru cesty ˇci vstupnˇe-v´ystupn´ı bod • v´yhybky propojuj´ı hrany (oba sousedy z posloupnosti)
• n´avˇestidla ve smˇeru mus´ı dovolovat j´ızdu, aˇz na posledn´ı, kter´e ji zakazuje
• protismˇern´a n´avˇestidla: hlavn´ı zakazuj´ı (d´ale v nedoimplementovn´ych – odd´ılov´a jsou vypnut´a a na pˇredzvˇesti nem´a cesta vliv)
Tato funkˇcnost5 je implementov´ana v AbstractPath. Na obr´azku 5.4 je tak´e zn´azornˇena n´avaznost cesty na dr´ahu.
5.2.3 Datov´y soubor
Pro ukl´ad´an´ı a naˇc´ıt´an´ı dat jsem navrhl tzv.ContextFactory. Zvolil jsem XML s validac´ı pomoc´ı XML Schema (viz4.1). Souˇcasn´y datov´y form´at je v z´akladn´ı podobˇe a pˇredstavuje skl´ad´an´ı prvk˚u s´ıtˇe na nejniˇzˇs´ı uˇzivatelem upraviteln´e ´urovni. Pˇredstavuje statick´y popis s´ıtˇe stanice. Jednotiv´e uzly a hrany jsou obyˇcejnˇe vyjmenov´any jako podelementy koˇrenov´eho elementu. K rozliˇsen´ı typ˚u prvk˚u pouˇz´ıv´am mj. v´yˇctov´e typy. Nejenˇze ˇsetˇr´ı m´ısto a jsou jednoduˇse rozˇsiˇriteln´e, ale snadno se i naˇc´ıtaj´ı a zapisuj´ı.
5.3
Simulace
Tato sekce popisuje pr˚ubˇeh simulace – neform´aln´ım popisem a pomoc´ı vybran´ych abs-traktn´ıch model˚u nejd˚uleˇzitˇejˇs´ıch proces˚u.
Proˇc kombinovan´a simulace?
Poloha vlaku se d´a pojmout jak diskr´etnˇe - tj. kter´e kolejov´e obvody obsazuje. Tak´e je vˇsak tˇreba zn´at jeho pˇresnˇejˇs´ı polohu, rychlost a zrychlen´ı v kaˇzd´em okamˇziku. M´ıra pˇresnosti je nastaviteln´a. Umoˇzˇnuje v´ıce moˇznost´ı a l´epe se mˇen´ı. Napˇr´ıklad lze zmˇenit rovnici v popisu pohybu.
5.3.1 Vstupnˇe-v´ystupn´ı body – InOut
Pˇredstavuje vstup a v´ystup do kolejiˇstˇe. Jeho chov´an´ı, jehoˇz z´akladem je fronta vlak˚u, popisuje InOutWorker. V jednoduch´ych modelech lze do n´ı vkl´adat pˇr´ımo gener´atorem, ve sloˇzitˇejˇs´ıch to mus´ı prov´est vyˇsˇs´ı ˇr´ıd´ıc´ı logika – dispeˇcer. S´am o sobˇe um´ı povolit cestu k nejbliˇzˇs´ımu n´avˇestidlu orientovan´emu ve smˇeru j´ızdy, pokud v´yhybky k nˇejak´emu cestu propojuj´ı6 a z´aroveˇn je nˇejak´y vlak ve frontˇe a z´aroveˇn jsou na n´ı voln´e vˇsechny koleje. V budoucnosti m˚uˇze pˇredstavovat pˇripojen´ı extern´ıho kolejiˇstˇe. Moment´alnˇe uvaˇzuji modely o dvou InOut. Kdyˇz propoj´ım pouze dva tyto InOut jednou kolej´ı, rozpout´a se mezi nimi
5
pracuj´ıc´ı s hlavn´ımi n´avˇestidly, protoˇze ostatn´ı jsou uvnitˇr bloku
6
Vlak ˇcek´a ve frontˇe vstupnˇe-v´ystupn´ıho bodu na povolen´ı k j´ızdˇe. Po jeho z´ısk´an´ı se spust´ı podproces Train.Front, kter´y pˇri tom, kdyˇz naraz´ı na uzel (PathSeparator), pˇr´ıpadnˇe zmˇen´ı parametry podle nˇej a obsad´ı odd´ıl pˇred n´ım. Aˇz vyjede vlak cel´y spust´ı seTrain.Tail. Ten pˇri pr˚ujezdu kaˇzd´ym uzlem uvoln´ı odd´ıl za n´ım.
Kaˇzd´e n´avˇestidlo poskytuje informaci o povolen´e rychlosti za n´ım a o sign´alu na n´ a-sleduj´ıc´ım n´avˇestidle, pokud ovˇsem nesv´ıt´ı sign´al
”St˚uj“. V tomto pˇr´ıpadˇe by mˇel vlak dobrzdit pˇred n´ım a ˇcekat na sign´al umoˇzˇnuj´ıc´ı j´ızdu. Pro zjednoduˇsen´ı pˇredpokl´ad´am, ˇze stav n´avˇestidel m˚uˇze b´yt zjiˇst’ov´an pouze v diskr´etn´ım stavu, kdyˇz vlak dojede k n´avˇestidlu, protoˇze stanovit, kdy m˚uˇze zaregistrovat zmˇenu sign´alu je v re´alu neurˇcit´e narozd´ıl od programu.
Pˇri pr˚ujezdu kolem n´avˇestidla zaˇc´ın´a mˇenit rychlost v z´avislosti na sign´alu. Tzv.
”rozjezd na v´ystrahu“, kdy se vlak u prvn´ıho n´avˇestidla zaˇc´ın´a rozj´ıˇzdˇet a pˇred n´asleduj´ıc´ım zastav´ı, je oˇsetˇrena zvl´aˇst’. Podprocesy konˇc´ı v koncov´ych vstupnˇe-v´ystupn´ıch bodech InOut. Zde jsem zjednoduˇsil model pˇredpokladem, ˇze nejvˇetˇs´ı d´elka vlaku mus´ı b´yt pˇreci menˇs´ı neˇz nejmenˇs´ı moˇzn´a d´elka kolejov´eho bloku mezi dvˇema InOut. Takov´ehle podobn´e okrajov´e pˇr´ıpady nem´a cenu jinak oˇsetˇrovat, neˇz prohl´asit model za chybn´y. Detekce t´eto chyby vyˇzaduje hled´an´ı minim´aln´ıch cest.
Form´alnˇe je to kombinovan´y proces (viz sekce 3.2.3). Diskr´etn´ı ˇc´ast ˇcek´a na stavov´e podm´ınky dojezdu k semaforu a nastavuje zrychlen´ı. Tuto interakci popisuje Petriho s´ıt’ na obr´azku3.2, ta slouˇz´ı vˇsak jen pro n´azornost. Simulace nen´ı implementov´ana pˇr´ımo pomoc´ı PS. Zvolil jsem jednouch´y spojit´y model, protoˇze je zhlediska odladˇen´ı diskr´etn´ıch interakc´ı pˇredv´ıdatelnˇejˇs´ı. Z´akladn´ı pohybov´e rovnice5.1a5.2pro zrychlen´ıa, rychlostva dr´ahus:
v = Z adt (5.1) s = Z vdt (5.2)
V´ypoˇcet zrychlen´ıav rovnici 5.3z poˇc´ateˇcn´ı rychlosti v0, c´ılov´e rychlostiv1 a dr´ahy s
pro zrychlov´an´ı:
∆v = v1−v0
a = ∆v(v1+v0)
2s (5.3)
5.4
Pˇ
r´ıklad – V´
yhybna
Pro lepˇs´ı demonstraci jak funguje simulaˇcn´ı model jsem vytvoˇril
”v´yhybnu“ ˇr´ızenou na z´akladˇe jednoduch´ych pravidel. Ke kaˇzd´emu ovlivniteln´emu n´avˇestidlu je na pevno pˇriˇrazena alespoˇn jedna vytvoˇren´a cesta, kter´a vede na dalˇs´ı kolej bud’ s moˇznost´ı odst´avky ˇci opuˇstˇen´ı syst´emu, tedy z urˇcit´eho pohledu pˇredstavuje jednu nedˇelitelnou operaci pˇresunu. Vlaky jsou vytv´aˇreny s jednoduch´ym j´ızdn´ım ˇr´adem (dva ´udaje odkud, kam –InOut) pomoc´ı ge-ner´atoru s exponenci´aln´ım rozloˇzen´ım doby mezi jednotliv´ymi generov´an´ımi. Dˇr´ıve neˇz jsou
pˇred vloˇzeny do frontyInOut, mˇelo by se pˇredej´ıt zahlcen´ı kolejiˇstˇe. ˇR´ıd´ıc´ı proces iterativnˇe proch´az´ı znalostmi o syst´emu:
1. zapomene vlaky, kter´e uˇz projely syst´emem
2. z vlak˚u, kter´e ˇcekaj´ı na vstup vybere tolik, aby byly celkem v syst´emu nejv´yˇse dva a udˇel´ı jim souhlas (aktivov´an´ım procesu)
3. projde vˇsechny kolejov´e bloky
(a) ve kter´ych se nach´az´ı vlak nebo je rezervovan´a cesta, zjist´ı jeho resp. jej´ı smˇer – n´avˇestidlo ke kter´emu je vlak veden
(b) pokud je z tohoto n´avˇestidla voln´a cesta (pˇredem uloˇzen´a) postav´ı ji
Obr´azek 5.5: Kolejov´e sch´ema v´yhybny
Ke sch´ematu na obr´azku5.5: ´useˇcky jsou koleje, jejich spojen´ı jsou v´yhybky,•jeInOutaI je n´avˇestidlo. Po spuˇstˇen´ı simulace se na standardn´ı v´ystup programu vypisuj´ı po ˇr´adk´ach zpr´avy:
1. j´ızda vlaku, spojit´y vzorek:
ˇ
cas objekt zrychlen´ı rychlost dr´aha kolej_od kolej_do vzd_n´avˇestidlo
2. diskr´etn´ı ud´alost prvku:
ˇ
cas objekt zpr´ava
dr´aha je celkov´a dr´aha ujet´a vlakem, kolej_od kolej na kter´e se nach´az´ı zaˇc´atek vlaku,
kolej_dokolej na kter´e se nach´az´ı konec vlaku,vzd_n´avˇestidlovzd´alenost k nejbliˇzˇs´ımu n´avˇestidlu.
V grafu na obr´azku 5.6 je zn´azornˇeno, jak vlak v modelu reaguje na sign´aly bˇehem ud´alosti dojezdu k n´avˇestidlu. Zde je zrovna vidˇet jak ˇr´ıd´ıc´ı logika nestaˇc´ı povolit cestu do n´asleduj´ıc´ıho bloku vˇcas, a vlak se mezi semafory rozj´ıˇzd´ı a zastavuje. V sekci 5.3.2 je vysvˇetleno chov´an´ı vlaku.
0 5 10 15
0 5 10 15 20 25 30 35 40 45 50
Kapitola 6
Z´
avˇ
er
V t´eto kapitole jsou pops´ana moˇzn´a rozˇs´ıˇren´ı programu a zhodnocen´ı cel´e pr´ace.
6.1
N´
amˇ
ety na rozˇ
s´ıˇ
ren´ı
N´apad˚u na to jak rozˇs´ıˇrit souˇcasnou aplikaci je plno, ale zde se zamˇeˇr´ım sp´ıˇse na ty, pro kter´e je souˇcasn´a implementace pˇr´ımo navrˇzena, nebo z n´ı vypl´yvaj´ı a jsou v nejbliˇzˇs´ı dobˇe realizovateln´e.
C´ıle v´ysledn´e aplikace
Tyto c´ıle jsem vytyˇcil z d˚uvodu, ˇze nechci, aby naimplementovan´y k´od byl vytvoˇren jen pro jeden ´uˇcel. T´ımto bych chtˇel nˇejak vyj´adˇrit moˇznosti dalˇs´ıho rozvoje cel´e aplikace. Na mou pr´aci mohou nav´azat a uskuteˇcnit je jin´ı studenti.
• grafick´y editor a simul´ator ˇr´ızen´ıˇzelezniˇcn´ı s´ıtˇe v jedn´e aplikaci, zamˇeˇren´ı na funkˇcnost, minimalizace klik´an´ı
• platformn´ı nez´avislost – alespoˇn na ´urovni zdrojov´ych k´od˚u
• form´at dat, kter´y umoˇzˇnuje vytv´aˇret ˇsablony prvk˚u kompozic´ı z jin´ych
Fyzik´aln´ı model j´ızdy
Pro souˇcasn´y popis j´ızdy existuje i analytick´e ˇreˇsen´ı. Popis pomoc´ı diferenci´aln´ı rovnice ale umoˇzˇnuje jej´ı zmˇenu za sloˇzitˇejˇs´ı, kter´a bude vˇernˇeji modelovat dalˇs´ı moˇzn´e pˇr´ıpady. Dr´ahu vlaku (hlavnˇe v mezistaniˇcn´ıch ´usec´ıch) bych pojal jako kˇrivku v trojrozmˇern´em prostoru – tj. dalˇs´ı vlastnost hrany. Pˇri tom je tˇreba rozloˇzit si souˇcasnou jedinou s´ılu udˇeluj´ıc´ı v´ysledn´e zrychlen´ı na nˇekolik sloˇzek – naklonˇen´a rovina v kopc´ıch, tˇren´ı, taˇzn´a s´ıla motoru, ta by mohla b´yt ˇr´ızena napˇr´ıklad fuzzy regul´atorem. M˚uˇzu pak uvaˇzovat i poruchy, pˇri kter´e je s´ıla motoru nulov´a.
Automatick´y blok
Automatick´y blok (AB) je pevnˇe postaven´a, automaticky obnovovan´a, cesta pro v´ıce vlak˚u. M˚uˇze to b´yt napevnoTrackBlockposkl´adan´y z nˇekolika odd´ıl˚uSimpleTrack. AB jako celek m´a dipeˇcerem nastaven´y smˇer. Jednotliv´e odd´ıly okamˇzitˇe rezervuj´ı cestu v tom smˇeru, kdyˇz dojde k jejich uvolnˇen´ı. Na obr´azku6.1je zn´azornˇeno chov´an´ı odd´ılu AB. AB by tak´e mˇelo
druh˚u n´avˇest´ı (z´aleˇz´ı kde budou v s´ıti um´ıstˇeny):
Odd´ılov´a n´avˇest v autobloku
Pˇredzvˇest pomoc´ı konstantn´ı n´avˇesti s
”Volno“
Ukl´ad´an´ı stavu simulace
Diskr´etn´ı proces je rozkouskovan´y na ud´alosti pˇr´ıkazy, jako je ˇcek´an´ı, vedouc´ı ke ztr´atˇe akti-vity. Pokud nˇejak´ym univerz´aln´ım zp˚usobem vytvoˇr´ım moˇznost pamatovat stav ve kter´em je kaˇzd´y proces zrovna pasivn´ı mezi ud´alostmi a definuji transformaci z poˇc´atku do tohoto stavu, m˚uˇzu tuto informaci uloˇzit spoleˇcnˇe s dalˇs´ımi vlastnostmi pˇri serializaci. Proces by mohl b´yt vnitˇrnˇe reprezentov´an jako automat ˇci Petriho s´ıt’ a jeho resp. jej´ı stav by se uloˇzil a obnovil. U spojit´ych promˇenn´ych je tˇreba ukl´adatjDisco.Variable. Je moˇzn´e, ˇze kv˚uli univerz´aln´ımu ˇreˇsen´ı, bude vyˇzadovat ´upravy v knihovnˇe jDisco pro podporu serializace. Stav potomk˚u LoopProcess, kter´y uvnitˇr iterace nepˇrich´az´ı do pasivn´ıho stavu, je moˇzn´e jiˇz ukl´adat.
Vizualizace pomoc´ı celul´arn´ıch automat˚u, Real-time
ˇ
Ctvercov´a s´ıt’ modelu pˇr´ımo pˇredurˇcuje pouˇz´ıt pro ˇr´ızen´ı vykreslov´an´ı celul´arn´ı automaty. Snahou je minimalizovat mnoˇzstv´ı pˇrekreslovan´e plochy a zbyteˇcnou v´ypoˇcetn´ı z´atˇeˇz, zp˚ uso-benou proch´azen´ım stav˚u vˇsech bunˇek, omezen´ım pouze na mal´e mnoˇzstv´ı bunˇek nˇekter´ych typ˚u a u ostatn´ıch budu vych´azet z pˇredpokladu, ˇze pokud se zmˇen´ı jedna buˇnka, tak pravdˇepodobnost zmˇeny v buˇnk´ach v okol´ı1 se nastav´ı na maximum a pak kles´a s ˇcasem. D´ale bude vhodn´e vytvoˇrit Monitor se synchronizac´ı re´aln´eho ˇcasu s modelov´ym. Ten by mˇel l´epe detekovat a vhodnˇe vkl´adat
”odmlky“ mezi spojit´y v´ypoˇcet. V souˇcasnosti to oˇsetˇruji diskr´etn´ım procesem, kter´y pro kaˇzdou sekundu modelov´eho ˇcasu, po kterou ˇcek´a tj. simuluj´ı se jin´e procesy, spoˇc´ıt´a ubˇehl´y ˇcas a vloˇz´ı pˇr´ımo potˇrebnou pauzu javov´eho vl´akna. Kvaziparalelismus zajist´ı, ˇze se pozdrˇz´ı v´ypoˇcet cel´e simulace. Je to tedy vloˇzen´ı jak´ychsi synchronizaˇcn´ıch impuls˚u, kter´e je vˇsak tˇreba napl´anovat v lepˇs´ı okamˇzik.
Rozhran´ı do modelu pro ˇr´ızen´ı dispeˇcerem
Nav´azat je moˇzn´e na souˇcasnou formalizaci cest, doimplementovat jejich vyhled´av´an´ı. Vy-tvoˇrit bal´ıˇcek rutin a funkc´ı zastˇreˇsuj´ıc´ı pˇr´ıstup do modelu pro ˇr´ızen´ı z nˇekolika ´urovn´ı. Na to tak´e navazuje dodˇelat pˇr´ıkazy z GUI rozhran´ı. Vhodn´e bude zformalizovat posloupnost pˇr´ıkaz˚u jako jazyk, kter´y se d´a pˇr´ıpadnˇe optimalizovat.
6.2
Zhodnocen´ı dosaˇ
zen´
ych v´
ysledk˚
u
Program simuluje pohyb nˇekolika vlak˚u v s´ıti souˇcasnˇe. Kaˇzd´y vlak se pohybuje podle bˇehem simulace stanoven´e cesty – reaguje na sign´aly n´avˇestidel. Do obsazen´ych kolej´ı nem˚uˇze vjet dalˇs´ı vlak. Stanoven´ych minim´aln´ıch c´ıl˚u bylo tedy dosaˇzeno, coˇz demonstruje pˇr´ıklad. Sloˇzitˇejˇs´ı s´ıt’ je rozumnˇe pˇredvediteln´a aˇz v pˇr´ıpadˇe doimplementov´an´ı ˇr´ıd´ıc´ıho mo-dulu a vizualizace simulace, kdy kontrolu mus´ı pˇrevz´ıt ˇclovˇek. Validita tohoto simulaˇcn´ıho modelu by ˇsla ovˇeˇrit sb´ır´an´ım statistik o skuteˇcn´ych vlakov´ych s´ıt´ıch a srovn´an´ım s mode-lem.
Vhodn´e rysy jazyk˚u resp. n´astroj˚u nakonec pˇrevaˇzuj´ı, pˇrestoˇze nˇekter´e konstrukce v nich byly obt´ıˇznˇeji vyj´adˇriteln´e. Pokud jsem mˇel provˇeˇrit jakou z´atˇeˇz´ı je simulace na operaˇcn´ı syst´em, vˇzdy se hodnoty bˇehem spuˇstˇen´e instance virtu´aln´ıho stroje2 pohybovaly na m´em pˇr´ıstroji kolem tˇechto hodnot a nijak v´yraznˇe se nemˇenily: sd´ılen´a pamˇet’ – 10 MB, k´od a data ve fyzick´e pamˇeti – 25 MB, mnoˇzstv´ı virtu´aln´ı pamˇeti – 213 MB, v´ykon CPU 91 % (toto nen´ı pokus o sofistikovanou v´ykonostn´ı anal´yzu, jenom jsem sledoval, zda si program nevynucuje zbyteˇcnˇe moc prostˇredk˚u).
Z vlastn´ı iniciativy jsem si vyzkouˇsel moˇznost pracovat na takov´emto projektu a ponoˇrit se do problematiky anal´yzy a modelov´an´ı komplexn´ıch syst´em˚u, coˇz zahrnuje zab´yvat se pˇr´ıpadov´ymi studiemi technick´ych zaˇr´ızen´ı. D´ale jsem si rozˇs´ıˇril obzor, o to jak zakom-ponovat simulaci, a zdokonalil se v n´avrhu a programov´an´ı aplikace. Probl´em jsem mˇel zejm´ena ze zaˇc´atku s odhadem ˇcasov´e n´aroˇcnosti prac´ı. Samotn´e k´odov´an´ı ˇslo pomˇernˇe rychle, ale na ladˇen´ı jsem v odhadech ˇcasu pozapomnˇel. Radˇeji testuji pr˚ubˇeˇznˇe, chyba se potom snadnˇeji hled´a. U rozs´ahl´ych projekt˚u je vˇsak tˇreba jeˇstˇe vytv´aˇret testovac´ı skripty. V oblasti n´avrhu je st´ale se co uˇcit a v´ıce vyuˇz´ıt n´avrhov´ych vzor˚u a hlavnˇe se drˇzet jejich z´asad. Ale mus´ım poznamenat, ˇze doba str´aven´a studov´an´ım a n´avrhem syst´emu byla delˇs´ı neˇz doba programov´an´ı, kterou bych chtˇel v pokraˇcov´an´ı na v´ystavbˇe t´eto aplikace jeˇstˇe zkr´atit o vyvarov´an´ı se chyb´am, z kter´ych jsem se dopustil.
2
[1] Vyhl´aˇska Ministerstva dopravy, kterou se vyd´av´a dopravn´ı ˇr´ad drah. 1995. URLhttp://www.mvcr.cz/sbirka/
[2] XML Schema Part 1: Structures Second Edition. web, 2004. URLhttp://www.w3.org/TR/2004/REC-xmlschema-1-20041028/ [3] JDK 6 Documentation. web, 2006.
URLhttp://java.sun.com/javase/6/docs/
[4] FALKNER, A.; FLEISCHANDERL, G.: Configuration requirements from railway interlocking stations. Technick´a zpr´ava, Siemens Austria, 2001.
[5] HAROLD, E. R.; MEANS, W. S.:XML v kostce. Computer Press, 2002. [6] HELSGAUN, K.: jDisco – a Java package for combined discrete and continuous
simulation. Technick´a zpr´ava, Department of Computer Science, Roskilde University, 2001.
URLhttp://www.akira.ruc.dk/~keld/research/JDISCO/
[7] HEROUT, P.: Java - bohatstv´ı knihoven. Kopp, ˇCesk´e Budˇejovice, 2003.
[8] NOVOSAD, P.: V´yukov´y n´astroj pro pr´aci s C/E Petriho s´ıtˇemi. InPedagogick´y software 2006, Zemˇedˇelsk´a Fakulta, Jihoˇcesk´a Univerzita, 2006, ISBN 80-85645-56-4, s. 247–249.
URLhttp://www.fit.vutbr.cz/research/view_pub.php?id=8103
[9] PECINOVSK ´Y, R.: Java 5.0 – Novinky jazyka a upgrade aplikac´ı. Computer Press Brno, 2005.
[10] REKTORYS, K.; kol.: Pˇrehled uˇzit´e matematiky I. - II.Prometheus, 2000.
[11] R ´ABOV ´A, Z.; ˇCEˇSKA, M.; ZENDULKA, J.; aj.:Modelov´an´ı a simulace. VUT FEI, druh´e vyd´an´ı.
[12] SPELL, B.: Java Programujeme profesion´alnˇe. Computer Press Praha, 2002. [13] WR ´OBLEWSKI, P.: Algoritmy – Datov´e struktury a programovac´ı techniky.
Seznam pouˇ
zit´
ych zkratek
AB Automatick´y blok – trat’ov´e zabezpeˇcovac´ı zaˇr´ızen´ı rozdˇelen´e na prostorov´e odd´ıly
DOM Document Object Model – v´ıce v [5]
GCC GNU Compiler Collection – http://www.gnu.org/software/gcc/
JOP Jednotn´e obsluˇzn´e pracoviˇstˇe – ˇr´ıd´ıc´ı zaˇr´ızen´ı umoˇzˇnuj´ıc´ı kontrolovat nˇekolik stanic najednou
M&S Modelov´an´ı a simulace – viz sekce 3.2
PS Petriho s´ıt’ – viz sekce3.2
SAX Simple API for XML – v´ıce v [5]
SIMLIB SIMLIB/C++ –http://www.fit.vutbr.cz/~peringer/SIMLIB/
STL Standard Template Library – knihovn´ı funkce jazyka C++
XSLT eXtensible Stylesheet Language Transformations – funkcion´aln´ı programovac´ı ja-zyk v XML pro specifikaci pˇrevodu vstupn´ıho XML na v´ystupn´ı form´at (v´ıce v [5])