Weryfikacja silnika punktacji

Niezależne porównanie silnika punktacji Flying Start z 75 693 rzeczywistymi wynikami Sailwave z 96 klubów żeglarskich w 10 krajach.

75,693
Porównania
4,144
Wyścigi
96
Kluby
0
Znalezione błędy

Werdykt: gotowy do wdrożenia

W 75 693 indywidualnych porównaniach silnik punktacji Flying Start pokrywa się z Sailwave ze współczynnikiem zgodności 99%. Nie znaleziono żadnych błędów punktacji. Wszystkie rozbieżności tłumaczy jakość danych testowych lub niewielkie różnice zaokrąglania, które nigdy nie wpływają na wyniki.

Spis treści

  1. Metodologia
  2. Podsumowanie wyników
  3. Co testowaliśmy
  4. Źródła danych — 96 klubów, 10 krajów
  5. Analiza rozbieżności
  6. Odkryte osobliwości Sailwave
  7. Ograniczenia i zastrzeżenia
  8. Dane surowe i odtwarzalność

1. Metodologia

Napisaliśmy automatyczny system testowy, który pobiera dane wyników Sailwave, przepuszcza je przez silnik punktacji Flying Start i porównuje każdą obliczoną wartość z tym, co wyprodukowało Sailwave. Test sprawdza trzy rzeczy dla każdego zawodnika w każdym wyścigu:

  1. Czas skorygowany — czy nasz wzór handicapu daje tę samą liczbę sekund?
  2. Pozycja — czy przypisujemy tę samą pozycję na mecie?
  3. Punkty — czy obliczamy ten sam wynik?

Porównanie wykorzystuje dwa tryby weryfikacji:

Głęboka weryfikacja (z czasami rzeczywistymi)

Gdy dane źródłowe zawierają czasy rzeczywiste i ratingi handicapów, przeliczamy czasy skorygowane od podstaw, używając odpowiedniego wzoru (PY, IRC, YTC itp.) i porównujemy z czasami skorygowanymi Sailwave. Waliduje to cały potok: rzeczywisty → skorygowany → pozycja → punkty.

Weryfikacja punktów (bez czasów rzeczywistych)

Gdy dane źródłowe zawierają tylko pozycje i punkty (typowe dla stron podsumowań serii), weryfikujemy, czy mapowanie pozycji na punkty jest zgodne z prawidłowymi zasadami systemu punktacji. Waliduje to przypisywanie punktów karnych, obliczanie punktów bonusowych i punktację SCP.

Jak zbieraliśmy dane

Napisaliśmy skrobak, który systematycznie przeszukiwał publiczny katalog wyników Sailwave, który zawiera opublikowane wyniki z klubów żeglarskich na całym świecie. Dla każdego klubu pobieraliśmy do 40 stron wyników, wyodrębnialiśmy dane zawodników, wyniki wyścigów i kody kar, a następnie konwertowaliśmy je do strukturyzowanego formatu do weryfikacji.

Dla sześciu flot Falmouth Sailing Week 2025 ręcznie zebraliśmy dane z poszczególnych stron wyścigów, które zawierały pełne czasy rzeczywiste i skorygowane, umożliwiając głęboką weryfikację czasu skorygowanego.

2. Podsumowanie wyników

Źródło Pliki Wyścigi Porównania Zgodność Poważne Drobne
Zebrane (96 klubów) 655 4,088 74,391 99% 0 1,068
Falmouth Week (głęboka) 6 56 1,302 99% 3 19
Łącznie 661 4,144 75,693 99% 3 1,087

0 poważnych rozbieżności spowodowanych logiką silnika. Wszystkie 3 poważne rozbieżności to problemy z jakością danych w naszych danych testowych (wyjaśnione szczegółowo poniżej).

3. Co testowaliśmy

Silnik punktacji implementuje następujące funkcje RRS (Przepisy Ścigania). Wszystkie były testowane:

FunkcjaPokrycie
Handicap PY (dinghy, Wielka Brytania)Testowany w ponad 60 klubach w Wielkiej Brytanii
Handicap IRC (jachty międzynarodowe)Testowany z flotami Falmouth Week IRC1/2/3
Handicap YTC (krążowniki, Wielka Brytania)Testowany z flotami Falmouth Week YTCE/YTCQ
Punktacja niskiego punktuTestowany we wszystkich 4 144 wyścigach
Punktacja z punktami bonusowymiTestowany tam, gdzie kluby go stosują
Kary DNS / DNF / DNCTestowane we wszystkich klubach
OCS / DSQ / RET / UFD / BFDTestowane tam, gdzie pojawiają się w wynikach
RRS Przepis A5.3 (opcjonalna punktacja karna)Domyślny dla wszystkich przebiegów testowych — łodzie w obszarze + 1 vs zgłoszenia + 1
SCP (kara punktowa)Testowany tam, gdzie kluby stosują kary procentowe
Profile odrzutówTestowane przez porównanie klasyfikacji serii
Rozstrzyganie remisów RRS Dodatek A8Testowane przez porównanie pozycji w flotach z remisem

4. Źródła danych — 96 klubów, 10 krajów

Celowo testowaliśmy na szerokim zakresie geograficznym i organizacyjnym. Wyścigi klubowe na Solent mają inne cechy niż środowe wieczorne wyścigi na walijskim zbiorniku wodnym czy australijskie mistrzostwa O'pen Skiff. Silnik punktacji musi obsługiwać je wszystkie.

Wielka Brytania (ponad 60 klubów)

Hayling Island SC, Parkstone YC, Poole YC, Warsash SC, Torbay SC, Cardiff Bay YC, Delph SC, Mengeham Rythe SC, Burghfield SC, Oxford SC, Chichester YC, Brancaster Staithe SC, Bexhill SC, Salcombe YC, Paignton SC, Brixham YC, Medway YC, Bartley SC, Northampton SC, Largo Bay SC, RCYC, Ranelagh SC, Twickenham YC, Cambridge YC, Ogston SC, Rutland SC, Bala SC, Maylandsea Bay SC, Royal Lymington YC, Flushing SC, Chase SC, Chipstead SC, Rock SC, BCYC, YDSC oraz wiele stowarzyszeń klasowych (Solo, Osprey, Fireball, 29er, ILCA UK, ITCA, UKWA, Redwings).

Nowa Zelandia (8 klubów)

New Plymouth YC, Nelson YC, Wakatere Boating Club, Lake Taupo YC, NZ Paper Tiger, Yachting NZ.

Australia (6 klubów)

Manly YC, Perth SC, Maroochy, Hobie WA, Lake Cootharaba SC, klasa Open Skiff (mistrzostwa krajowe i stanowe).

Inne kraje

Republika Południowej Afryki (Bloemfontein YC), Szwecja (KSSS), Węgry (wyniki przez hunresults), Portugalia, USA (KHYC — King Harbor YC), Kanada (Whitby YC).

Falmouth Sailing Week 2025

Sześć flot z trasy Bay — IRC 1, IRC 2, IRC 3, YTC Cruiser, YTC Quarter-Tonner i Firebird — z pełnymi czasami rzeczywistymi i skorygowanymi zebranymi z poszczególnych stron wyścigów hostowanych na sailwave.com/results/FSW.

5. Analiza rozbieżności

Spośród 75 693 porównań, 1 090 nie pasowało dokładnie. Poniżej każda kategoria rozbieżności, jej przyczyna i znaczenie.

Poważne rozbieżności (łącznie 3)

Wszystkie trzy to problemy z jakością danych w naszych danych testowych, a nie błędy silnika punktacji.

YTCE Falmouth R4 — Percy (John & Julie Roberts)

Rozbieżność: Punkty — Sailwave podaje 11, Flying Start podaje 8.

Przyczyna źródłowa: Środowy Wyścig Szampański miał 3 gościnne łodzie (Autarky, Infinity, Passion) nienależące do regularnej serii. Nasze zebrane dane XML nie zawierały ich, więc rozmiar floty wynosił 10 zamiast 13. Percy finiszował na 8. miejscu z 10 w naszych danych vs 11. z 13 w danych Sailwave.

Werdykt: Oba silniki punktacji są poprawne. Różnica tkwi w danych wejściowych, nie w obliczeniach.

YTCE Falmouth R4 — Aardvarc (Philip Cook)

Rozbieżność: Punkty — Sailwave podaje 12, Flying Start podaje 9.

Przyczyna źródłowa: Tak jak powyżej. Gościnne łodzie zawyżyły rozmiar floty w danych Sailwave.

YTCQ Falmouth R4 — Tahini (Guy English)

Rozbieżność: Czas skorygowany — Sailwave podaje 1:10:13, Flying Start podaje 1:08:32.

Przyczyna źródłowa: Tahini płynął ze środę z innym ratingiem YTC (1054) niż przez resztę serii (1080). Nasz plik XML używał 1080 dla wszystkich wyścigów. Wzór na czas skorygowany to elapsed × 1000 ÷ rating, więc inny rating = inny czas skorygowany.

Werdykt: Oba wzory są poprawne. Różnica tkwi w danych handicapów, nie w obliczeniach.

Drobne rozbieżności (łącznie 1 087)

Wszystkie 1 087 drobnych rozbieżności dzieli się na dwie kategorie:

Zaokrąglanie czasu skorygowanego (19 rozbieżności)

Różnice 1–3 sekund między Sailwave a Flying Start, spowodowane zaokrąglaniem pośrednim w łańcuchu obliczeń Sailwave. Na przykład czas skorygowany IRC = rzeczywisty × TCC. Jeśli rzeczywisty = 3 428 s i TCC = 1,072:

Wpływ: Żaden. Różnica 1–3 sekund w czasie skorygowanym nigdy nie zmienia pozycji na mecie — łodzie są zazwyczaj oddzielone minutami.

Zaokrąglanie punktów w punktacji bonusowej/SCP (1 068 rozbieżności)

Różnice 0,1–0,3 punktu, gdzie ułamkowe wyniki punktów bonusowych Sailwave lub obliczenia procentowe SCP nieznacznie się różnią. Na przykład 3. miejsce w punktacji bonusowej powinno wynosić dokładnie 5,7, ale niektóre wersje Sailwave wydają się wewnętrznie używać nieco innej precyzji zmiennoprzecinkowej.

Wpływ: Pomijalny. Te ułamkowe różnice nigdy nie zmieniają klasyfikacji, ponieważ są mniejsze niż odstęp między dowolnymi dwiema pozycjami na mecie.

6. Odkryte osobliwości Sailwave

Podczas testowania znaleźliśmy jeden obszar, w którym zachowanie Sailwave jest niespójne między klubami. Nie twierdzimy, że to błąd — może to być celowa opcja konfiguracyjna — ale warto to udokumentować dla oficerów wyścigu migrujących z Sailwave.

TLE (przekroczenie limitu czasu) — niespójna punktacja

Sailwave używa TLE jako kodu kary dla łodzi, które nie ukończyły wyścigu w limicie czasu. Kod ten nie pojawia się w Przepisach Ścigania (RRS). Odpowiednikiem RRS byłoby DNF (nie ukończył).

Odkryliśmy, że Sailwave traktuje TLE niespójnie w różnych klubach:

Flying Start traktuje TLE jako odpowiednik DNF (starters + 1), co odpowiada najczęstszemu zachowaniu Sailwave i jest zgodne z zasadą RRS, że łódź, która startuje, ale nie finiszuje, otrzymuje starters + 1 punktów.

Ta niespójność odpowiada za część naszych drobnych rozbieżności. Jeśli twój klub używa TLE z określonymi zasadami punktacji, daj nam znać a my zapewnimy, że Flying Start będzie zgodny z twoją praktyką.

Nie znaleziono błędów Sailwave

Mimo testowania 4 144 wyścigów nie znaleźliśmy żadnych przypadków, w których Sailwave produkuje nieprawidłowe wyniki zgodnie z przepisami RRS. Wszystkie rozbieżności można wyjaśnić zaokrąglaniem, jakością danych lub opisaną powyżej niejednoznacznością TLE. Sailwave był standardem branżowym przez ponad 20 lat z dobrego powodu — obliczenia są poprawne.

7. Ograniczenia i zastrzeżenia

Czego ten test NIE obejmuje

Zauważamy również, że większość naszych porównań (74 391 z 75 693) to porównania tylko punktów ze stron podsumowań serii. Głęboka weryfikacja czasu skorygowanego obejmuje 1 302 porównania z Falmouth Week. Chętnie skorzystamy z dostępu do większej liczby wydarzeń z opublikowanymi czasami rzeczywistymi i skorygowanymi, aby wzmocnić tę weryfikację.

8. Dane surowe i odtwarzalność

System testowy, zebrane dane i pełne wyniki są opublikowane w dedykowanym repozytorium open-source:

github.com/IDSTUK/SW-FS-Scoring-Engine-Verification
Kod źródłowy silnika punktacji • Weryfikator • System testowy • 1 266 zebranych źródeł danych

ŚcieżkaOpis
scripts/soak-test.tsUruchamiacz testów CLI — parsuje XML, przeprowadza weryfikację, generuje raport
scripts/scrape-sailwave.tsSkrobak stron z wynikami HTML Sailwave
verifier/sailwaveVerifier.tsSilnik porównawczy — przelicza czasy skorygowane, pozycje, punkty
scoring-engine/Sam silnik punktacji — raceScorer, seriesScorer, handicapCalculator, tieBreaker
data/sources.jsonKompletny dziennik wszystkich 1 266 zebranych adresów URL źródłowych
data/soak-results.jsonPełne wyniki testów ze wskaźnikami zgodności dla każdego pliku i szczegółami rozbieżności
REPORT.mdSzczegółowy raport z wyników

Odtwórz test

cd rc-admin npm install npx tsx scripts/scrape-sailwave.ts # zbierz świeże dane npx tsx scripts/soak-test.ts <directory> # uruchom weryfikację

Skrobak respektuje wcześniej zebrane adresy URL (śledzone w sources.json) i będzie pobierał tylko nowe strony. Cały zestaw testów wykonuje się w mniej niż 60 sekund na zebranych danych.

Wszystkie dane wyników Sailwave zostały pobrane z publicznie opublikowanych wyników na sailwave.com/results. Sailwave jest znakiem towarowym Jona Mayalla. Flying Start nie jest powiązany z Sailwave.