|
Autorské riešenie
[stiahni py]
-
Počet riešiteľov: 7 / 7 = 100 %
-
Úspešnosť riešenia: 3,32 / 7 = 47,44%
Cieľom úlohy bolo vytvoriť funkciu predpoveď, ktorá na základe histórie meraní prietoku vody a maximálneho
bezpečného prietoku na danom úseku rieky určí predpoveď na nasledujúcu hodinu. Výsledná predpoveď pre obyvateľov obsahuje:
-
hydrologický stupeň situácie (normál, bdelosť, výstraha alebo záplava),
- a informáciu o trende vývoja prietoku vody (či stúpa, klesá alebo je ustálený).
1. Výber hodnôt pre predikciu
Predpoveď sa vypočítava z priemerných zmien za posledných 9 hodín. Program preto najprv zo
zoznamu nameraných prietokov vyberie posledných maximálne 10 hodnôt (aby sme získali najviac 9 zmien).
Ošetrenie nedostatku údajov: Ak je k dispozícii menej hodnôt (napríklad na začiatku merania), zadanie vyžaduje, aby sa použili všetky dostupné údaje. V kóde je to vyriešené pomocou rezu (slicingu) [-10:], ktorý automaticky zoberie celý zoznam bez toho, aby program spadol na
chybe.
2. Výpočet hodinových zmien a trendu
Následne program prechádza vybrané hodnoty a vypočíta rozdiel medzi každými dvoma po sebe idúcimi meraniami.
Z týchto hodnôt určí priemernú zmenu prietoku za jednu hodinu:
priemerna_zmena = sum(zmeny) / len(zmeny)
Smer vývoja sa vyhodnotí nasledovne:
- stúpa: ak je priemerná zmena väčšia ako 0,
- klesá: ak je priemerná zmena menšia ako 0,
- ustálený: ak je priemerná zmena presne rovná 0.
3. Výpočet predpovedaného prietoku
Predpoveď prietoku na nasledujúcu hodinu sa vypočíta tak,
že sa zistená priemerná zmena pripočíta k poslednému reálne nameranému prietoku v zozname:
predpovedany_prietok = posledny_prietok + priemerna_zmena
4. Určenie hydrologického stupňa
Vypočítaný predpovedaný prietok sa porovná s percentuálnymi hranicami maximálneho bezpečného prietoku a priradí sa príslušný stupeň:
- normál: do 50 % maximálneho bezpečného prietoku,
- bdelosť: nad 50 % do 80 % maximálneho bezpečného prietoku,
- výstraha: nad 80 % do 100 % maximálneho bezpečného prietoku
- záplava: nad 100 % maximálneho bezpečného prietoku
5. Výstup
Funkcia vracia dvojicu hodnôt obsahujúcu predpovedaný stupeň a smer zmeny prietoku:
return stupen, zmena_text
Celkový výsledok je teda dvojica dvoch textových hodnôt.
Aby bolo riešenie názorne ukázané, kód obsahuje aj testovacie scenáre (prudký nárast s hrozbou záplavy,
klesajúci trend alebo ustálený stav), ktoré overujú správnosť algoritmu pri rôznom počte vstupných údajov.
Vaše zaujímavé riešenia a najčastejšie chyby
Úlohu sa podarilo temer kompletne vyriešiť iba jednému súťažnému tímu, avšak aj v tomto riešení bola chybička,
že funkcia nevracia hodnoty, ale ich len priamo vypíše. Je dobrou programátorskou praxou vracať tzv. návratové hodnoty, ktoré môžu
byť ďalej v kóde použité.
Taktiež sa stávalo, že funkcia síce pracovala výborne, ale len pre zoznamy s min. 10 meraniami. Pre kratšie zoznamy padala do kritickej
chyby a nedokázala pokračovať.
Niektoré riešenia nevyhodnocovali stupeň ohrozenia a trend/predikciu zmeny prietoku, len vypočítavali samotnú hodnotu predikovaného prietoku.
Taktiež sa vyskytovali logické chyby, ktoré viedli k nesprávnemu výpočtu samotnej predikcie, nakoľko nepracovali s hodinovými ZMENAMI prietoku, ale s hodnotami
prietoku, čo sa premietlo do nesprávnych predikcií stupňa a zmeny prietoku.
|