2009-08-14 68 views
2

通常,足球經理遊戲中的玩傢俱有市場價值。經理們根據這些市場價值出售他們的球員。他們認爲:「噢,這個球員價值3萬,所以我會盡力賣給他3,500,000」。經理人遊戲:如何計算市場價值?

所有玩家有三個基本的素質:

  • 強度值(1-99)
  • 最大力量,他們都不能達到(1-99)
  • 動機(1-5)
  • 當前年齡(16-40)

基於這些數值,我計算了此刻的市場價值。但我想根據上一段時間玩家轉移來動態計算市場價值。我怎麼能這樣做?

我有上述的品質和玩家轉移的最後一段時間可供計算。

我怎麼計算它?我是否必須根據品質對最後轉會球員進行分組,並簡單地取平均轉會價格?

我希望你能幫助我。

alt text http://i31.tinypic.com/2iglr3d.png

注:玩家=項目/產品,管理者=用戶

+2

我不明白這個問題是如何回答的。事情的「市場價格」不是一堆程序員能夠回答的問題。如果沒有更詳細的環境知識,選擇這個或那個東西是沒有道理的。 – 2009-08-14 14:33:03

+0

您正在使用草率的語言。 「市場價格」意味着某種東西可以在市場上獲得的價格,但你似乎指的是由遊戲引擎組成的數字,意味着什麼。如果你問的是如何根據過去的銷售額來計算實際的市場價格,那麼答案是肯定的,通過四種價值和時間來計算銷售額,然後尋找趨勢。 – Beta 2009-08-14 14:43:21

+0

表中的值與您在問題中給出的值範圍不匹配... – 2009-08-15 21:58:25

回答

7

我的建議:定義一個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算法:

  1. 將每個玩家隨機分配到一個羣集。

  2. 現在計算每個羣集的質心。在你的情況下,質心座標將是(力量,最大力量,動機,年齡)。例如,要計算質心強度座標,只需對集羣中所有參與者的強度進行平均。

  3. 現在,將每個玩家分配到最近的質心。請注意,在此步驟中,某些玩家可能會更改其羣集。

  4. 重複步驟2和3,直到您有所收斂,或者換句話說,直到沒有球員有它的集羣步驟改變現在3

,你有集羣,可以計算出平均價格相似的球員。

+0

+1好主意______ – 2009-08-15 15:56:34

+0

非常感謝! 「市場價值僅僅是力量,最大力量,動力和年齡相同的球員的所有售價的平均值。」所以我必須編碼一個距離函數,並且給定距離內的所有玩家都去一個組,對嗎?我可以將所有數據填入矩陣嗎?如果我有這些集羣,我只是拿平均價格。 – caw 2009-08-16 11:32:59

+0

非常感謝您的詳細編輯。 :)我還有一些問題:如何決定哪個質心是最近的?正如你所說,質心有4個座標。我應該創建多少個集羣?或者,因爲我重複了這個問題,直到融合? – caw 2009-08-18 18:51:23

0

一件事,你可以做的是看看最近的類似(1)的球員轉會。說出類似球員在2-5周內的所有轉會,然後取其銷售價格的平均值(或中位數或其他計算值)。 (1)您必須以某種方式定義類似的情況,即防守者的防守爲+10,傳球爲+3,年齡爲+2歲。更多的因素給出更精確的結果。

+0

謝謝。取平均值似乎是一個好主意。我在某處讀到:「市場價值僅僅是力量,最大力量,動力和年齡相同的玩家所有售價的平均值。」但我怎麼能編碼這個(例如在PHP中)?我無法對每個組合進行(1)...... – caw 2009-08-16 11:13:44

+0

只需搜索所有屬性爲+ -2的所有玩家並平均其轉讓價格,就可以輕鬆實現這一點。一般來說,另一種做法可能是根據主導能力來調整方差。所以如果玩家最強的統計數字通過,那麼你使用+ -4,+ -3作爲第二強,其餘的使用+ -2。你可以用年齡間隔做同樣的事情,因爲這也會影響價格。您可能希望年輕球員的年齡較小,而不是職業生涯中的球員。 – Runeborg 2009-08-16 16:49:08

+0

你也可以在一個簡單的查詢中簡單地做到這一點:SELECT AVG(transferPrice)FROM轉移WHERE傳遞> @ pass-2 AND傳遞<@ pass + 2 AND ... – Runeborg 2009-08-16 16:51:59

0

或者你可以用一點點經濟學101,並試圖定義基於爲特定玩家的供給和需求:

  • 在具有類似功能的聯盟玩家人數(你可以使用所提到的聚類方法前),這些球員數量「可用」轉移
  • 那些擁有類似能力和團隊的數量是需要這樣的球員

玩家現在有了這些數字,你可以calcu球隊數量延遲供應(可用的轉會球員)和需求(需要這些球員的球隊),並用它來調整基本價格(這可能是您的最後轉會價格或球員的基本價格)上漲或下跌(即更多需求比供應傾向於推高價格,反之亦然)

之後,它成爲談判遊戲,你可以看看一些博弈論文學來解決實際的交換價格。

希望這至少給你一個不同的看法。