PlayerAgg対応 MVP採点関数仕様

本資料は、既存 PlayerAgg フィールドに対応した「今月のMVP」計算関数の実装仕様です。

1. 対象データ(既存 PlayerAgg

入力: Map<String, PlayerAgg> byPlayerId

PlayerAgg フィールド(抜粋)

2. 出力仕様

typedef MvpScoreBreakdown = ({
  double batting,
  double pitching,
  double fielding,
  double running,
  double total,
});

typedef MvpRankEntry = ({
  String playerId,
  MvpScoreBreakdown score,
});

返却: List<MvpRankEntry>(降順、1〜3位を利用)

3. 計算フロー

  1. 各選手の派生指標を計算
  2. 指標ごとに 0〜100 へ正規化
  3. カテゴリ内重みでカテゴリ点を計算
  4. カテゴリ重みで総合点を計算
  5. 同点時ルールで順位確定

4. 派生指標の定義(PlayerAgg対応)

4.1 打撃

4.2 投手

4.3 守備

4.4 走塁

5. 正規化関数

double minMax(double x, double min, double max) {
  if (max <= min) return 50.0;
  return ((x - min) / (max - min) * 100).clamp(0, 100);
}

double minMaxInverse(double x, double min, double max) {
  if (max <= min) return 50.0;
  return ((max - x) / (max - min) * 100).clamp(0, 100);
}

6. 重み(v1)

6.1 カテゴリ重み(総合)

6.2 カテゴリ内重み

7. 有効データの下限

8. 同点時の順位決定

  1. 出場寄与(pa + pitchingOuts)が大きい選手
  2. 打撃カテゴリ点が高い選手
  3. 守備カテゴリ点が高い選手
  4. playerId 昇順(最終安定化)

9. 推奨関数シグネチャ(Dart)

List<MvpRankEntry> computeMonthlyMvpRankings({
  required Map<String, PlayerAgg> byPlayerId,
  int topN = 3,
});

補助関数

10. 実装時の注意