Algorithm 网络游戏的公平配对

Algorithm 网络游戏的公平配对,algorithm,statistics,Algorithm,Statistics,大多数在线游戏都是任意组队的。通常情况下,这取决于用户,他们会选择一个有空闲插槽的快速服务器。这种行为产生了不公平的团队,人们愤怒地退出。通过跟踪一个团队(或任何可以收集的静态数据),您如何选择尽可能公平的团队 一种方法是简单地创建一个在任何给定时间寻找比赛的球员列表,按球员排名排序。一旦你接触到足够多的人开始一场新的比赛(或者可能比要求的少两人),将他们分组如下: 移除最好和最差的球员,并将他们加入1队 删除现在最好和现在最差的球员(实际上是第二最好和第二最差的球员),并把他们放在第二队 如果

大多数在线游戏都是任意组队的。通常情况下,这取决于用户,他们会选择一个有空闲插槽的快速服务器。这种行为产生了不公平的团队,人们愤怒地退出。通过跟踪一个团队(或任何可以收集的静态数据),您如何选择尽可能公平的团队

一种方法是简单地创建一个在任何给定时间寻找比赛的球员列表,按球员排名排序。一旦你接触到足够多的人开始一场新的比赛(或者可能比要求的少两人),将他们分组如下:

  • 移除最好和最差的球员,并将他们加入1队
  • 删除现在最好和现在最差的球员(实际上是第二最好和第二最差的球员),并把他们放在第二队
  • 如果只剩下两名球员,根据谁的综合得分最低,将每个球员分到不同的球队。否则,重复:
  • 删除现在最好的和现在最坏的,并把他们放在第1队
  • 移除现在最好的和现在最坏的,并将它们放在第2组
  • 等等,等等,等等,直到你的队伍被填满

    如果你决定以低于要求的价格开始一场新的比赛,那么现在是时候让球员等待新人加入了。一旦一个新人加入,你就会希望把他们放在综合得分最低的开放团队中

    或者,如果你想避免在同一个团队中组合好球员和坏球员的游戏,你可以将每个人分成不同的级别(根据他们的排名分组),并且只匹配同一级别内的人。这需要为每个额外的层创建一个新的打开/排序列表

    示例

    游戏是4v4

    A-1000 PNT

    B-800 PNT

    C-600 PNT

    D-400 PNT

    E-200 PNT

    F-100 PNT

    一旦你得到这六个,就把他们分成这样的小组:

    第一队:A、F、D(综合得分1500分)

    第二队:B、E、C(总分1600分)

    现在,我们等待另外两名玩家加入

    首先,玩家E附带500个PNT。他进入1队,因为他们的综合得分较低

    然后,玩家F有800个PNT。他去了第二队,因为他们是剩下的唯一开放队

    团队总数:

    第一队:A、F、D、E(2000年综合得分)

    第二队:B、E、C、F(总分2400分)

    请注意,在最后两支球队到来之前,球队实际上是相当公平的。老实说,最好的办法是只有当你有足够的球员开始比赛时才开始比赛。但是等待时间对玩家来说可能太长了

    在形成比赛之前,根据你需要的量进行调整。越低=等待时间越短,越可能不公平。越高=等待时间越长,可能越不公平


    如果你有一个赛前屏幕,lower还可以让人们在等待时有更多的时间与他们未来的队友聊天。

    现在比较有名的系统之一是微软的


    人们也尝试将团队配对应用于团队配对,尽管它更适合于1-v-1配对。

    很难用一个指标来评估任何一名球员的技能,而且这种方法很容易被滥用。但是,如果您只关心实现一些简单且能很好工作的方法,请尝试以下方法:

  • 记录胜负
  • 使用赢与输的百分比作为统计数据来匹配玩家(在某种意义上是“匹配”一词,即具有相似百分比的团队玩家)
  • 这与一个玩家的输赢率为5-0,另一个玩家的输赢率为50-20的情况有明显的不同,第一个玩家的输赢率是无限的,而另一个玩家的输赢率更合理。匹配系统承认这一点是有意义的,并且由于所需的一致性,对后一个玩家拥有更多的实际技能更加自信;然而,让这两名球员相互对抗可能是一件好事,因为5-0的球员可能试图通过对抗较弱的球员来运作这个系统,所以让他与一名一贯优秀的球员对抗对每个人都有好处


    请注意,我是根据只玩战略游戏(如魔兽争霸3)的经验说的,这是典型的配对行为。在我看来,胜负的百分比是一个很好的衡量标准,可以用来与球员较量

    在我之前的回答之后,我意识到,如果你想变得非常有趣,你可以使用一个非常简单但功能强大的想法:马尔可夫链

    使用马尔可夫链的直观想法如下:

  • 创建一个图G=(V,E)
  • 让V中的每个顶点表示一个实体
  • 让E中的每条边表示实体之间的转移概率。这意味着每个顶点的向外度之和必须为1
  • 在开始时(时间t=0),为每个实体分配一个单位值1
  • 在每个时间步,根据3中定义的转移概率,从实体i,j转移
  • 设t->infinity,则t=infinity时每个实体的值为平衡(即转换为实体的几率与转换为实体的总几率相同)
  • 例如,这个想法已经成功地用于实现谷歌的页面排名算法。要描述如何使用它,请考虑以下内容:

  • V=玩家E=基于相对赢/输比率从玩家过渡到玩家的概率
  • 每个玩家都是一个顶点
  • 从玩家A到B(B不等于A)的边具有概率X/N,其中N是A玩的游戏总数,X是输给B的游戏总数。将从A到A的边以概率M/N添加,其中M是A赢的游戏总数
  • 开始时为每个玩家分配1级技能
  • 使用查找由3中定义的概率构造的链路矩阵的主要特征向量
  • 主导特征向量是每个玩家在t=无穷大时的技能量,即 sk的数量
    {
        "fields": {
        "elo_rating": 3121.44,
        "points": 404,
        "randomizer": 35,
        "last_login": "2014-10-09T22:57:57Z",
        "weapons": [
            "CANNON",
            "GUN"
        ]
    }
    
    (and (or weapons:'GUN' weapons:'CANNON' weapons:'DRONE')(and last_login:['2013-05-25T00:00:00Z','2014-10-25T00:00:00Z'])(and points:[100, 200])(and elo_rating:[1000, 2000]))}