[英]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]))
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
這會給你一個平衡參數。 從這里開始,您可以通過多種方式處理此問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.