游戏的配对算法

use*_*882 1 c++ algorithm

(这是我正在设计的游戏)让我们说游戏中有2支队员.每支球队将有4名球员.每个玩家都有一个等级(0-9),其中0表示一个糟糕的玩家,9表示一个惊人的玩家.有一个等待玩游戏的队列(或列表)(这可能是一个小数字或一个非常大的数字).让我们说每支球队的总体排名是内部4名球员的平均水平.有多个开放式比赛和球队可以放置球员.

问题:什么是一个好的算法,将玩家置于一个团队的等待队列/列表中,以便游戏中的每个团队在游戏中具有或多或少相同的总体等级(不一定是完美的)?此外,球员不应该等待超过一分钟的时间被安排在一个球队(如果球员很少,可以更多)[他们被放置得越快越好]

bta*_*bta 6

这完全取决于球队的综合排名需要多少.如果准确性不那么重要,你可以做一些简单的事情:

  1. 将前八名球员从名单中删除.
  2. 在A队中排名最高的球员,在B队中排名第二
  3. 剩下六名球员,这意味着你剩下20支球队组合.计算所有20并选择导致最接近的团队得分的组合.

这应该快速而简单,尽管它可能不会产生最平衡的结果.等待时间应该是最小的,因为它总是使用等待时间最长的玩家.第2步实际上是消除计算可能性的捷径.如果没有第2步,则有70种可能的团队组合("8选4").您可能会发现您可以计算所有70并找到一个好的解决方案,而不会占用太多时间.提示:理想的球队得分是(所有球员的总数/ 2).如果您偶然发现与该特定团队得分的组合,您可以停止.

如果您愿意,可以进一步完善此步骤.一旦找到八个最佳匹配,请比较两个团队得分.如果他们相距太远(你必须定义什么构成"太远"),随机替换两个玩家,然后再尝试队列中的下两个玩家.你甚至可以根据玩家等待的时间让"太远"的定义变得更加宽松.

您也可以采取略微不同的方法.将玩家随机分组,然后寻找具有相似排名的两个团队(变得像比较单个数字一样简单).一旦团队在没有找到匹配的情况下经过了指定的时间,将这些玩家返回到池中以重新组建成新的团队.如果你通常有大量的玩家排队(因此有更多的现成团队),那么这可能会让结果更快.

在花费太多时间在此算法上之前,请仔细查看生成播放器排名的算法.如果没有相对较大的误差范围,人类的技能和经验就无法用一个数字来概括.如果此处的错误可能相当大,那么您可以负担得起一个不太准确的团队建设算法(任何额外的准确性都会因玩家排名系统中的错误而无效).