根据历史划分公平团队的策略/算法


20

我们是一群定期打地板球的人。每节课都是从划分团队的艰巨任务开始的。

那么,有什么比自动选择团队更好的选择呢?

因此,鉴于团队组合和结果的历史记录,以及参加此特定会议的人员列表,找到最佳团队的最佳策略是什么?最佳来说,我指的是尽可能多的团队。

有任何想法吗?

编辑:为了清楚起见,我必须根据其选择的数据将是这样的:

[{ team1: ["playerA", "playerB", "playerC"],
   team2: ["playerD", "playerE", "playerF"],
   goals_team1: 10,
   goals_team2:  8 
 },
 { team1: ["playerD", "playerB", "playerC"],
   team2: ["playerA", "playerE", "playerG"],
   goals_team1:  2,
   goals_team2:  5
 },
 { team1: ["playerD", "playerB", "playerF"],
   team2: ["playerA", "playerE", "playerC"],
   goals_team1:  4,
   goals_team2:  2
 }]

4
什么是地板球?
动态

1
我假设您只有团队得分,而没有个人贡献得分?
Gort机器人2012年

1
@Dynamic:我想这是地板曲棍球的另一个名字-曲棍球是在体育馆的地板上打着一个小橡胶球,而不是在冰上打球(当然也没有溜冰鞋)。
FrustratedWithFormsDesigner 2012年

2
您可能需要澄清的是,此算法中要使用的唯一信息是每个球员参加过多少支赢/输球队。
–'TehShrike

2
@TehShrike对于每场比赛,我都有谁在哪支球队踢球以及最终得分是多少的信息。例如。{Team1:[“ a”,“ b”,“ c”],Team2:[“ d”,“ e”,“ f”],得分:“ 10-5”}
Vegar 2012年

Answers:


6

首先要考虑的是,这是一个随便的东西。它不是在设计一种系统来确定世界杯地板球的回合数。它适合一群人玩的很好的游戏,而不是不公平的胜利。

我还记得Google的桌上足球赔率生成器。在此方面所做的工作比我在此方面做的要多得多。为此,我找了一篇文章,找到了一篇文章,以及Microsoft用于xboxTrue Skill计算器。

采用一种更为简单的方法,每个球员都获得了球队在比赛中得分的比例得分。对于游戏1,玩家A将获得1.25(10/8),而玩家D将获得0.8分(8/10)。找出所有数字的均值,即玩家的分数。

对于所描述的游戏,这提供了:

  A 1.42
  B 1.22
  C 0.72
  D 1.07
  E 1.27
  F 1.40
  G 2.50

此时,您会遇到类似于分区问题的问题,即每个团队需要相同数量的球员,并且值不必精确(但要尽可能接近)。


相同数量的玩家,或者如果显示为奇数玩家,则保持接近;-)
Vegar 2012年

感谢您参考分区问题!你摇滚,@ user40980
埃里克·

3

快速而肮脏的方法:

计算每个玩家的分数,该分数是该玩家所在侧的总分除以他们参与的每个游戏的游戏总分。然后按分数对玩家进行排序。将第一个球员放到团队A中。然后,将每个球员的总得分加到最低,直到一半的球员加入一个球队。剩下的所有球员都加入另一支球队。


即使给定的人员组合是全新的,此方法也可能有效。
Vegar

做得更好看起来像背包问题的一个变种。权重可能也很重要-我记得的方式,最重的球员(我)总是最后被选中。
2012年

众所周知,这种贪婪方法会为最佳解
Radek 2012年

3

如果您不想深入了解贝叶斯先验(pdf)的令人头疼的世界,一种有趣的方法是将总订单分配给所有玩家(基于赢/输比,累积积分等),然后分为使用奇偶校验功能的团队如下。

采取排序的球员列表(从最好到最差),并根据他们索引中的1位数字(从0开始)将他们分为偶数和奇数球队。给出以下分布:

  • 0000(最佳)-偶数
  • 0001-奇数
  • 0010-奇数
  • 0011-偶数
  • 0100-奇数
  • 0101-偶数
  • 0110-偶数
  • 0111-奇数

...等等。

奇偶校验功能将确保每支球队中有相等数量的球员,而对于任何偶数的球员。然后,它将交替使用奇数编号的玩家的优势给一个团队或另一个团队,以使效果随着时间的推移趋于平衡。

当玩家技能分布平坦时,此功能最有效。实际上,玩家的技能倾向于遵循“随机值之和”分布,也就是高斯分布(尽管要提防这一假设在诸如TruSkill之类的系统中的广泛应用)。

为了弥补较大的技能差距,您可以将排列应用于此列表。例如,要对付非常强大的顶级玩家0000,您可以将排名0011的玩家与排名较低的奇数玩家(例如0100)进行交换。需要对绝对技能的准确度量,而仅仅是基于相对技能的排序。


2

根据您的时间长短,通过随机选择队长开始前几节,并在每场比赛前都有草稿。跟踪玩家选哪个。较早的选择会获得更高的评分:

Round #1 = 8 pts, Round #2 = 6 pts, Round #3 = 4 pts, etc

Winning a game = 5 pts

所有这些将取决于每个团队的球员人数。如果参与差异很大,则可能需要将总积分转换为每日或游戏平均值。您也可以授予球队更大的胜利余地。

较早被选中并在获胜球队中踢球的球员获得最多的积分。

然后让计算机通过平衡每个团队的功率点并将彼此具有几乎相等的评级的团队进行起草(团队选择)。较早入选但继续在失败的球队中比赛的球员的排名将会下降。


好答案!这可以为普通团队工作,但有些团队具有战略意义。例如,如果您希望整个团队都成为防守者,那么在更高级别的比赛中您将拥有更差的整体球员。但是,我想我并没有要求规范的:P。谢谢!
2012年

这是一个很好的起点。在前几轮中,基于团队得分的任何事情都不会单独应用,因为您将在每一轮中都有团队成员一起比赛。

1

最简单的解决方案是提供估计技能的等级/权重,并尝试平衡每个团队的得分。

从那里,您可以使用这些值播种贝叶斯网络,然后根据您所拥有的历史数据中每个对位的观察结果进行反向推断。

作为我的兴趣点:Infer.NET使这一点相对容易设想和实现,并且可以预测在团队对决的情况下获胜的几率。Infer.NET是我最近真正开始接触的东西。


假设只有少数几个游戏,您是否有足够有意义的数据?
Gort机器人

我希望用javascript或ruby解决此问题,但是infer.net看起来仍然很有趣。
Vegar

@StevenBurnap:取决于您对玩家能力的初步猜测的准确性/准确性-您必须对大多数或所有系统进行此操作。使用网络的好处是,随着时间的推移,您将能够推断出每个玩家的新分数,以提高其价值。
史蒂文·埃弗斯

1

为了便于讨论,我们可以为每个玩家分配一个整数值,然后将这些值相加,即如果A + B + C =,得分为X的球员与得分为A,B和C的三个球员一样有价值。 X.然后,目标是将组分为两个团队,以使两个团队的总价值相等。

这是NP完全的著名PARTITION问题的优化版本。因此,您的问题就是我们所知难以解决的所有问题。但是,PARTITION 弱NP完全,并接受一些合理的近似策略。

一个例子是类似于史蒂文提出的贪婪方法。这是4/3的近似值,也就是说,实力雄厚的团队比最佳拆分团队的实力永远不会超过33%。

请注意,您可能还有其他限制,例如每个团队至少需要固定数量的球员。因此,如果将迈克尔·乔丹(Michael Jordan)纳入学龄前儿童班,那么您将无法创建拥有完整人数的近乎公平的团队。这样的(恒定)团队规模下限不应影响基础问题的难度,但可能会破坏对一般问题有效的近似范围。


1
您在健身房的地板上不能容纳很多球员。如果有多达20位玩家,假设您要在一侧有10位玩家,那么只有92378种组合可供检查。但是组合的数量使详尽的搜索变得不切实际,并不需要太多的玩家。
凯文·克莱恩

@kevincline:对。我隐含地认为,蛮力不是一种选择(否则,为什么要问?)。
拉斐尔2012年

每个团队最多只能有六个人。更常见的是四个。
Vegar

@Vegar:那么您的问题是更多如何利用团队得分来模拟球员价值,而不是关于算法,对吗?
拉斐尔2012年

1
除非您能找到一种方法来根据他们的才能对他们进行真正的评分,否则算法的准确性可能并不那么重要。面对手头的问题,我们只有团队得分和几次试验。任何球员的评分都会是一个疯狂的估计。
装填机器人

0

你想变得多么荒谬?您始终可以使用多元线性回归来根据每个球员在先前比赛中的得分为每个球员生成系数。然后对列表进行排序并选择。

实际上,由于它无法对玩家之间的动态进行建模,因此可能不起作用,但是它将为您提供一个使用R的理由。(<-看,我保持它与编程相关)


1
我正在考虑制作一个应用程序,以避免每周执行两次2分钟的任务,这迫使我花费几乎相同的时间来记录结果,以便将来进行计算。我猜这太荒谬了……
Vegar 2012年

-1

如果您希望自己的算法合理,简单的算法就不会削减它。他们通常会给你奇怪的结果

您将必须使用ELO或Trueskill系统之类的东西(尽管如此, ELO不适用于未经修改的团队)。


1
这不是真的 必须有一个可行的算法。
动态
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.