Verifikation af pointberegningsmotoren

Uafhængig sammenligning af Flying Starts pointberegningsmotoren mod 75.693 virkelige Sailwave-resultater fra 96 sejlklubber på tværs af 10 lande.

75,693
Sammenligninger
4,144
Løb
96
Klubber
0
Fejl fundet

Dom: Klar til produktion

På tværs af 75.693 individuelle sammenligninger matcher Flying Starts pointberegningsmotoren Sailwave med en 99% overensstemmelsesrate. Nul pointberegningsfejl blev fundet. Alle uoverensstemmelser forklares enten af testdatakvalitet eller mindre afrundingsforskelle, der aldrig påvirker resultater.

Indhold

  1. Metode
  2. Resumé af resultater
  3. Hvad vi testede
  4. Datakilder — 96 klubber, 10 lande
  5. Analyse af uoverensstemmelser
  6. Opdagede Sailwave-særheder
  7. Begrænsninger og forbehold
  8. Rådata og reproducerbarhed

1. Metode

Vi skrev en automatiseret testramme, der tager Sailwave-resultatdata, kører det gennem Flying Starts pointberegningsmotoren og sammenligner hver beregnet værdi mod, hvad Sailwave producerede. Testen kontrollerer tre ting pr. konkurrent pr. løb:

  1. Korrigeret tid — producerer vores handicapformel det samme antal sekunder?
  2. Placering — tildeler vi den samme målgangsplacering?
  3. Point — beregner vi den samme score?

Sammenligningen bruger to verifikationstilstande:

Dyb verifikation (med forløbne tider)

Når kildedata inkluderer forløbne tider og handicapratings, genberegner vi korrigerede tider fra bunden ved hjælp af den passende formel (PY, IRC, YTC, osv.) og sammenligner mod Sailwaves korrigerede tider. Dette validerer hele pipelinen: forløbet → korrigeret → placering → point.

Pointverifikation (uden forløbne tider)

Når kildedata kun inkluderer placeringer og point (almindeligt på serieoversummaringssider), verificerer vi, at placering-til-point-mappingen følger de korrekte pointsystemregler. Dette validerer tildeling af strafpoint, bonuspoint-beregninger og SCP-scoring.

Hvordan vi indsamlede dataene

Vi skrev en scraper, der systematisk gennemsøgte Sailwaves offentlige resultatmappe, der hoster publicerede resultater fra sejlklubber verden over. For hver klub hentede vi op til 40 resultatsider, udtrak konkurrentdata, løbsresultater og strafkoder og konverterede dem til et struktureret format til verifikation.

For seks Falmouth Sailing Week 2025-flåder manuelt skrapede vi individuelle løbssider, der inkluderede fulde forløbne og korrigerede tider, hvilket muliggjorde dyb korrigeret tids-verifikation.

2. Resumé af resultater

Kilde Filer Løb Sammenligninger Match Store Mindre
Skrabet (96 klubber) 655 4,088 74,391 99% 0 1,068
Falmouth Week (dyb) 6 56 1,302 99% 3 19
I alt 661 4,144 75,693 99% 3 1,087

0 store uoverensstemmelser forårsaget af motorlogik. De 3 store uoverensstemmelser er alle datakvalitetsproblemer i vores testdata (forklaret i detaljer nedenfor).

3. Hvad vi testede

Pointberegningsmotoren implementerer følgende RRS (Racing Rules of Sailing)-funktioner. Alle blev afprøvet under test:

FunktionDækning
PY-handicap (UK-joller)Testet på tværs af 60+ UK-klubber
IRC-handicap (internationale yachter)Testet med Falmouth Week IRC1/2/3-flåder
YTC-handicap (UK-krydstogtsbåde)Testet med Falmouth Week YTCE/YTCQ-flåder
Lavpunkt-pointgivningTestet i alle 4.144 løb
Bonuspoint-pointgivningTestet hvor klubber bruger det
DNS / DNF / DNC-straffeTestet på tværs af alle klubber
OCS / DSQ / RET / UFD / BFDTestet hvor de optræder i resultater
RRS Regel A5.3 (valgfri strafpoint-scoring)Standard for alle testkørsler — både ved område + 1 vs. tilmeldte + 1
SCP (pointstraf)Testet hvor klubber anvender procentvise straffe
StrygesystemerTestet via sammenligning af serierangeringer
RRS Tillæg A8 omfartsbedømmelseTestet via planeringssammenligning i ligestillede flåder

4. Datakilder — 96 klubber, 10 lande

Vi testede bevidst på tværs af et bredt geografisk og organisatorisk spektrum. Klubkapsejlads i Solent har forskellige karakteristika sammenlignet med onsdagsaftens kapsejlads på en walisisk reservoir eller et australsk O'pen Skiff-mesterskab. Pointberegningsmotoren skal håndtere dem alle.

Det Forenede Kongerige (60+ klubber)

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 og mange klasseforbund (Solo, Osprey, Fireball, 29er, ILCA UK, ITCA, UKWA, Redwings).

New Zealand (8 klubber)

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

Australien (6 klubber)

Manly YC, Perth SC, Maroochy, Hobie WA, Lake Cootharaba SC, Open Skiff-klasse (nationale og statslige mesterskaber).

Andre lande

Sydafrika (Bloemfontein YC), Sverige (KSSS), Ungarn (resultater via hunresults), Portugal, USA (KHYC — King Harbor YC), Canada (Whitby YC).

Falmouth Sailing Week 2025

Seks flåder fra Bay-banen — IRC 1, IRC 2, IRC 3, YTC Cruiser, YTC Quarter-Tonner og Firebird — med fulde forløbne og korrigerede tider skrabet fra individuelle løbssider hostet på sailwave.com/results/FSW.

5. Analyse af uoverensstemmelser

Af de 75.693 sammenligninger matchede 1.090 ikke præcist. Her er alle kategorier af uoverensstemmelser, hvad der forårsagede dem, og om det har betydning.

Store uoverensstemmelser (3 i alt)

Alle tre er datakvalitetsproblemer i vores testdata, ikke fejl i pointberegningsmotoren.

YTCE Falmouth R4 — Percy (John & Julie Roberts)

Uoverensstemmelse: Point — Sailwave siger 11, Flying Start siger 8.

Grundårsag: Wednesday Champagne Race havde 3 gæstebåde (Autarky, Infinity, Passion), der ikke var i den ordinære serie. Vores skrabede XML inkluderede dem ikke, så flådestørrelsen var 10 i stedet for 13. Percy afsluttede som 8. af 10 i vores data mod 11. af 13 i Sailwaves.

Dom: Begge pointberegningsmotorer er korrekte. Forskellen ligger i inputdataene, ikke beregningen.

YTCE Falmouth R4 — Aardvarc (Philip Cook)

Uoverensstemmelse: Point — Sailwave siger 12, Flying Start siger 9.

Grundårsag: Samme som ovenfor. Gæstebåde oppustede flådestørrelsen i Sailwaves data.

YTCQ Falmouth R4 — Tahini (Guy English)

Uoverensstemmelse: Korrigeret tid — Sailwave siger 1:10:13, Flying Start siger 1:08:32.

Grundårsag: Tahini sejlede med en anden YTC-rating onsdag (1054) end resten af serien (1080). Vores XML brugte 1080 for alle løb. Den korrigerede tidsformel er elapsed × 1000 ÷ rating, så forskellig rating = forskellig korrigeret tid.

Dom: Begge formler er korrekte. Forskellen ligger i handicapdataene, ikke beregningen.

Mindre uoverensstemmelser (1.087 i alt)

Alle 1.087 mindre uoverensstemmelser falder i to kategorier:

Afrunding af korrigeret tid (19 uoverensstemmelser)

Forskelle på 1–3 sekunder mellem Sailwave og Flying Start, forårsaget af mellemliggende afrunding i Sailwaves beregningskæde. For eksempel IRC korrigeret tid = forløbet × TCC. Hvis forløbet = 3.428s og TCC = 1,072:

Indvirkning: Ingen. En 1–3 sekunders forskel i korrigeret tid ændrer aldrig en målgangsplacering — både er typisk adskilt af minutter.

Pointafrunding i bonus/SCP-scoring (1.068 uoverensstemmelser)

Forskelle på 0,1–0,3 point, hvor Sailwaves bonuspoint brøkscorer eller SCP-procentberegninger afviger lidt. For eksempel bør 3. plads i bonuspoint-scoring være præcis 5,7, men nogle Sailwave-versioner ser ud til at bruge lidt anderledes flydende komma-præcision internt.

Indvirkning: Ubetydelig. Disse brøkforskelle ændrer aldrig rangeringer, fordi de er mindre end afstanden mellem to målgangsplaceringer.

6. Opdagede Sailwave-særheder

Under test fandt vi ét område, hvor Sailwaves adfærd er inkonsistent på tværs af klubber. Vi hævder ikke, at dette er en fejl — det kan være en bevidst konfigurationsindstilling — men det er værd at dokumentere for løbsledere, der migrerer fra Sailwave.

TLE (Time Limit Exceeded) — inkonsistent scoring

Sailwave bruger TLE som en strafkode for både, der ikke afslutter inden for tidsgrænsen. Denne kode optræder ikke i Racing Rules of Sailing (RRS). RRS-ækvivalenten ville være DNF (Did Not Finish).

Vi fandt, at Sailwave behandler TLE inkonsistent på tværs af forskellige klubber:

Flying Start behandler TLE som ækvivalent til DNF (starters + 1), hvilket matcher den mest almindelige Sailwave-adfærd og stemmer overens med RRS-princippet om, at en båd, der starter men ikke afslutter, modtager starters + 1 point.

Denne inkonsistens tegner sig for en del af vores mindre uoverensstemmelser. Hvis din klub bruger TLE med specifikke pointregler, bedes du kontakte os og vi vil sikre, at Flying Start matcher din praksis.

Ingen Sailwave-fejl fundet

Trods test af 4.144 løb fandt vi ingen tilfælde, hvor Sailwave producerer forkerte resultater i henhold til RRS-regler. Alle uoverensstemmelser kan forklares med afrunding, datakvalitet eller TLE-tvetydigheden beskrevet ovenfor. Sailwave har været branchestandarden i 20+ år af en god grund — det får matematikken rigtigt.

7. Begrænsninger og forbehold

Hvad denne test IKKE dækker

Vi bemærker også, at størstedelen af vores sammenligninger (74.391 af 75.693) er kun-point sammenligninger fra serieoversummaringssider. Den dybe korrigerede tids-verifikation dækker 1.302 sammenligninger fra Falmouth Week. Vi ville byde adgang til flere stævner med publicerede forløbne og korrigerede tider velkommen for at styrke denne verifikation.

8. Rådata og reproducerbarhed

Testrammerne, skrabede data og fulde resultater er publiceret i et dedikeret open-source-lager:

github.com/IDSTUK/SW-FS-Scoring-Engine-Verification
Kilde til pointberegningsmotoren • Verifikator • Testramme • 1.266 skrabede datakilder

StiBeskrivelse
scripts/soak-test.tsCLI-testkører — analyserer XML, kører verifikation, producerer rapport
scripts/scrape-sailwave.tsWeb-scraper til Sailwave HTML-resultatsider
verifier/sailwaveVerifier.tsSammenligningsmotoren — genberegner korrigerede tider, placeringer, point
scoring-engine/Selve pointberegningsmotoren — raceScorer, seriesScorer, handicapCalculator, tieBreaker
data/sources.jsonKomplet log over alle 1.266 skrabede kilde-URL'er
data/soak-results.jsonFulde testresultater med match-rates pr. fil og detaljer om uoverensstemmelser
REPORT.mdDetaljeret rapport over fund

Reproducér testen

cd rc-admin npm install npx tsx scripts/scrape-sailwave.ts # skrab friske data npx tsx scripts/soak-test.ts <mappe> # kør verifikation

Scraperen respekterer tidligere skrabede URL'er (sporet i sources.json) og vil kun hente nye sider. Hele testpakken kører på under 60 sekunder på de skrabede data.

Alle Sailwave-resultatdata kom fra offentligt publicerede resultater på sailwave.com/results. Sailwave er et varemærke tilhørende Jon Mayall. Flying Start er ikke tilknyttet Sailwave.