将赛车手分成平等队伍的算法

时间:2013-04-16 10:11:42

标签: algorithm constraints variable-assignment

我在赛车游戏中有一个驱动程序列表,我想将驱动程序分配给每个3个驱动程序的团队。每个驱动程序都有一个评级(通常是大约500到5000之间的数字,越高越好),我想使用此评级来平等地匹配所有团队。同样,我的意思是每个团队的驾驶员平均评分应该尽可能接近。

但是还有一个重要的附加限制:我希望每个团队由一个排名很高的驾驶员(高评级),一个中等排名的驾驶员和一个排名低的驾驶员组成。这很重要,因为它会影响比赛的最终得分。虽然团队可以通过加入一个团队中的三个中等排名的车手(平均评级可能与其他车队类似)来公平,但最终得分是基于每次有一个高排名车手和一个低排名车手的假设。如果不是这样,那么得分就不公平了。

总而言之,要求是:

  • 从最多39个驱动程序的列表开始,
  • 将驱动程序分配给最多13个3个驱动程序的团队,
  • 保持每支球队的平均评分与其他球队相同
  • 确保每次都包含一个排名较高的驾驶员,一个中等驾驶员和一个低排名驾驶员。

如果没有我的附加约束,我可以很容易地想出一些优化算法(甚至是强力推算它?),它试图等于每个团队的平均评分。但在这种情况下,我最终可能会有很多拥有3个同等排名的车手,这不是我想要的。如何将此附加约束添加到此优化问题中?

即使我可以暴力破解(我认为13个团队中最多有39个驾驶员应该可以吗?),我仍然不知道如何决定哪个解决方案(==团队列表和指定的驾驶员)是最好的。如何确定每个解决方案的“得分”或“适合度”?

2 个答案:

答案 0 :(得分:1)

我会按照评级(最高的第一名)订购你的驱动程序列表,并从1到13分配给每个团队的一个驱动程序。

然后将下一个13个驱动程序从13 - 1向后分配到列表中,因此评分最低的团队(13号)将获得下一个最高级别的驱动程序。

最后,如果您将每个团队的当前驱动程序评级加在一起并按最低评级排序,那么您可以将最后13个驱动程序添加到团队中,总排名最低的团队将获得评分最高的剩余驱动程序

答案 1 :(得分:0)

你有限制 - 3个司机/团队,最多39个司机,评级分类低/中/高,每个团队中每个班级的一名司机。

因此,驱动程序的数量是3xN。是这样吗?

你有优化的目标 - 媒介应该最大限度地接近。作为要优化的数字,(你提到的健身),使用这些媒介的标准平方。

团队中等= M i ,i - 团队编号
N队数 A - 所有媒体或所有驱动程序的平均值(相同数字)
A =总和(驾驶员费率)/(3 * N)
S(标准平方)=总和((M i -A) 2

标准本身可以视为sqrt,但你真的不需要它。

每班有N名司机。现在只需尝试每个三重奏组合并降低S.

作为一种快速的方式,我看到以下内容:(选择最好的1级驾驶员,以及最差的2级和3级驾驶员。重复左侧驾驶员。如果您不遵循我的下一个建议,那就是< / p>

问题是,通常情况下,较好的驱动程序之间的差异大于较差驱动程序之间的差异。第一名车手的车队通常绝对是最好的。如果你想逃避这种情况,你应该改变速率获取算法,这样驱动程序将相对均匀地分布在500到5000之间。