Metoda COTREC a Junior Development team OSTRAVA

Jmenuji se David Pleva a společně s mými dvěma kamarády, Danielem Slavíkem a Kubou Pryčkem, tvoříme Junior Development team OSTRAVA. Společně jsme se vrhli do, pro nás neznámých, vod předpovědí počasí, predikce srážek z radaru pomocí metody COTREC.

Progress-check porada v Praze

Všechno to začalo na Druhém středoškolském data Hackathonu Moravskoslezského kraje, kde jsme se seznámili s kluky z Meteopressu a vyměnili si kontakty s tím, že si někdy v budoucnu napíšeme a pár týdnů na to jsme se spojili s Kubou Bartelem a dohodli se na spolupráci, při které jsme dostali za úkol naučit se jazyk GO a implementovat metodu COTREC.

Spojení Ostrava — Praha funguje přes Slack skvěle, a proto nám už nic nebrání v implementaci metody COTREC.

V době, kdy píšu tento článek, jsme úspěšně dokončili implementaci prvního stupně jménem „TREC“ a začínáme pracovat na druhém stupni COTREC, který vyhladí a zlepší předpověď vytvořenou metodou TREC. Třetí (a závěrečný) stupeň se nazývá CELLTRACK. Zaměřuje se přímo na bouřková jádra, tedy nejsilnější část bouří, a dokáže předpovídat kam se jednotlivá jádra budou pohybovat.

COTREC

COTREC — porovnání dvou následujících radarových snímků pomocí veličiny vyjadřující podobnost (střední absolutní chyba, korelační koeficient,…) + hlazení pomocí podmínek kontinuity; Mecklenburg 2000, Zgonc and Rakovec 1999

Každý radar ze sebe v určitý čas vysype spousty dat. Pro nás, respektive pro implementaci metody COTREC je důležitá „obrázková škála“ obsahující radarové echo. „Obrázková škála“ je obraz oblačnosti v daném čase nacházející se nad českým územím. Pro nás to je grafický výstup dat, z něhož dokážeme určit předpověď na následujících x desítek minut.

Obrázková škála

TREC

Předpověď vzniká porovnáváním dvou nejnovějších obrázků na základě korelačního koeficientu (lze také využít veličiny jako střední absolutní odchylka, směrodatná odchylka apod.). Začínáme tak, že obraz (RGB) převedeme na doménu obsahující radarové echo (dBZ), díky tomuto kroku můžeme mezi první a druhou doménou hledat vektor posunu — první doména (obrázek) je statický, druhý nad ním posouváme různými směry, dokud hodnota korelačního koeficientu není nejblíže hodnotě 1 — největší možný koeficient. V praxi nikdy nevyjde čistá jednička, pro nás se perfektní koeficient pohybuje kolem 0,8–0,9. Jakmile dospějeme k posunu, který zajistí největší hodnotu korelačního koeficientu, tak si tento posun (vektor) uložíme.

Pro přesnější předpověď je potřeba obrázek rozdělit na menší čtverce a pro ty také hledat vektor posunu. To znamená, že obrázek rozdělíme na počet souměrných čtverců nebo obdélníků, podle toho, co si určíme. Může to být rozdělení na osminy, desetiny, nebo taky poloviny. Tohle rozdělování děláme až do doby, kdy se dalším rozdělením dostaneme s rozměry čtverce nebo obdélníku pod hodnotu 10 km. Pro každý takový čtverec nebo obdélník známe vektor posunu, který v porovnání s totožným čtvercem z prvního obrázku dosahuje nejvyšší možný korelační koeficient. Tyto vektory posunu aplikujeme na jednotlivé čtverce druhého obrázku (v podstatě program najde pro x-tý čtverec vektor posunu vůči korelaci s prvním obrázkem a ten potom sám na sebe aplikuje = předpověď pro daný čtverec).

Může nastat situace, že určitý čtverec, nebo obdélník nebude v žádné korelaci s čtvercem prvním. V tomto případě se čtverci dosadí vektor posunu spočtený pro celou doménu (tzn. defaultní vektor posunu). Takhle algoritmus postupuje s každým čtvercem (podle rozdělení) a aplikuje na něj vektor posunu vůči korelaci toho samého čtverce v obrázku prvním. Tímto máme zajištěnou první část — metodu TREC.

COTREC

Na scénu přichází druhý stupeň — metoda COTREC, který má v předpovědi velice důležitou funkci a je to jeden ze základních kamenů správné předpovědi. Tento algoritmus zajišťuje extrapolaci a shlazení radarového echa. Hlavní myšlenkou je upravit pohybové pole tak, aby byla splněna podmínka kontinuity a zároveň se zachovala co největší podoba s původním pohybovým polem. Ve zkratce — díky této metodě jsme schopni pohlídat určité výchylky — například, kdy x-tý čtverec bude mít úplně jiný vektor posunu než všechny čtverce kolem.

Jazyk Go

Všechno výše zmíněné píšeme v jazyce Go. Tento kompilovaný, jednoduchý a velice rychlý jazyk je výtvorem společnosti Google. Na vývoji tohoto open-source jazyku se zasloužili Robert Griesemer, Rob Pike (podílel se na vývoji jazyka Limbo, UNIX) a Ken Thompson (definoval kódování UTF-8, podílel se na vývoji jazyka B, přímého předchůdce jazyka C). Jelikož jazyk Go je založený na funkcích, tak je velice jednoduchý na naučení a dobře se s ním pracuje. Pro obsáhlejší popis doporučuji se kouknout na stránku root.cz.

Už od začátku (leden 2019) pro nás spolupráce s Meteopressem byla a stále je neskutečná výzva, jelikož to pro nás znamená učení spoustu nových věcí — základy meteorologie, během pár týdnu se naučit programovat úplně v novém jazyce (jazyk Go), pochopit vysokoškolskou matematiku nebo třeba práci v týmu a rozdělování úkolů.

Chtěl bych tímto všem z Meteopressu vyseknout poklonu, za to že se nebáli dát šanci třem sedmnácti letým klukům. Věřím, že pomocí implementace metody COTREC dospějeme ke skvělým výsledkům. Kdo ví, třeba se někdy pomocí metody COTREC bude Česká republika oblékat a prarodiče plánovat svým vnoučatům výlety. :)

--

--