良いアルゴリズムの推奨事項を探しています。
ユーザーと実績があります。ユーザーはアチーブメントを作成し、それを他のユーザーに提供します。各アチーブメントには、ユーザーが指定したポイント値が関連付けられています。ユーザーの合計ポイントは、すべての実績の合計です。
基本的:
Achievement :
owner = Alias
points = int
User :
achievements = list(Achievement)
def points() :
sum([achievements.points])
わかりました、このシステムは明らかに非常にゲーム可能です。多くのアカウントを作成し、お互いにたくさんの成果をあげることができます。ポイント値をユーザーが指定したものとは異なる値にスケーリングすることで、それを少し削減しようとしています。
- すべてのユーザーが正直であると仮定しますが、難しさを異なる方法で評価しているだけです。ポイント値を正規化するにはどうすればよいですか? AKA 1 人のユーザーは簡単な成果ごとに 5 ポイントを与え、別のユーザーは 10 ポイントを与えます。どうすればそれらを 1 つの値に正規化できますか。目標は、ポイントが難易度に比例する分布です。
- ポイント値の判断が苦手なユーザーがいる場合、アチーブメントを獲得したユーザーの数から難易度を割り出すにはどうすればよいですか?
- ユーザーはほとんどがバラバラなグループに分割され、1 人のユーザーが他のユーザーのセット全体に実績を与えることができると仮定します。それは前の 2 つのアルゴリズムに役立ちますか? たとえば、ユーザー A は奇数で終わるユーザーにのみ成果を与え、ユーザー B は偶数で終わるユーザーにのみ成果を与えます。
- 誰もが悪意を持っている場合、ユーザーがポイント値を過大に膨らませることができないようにするには、どれくらい近づくことができますか?
注: ユーザーへの寄付の質は、彼が受け取った実績の数とはまったく関係ありません。多くのギバーは、自分自身は何も受け取っていない単なるボットですが、特定のアクションを実行したユーザーに自動的に報酬を与えます。
私の現在の計画はこのようなものです。私は、私から成果を得た 1 人あたり 10 ポイントの割り当てを持っています。合計 55 人に 10 個の実績を配布した場合、私の割り当ては 550 です。これは、それを取得した人数に基づいて各実績に割り当てられます。分布が[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
各アチーブメントを取得した人である場合、ポイント値は になります[50, 25, 16.6, 12.5, 10, 8.3, 7.1, 6.25, 5.5, 5]
。
私のアプローチと代替の推奨事項に関する問題は大歓迎です。また、私が見逃したと思われる他のケースを投稿してください。リストに追加します. ありがとう!