我的建議:定義一個distance function,它需要兩名球員的統計數據並返回距離值。既然兩者之間有距離(對應於它們之間的相似度),則可以使用K-means算法查找類似球員的集羣。
對於每個羣集,您可以採取一些值來幫助您計算所謂的「市場價格」(如平均值或中值)。
這裏是你如何能計算兩個玩家之間的距離的功能很簡單的例子:
float distance(Player player1, Player player2){
float distance = 0.0;
distance += abs(player1.strength - player2.strength)/strengthRange;
distance += abs(player1.maxStrength - player2.maxStrength)/maxStrength;
distance += abs(player1.motivation - player2.motivation)/motivationRange;
distance += abs(player1.age - player2.age)/ageRange;
return distance;
}
現在你已經可以應用距離函數的K-means算法:
將每個玩家隨機分配到一個羣集。
現在計算每個羣集的質心。在你的情況下,質心座標將是(力量,最大力量,動機,年齡)。例如,要計算質心強度座標,只需對集羣中所有參與者的強度進行平均。
現在,將每個玩家分配到最近的質心。請注意,在此步驟中,某些玩家可能會更改其羣集。
重複步驟2和3,直到您有所收斂,或者換句話說,直到沒有球員有它的集羣步驟改變現在3
,你有集羣,可以計算出平均價格相似的球員。
我不明白這個問題是如何回答的。事情的「市場價格」不是一堆程序員能夠回答的問題。如果沒有更詳細的環境知識,選擇這個或那個東西是沒有道理的。 – 2009-08-14 14:33:03
您正在使用草率的語言。 「市場價格」意味着某種東西可以在市場上獲得的價格,但你似乎指的是由遊戲引擎組成的數字,意味着什麼。如果你問的是如何根據過去的銷售額來計算實際的市場價格,那麼答案是肯定的,通過四種價值和時間來計算銷售額,然後尋找趨勢。 – Beta 2009-08-14 14:43:21
表中的值與您在問題中給出的值範圍不匹配... – 2009-08-15 21:58:25