スコアリングエンジン検証

10カ国96のセーリングクラブから75,693件の実際のSailwave結果と照合したFlying Startスコアリングエンジンの独立比較。

75,693
比較件数
4,144
レース
96
クラブ数
0
バグ発見数

評定:本番稼働可能

75,693件の個別比較にわたり、Flying Startスコアリングエンジンは 99%の一致率でSailwaveと一致しています。スコアリングのバグはゼロです。すべての不一致はテストデータの品質、または結果に影響を与えない軽微な丸め誤差によって説明されます。

目次

  1. 方法論
  2. 結果サマリー
  3. テスト対象
  4. データソース — 96クラブ、10カ国
  5. 不一致分析
  6. 発見されたSailwaveの特性
  7. 制限事項と注意点
  8. 生データと再現性

1. 方法論

Sailwaveの結果データを取得し、Flying Startのスコアリングエンジンを通じて処理し、計算されたすべての値をSailwaveが生成した値と比較する自動テストハーネスを作成しました。テストはレースごと、競技者ごとに3つの項目を確認します:

  1. 修正タイム — ハンディキャップ計算式が同じ秒数を生成しているか?
  2. 順位 — 同じフィニッシュ順位を割り当てているか?
  3. ポイント — 同じスコアを計算しているか?

比較には2つの検証モードを使用しています:

詳細検証(経過時間あり)

ソースデータに経過時間とハンディキャップレーティングが含まれる場合、適切な計算式(PY、IRC、YTCなど)を使用して修正タイムをゼロから再計算し、Sailwaveの修正タイムと比較します。これによりパイプライン全体を検証します:経過 → 修正 → 順位 → ポイント。

ポイント検証(経過時間なし)

ソースデータに順位とポイントのみが含まれる場合(シリーズサマリーページで一般的)、順位からポイントへのマッピングが正しいスコアリングシステムの規則に従っているかを検証します。これによりペナルティポイントの割り当て、ボーナスポイントの計算、SCPスコアリングを検証します。

データ収集方法

体系的に Sailwave公開結果ディレクトリをクロールするスクレーパーを作成しました。世界中のセーリングクラブの公開結果をホストしているこのディレクトリから、各クラブの最大40ページの結果を取得し、競技者データ、レース結果、ペナルティコードを抽出し、検証用の構造化フォーマットに変換しました。

Falmouth Sailing Week 2025の6つのフリートについては、完全な経過時間と修正タイムを含む個別のレースページを手動でスクレイピングし、修正タイムの詳細検証を可能にしました。

2. 結果サマリー

ソース ファイル数 レース 比較件数 一致 重大 軽微
スクレイピング(96クラブ) 655 4,088 74,391 99% 0 1,068
Falmouth Week(詳細) 6 56 1,302 99% 3 19
合計 661 4,144 75,693 99% 3 1,087

エンジンロジックによる重大な不一致:0件。 3件の重大な不一致はすべてテストデータのデータ品質の問題です(以下で詳しく説明)。

3. テスト対象

スコアリングエンジンは以下のRRS(セーリング競技規則)機能を実装しています。テスト中にすべてが確認されました:

機能カバレッジ
PYハンディキャップ(英国ディンギー)60以上の英国クラブでテスト済み
IRCハンディキャップ(国際ヨット)Falmouth Week IRC1/2/3フリートでテスト済み
YTCハンディキャップ(英国クルーザー)Falmouth Week YTCE/YTCQフリートでテスト済み
ローポイントスコアリング全4,144レースでテスト済み
ボーナスポイントスコアリングクラブが使用している場合にテスト済み
DNS / DNF / DNCペナルティすべてのクラブでテスト済み
OCS / DSQ / RET / UFD / BFD結果に現れる場合にテスト済み
RRS規則A5.3(オプションのペナルティスコアリング)すべてのテスト実行のデフォルト — エリアのボート数 + 1 vs エントリー数 + 1
SCP(スコアリングペナルティ)クラブがパーセンテージペナルティを適用する場合にテスト済み
破棄プロファイルシリーズ順位比較によりテスト済み
RRS附属書A8同点決定同点フリートでの順位比較によりテスト済み

4. データソース — 96クラブ、10カ国

意図的に広範な地理的・組織的範囲でテストしました。ソレントのクラブレースはウェールズの貯水池での水曜夕方レースやオーストラリアのO'pen Skiff選手権とは異なる特性を持っています。スコアリングエンジンはそのすべてに対応できなければなりません。

英国(60以上のクラブ)

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、および多数のクラス協会(Solo、Osprey、Fireball、29er、ILCA UK、ITCA、UKWA、Redwings)。

ニュージーランド(8クラブ)

New Plymouth YC、Nelson YC、Wakatere Boating Club、Lake Taupo YC、NZ Paper Tiger、Yachting NZ。

オーストラリア(6クラブ)

Manly YC、Perth SC、Maroochy、Hobie WA、Lake Cootharaba SC、Open Skiffクラス(全国・州選手権)。

その他の国々

南アフリカ(Bloemfontein YC)、スウェーデン(KSSS)、ハンガリー(hunresults経由の結果)、ポルトガル、アメリカ(KHYC — King Harbor YC)、カナダ(Whitby YC)。

Falmouth Sailing Week 2025

ベイコースの6つのフリート(IRC 1、IRC 2、IRC 3、YTCクルーザー、YTC Quarter-Tonner、Firebird)— 完全な経過時間と修正タイムを各レースページからスクレイピング。ページはこちらでホスト: sailwave.com/results/FSW.

5. 不一致分析

75,693件の比較のうち、1,090件が完全に一致しませんでした。不一致のすべてのカテゴリー、原因、影響の有無を以下に示します。

重大な不一致(合計3件)

3件すべてはスコアリングエンジンのバグではなく、テストデータのデータ品質の問題です。

YTCE Falmouth R4 — Percy(John & Julie Roberts)

不一致: ポイント — Sailwaveは11、Flying Startは8。

根本原因: 水曜日のChampagne Raceには通常のシリーズにない3艇のゲストボート(Autarky、Infinity、Passion)が参加していました。スクレイピングしたXMLに含まれていなかったため、フリートサイズが13ではなく10になりました。当社のデータではPercyは10艇中8位でしたが、Sailwaveでは13艇中11位でした。

評定: 両方のスコアリングエンジンは正しいです。違いは計算ではなく入力データにあります。

YTCE Falmouth R4 — Aardvarc(Philip Cook)

不一致: ポイント — Sailwaveは12、Flying Startは9。

根本原因: 上記と同じです。ゲストボートがSailwaveのデータのフリートサイズを膨らませました。

YTCQ Falmouth R4 — Tahini(Guy English)

不一致: 修正タイム — Sailwaveは1:10:13、Flying Startは1:08:32。

根本原因: Tahiniは水曜日(1054)にシリーズの他のレース(1080)とは異なるYTCレーティングで出走しました。当社のXMLはすべてのレースに1080を使用しました。修正タイム計算式は elapsed × 1000 ÷ ratingのため、異なるレーティング = 異なる修正タイムになります。

評定: 両方の計算式は正しいです。違いは計算ではなくハンディキャップデータにあります。

軽微な不一致(合計1,087件)

1,087件の軽微な不一致はすべて2つのカテゴリーに分類されます:

修正タイムの丸め(19件の不一致)

SailwaveとFlying Startの1〜3秒の差異で、Sailwaveの計算チェーンにおける中間丸めが原因です。例えば、IRC修正タイム = 経過 × TCC。経過 = 3,428秒、TCC = 1.072の場合:

影響: なし。修正タイムの1〜3秒の差は決してフィニッシュ順位を変えません — ボートは通常数分差で分かれています。

ボーナス/SCPスコアリングのポイント丸め(1,068件の不一致)

Sailwaveのボーナスポイントの小数スコアまたはSCPパーセンテージ計算がわずかに異なる場合の0.1〜0.3ポイントの差異です。例えば、ボーナスポイントスコアリングの3位は正確に5.7であるべきですが、一部のSailwaveバージョンでは内部的にわずかに異なる浮動小数点精度を使用しているようです。

影響: 無視できる程度。これらの小数の差は、どの2つのフィニッシュ順位の差よりも小さいため、順位を変えることはありません。

6. 発見されたSailwaveの特性

テスト中に、Sailwaveの動作がクラブ間で一貫しない領域が1つ見つかりました。これがバグだと主張しているわけではありません — 意図的な設定オプションである可能性があります — しかし、Sailwaveから移行するレースオフィサーのために記録する価値があります。

TLE(制限時間超過)— 一貫性のないスコアリング

Sailwaveは TLE を制限時間内にフィニッシュしなかったボートのペナルティコードとして使用します。このコードはセーリング競技規則(RRS)には存在しません。RRSの同等コードはDNF(フィニッシュせず)です。

Sailwaveが異なるクラブ間でTLEを一貫性なく扱っていることが分かりました:

Flying StartはTLEをDNFと同等(starters + 1)として扱います。これは最も一般的なSailwaveの動作に一致し、スタートしたがフィニッシュしなかったボートが starters + 1 ポイントを受け取るというRRSの原則に沿っています。

この一貫性のなさが軽微な不一致の一部を占めています。クラブが特定のスコアリング規則でTLEを使用している場合は、 お知らせください 。Flying Startがクラブの慣行に合致するようにします。

Sailwaveのバグは見つからず

4,144レースをテストしましたが、SailwaveがRRS規則に従って誤った結果を生成するケースは見つかりませんでした。すべての不一致は丸め、データ品質、または上記のTLEの曖昧さで説明できます。Sailwaveが20年以上業界標準であり続けているのには理由があります — 数学を正しく処理しているからです。

7. 制限事項と注意点

このテストがカバーしないもの

比較の大部分(75,693件中74,391件)はシリーズサマリーページからのポイントのみの比較であることも指摘しておきます。修正タイムの詳細検証はFalmouth Weekからの1,302件の比較をカバーしています。この検証を強化するために、経過時間と修正タイムが公開されているより多くのイベントへのアクセスを歓迎します。

8. 生データと再現性

テストハーネス、スクレイピングデータ、完全な結果が専用のオープンソースリポジトリに公開されています:

github.com/IDSTUK/SW-FS-Scoring-Engine-Verification
スコアリングエンジンソース • 検証ツール • テストハーネス • 1,266のスクレイピングデータソース

パス説明
scripts/soak-test.tsCLIテストランナー — XMLを解析し、検証を実行し、レポートを生成します
scripts/scrape-sailwave.tsSailwave HTML結果ページ用ウェブスクレーパー
verifier/sailwaveVerifier.ts比較エンジン — 修正タイム、順位、ポイントを再計算します
scoring-engine/スコアリングエンジン本体 — raceScorer、seriesScorer、handicapCalculator、tieBreaker
data/sources.json1,266のスクレイピングソースURLの完全ログ
data/soak-results.jsonファイルごとの一致率と不一致の詳細を含む完全なテスト結果
REPORT.md詳細な調査結果レポート

テストを再現する

cd rc-admin npm install npx tsx scripts/scrape-sailwave.ts # 新鮮なデータをスクレイピング npx tsx scripts/soak-test.ts <directory> # 検証を実行

スクレーパーは以前にスクレイピングされたURLを尊重します( sources.jsonで追跡)。新しいページのみを取得します。テストスイート全体はスクレイピングデータで60秒以内に実行されます。

すべてのSailwave結果データは公開されている結果から取得しました: sailwave.com/results。SailwaveはJon Mayallの商標です。Flying StartはSailwaveと提携していません。