1

Elo の評価システムをアイテムに実装することができました。私が比較しているものは実際には問題ではありませんが、例として、ユーザー入力によって主観的に最良の数 (1 | 2 | 3 | 4 | 5、ただし、これは任意の範囲/セットである可能性があります) を見つけようとしているとしましょう。 .

これを行う最も頻繁に実践される方法は、セットの 2 つのランダムな要素を選択し、ユーザーにそのうちの 1 つを選択させることです。これはすべてのものをすべてのものと適切に比較するわけではないことに注意してください。重複した比較が行われる可能性があり、一部の組み合わせは比較されない可能性があります。

私の考えは、比較対象の間のすべての一意の組み合わせを組み合わせテーブルに入力することです (行数: {配列要素の数} 2 / 例: 5 nCr 2 を選択)。A と b は、elo の評価システムのデータを保持するスコア テーブルへの外部キーです。

要素が消えた場合、テーブルを消去できます。新しい要素が追加されると、新しい一連の順列がテーブルに追加されます。

id   a    b
1    1    2
2    1    3
3    1    4
4    1    5
5    2    3

ユーザーには、組み合わせテーブルからランダムに選択された組み合わせが表示されます: ( [...] WHERE NOT id IN (ids of combinations this user has already set a vote for))。何も残っていない場合は、「すべてがすでにすべてと比較されています。{cron_time} 後に戻ってきてください!」というメッセージが表示されます。

ユーザーは、登録なしで比較できる必要があります。プラグ&プレイ。これは、発生する最初の問題の 1 つです。ユニークユーザーを特定するには?セッションは機能しますが、ユーザーが簡単に更新できます。アイデア?

この実装は恐ろしくスケーリングします。新しいユーザーごと (毎日切り捨てられますが、processed_combinations は巨大になる可能性があります) と組み合わせテーブルの両方。確かに、少数のユーザーで 1 と 5 を比較する場合は問題なく機能しますが、1 と 100、または 1000 を比較したい場合はどうでしょうか。

より良い実装のためのあなたのアイデアは何ですか?

4

0 に答える 0