• No results found

Na obr´azku 6.1 je zn´azornˇen diagram tˇr´ıd pro vyhodnocen´ı libovoln´eho modelu.

Vˇsechny modely implementuj´ı stejnou metodu, proto zde nen´ı nutn´a tak vysok´a m´ıra abstrakce, jako u pˇredeˇsl´ych n´avrh˚u. Tˇr´ıda M odelT estRaceResult pˇredstavuje

v´ysledky z jedin´eho z´avodu, kter´e jsou pops´any v kapitole vyhodnocen´ı z´avodu. Sou-hrnn´e v´ysledky o vybran´em modelu napˇr´ıˇc vˇsemi otestovan´ymi z´avody zpracov´av´a tˇr´ıda M odelT estResult. GeneralM odelT ester pak zaˇstit’uje veˇskerou pr´aci s vyhod-nocen´ım model˚u. Nejprve mu je pˇred´ana reference na konkr´etn´ı model, zad´an sport, kter´y m´a b´yt testov´an a v jak´em ˇcasov´em obdob´ı pomoc´ı T estDataChooseCondition.

Samotn´a tˇr´ıda GeneralM odelT ester implementuje jedinou metodu run z rozhran´ı Runnable, d´ıky kter´e ji lze n´aslednˇe pouˇz´ıt ve spojen´ı s vl´akny. Metoda run naˇcte potˇrebn´e statistiky, otestuje zadan´y model a vypoˇcte vˇsechny zm´ınˇen´e metriky pro jeho vyhodnocen´ı.

Obr´azek 6.1: Diagram tˇr´ıd model˚u

6.2.1 Uˇ zivatelsk´ e rozhran´ı pro testov´ an´ı model˚ u

Tˇr´ıda, kter´a propojuje program´atorsk´y model a pohled, je u testov´an´ı T esterController.

Uˇzivatel si m˚uˇze zvolit rozpˇet´ı data z´avod˚u, nad kter´ym m´a test prob´ıhat. Toto rozpˇet´ı zajiˇst’uj´ı komponenta DateT imeP icker knihovny javafx. Uˇzivateli je rovnˇeˇz pˇredloˇzen seznam vˇsech model˚u a sport˚u, kter´e m˚uˇze otestovat. Realizov´an je po-moc´ı komponent CheckBox.

Po stisku tlaˇc´ıtka test, jsou poˇzadovan´e modely a sporty otestov´any pomoc´ı tˇr´ıdy GeneralM odelT ester. Kaˇzd´y model je pˇridˇelen do samostatn´eho vl´akna. Mezi vˇsechna vl´akna je sd´ılen objekt, kam kaˇzd´e vl´akno zap´ıˇse v´ysledky sv´eho testu.

Pˇr´ıstup k tomuto zdroji lze oznaˇcit za kritickou sekci a je nutno ho synchronizovat, aby nedoˇslo k neoˇcek´avan´e chybˇe. Modely jsou vytvoˇreny pomoc´ı tˇr´ıdy M odelF actory, kter´a vytv´aˇr´ı potˇrebn´e modely. Statistiky obdobnˇe vytv´aˇr´ı tˇr´ıda StatisticsF actory.

Obˇe tˇr´ıdy jsou zaloˇzeny na n´avrhov´em vzoru factory [21].

V´ysledky jsou prezentov´any v tabulk´ach, komponenty T ableV iew, kter´e jsou data pˇred´av´any ve formˇe seznamu podle n´avrhov´eho vzoru observer [22]. V javˇe tento vzor implementuje tˇr´ıda ObservableList. Jsou zobrazov´any jak v´ysledky pro jednotliv´e z´avody, tak i v´ysledky celkov´e. Po vytvoˇren´ı v´ysledk˚u je m˚uˇzeme filtro-vat na z´akladˇe sportovn´ıho odvˇetv´ı, zp˚usobu startu, pohlav´ı, rozpˇet´ı um´ıstˇen´ı, nebo vyb´ırat jen nˇekter´e modely. Filtrov´an´ı prob´ıh´a ze seznamu vˇsech v´ysledk˚u a ta-bulk´am jsou pˇred´any jen vyfiltrovan´e seznamy. Pokud nejsou aktivn´ı ˇz´adn´e filtry, je seznam pˇrekop´ırov´an v origin´aln´ı podobˇe.

Problematick´ym m´ıstem se uk´azalo b´yt testov´an´ı v´ysledn´eho rozdˇelen´ı pravdˇepodobnost´ı, kter´e prob´ıh´a dle vzorc˚u (6.5), (6.6), (6.7). Vzhledem k poˇzadavku filtrovat i tento

test podle z´avodu a um´ıstˇen´ı byla nejprve navrˇzena funkcionalita, kter´a si

po-nech´avala v operaˇcn´ı pamˇeti kaˇzdou predikci (tzn. dvojici hodnot um´ıstˇen´ı a pravdˇepodobnost).

Pro jedin´y cyklistick´y z´avod se vytv´aˇrelo aˇz n2 tˇechto dvojic pro n z´avodn´ık˚u. Po-kud je n´aslednˇe nutn´e testovat souˇcasnˇe k model˚u na m z´avodech, celkov´y poˇcet uchov´avan´ych dvojic se jiˇz rovn´a n2km. U bˇeˇzn´ych poˇc´ıtaˇc˚u m˚uˇze doch´azet operaˇcn´ı pamˇet’. Operaˇcn´ı syst´em si s t´ımto probl´emem um´ı poradit a pouˇz´ıv´a pamˇet’ pevn´eho disku, kter´y je vˇsak pomal´y a doch´az´ı i k v´yrazn´emu poklesu rychlosti v´ypoˇct˚u. Po-kud bychom se chtˇeli vzd´at moˇznosti filtrov´an´ı, bylo by moˇzn´e ukl´adat jen nasˇc´ıtan´e hodnoty ze vzorc˚u (6.5), (6.6), (6.7) u kaˇzd´eho zkouman´eho intervalu. Pro zastou-pen´ı tˇechto hodnot slouˇz´ı tˇr´ıda P robabilityCounter. Filtrovat v´ysledky vˇsak nen´ı potˇreba na z´akladˇe jednotliv´ych z´avodn´ık˚u a tak je moˇzn´e ukl´adat tyto souˇcty hod-not pro kaˇzdou moˇznou pozici v r´amci kaˇzd´eho z´avodu. M´ısto uchov´avan´e dvojice, pracujeme s trojic´ı v podobˇe tˇr´ıdy P robabilityCounter, ale jiˇz si vystaˇc´ıme s nkm tˇechto tˇr´ıd. Pokud u cyklistick´ych z´avod˚u b´yv´a poˇcet z´avodn´ık˚u n = 200, sn´ıˇz´ıme n´aroky na operaˇcn´ı pamˇet’ aˇz 2·2003 -kr´at.

6.2.2 Uˇ zivatelsk´ e rozhran´ı pro predikci v´ ysledk˚ u

Grafick´e rozhran´ı k prezentaci v´ysledk˚u je urˇcen´e jak tv˚urci model˚u, tak ale i bookmakerovi, ˇci bˇeˇznˇejˇs´ımu uˇzivateli. C´ılem je zobrazit uˇzivateli pro vybran´y sport a z´avod kompletn´ı predikci ve srozumiteln´e podobˇe.

Uˇzivatel si nejprve vybere jedno sportovn´ı odvˇetv´ı pomoc´ı ComboBoxu, kam jsou naˇcteny vˇsechny sporty z v´yˇctov´eho typu E Sports. Po zvolen´ı sportu jsou naˇcteny pomoc´ı tov´arny StatisticsF actory veˇsker´e statistiky. Prozat´ım statistiky nejsou nikterak velk´e, aby bylo nutn´e tento krok pˇrehodnocovat a v nejbliˇzˇs´ım v´yvoji programu k tomu jistˇe nedojde.

Po dokonˇcen´ı naˇc´ıt´an´ı statistik se v prav´e ˇc´asti obrazovky zobraz´ı, za pomoc´ı komponenty ListV iew, podle data kon´an´ı vˇsechny dostupn´e z´avody. V prostˇredn´ı ˇc´asti obrazovky jsou k dispozici vˇsichni z´avodn´ıci a jsou seˇrazeni abecednˇe, podle pˇr´ıjmen´ı. V prav´e ˇc´asti je startovn´ı listina, kter´a se objev´ı po kliknut´ı na libovoln´y z´avod. Startovn´ı listinu lze rovnˇeˇz libovolnˇe mˇenit, pomoc´ı n´astroj˚u, kter´e jsou im-plementov´any. Startovn´ı listinu lze jedin´ym tlaˇc´ıtkem celou smazat, nebo smazat libovoln´eho ze z´avodn´ık˚u, kliknut´ım na jeho jm´eno a n´aslednˇe potvrzen´ım tlaˇc´ıtka um´ıstˇen´eho pod seznamem. Se seznamu vˇsech z´avodn´ık˚u pak lze vybrat libovoln´eho z´avodn´ıka a pˇresunout ho do startovn´ı listiny. T´ımto zp˚usobem si uˇzivatel m˚uˇze vy-tvoˇrit libovoln´e startovn´ı pole, pokud jsou potˇrebn´ı z´avodn´ıci v datab´azi. V´ychoz´ı ˇrazen´ı je zajiˇstˇeno datab´az´ı, coˇz je nejrychlejˇs´ı moˇznost, pˇr´ıpadn´e dalˇs´ı ˇrazen´ı ob-star´av´a standardn´ı tˇr´ıda javy T reeSet.

Vˇsech z´avodn´ık˚u je velk´e mnoˇzstv´ı, proto byly vytvoˇreny filtry. Uˇzivatel si m˚uˇze zvolit n´arodnost z´avodn´ıka, v pˇr´ıpadˇe sportu, kde existuj´ı t´ymy i t´ym. Podle tˇechto krit´eri´ı se n´aslednˇe zobraz´ı jen vybran´ı z´avodn´ıci. V´ybˇer je realizov´an s pomoc´ı haˇsovac´ıch map, d´ıky ˇcemuˇz je v´ybˇer velmi rychl´y a nen´ı tak nutn´e proch´azet vˇsechny z´avodn´ıky. Nakonec uˇzivatel vybere konkr´etn´ı model a poˇcet simulac´ı pomoc´ı me-tody Monte-Carlo.

Po odsimulov´an´ı jsou uˇzivateli nab´ıdnuty souhrnn´e v´ysledky predikce. Z´akladn´ı pˇrehled ud´av´a tabulka s pravdˇepodobnostmi um´ıstˇen´ı z´avodn´ık˚u. V kaˇzd´em ˇr´adku je um´ıstˇen jeden z´avodn´ık. Uˇzivatel si m˚uˇze pˇr´at zobrazit libovoln´e um´ıstˇen´ı pro urˇcit´y sport a tak bylo vytvoˇreno pro kaˇzd´y sport zad´av´an´ı poˇzadovan´ych um´ıstˇen´ı, kter´e

se maj´ı ve v´ysledc´ıch objevit. Pro kaˇzd´y sport si lze vybrat libovoln´e um´ıstˇen´ı, kter´e se zad´av´a ve formˇe od, do. Tyto ´udaje jsou ukl´ad´any a naˇc´ıt´any z datab´aze. Proto je tˇreba definici tabulky s pravdˇepodobnostmi z´avodn´ık˚u generovat dynamicky za bˇehu programu.

Kliknut´ım na libovoln´eho z´avodn´ıka, z tabulky s predikc´ı um´ıstˇen´ı, se na grafu zobraz´ı jeho distribuˇcn´ı funkce, v z´avislosti na predikovan´ych um´ıstˇen´ıch. Graf je vytvoˇren s pomoc´ı tˇr´ıdy LineChart knihovny javaF X a v dalˇs´ı tabulce se objev´ı pravdˇepodobnosti, ˇze vybran´y z´avodn´ık poraz´ı konkr´etn´ıho z´avodn´ıka. Vˇsechny ta-bulky, tvoˇren´e pomoc´ı tˇr´ıdy T ableV iew, mohou b´yt ˇrazeny dle libovoln´eho sloupce bez nutnosti psan´ı dalˇs´ıch funkc´ı.