回答:
利用できない場合でも、このようなことは自分で実装するのにそれほど難しくありません。アイデアを提供するためだけの、非常に愚かでシンプルな評価システムの例を次に示します。しかし、実際のEloフォーミュラの使用はそれほど難しいとは思いません。
編集:ここで式で指定されたElo式(フロアを含まない)を使用するように実装を編集します
def get_exp_score_a(rating_a, rating_b):
return 1.0 /(1 + 10**((rating_b - rating_a)/400.0))
def rating_adj(rating, exp_score, score, k=32):
return rating + k * (score - exp_score)
class ChessPlayer(object):
def __init__(self, name, rating):
self.rating = rating
self.name = name
def match(self, other, result):
exp_score_a = get_exp_score_a(self.rating, other.rating)
if result == self.name:
self.rating = rating_adj(self.rating, exp_score_a, 1)
other.rating = rating_adj(other.rating, 1 - exp_score_a, 0)
elif result == other.name:
self.rating = rating_adj(self.rating, exp_score_a, 0)
other.rating = rating_adj(other.rating, 1 - exp_score_a, 1)
elif result == 'Draw':
self.rating = rating_adj(self.rating, exp_score_a, 0.5)
other.rating = rating_adj(other.rating, 1 - exp_score_a, 0.5)
これは次のように機能します。
>>> bob = ChessPlayer('Bob', 1600)
>>> john = ChessPlayer('John', 1900)
>>> bob.rating
1600
>>> john.rating
1900
>>> bob.match(john, 'Bob')
>>> bob.rating
1627.1686541692377
>>> john.rating
1872.8313458307623
>>> mark = ChessPlayer('Mark', 2100)
>>> mark.match(bob, 'Draw')
>>> mark.rating
2085.974306956907
>>> bob.rating
1641.1943472123305
ここに私の元のpython実装があります:
class ChessPlayer(object):
def __init__(self, name, rating):
self.rating = rating
self.name = name
def match(self, other, result):
if result == self.name:
self.rating += 10
other.rating -= 10
elif result == other.name:
self.rating += 10
other.rating -= 10
elif result == 'Draw':
pass
これは次のように機能します。
>>> bob = ChessPlayer('Bob', 1600)
>>> john = ChessPlayer('John', 1900)
>>> bob.match(john, 'Bob')
>>> bob.rating
1610
>>> john.rating
1890
>>> mark = ChessPlayer('Mark', 2100)
>>> mark.match(bob, 'Mark')
>>> mark.rating
2110
>>> bob.rating
1600
>>> mark.match(john, 'Draw')
>>> mark.rating
2110
>>> john.rating
1890
スポーツ、ゲームなどのランキングシステムであるrankadeがニーズに合っているようです。
無料で使用でき、小規模から大規模のプレイヤーグループのランキング(および対戦統計などの統計)を管理するように設計されています。
RankadeはEloを使用しませんが、そのアルゴリズム(reeアルゴリズムと呼ばれます)はより複雑ですが(ここではElo、Glicko、TrueSkillを含む最もよく知られている評価システムの比較)、1対1の試合をプレイする場合はEloに似ていますのみ。
https://www.add-ins.com/free-products/chess-ranking-assistant.htmにある無料のExcelアドインChess Ranking Assistant は、glickoシステムを使用しており、使いやすいようにメニューを駆動しています。チェスクラブ向けに設計されています
まだ誰かがこのようなものを探しているなら、私はかなり簡単なものをここに構築しました:https : //github.com/richardadalton/EloRate
現時点ではそれを自分でホストする必要がありますが、将来的にはホストされたサービスを提供するかもしれません。
-Rd
この種のことを行うために、最近https://sortmatch.caを作成しました。Eloの代わりにGlicko2を使用しますが、効果はほぼ同等です。
カスタムeloランキングを作成し、特定のパラメーターを制御できます。主にビデオゲームコミュニティで使用されますが、ランキングを作成し、あらゆるもののeloレーティングを管理するために実行できます。とても使いやすい。完全な試合履歴を保持し、プレーヤーの履歴、WL、および試合ごとのスコアの変化を個別に確認できます。毎週実行するスマッシュトーナメントに使用しています:http : //elorankings.com/rankings.aspx?id=1
アイルランドのチェス連合は持ってその評価のWebアプリケーションに完全にオープンソースとしてリリースし、それはGitHubの上で利用可能です:https://github.com/ninkibah/icu_ratings_app