私は仮想都市コマースゲーム(Urbien.com)のトーナメントモデルを開発しており、アルゴリズムの提案をいくつか入手したいと思っています。シナリオと現在の「基本的な」実装は次のとおりです。
シナリオ
- エントリは、元のFacemashやPixoto.comのように、デュエルスタイルでペアになっています。
- 「プレーヤー」は、決闘ペアのストリームを取得し、各ペアの勝者を選択する必要があるジャッジです。
- トーナメントは決して終わらない。人々はいつでも新しいエントリーを提出することができ、その日のデータに基づいて日/週/月/ミレニアムの勝者が選ばれる。
解決すべき問題
- 評価アルゴリズム-トーナメントエントリーを評価する方法と、各試合後に評価を調整する方法は?
- ペアリングアルゴリズム-プレーヤーにフィードする次のペアを選択する方法は?
現在のソリューション
- レーティングアルゴリズム-チェスやその他のトーナメントで現在使用されているEloレーティングシステム。
- ペアリングアルゴリズム-現在のアルゴリズムは2つの命令を認識します。
- これまでの決闘が少なかったエントリーに、より多くの決闘を与える
- 同様の評価を持つ人々をより高い確率で一致させる
与えられたもの:
N=トーナメントのエントリーの総数
D=すべてのプレーヤーがこれまでにトーナメントでプレイした決闘の総数
Dx=プレーヤーxがこれまでに持っていた決闘の数
決闘のためにプレーヤーxとyを選択するには、最初に確率でプレーヤーxを選択します。
p(x)=(1-(Dx / D))/ N
次に、次の方法でプレーヤーyを選択します。評価によってプレーヤーを並べ替えます並べ替えられたリストのインデックスjIdxでプレーヤーjを選択する確率を次のようにします。p(j)= ... 0、if(j == x)n * r ^それ以外の場合はabs(jIdx-xIdx)
ここで、0 <r <1は選択する係数であり、nは正規化係数です。
基本的に、xからのいずれかの方向の確率は、合計が1になるように正規化された幾何学的系列を形成します。
懸念
- 決闘の情報価値を最大化する-最低評価のエントリと最高評価のエントリを組み合わせても、有用な情報が得られる可能性はほとんどありません。
- 速度-1つのペアを選択するためだけに大量の計算を実行する必要はありません。1つの代替方法は、新しい決闘を一度に1つずつ選択するのではなく、スイスのペアリングシステムのようなものを使用して、すべてのエントリを一度にペアリングすることです。これには、特定の時間枠で送信されたすべてのエントリがほぼ同じ量の決闘を経験するという欠点(?)があり、これは望ましい場合と望ましくない場合があります。
- 平衡-PixotoのImageDuelアルゴリズムは、エントリが評価をさらに向上させる可能性が低い場合を検出し、それ以降の決闘を減らします。このような検出の利点については議論の余地があります。一方では、エントリの半分を「一時停止」すると、計算を節約できます。一方、評価が確立されたエントリは、初心者の評価を確立するために、新しいエントリと完全に一致する場合があります。
- エントリの数-エントリが数個、たとえば10個しかない場合は、おそらくより単純なアルゴリズムを使用する必要があります。
- 勝ち/負け-プレーヤーの勝ち/負けの比率は、もしあったとしても、次のペアリングにどのように影響しますか?
- ストレージ-各エントリーとトーナメント自体について何を保存しますか?現在保存されているもの:トーナメントエントリー:#これまでの決闘、#勝ち、#負け、レーティングトーナメント:#これまでの決闘、#エントリー