我在尋找一個很好的算法建議。正常化多個來源的成就
我有用戶和成就。用戶創建成就,然後將其提供給其他用戶。與每個成就相關聯的是用戶指定的點值。用戶的總分是他們所有成就的總和。
基本上是:
Achievement :
owner = Alias
points = int
User :
achievements = list(Achievement)
def points() :
sum([achievements.points])
好了,所以這個系統顯然是非常遊戲能。你可以創造許多賬戶,併爲彼此提供大量成就。我試圖通過將點值縮放爲與用戶指定的值不同的值來減少這一點。
- 假設所有的用戶都是誠實的,但他們只是測量困難不同。我應該如何規範點值? AKA一個用戶給每個簡單成就5分,另一個給出10分,我怎樣才能將他們歸一化爲一個值。目標將是一個分佈,其中點與難度成正比。
- 如果一個用戶不擅長判斷分數值,那麼如何根據獲得成就的用戶數量來計算出難度?
- 假設用戶可能主要被劃分成不相交的組,其中一個用戶將成就提供給一組其他用戶。這有助於前兩種算法嗎?例如,用戶A僅向以奇數結尾的用戶提供成就,而用戶B僅向用戶提供以偶數結尾的成就。
- 如果每個人都是惡意的,我有多接近沒有用戶能夠誇大他們的積分值?
注意:給予用戶的質量與他收到多少成就沒有任何關係。許多贈送者只是自己沒有收到任何東西的機器人,但會自動獎勵用戶執行某些操作。
我目前的計劃是這樣的。我有一個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]
。
我的方法和替代建議的任何問題都受到歡迎和讚賞。另外,發佈其他您可以想到我錯過的案例,並將其添加到列表中。謝謝!
謝謝你的迴應。我很樂意做網頁排名的方法,但我的許多用戶只是「機器人」,實際上並沒有取得任何成就。人們建立這些機器人,但並不總是就「容易」的「10分」意味着什麼。我寧願避免對成就進行明確的競標,並讓隱含的特徵成爲價值,因爲我不知道我還沒有多少信任這個社區。鑑於此,我的算法是最好的方法嗎? – 2009-07-13 21:20:35
我對你的描述感到困惑。也就是說,當你說「我獲得了10分/人的成績,而這個成就來自我。」是「我」是指你,網站的所有者,還是指在網站上有帳戶的人? – 2009-07-14 20:25:54