[英]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.