質問
私たちのオフィスでは、仕事の後、フーズボールやテーブルサッカーを定期的に楽しんでいます。使用可能なプレーヤーからランダムな2vs2ラインナップを生成し、その後データベースに試合結果を保存する小さなJavaプログラムをまとめました。
結果の現在の予測では、関係する4人のプレーヤーの以前の試合結果すべての単純平均を使用します。これは非常に大まかな見積もりを提供しますが、次のようなことを考慮して、より洗練されたものに置き換えたいと思います。
- プレイヤーは攻撃者としては良いプレイをするかもしれませんが、防御者としては悪い(またはその逆)かもしれません
- プレイヤーは特定の対戦相手に対してうまくやる/他人に対して悪い
- うまく機能するチームもあれば、機能しないチームもあります
- スキルは時間とともに変化します
ゲームの結果をできるだけ正確に予測するための最良のアルゴリズムは何ですか?
このためにニューラルネットワークを使用することを提案しましたが、これは非常に興味深いように思われます...しかし、それが機能するかどうかを判断するためのトピックに関する十分な知識がなく、合理的に訓練するにはゲームが多すぎると思う。
編集:
いくつかのプロジェクトの締め切りのため、これから長い休憩を取らなければなりませんでした。質問をより具体的にするには:
これまでにプレイしたすべてのマッチを含む次のmysqlテーブルを指定します。
table match_result
match_id int pk
match_start datetime
duration int (match length in seconds)
blue_defense int fk to table player
blue_attack int fk to table player
red_defense int fk to table player
red_attack int fk to table player
score_blue int
score_red int
関数predictResult(blueDef、blueAtk、redDef、redAtk)をどのように書きますか{...}
結果を可能な限り厳密に推定し、SQLを実行し、計算を実行し、外部ライブラリを使用しますか?
解決
TrueSkillアルゴリズムを使用します。これは非常に優れています。フーズボールとチェス用に実装しましたが、非常にうまく機能します。同僚たちは、これがほとんど 良いと言っています。
動作の詳細と実装へのリンクについては、" スキルの計算"ブログ投稿。
他のヒント
ニューラルネットを使用する理由統計を使用します。おそらく、各プレーヤー間の相関関係が適切な測定値になります。
始めに、いくつかの情報を収集しましょう。 特定のプレーヤーに必要なもの:
- 彼らがプレイしたポジション
- 最終スコア
優秀な攻撃者はポイントを獲得します。 優れた防御者は、ポイントの獲得を妨げます。
実際の情報は、優れた攻撃者が優れた防御者と対戦することから得られます。
単純ベイズ分類器を適用してみてください。
ベイジアン学習は確率的です に基づくアプローチ の量が 利子は確率によって支配されます 分布とその最適 意思決定は推論によって行うことができます これらの確率について一緒に 観測データ付き。 [ミッチェル、T。 (1997)、機械学習]
同じ正確なプレイヤーの分布は、異なる試合結果をもたらす可能性があります。データにパターン(変数に基づくパターン)がある場合、Naive Bayes分類器は良好な結果を生成する可能性があります。
アルゴリズムはそれほど複雑ではありません。確率についてある程度の知識を持っている人は、&適用します。
侵入検知システムでは、さまざまなネットワークパラメータを調べることにより、ネットワークの異常を判断するために使用されています。ベイジアンアプローチは、特定の種類のデータで非常に成功し、高いTP& FPレートが低い。ただし、データによっては、FPレートが高くなる場合があります。データが最適なアプローチを決定します。
Wekaを使用できます( http://www.cs.waikato。 ac.nz/~ml/weka/ )、データマイニングソフトウェアライブラリ、さまざまなアルゴリズムを試してください。 Naive Bayes分類器が含まれています。 試してみてください。
1つのオプションは、ある種の線形モデルとして点広がりを試して推測することです。 。プレイヤーよりも多くのゲームがある場合、すべてのゲームと結果に対してゲームマトリックス(一方のチームのプレイヤーに+1、もう一方のチームに-1、観客に0)を構築することにより、プレイヤーごとのポイントの最小二乗適合を行うことができますスプレッドのベクトル。