- そして、私たちのうちで一番いいのはテーブルサッカーですか?
- 今は誰と遊びに行きますか?
- 誰が解雇される必要がありますか?
Elo評価システムを使用してこれらの問題を解決した経験は、この記事で検討されます。 リポジトリおよびサイトへのリンクが記事全体に散在します。
会社が小さく、プレーヤーがさらに小さい場合、最高の問題は、数か月ごとに金曜日の夜にトーナメントを開催するだけで決定されます。 <アドバイス>会社を犠牲にして飲む最も豪華な理由</ i >>(経験が浅いため、すぐにはわかりませんでした。最初はそのようにプレーしました。)しかし、会社は成長しており、リーグも成長しています。グループ、それは非常に困難になります。 大きなサッカーテーブルで1晩に15試合をするのは物理的に難しいだけです。
Eloについて
このシステムは、物理学のアメリカの教授であり、チェスのプレイヤーであるArpad Eloによって開発されました。
通常、新しいプレーヤーにはそれぞれ1400のレーティングが付けられます。実際、いくらでもかまいません。 各試合の終わりに、レーティングの一部はあるプレイヤーから別のプレイヤーに移ります。 そして、マイナスにならないようにするために、最初は余裕をもって取られます。
プレイヤーAは、勝利の場合は1ポイント、負けの場合は0、引き分けの場合は0.5ポイントを受け取ると仮定します。 この変数をSaと呼びます。
プレイヤーAがゲームごとに受け取る予想ポイント数(Ea)を紹介します。
Ea = 1 /(1 + 10 ^((Rb-Ra)/ 400))
ここで、RbとRaは、それぞれプレーヤーBとAの現在の評価です。 Eaは間隔(0、1)に属します。
オッズは、評価の差が200ポイントの場合、予想されるポイント数が約0.75になるように選択されます。 次の式により、新しいプレーヤーの評価Aを考慮します。
Ra '= Ra + K *(Sa-Ea)
ここで、Kは係数です。 これは、プレーヤーが1つのゲームで獲得/損失できるレーティングポイントの最大数です。 通常は16です。FIDEでは、プレイヤーのレベルに依存し、10から30まで変化します。
同様に、2番目のプレーヤーRbのレーティングが考慮されます。
明らかに、Ea + Eb = 1、Sa + Sb = 1、したがってRa '-Ra + Rb'-Rb = 0、つまりゼロサムゲームがあります。 フォーミュラから、弱いプレイヤーが強いプレイヤーよりも優れている場合よりも、強いプレイヤーが弱いプレイヤーを倒した場合の評価が少ないことがわかります。
約1年間、この評価を使用しています。 1000試合以上プレイしました。 私の主観的な意見では、評価は現時点でのプレーヤーの配置を非常に正確に反映しています。 たとえば、打撃をマスターしたなど、社内の誰かがより良くプレーし始めるとすぐに、1週間以内にランキングで適切な位置を占めます。
また、1〜2週間で結果が記録されなかった場合も問題ありません。 再開すると、評価はすぐに復元されます。
評価の導入後、ゲーム中の動作が大幅に変更されました。 試合は見事になりました。 以前に、最初にいくつかの目標を逃した場合、この試合をマージして新しい試合を開始する方が簡単でしたが、今では最後まで戦い、インセンティブがあります。 記事の著者は最近1を失いました:6。 そして彼は7:6に勝った。 熱い試合でした。
当然、評価を試してみることにしたとき、最初に求めたのは実装の完成です。 また、多くのオンラインゲームではEloを使用していますが、ゲームの結果を入力するだけの賢明なものは見つかりませんでした。 そのため、金曜日の夜に、Google Dock用のGoogleスクリプトがアップロードされました。
半年前、Asp.Net Coreの動作を確認したかった(当時はRC1だった)。 そして客観的に、Googleスクリプトは長い間欠けていました。 そして、週末がありました。 その結果、評価システムが登場しましたが、これは引き続き正常に使用されています。 気に入っています。 確かですが、残りはそうではないことを恐れるでしょう。
みんなと共有するのは正しいと思う。 ソースはこちらから入手できます 。
MVPだけでなく、明らかに何かが明らかになりました。 現在実装されているものを含む:
- Eloレーティングの計算。
- 追加の統計:勝率、得点/失点、勝ち負けの連続;
- 次の試合で特定のプレイヤーとプレイする際に勝利/敗北の場合に獲得/失われるポイントのカウント。 どういうわけか、今すぐプレイする方が良い相手と計画しなければなりません。
- csvから一致結果をインポートします。 Googleスクリプトから移動しました。
- OAuthサポートによる認証。 これまでのところ、Googleだけで十分です。 しかし、別のシステムを追加することは難しくありません。
- アクセス権の簡素化されたシステム。 リーグを管理し、選手だけを管理できるリーグ管理者がいます。
- 新しいユーザーを招待します。 電子メール通知付き。
- 別のリーグ。 各ユーザーは自分のプライベートリーグを作成できます。プライベートリーグはリーグプレーヤーにのみ表示されます。
- 2つの言語のサポート:英語とロシア語。 私は、アプリケーションのローカライズに長年のアカウントを持っています。 そして、Asp.Net Coreでどのように実装されているかを本当に見たかったのです。
- レスポンシブデザイン。 自然を超えるものはありません。 ただブートストラップ。 電話から結果を簡単に入力するには、
- JavaScriptをオフにして動作するはずです。 もちろん付属の方が便利です。 しかし、MVCのいくつかの機能を見たいという要望があったため、複数ページのアプリケーションを作成しました。
ホスティングの開発中に、Azureを使用しました。 落ち着いていくつかのホスティングに移動することを確認してください。 それで、それを支払っても。 そして、彼は引っ越そうとしました...彼は、最も控えめなオプションのために年間50ドルを払う精神的にさえ準備されました。 しかし、データベースの移行で最初の日にトランスポートした後、プロジェクトがまだ開始されていなかったのは、ホスティング事業者がAsp.Net Coreの準備が整っていないため、Azureに留まらなければならなかったためです。 しかし、そこには値段が大きい。 一方、比較すべきものがありますが、Azureははるかに便利です。
スタートアップ向けのAzureのホスティングに関するHabrの広告を思い出しました。 条件を読みます。 指定されたメールに苦情の手紙を書きました。 そして、プロジェクトはスタートアップサポートプログラムに追加されました。 記事の後に彼らが除外されないことを願っています。 プロジェクトはすべての要件を満たしていると思いますが。 その結果、ホスティングの問題は3年間解決されました! だから誰かがプロジェクトをローカルに展開したくない場合は、私たちに参加して、独自のリーグを作成してください。 その名前はあまり覚えられないことが実験的に確立されました。 そのため、一般的な投票でlearningstreet.ruを使用することにしました。
LearningStreetが選ばれる理由に関する刺激的なストーリー
むかしむかし、私たちの同僚の1人が、誠意をこめて手紙に署名し、冗談を言ってオフィスの住所をラーニングストリート79(教育ストリート)と書いた。 笑った。 そして、文字通り1日後、私は多くの人を友人ではなく「ネガティブな文脈で」「一緒に働く少年たち」と呼びました。 一言一言、ウォールストリートの映画ウルフのヒーローからの引用を思い出しました。「これはウォールストリートです。 ここには友達がいません。」 「これはレニングストリートです。 ここには友達がいません。」 それ以来、世界が私たちのオフィス内で彼にとって不当に残酷であると誰かに思われる場合、レニング・ストリートを思い出します。 それは毎日です。 実際、サッカーのランキングでは、私たちには友人もいませんし、慈悲も期待すべきではありません。
理論的には、誰かがサイトに適したドメイン名のアイデアを持っている場合、それを台無しにすることができます。 いずれかのホスティング事業者にボーナスがあります。
そうそう、私はほとんど忘れていました。 誰が解雇されるべきですか? どうやら私: