繁体   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