Files
vkv/resources/docs/EvaluationRuleSet.md
Zdeněk Burda 41e3ce6f25 Initial commit
2026-01-09 21:26:40 +01:00

7.3 KiB

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.