172 lines
7.3 KiB
Markdown
172 lines
7.3 KiB
Markdown
# EvaluationRuleSet - pravidla vyhodnocení pro rozhodčí
|
|
|
|
Tento dokument popisuje vyhodnocovací proces a jednotlivá nastavení rulesetu
|
|
(`EvaluationRuleSet`). Slouží jako nápověda a vysvětlení dopadu na
|
|
skóre a výsledky.
|
|
|
|
## Stručný popis vyhodnocovacího procesu
|
|
|
|
1. **Prepare** - příprava běhu, kontrola locku, vyčištění staging tabulek.
|
|
2. **ParseLogs** - parsování EDI souboru, naplnění `logs` a `log_qsos`.
|
|
3. **BuildWorkingSet** - normalizace volacích znaků, lokátorů, příprava `working_qsos`.
|
|
4. **Match** - párování QSO mezi logy, detekce neshod a typy chyb.
|
|
5. **UnpairedClassification** - NIL/NO_COUNTERPART/UNIQUE pro nenapárovaná QSO.
|
|
6. **DuplicateResolution** - výběr přeživších u duplicit podle strategie.
|
|
7. **Score** - bodování, aplikace policy, penalizací a multiplikátorů.
|
|
8. **Aggregate** - součty za log (score, counts), výpočet metrik.
|
|
9. **ApplyLogOverrides** - ruční zásahy do log_results.
|
|
10. **RecalculateRanks** - přepočet pořadí.
|
|
11. **Finalize** - uzavření běhu a uvolnění locku.
|
|
|
|
## Politiky (společné chování)
|
|
|
|
Používané policy hodnoty:
|
|
- **INVALID**: `is_valid=false`, body 0.
|
|
- **ZERO_POINTS**: `is_valid=true`, body 0.
|
|
- **FLAG_ONLY**: `is_valid=true`, body beze změny (jen flag).
|
|
- **PENALTY**: `is_valid=true`, body 0 (u některých chyb body zůstávají) + penalizace.
|
|
|
|
Poznámka: `valid_qso_count` se počítá podle `is_valid`.
|
|
|
|
## Nastavení rulesetu a dopad (kde se uplatňuje)
|
|
|
|
### Skóre a body
|
|
- `scoring_mode` (DISTANCE / FIXED_POINTS): určuje typ bodování.
|
|
Uplatnění: scoring.
|
|
- `points_per_qso`: fixní body za QSO (FIXED_POINTS).
|
|
Uplatnění: scoring.
|
|
- `points_per_km`: body za km (DISTANCE).
|
|
Uplatnění: scoring.
|
|
- `distance_rounding` (FLOOR/ROUND/CEIL): zaokrouhlení vzdálenosti.
|
|
Uplatnění: scoring.
|
|
- `min_distance_km`: minimální vzdálenost pro bodované QSO.
|
|
Uplatnění: scoring.
|
|
|
|
### Multiplikátory
|
|
- `use_multipliers`: zapíná multiplikátory.
|
|
Uplatnění: scoring + agregace.
|
|
- `multiplier_type` (WWL/DXCC/SECTION/COUNTRY/NONE): typ multiplikátoru.
|
|
Uplatnění: scoring + agregace.
|
|
- `multiplier_scope` (PER_BAND/OVERALL): scope multiplikátoru.
|
|
Uplatnění: agregace.
|
|
- `multiplier_source` (VALID_ONLY/ALL_MATCHED): z čeho se počítají.
|
|
Uplatnění: agregace.
|
|
- `wwl_multiplier_level` (LOCATOR_2/4/6): délka WWL multiplikátoru.
|
|
Uplatnění: scoring.
|
|
|
|
### Error policy a penalizace
|
|
- `dup_qso_policy`, `nil_qso_policy`: policy pro DUP/NIL.
|
|
Uplatnění: scoring.
|
|
- `no_counterpart_log_policy`, `not_in_counterpart_log_policy`, `unique_qso_policy`,
|
|
`time_mismatch_policy`: policy pro NIL/UNIQUE/TIME_MISMATCH.
|
|
Uplatnění: scoring.
|
|
- `busted_call_policy`, `busted_exchange_policy`, `busted_serial_policy`,
|
|
`busted_locator_policy`, `busted_rst_policy`: policy pro BUSTED chyby.
|
|
Uplatnění: scoring.
|
|
- `penalty_*_points`: velikost penalizací pro jednotlivé chyby.
|
|
Uplatnění: scoring.
|
|
- `out_of_window_policy`, `penalty_out_of_window_points`: chování mimo časové okno.
|
|
Uplatnění: scoring.
|
|
|
|
### Matching (párování QSO)
|
|
- `time_tolerance_sec`: tolerance času pro match.
|
|
Uplatnění: matching.
|
|
- `allow_time_shift_one_hour`, `time_shift_seconds`: povolený časový posun.
|
|
Uplatnění: matching.
|
|
- `allow_time_mismatch_pairing`, `time_mismatch_max_sec`: párování mimo toleranci.
|
|
Uplatnění: matching.
|
|
- `callsign_normalization` (STRICT/IGNORE_SUFFIX),
|
|
`ignore_slash_part`, `ignore_third_part`,
|
|
`callsign_suffix_max_len`, `callsign_levenshtein_max`:
|
|
normalizace volacích znaků a fuzzy match.
|
|
Uplatnění: matching.
|
|
- `match_tiebreak_order`: pořadí tiebreak kritérií (time_diff, exchange_match, ...).
|
|
Uplatnění: matching (volba nejlepšího kandidáta).
|
|
- `match_require_locator_match`, `match_require_exchange_match`:
|
|
vyžadování shody lokátoru/exchange pro match.
|
|
Uplatnění: matching.
|
|
- `exchange_type`, `exchange_requires_*`, `exchange_pattern`:
|
|
definice a kontrola exchange.
|
|
Uplatnění: matching.
|
|
- `letters_in_rst`, `rst_ignore_third_char`: normalizace RST.
|
|
Uplatnění: matching.
|
|
- `discard_qso_*`: určuje, zda se neshoda označí jako BUSTED a s jakou stranou (RX/TX).
|
|
Uplatnění: matching.
|
|
- `checklog_matching`: zahrnout CHECK logy do matchingu.
|
|
Uplatnění: matching.
|
|
|
|
### Duplicity a unikátní QSO
|
|
- `dupe_scope` (BAND/BAND_MODE): klíč pro duplicity.
|
|
Uplatnění: working set + duplicity.
|
|
- `dup_resolution_strategy`: pořadí pravidel pro výběr přeživších DUP.
|
|
Uplatnění: duplicate resolution.
|
|
- `require_unique_qso`: zapíná detekci UNIQUE.
|
|
Uplatnění: unpaired klasifikace.
|
|
|
|
### DQ limity (log-level)
|
|
- `out_of_window_dq_threshold`: DQ při nadlimitních QSO mimo okno.
|
|
Uplatnění: agregace.
|
|
- `time_diff_dq_threshold_percent`, `time_diff_dq_threshold_sec`: DQ při časovém rozptylu.
|
|
Uplatnění: agregace.
|
|
- `bad_qso_dq_threshold_percent`: DQ při nadlimitním % chybných QSO.
|
|
Uplatnění: agregace.
|
|
|
|
### 6H operating window
|
|
- `operating_window_mode` (NONE/BEST_CONTIGUOUS): zapíná 6H operating window.
|
|
Uplatnění: agregace (vybere nejlepší 6H okno pro log).
|
|
- `operating_window_hours`: délka 6H okna (aktuálně pevně 6 h).
|
|
Uplatnění: agregace.
|
|
- `sixhr_ranking_mode` (IARU/CRK): způsob pořadí pro 6H.
|
|
Uplatnění: přepočet pořadí (IARU = jedna společná 6H tabulka bez SO/MO, CRK = odděleně SO/MO).
|
|
|
|
Poznámka: Pro IARU se 6H okno vybírá jako max. 2 segmenty s pauzou >= 2 h, součet délek <= 6 h.
|
|
|
|
### Options (JSON)
|
|
- `options`: fallback hodnoty, pokud není vyplněn sloupec.
|
|
Uplatnění: napříč matching/scoring (viz metody `getOption`/`get*` v modelu).
|
|
|
|
## Výchozí ruleset (default_vhf_compat)
|
|
|
|
Zdroj: `database/seeders/EvaluationRuleSetSeeder.php`
|
|
|
|
Nastavení (zkrácené na podstatné hodnoty):
|
|
- Profil: **Default VHF (compat)**, permisivní matching.
|
|
- Scoring: `scoring_mode=DISTANCE`, `points_per_qso=1`, `points_per_km=1.0`
|
|
- Multiplikátory: `use_multipliers=false`, `multiplier_type=WWL`
|
|
- Policy:
|
|
- `dup_qso_policy=ZERO_POINTS`
|
|
- `nil_qso_policy=ZERO_POINTS`
|
|
- `no_counterpart_log_policy=FLAG_ONLY`
|
|
- `not_in_counterpart_log_policy=ZERO_POINTS`
|
|
- `unique_qso_policy=FLAG_ONLY`
|
|
- `busted_*_policy=ZERO_POINTS`
|
|
- `time_mismatch_policy=ZERO_POINTS`
|
|
- penalizace vše 0
|
|
- Matching:
|
|
- `time_tolerance_sec=600`
|
|
- `allow_time_shift_one_hour=true`, `time_shift_seconds=3600`
|
|
- `allow_time_mismatch_pairing=false`
|
|
- `callsign_normalization=IGNORE_SUFFIX`
|
|
- `ignore_slash_part=true`, `ignore_third_part=true`
|
|
- `letters_in_rst=false`, `rst_ignore_third_char=true`
|
|
- `match_require_locator_match=false`, `match_require_exchange_match=false`
|
|
- `match_tiebreak_order=[time_diff, exchange_match, locator_match, report_match, log_qso_id]`
|
|
- `discard_qso_rec_diff_*=true`, `discard_qso_sent_diff_*=false`
|
|
- Duplicity:
|
|
- `dupe_scope=BAND`
|
|
- `dup_resolution_strategy=[paired_first, ok_first, earlier_time, lower_id]`
|
|
- Exchange:
|
|
- `exchange_type=SERIAL_WWL`
|
|
- `exchange_requires_wwl=true`, `exchange_requires_serial=true`, `exchange_requires_report=true`
|
|
- DQ limity:
|
|
- `out_of_window_dq_threshold=600`
|
|
- `time_diff_dq_threshold_percent=30`
|
|
- `time_diff_dq_threshold_sec=600`
|
|
- `bad_qso_dq_threshold_percent=30`
|
|
|
|
## Poznámky k interpretaci výsledků
|
|
|
|
- `valid_qso_count` = počet QSO s `is_valid=true`.
|
|
- `discarded_qso_count` = počet QSO s `is_valid=false`.
|
|
- Penalizace se uplatňuje v `penalty_score` a odčítá se od `base_score`.
|