簡體   English   中英

使用多個數據集來平衡 Python 中的團隊?

[英]Using multiple data sets to balance teams in Python?

我是編碼新手,所以如果我忽略了任何簡單的事情,請原諒。 我正在編寫一個程序來組成四隊,每隊四人。 每個玩家在 11 個不同類別(例如速度、敏捷性、力量等)方面都有一定的分值。 我知道我可以將這些類別平均在一起並平衡它們,但這會使一些團隊在某些類別中嚴重失衡。

我有一個單獨的程序,它接受一組點值,遍歷所有可能的團隊組合,並返回團隊具有最低標准偏差的集合。 我自己也寫了一些代碼來計算每個類別的每個平均得分與該類別的玩家得分之間的差異,以獲得每個類別的每個玩家的得分差異。

但是,我不知道如何使用這些數據來獲得我想要的:團隊平衡每個類別。 我假設最好的方法是,對於每個團隊,最小化每個團隊的集體積分差異的絕對值之和。 我在下面包含了我的代碼的簡化:

d1_game1 = player1_points - average_points # this is repeated for each player and each game
game1Differentials = [d1_game1, d2_game1, d3_game1, ..., d16_game1] # There are 11 of these, one for each category
team1Differential = sum(abs([game1Differentials, game2Differentials, ..., game11Differentials]))

這個 team1Differential 值讓我感到困惑; 我如何獲取球員差異並將其轉換為團隊差異? 我是否必須嘗試所有玩家組合?

values_to_minimize = [team1Differential, team2Differential, team3Differential, team4Differential]

我假設這種方法與我上面鏈接的代碼中的 function 相結合幾乎就可以了,但是如何將其應用於多個指標? 我覺得這是一個我忽略的簡單選項。 這個問題已經困擾我好幾天了,我真的很感激任何幫助。 另外,如果我以錯誤的方式看待這個問題,並且有更簡單的方法來獲得我想要的東西,請告訴我。

你在這里遇到的問題是,當實際操作是 16 選 4 操作時,你正在計算你與所有玩家的差異。 因此,你的實際優化 function 看起來是這樣的:

team1_players = random.sample(players, 4)
skill_1_differential = sum(abs(x.skill_1 - average_skill_1) for x in team1_players)
team_1_differential = sum([skill_1_differential, ..., skill_11_differential])

然后您將為其余每個團隊重復此操作。 在每個團隊的計算之間調用random.sample之前,您必須小心地將玩家從池中“移除”,因為如果不這樣做,您可能會在多個團隊中遇到同一個玩家。 一旦你掌握了所有這些,你就可以總結它們:

balance = team_1_differential + team_2_differential + team_3_differential + team_4_differential

這會給你一個平衡參數。 從這里開始,您可以通過多種方式處理此問題:

  • 最簡單的方法是計算所有可能的團隊組合,但由於有 63,063,000 種獨特的組合,您將需要等待很長時間。
  • 您可以使用隨機算法(例如模擬退火)來選擇將平衡分數降低到最接近零的團隊分配。 這將在合理的時間內為您提供良好但不完美的平衡。
  • 您可以修改玩家的創建方式,以使四名玩家的任意組合大致平衡。 這是最簡單的,但如果您無法控制創建過程,那么這將不起作用。
  • 你可以隨機選擇球隊,讓他們進行實際比賽,給球員打分,贏了就增加,輸了就減少。 完成此操作后,您將可以輕松地通過選擇具有相似分數或平衡分數的球員來創建平衡的團隊。 這仍然是一個背包問題,但要容易得多,因為您將在一個變量而不是十一個變量上進行平衡。 有關詳細信息,請參閱此問題 看起來SabermetricsElo在這里也很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM