ˇ ´ UCEN ´I TECHNICKE ´ V BRNE ˇ VYSOKE BRNO UNIVERSITY OF TECHNOLOGY
ˇ ´ICH TECHNOLOGI´I FAKULTA INFORMACN ´ ´ U ˚ USTAV INTELIGENTN´ICH SYSTEM FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS
ˇ ´IHO STAVEDLA ´ ˇ ˇ SIMULATOR ZELEZNI CN
ˇ ´ BAKALA´ RSK A´ PRACE BACHELOR’S THESIS
´ AUTOR PRACE AUTHOR
BRNO 2007
ˇ BEDRICH HOVORKA
ˇ ´ UCEN ´I TECHNICKE ´ V BRNEˇ VYSOKE BRNO UNIVERSITY OF TECHNOLOGY
ˇ ´ICH TECHNOLOGI´I FAKULTA INFORMACN ´ ´ U ˚ USTAV INTELIGENTN´ICH SYSTEM FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS
ˇ ´IHO STAVEDLA ´ ˇ ˇ SIMULATOR ZELEZNI CN SIMULATOR OF RAILWAY INTERLOCKING
ˇ ´ BAKALA´ RSK A´ PRACE BACHELOR’S THESIS
´ AUTOR PRACE
ˇ BEDRICH HOVORKA
AUTHOR
´ VEDOUC´I PRACE SUPERVISOR
BRNO 2007
Ing. DAVID MARTINEK
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 ˇzelezniˇ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. Navrhnˇ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 Datum odevzd´ an´ı: 15. kvˇetna 2007
I
Licenˇ cn´ı smlouva
Licenˇcn´ı smlouva je uloˇzena v archivu Fakulty informaˇcn´ıch technologi´ı Vysok´eho uˇcen´ı technick´eho v Brnˇe.
II
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 implementation 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
Simul´ator ˇzelezniˇcn´ıho stavˇedla 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 informaˇ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 1.1 Etapy a c´ıle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 2
2 Modelovan´ y syst´ em a existuj´ıc´ı implementace ˇ 2.1 Zelezniˇ cn´ı stavˇedlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Existuj´ıc´ı implementace . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 4 4
3 Teorie 3.1 Numerick´e metody . . . . . . 3.2 Modelov´ an´ı a simulace . . . . 3.2.1 Diskr´etn´ı simulace . . 3.2.2 Spojit´ a simulace . . . 3.2.3 Kombinovan´ a simulace
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
6 6 7 7 8 8
4 Pouˇ zit´ e jazyky a n´ astroje 4.1 XML . . . . . . . . . . . . 4.1.1 Analyz´ atory XML 4.2 Java . . . . . . . . . . . . 4.3 JDisco . . . . . . . . . . . ˇ ızen´ı simulace . . 4.3.1 R´
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
10 10 10 11 12 12
5 N´ avrh a implementace 5.1 Rozdˇelen´ı do modul˚ u – bal´ık˚ u . . . . . . . . ’ 5.2 S´ıt a datov´ y model . . . . . . . . . . . . . . 5.2.1 Prvky s´ıtˇe . . . . . . . . . . . . . . . 5.2.2 Dynamick´ a konfigurace a cesty v s´ıti 5.2.3 Datov´ y soubor . . . . . . . . . . . . 5.3 Simulace . . . . . . . . . . . . . . . . . . . . 5.3.1 Vstupnˇe-v´ ystupn´ı body – InOut . . 5.3.2 J´ızda vlaku . . . . . . . . . . . . . . 5.4 Pˇr´ıklad – V´ yhybna . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
13 13 15 16 17 17 17 17 18 18
6 Z´ avˇ er 6.1 N´ amˇety na rozˇs´ıˇren´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Zhodnocen´ı dosaˇzen´ ych v´ ysledk˚ u . . . . . . . . . . . . . . . . . . . . . . . .
21 21 23
. . . . .
. . . . .
1
Kapitola 1
´ 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ˇzn ˇuj´ı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 implementace. 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 u ´zce navazuj´ı na souˇcasnou implementaci. Toto sekci n´asleduje jiˇz jen zhodnocen´ı cel´e pr´ace. ach Nˇekter´e n´ azvoslov´ı bylo pouˇzito z [1] a existuj´ıc´ıch implementac´ı. Tak´e n´azvy v obr´azk´ 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´ı 2
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 Vlastn´ı modelov´ an´ı dalˇs´ıch prvk˚ u a vˇsech detail˚ u syst´emu bych pˇrenechal jako rozˇs´ıˇren´ı.
3
Kapitola 2
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 u ´vahu, 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ˇzn ˇuje ˇr´ıdit dopravn´ı s´ıt’ nˇejak´eho uzlu ˇci trat’ov´eho u ´seku 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ˇetn´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. 1 2
Existuj´ı i tzv. posunov´e, ale ty zat´ım neuvaˇzuji http://en.wikipedia.org/wiki/Reverse_engineering
4
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
wine-0.9.36
5
Kapitola 3
Teorie V t´eto kapitole popisuji nˇekter´e teoretick´e z´aklady. Pojmy jako mnoˇzina ˇci relace pˇredpokl´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 problemaypoˇctu (r˚ uznˇe tikou se podrobnˇeji zab´ yv´ a [10]. Zmenˇsov´an´ım kroku se zvyˇsuje pˇresnost v´ 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 − yn+1 . Vyuˇzit´ı tˇechto vlastnost´ı viz azku 3.1 vid´ıme jej´ı pouˇzit´ı, kdyˇz oˇcek´av´ame v´ ysledek bl´ızk´ y polynomu sekce 3.2. Na obr´ druh´eho stupnˇe. k1 = f (xn , yn ), 1 1 k2 = f (xn + h, yn + hk1 ), 4 4 1 3 k3 = f (xn + h, yn + h(3k1 + 9k2 )), 8 32 12 1 k4 = f (xn + h, yn + h(1 932k1 − 7 200k2 + 7 296k3 )), 13 2 197 439 3 680 845 k5 = f (xn + h, yn + h( k1 − 8k2 + k3 − k4 )), 216 513 4 104 8 3 544 1 859 11 1 k6 = f (xn + h, yn + h(− k1 + 2k2 − k3 + k4 − k5 )) 2 27 2 565 4 104 40 16 6 656 28 561 9 2 yn+1 = yn + h( k1 + k3 + k4 − k5 + k6 ) 135 12 852 56 430 50 55 25 1 408 2 197 1 ∗ yn+1 = yn + h( k1 + k3 + k4 − k5 ) 216 2 565 4 104 5
6
(3.1) (3.2) (3.3) (3.4) (3.5) (3.6) (3.7) (3.8)
5 analytic result aprox in f (0) substep k2
0 -5 -10 -15 -20 -1
0
1
2
3
4
5
6
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. 7
K form´ aln´ımu popisu se pouˇz´ıv´ a ˇcasto Petriho s´ıt’. Simulace je ˇr´ızena pomoc´ı kalend´ aˇre ud´alost´ı t´ımto jednoduch´ ym algoritmem: for event in calendar.remove_iterator : 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. Abstraktn´ı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. a takov´e vlastnosti. Metoda uveden´ a v sekci 3.1 m´ #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
ˇ ızen´ı simulace mus´ı pˇri v´ Syst´em obsahuje spojit´e i diskr´etn´ı prvky. R´ 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 u ´kor 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
v kaˇzd´em diskr´etn´ım okamˇziku stavu procesu
8
Obr´ azek 3.2: Petriho s´ıt’ ˇr´ızen´ı vlaku podle sign´al˚ u na semaforech
9
Kapitola 4
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´ı reprezentaci 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ˇzn ˇuje vytv´aˇren´ı datov´ ych form´at˚ u postupnˇe prototypov´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. ˇ asteˇcnˇe mu mohou b´ Tv˚ urce XML aplikace urˇcuje aˇz s´emantiku. C´ 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 obsahovat za tagy, jak´e maj´ı atributy a co mohou obsahovat, ale jen na u ´rovni 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.
10
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´ı dokumentem a vol´ a metody zaregistrovan´eho Handleru, 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 u ´rovn´ı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ˇzn ˇuje 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´ı nekompatibiln´ı. 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´ı y ps´ at literatuˇre jsou zastaral´e. Nejspolehlivˇejˇs´ım zdrojem je tedy [3]. V Javˇe jsem zvykl´ 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 nedefinovan´eho mnoˇzstv´ı dat. V Javˇe jsou to objekty, tedy sami mohou b´ yt prvky jin´e kolekce. Napˇr´ıklad Map slouˇz´ı k vytv´ aˇren´ı zobrazen´ı objektu na objekt, ˇc´ımˇz sniˇzuje vytv´aˇren´ı referenc´ı 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 u ´loˇziˇstˇe pˇr´ımo na m´ıru, vˇsak si st´ale mohou zachovat urˇcitou m´ıru obecnosti. Napˇr´ıklad Array2DMap v rychlosti je srovnateln´a s TreeMap, 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 z Map. 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 typov´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´ı delegace 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 neefektivn´ı, protoˇze se mus´ı nal´ezt metoda podle ˇretˇezce se jm´enem a ty ˇretˇezce evidovat“ ” nav´ıc.
11
4.3
JDisco
Implementovat simulaˇcn´ı rutiny a nav´ıc jeˇstˇe k´od modelu je dlouhodobˇejˇs´ı z´aleˇzitost. Existuje spoustu simulaˇcn´ıch knihoven1 , povˇetˇsinou jsou vˇsak pouze diskr´etn´ı. Tyto knihovny 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 vydala 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. ych tˇr´ıd pro popis a simulaci kombinovan´ ych model˚ u. Byla JDisco – [6] je bal´ık javov´ 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´ı metody derivatives, 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 od jDisco.Process a 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´ı metody waitUntil. 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 2 zde dˇelat jejich v´ yˇcet. Dokumentaci t´eto knihovny sem pˇridal k programov´e dokumentaci sv´e pr´ace. V´ıce tedy tam.
4.3.1
ˇ ızen´ı simulace R´
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.wait na sebe, zavol´a Object.notify procesu n´ asleduj´ıc´ım v kalend´ aˇri.
1 2
SimPack, JDEVS, pak nˇekolik stejnojmenn´ ych JSim˚ u a JavaSim˚ u resp. se vygeneruje s programovou dokumentac´ı
12
Kapitola 5
N´ avrh a implementace Tato kapitola je zamˇeˇrena na struˇcn´ y popis implementovan´ ych souˇc´ast´ı. Podrobnosti obsahuje 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 ujde spojit. Na obr´azku 5.1 jsou ve vyˇsˇs´ı a pak to budu pracnˇe pˇredˇel´ avat1 , protoˇze to nep˚ 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 modelu. 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´ı2 Context a jeho podrozhran´ı. Jeho zat´ım jedin´a implementace DefaultContext na 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, propojuj´ı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ˇzn ˇuje 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´ azku 5.2 jsou 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 AbstractPath je 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 1
bˇ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 2 Java interfaces – v sekci 4.2
13
GUI / dispatcher high level commands commands
control low level commands
editing state
simulation
structure changes state changes inner model Obr´ azek 5.1: Z´akladn´ı struktura aplikace a tok dat
objects
sim
context
gui
xml
Obr´ azek 5.2: Graf bezprostˇredn´ıch z´avislost´ı bal´ık˚ u
14
struktury, jako napˇr´ıklad neorientovan´ y graf. O tˇechto struktur´ach v´ıce na stranˇe 11. V n´ asleduj´ıc´ıch podkapitol´ ach pop´ıˇsi dalˇs´ı bal´ıky jednotlivˇe.
5.2
S´ıt’ a datov´ y model
ˇ asteˇcnˇe jsem se inspiroval tak´e V t´eto sekci je bl´ıˇze pops´ ana vnitˇrn´ı reprezentace s´ıtˇe. [13] C´ 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´ı 3 nce se samozˇrejmˇe m˚ uˇze nach´azet nejv´ yˇse voln´e buˇ nky na pˇr´ımce mezi nimy. V kaˇzd´e buˇ 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 seg4 ment˚ u , a pouze do tohoto okol´ı lze ke kaˇzd´e dvojici (segment, uzel) lze pˇripojit maxim´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 uˇze vyvolat maxim´ alnˇe jeden vlak. Na obr´ azku 5.3 jsou zn´azornˇeny stavy koleje a co m˚
reserved
command
train command
free
occupied train ˇ Obr´ azek 5.3: Zivotn´ ı cyklus TrackFacility
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 4
Bresenham˚ uv algoritmus slouˇz´ı i k vykreslov´ an´ı
15
5.2.1
Prvky s´ıtˇ e
• Uzly: NodeCell – pˇredpokl´ ad´am, ˇze v kaˇzd´em uzlu je ˇcidlo, ovlivˇ nuj´ıc´ı obsazen´ı napojen´ ych hran. Jeho ˇcinnost je simulov´ana j´ızdou vlaku (viz 5.3.2) Kromˇe v´ yhybky 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´ı.
i f t n e r a c e « » k T i+ (dhES)n(e)dtup()T F rcgisaeSnteU s eScepPlFPoaraotnthm fu tD erq ace» + «in i f t+ t n e r a c e « » k i l F t r a c y ( ) S t t g e a e + l+ h ( ) n g d ( ) S m a p e x d ( ) e n s i f t n e r a c e « » h t P i f t n e r a c e « » h h ( ) S L P t+ t t g e a s a e m a p o r e i f t n e r a c e k l k « » B r a c o T d ( ) S m p e x k i S t r a c o n T k i ( ) S N T t t t h P t g e e r a c e c o n x r+ e r s a v + ( ) t e n e r i l ( ) I E t iequLalsW F t+ t()ithElem s n r e m e n g + l a v i ( ) J t g e o n + t g e d ( ) S (ents) m axpe +TrackBlock() Zakonˇ cen´ı koleje konstantn´ı n´avˇest St˚ uj“ ” • Hrany: TrackBlock Obr´ azek 5.4 zn´azorˇ nuje odvozen´ı bloku od dr´ahy. Jednu z moˇzn´ ych hran pˇredstavuje jednoduch´a kolej SimpleTrackBlock. Je to TrackFacility s jedn´ım odd´ılem. Dalˇs´ımi hranami mohou b´ yt mezistaniˇcn´ı u ´seky: Automatick´ y blok m´ a v´ıce odd´ıl˚ u – viz strana 21
Poloautomatick´ y blok facility, 1 hlavn´ı odd´ıl + 2 pˇredstaniˇcn´ı
Obr´ azek 5.4: Diagram odvozenin dr´ahy
16
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´ı y datov´ y form´at je v z´akladn´ı podobˇe a pˇredstavuje pomoc´ı XML Schema (viz 4.1). Souˇcasn´ skl´ad´an´ı prvk˚ u s´ıtˇe na nejniˇzˇs´ı uˇzivatelem upraviteln´e u ´rovni. 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 abstraktn´ı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ˇzn ˇuje 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 6
pracuj´ıc´ı s hlavn´ımi n´ avˇestidly, protoˇze ostatn´ı jsou uvnitˇr bloku zde se je moˇzn´e vstup odclonit
17
o tu kolej konkurenˇcn´ı boj. Kdo dˇr´ıv pˇrijde na ˇradu, m˚ uˇze vpustit vlak do syst´emu. Nem˚ uˇze se vˇsak st´ at, ˇze to provedou oba najednou nebo pust´ı vlaky proti sobˇe.
5.3.2
J´ızda vlaku
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´ı se Train.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´ asleduj´ı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ˇzn ˇuj´ı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´azku 3.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 rovnice 5.1 a 5.2 pro zrychlen´ı a, rychlost v a dr´ahu s: Z v
=
s
=
a dt
(5.1)
v dt
(5.2)
Z
V´ ypoˇcet zrychlen´ı a v rovnici 5.3 z poˇc´ateˇcn´ı rychlosti v0 , c´ılov´e rychlosti v1 a dr´ahy s pro zrychlov´ an´ı: ∆v = v1 − v0 ∆v(v1 + v0 ) a = 2s
5.4
(5.3)
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 u ´daje odkud, kam – InOut) pomoc´ı gener´atoru s exponenci´ aln´ım rozloˇzen´ım doby mezi jednotliv´ ymi generov´an´ımi. Dˇr´ıve neˇz jsou
18
ˇ ıd´ıc´ı proces iterativnˇe pˇred vloˇzeny do fronty InOut, mˇelo by se pˇredej´ıt zahlcen´ı kolejiˇstˇe. R´ 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´ azku 5.5: u ´seˇcky jsou koleje, jejich spojen´ı jsou v´ yhybky, • je InOut a I 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_do kolej na kter´e se nach´ az´ı konec vlaku, vzd_n´ avˇ estidlo vzd´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.
19
25 20 15 10 5 0 0
5
10
15
20
25
30
35
40
45
Obr´ azek 5.6: Graf rychlosti vlaku pˇri pr˚ ujezdu v´ yhybnou
20
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 u ´rovni zdrojov´ ych k´od˚ u • form´ at dat, kter´ y umoˇzn ˇuje 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ˇzn ˇuje 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 u ´sec´ı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 napevno TrackBlock poskl´adan´ y z nˇekolika odd´ıl˚ u SimpleTrack. 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´ azku 6.1 je zn´azornˇeno chov´an´ı odd´ılu AB. AB by tak´e mˇelo 21
Obr´ azek 6.1: C/E Petriho s´ıt’ odd´ılu v autobloku
b´ yt moˇzn´e vytvoˇrit z postaven´e cesty. D´ale s mezistaniˇcn´ımi u ´seky souvis´ı i pouˇzit´ı dalˇs´ıch 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 aktivity. 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´adat jDisco.Variable. Je moˇzn´e, ˇze kv˚ uli univerz´ aln´ımu ˇreˇsen´ı, bude vyˇzadovat u ´pravy 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˚ usobenou 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. 1
nepr´ azdn´e buˇ nky
22
Rozhran´ı do modelu pro ˇ r´ızen´ı dispeˇ cerem Nav´azat je moˇzn´e na souˇcasnou formalizaci cest, doimplementovat jejich vyhled´av´an´ı. Vytvoˇrit bal´ıˇcek rutin a funkc´ı zastˇreˇsuj´ıc´ı pˇr´ıstup do modelu pro ˇr´ızen´ı z nˇekolika u ´rovn´ı. 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 modulu 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 modelem. 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 zakomponovat 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
Spustil jsem v´ yhybnu bez synchronizace s re´ aln´ ym ˇcasem na 15 minut
23
Literatura [1] Vyhl´ aˇska Ministerstva dopravy, kterou se vyd´av´a dopravn´ı ˇr´ad drah. 1995. URL http://www.mvcr.cz/sbirka/ [2] XML Schema Part 1: Structures Second Edition. web, 2004. URL http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/ [3] JDK 6 Documentation. web, 2006. URL http://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. URL http://www.akira.ruc.dk/~keld/research/JDISCO/ ˇ e Budˇejovice, 2003. [7] HEROUT, P.: Java - bohatstv´ı knihoven. Kopp, Cesk´ [8] NOVOSAD, P.: V´ yukov´ y n´ astroj pro pr´aci s C/E Petriho s´ıtˇemi. In Pedagogick´y software 2006, Zemˇedˇelsk´ a Fakulta, Jihoˇcesk´a Univerzita, 2006, ISBN 80-85645-56-4, s. 247–249. URL http://www.fit.vutbr.cz/research/view_pub.php?id=8103 ´ R.: Java 5.0 – Novinky jazyka a upgrade aplikac´ı. Computer Press [9] PECINOVSKY, Brno, 2005. [10] REKTORYS, K.; kol.: Pˇrehled uˇzit´e matematiky I. - II. Prometheus, 2000. ´ ´ Z.; CE ˇ SKA, ˇ [11] RABOV A, 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] WROBLEWSKI, P.: Algoritmy – Datov´e struktury a programovac´ı techniky. Computer Press Brno, 2004.
24
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ˇzn ˇuj´ıc´ı kontrolovat nˇekolik stanic najednou M&S Modelov´ an´ı a simulace – viz sekce 3.2 PS Petriho s´ıt’ – viz sekce 3.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´ı jazyk v XML pro specifikaci pˇrevodu vstupn´ıho XML na v´ ystupn´ı form´at (v´ıce v [5])
25