イロレーティング計算
K係数32で、レーティング1400の選手が1600の選手に勝つと約24ポイント上がり、相手は同じだけ下がります。両者のレーティング、結果、リーグのK係数を入れるだけで、期待スコアと新しいレーティングが分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
このイロレーティング更新計算では、1試合の結果から両プレイヤーの新しいレートを求められます。それぞれの現在のイロレーティングを入力し、プレイヤーAが勝ったか、引き分けたか、負けたかを選び、リーグやゲームで採用している正のK係数を指定してください。各選手について、期待スコア、実スコア、符号付きのレート変動、新レートが返されます。ランキング処理の検証、変動理由の説明、表計算ソフトに頼らない大会運営の自動化にご利用いただけます。
レートと試合結果を明確に入力してください
まず、試合の直前に確定していた2人のレートを入力してください。プレイヤーAとプレイヤーBは今回の計算だけに使う呼称であり、固定された役割ではありませんので、どちらの選手をどちらに割り当てても構いません。最後に、所属組織のレーティング規則で定められたK係数を指定してください。
値はゼロより大きい必要があります。大きな値ほど1試合による変動が強くなり、小さな値ほど安定します。経験、年齢、大会種別、レート帯、対局数などによって規定が異なるため、この計算機はK係数を自動選択しません。
ご利用の制度で定められた値を使い、後で監査できるよう試合記録と一緒に保存することをお勧めします。レートには任意の有限数を指定できるため、基準点が異なるイロ制度にも対応できます。
期待スコアとレート変動をご確認ください
イロ方式では、最初にレート差を期待スコアへ変換します。この計算機は400ポイント尺度の標準ロジスティック式を使用します。プレイヤーAの期待値は、1を「1に、BとAの差を400で割った値を指数とする10の累乗を加えた数」で割ったものです。
Bにはその補数が割り当てられるため、両者の期待値の合計は1になります。次に実スコアと期待値を比較し、その差にK係数を掛けてレート変動を求めます。本命選手の勝利は予測されていた結果なので、通常の増加は小さくなります。
一方、格下選手が勝つと増加は大きくなります。引き分けでは、低レート側が上がり、高レート側が同じ分だけ下がる場合があります。符号付き変動は互いに反対であり、表示用の丸め前には合計レートが保たれます。
出力には、各選手の旧レート、期待スコア、実スコア、変動量、新レートが含まれます。
運用フローで一貫して更新してください
1試合を処理したら、返された新レートを各選手の次の試合における開始レートとして保存してください。複数の試合を連続して処理する場合は順序が重要です。最初の結果を計算し、該当する記録を更新してから、最新のレートを用いて次の試合を計算します。
大会規則で一括更新が明記されていない限り、古いレートのままラウンド全体を計算しないでください。最終値だけではなく、元のレート、結果、K係数、返された変動を一緒に保存すると、変化の理由を正確に説明できます。本機能が実装するのは一般的な2人用イロ式です。
得失点差、チーム構成、レート下限、暫定ボーナス、休止による減衰、競技団体固有の整数丸めなどの派生規則は含みません。該当する規則がある場合は、この結果を基礎値として使い、文書化した補正を独立したテスト可能な手順で適用してください。
活用例
大会ランキングを更新する
各試合後に規定のK係数を適用し、次のラウンドに備えて両選手の新レートを保存できます。
レーティング実装を検証する
自動テストで、アプリの期待スコアと変動量を決定論的な基準出力と比較できます。
番狂わせの変動を説明する
期待値、実スコア、符号付き変動を示し、格下選手の獲得ポイントが大きい理由を説明できます。
よくある質問
どのイロ計算式を使用していますか?
400ポイント尺度の2人用標準ロジスティック期待値を使い、新レート = 旧レート + K × (実スコア − 期待スコア)で更新します。
引き分けはどのように指定しますか?
resultをdrawにしてください。両者の実スコアは0.5となり、低レート側が上昇し、高レート側が同じ量だけ低下する場合があります。
K係数にゼロや負数を指定できますか?
いいえ。 K係数はゼロより大きい有限数でなければなりません。ゼロまたは負数の場合は入力不正エラーになります。
1回の料金はいくらですか?
同じ決定論的ソルバーによる計算をブラウザでもご利用いただけます。
対戦を計算する順番は関係ありますか?
あります。最初の結果を計算して新しいレーティングを記録し、その最新の値で次の対戦を計算してください。大会のルールでまとめて更新すると決まっていない限り、古い値で1ラウンド分を一度に計算しないでください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/game/elo-rating-update \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"player_a_rating":1600,"player_b_rating":1400,"result":"player_a_win","k_factor":32}'const res = await fetch("https://api.kit.forhosting.com/game/elo-rating-update", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"player_a_rating": 1600,
"player_b_rating": 1400,
"result": "player_a_win",
"k_factor": 32
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/elo-rating-update",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"player_a_rating": 1600,
"player_b_rating": 1400,
"result": "player_a_win",
"k_factor": 32
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/elo-rating-update", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"player_a_rating":1600,"player_b_rating":1400,"result":"player_a_win","k_factor":32}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"player_a_rating":1600,"player_b_rating":1400,"result":"player_a_win","k_factor":32}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/elo-rating-update", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"player_a_rating": 1600,
"player_b_rating": 1400,
"result": "player_a_win",
"k_factor": 32
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.elo_rating_update",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
レートと試合結果を明確に入力してください
次に、プレイヤーAから見た結果を選択します。player_a_winではAが1、Bが0、drawでは両者が0.5、player_b_winでは勝利スコアが逆になります。この視点を明示することで、勝者の情報を別の選手のレートに結び付けてしまう実装上の誤りを防げます。
期待スコアとレート変動をご確認ください
予測可能なJSONと再現可能なテストのため計算済みの小数値は6桁に丸めますが、更新計算そのものは表示用丸めより前に行われます。
運用フローで一貫して更新してください
このエンドポイントは決定論的であり、同じ4つの入力から常に同じJSONが得られます。APIの1リクエストは$0.002で、ブラウザ版も同じ純粋な計算ロジックを使用します。
技術的な質問
新レートは整数に丸められますか?
いいえ。計算フィールドは最大6桁の小数で返されます。競技規則で必要な場合に限り、別の処理で整数に丸めてください。