跳到主要内容

虚拟玩家数据集

1. 概述​

完成规则集脚本后,确保规则适合使用匹配系统的玩家数据特征非常重要。如果限制条件过于严格,可能需要花费太长时间才能找到匹配结果。同时,如果限制条件过于宽松,虽然可以快速完成匹配,但将经验丰富的玩家和新手玩家混在一起可能会降低游戏的乐趣。

PGOS 提供了一个使用虚拟玩家数据集验证规则集的工具,这是一个包含多个虚拟玩家记录的数据集。虚拟玩家数据集可以通过指定所需参数生成、从已有数据集克隆、以 csv 格式导出,也可以从 csv 文件导入。它是匹配模拟器的输入。

完成本教程后,您将能够执行以下操作:

  • 配置票据、玩家属性、票据入场和网络延迟生成器,以创建虚拟玩家数据集。
  • 克隆一个虚拟玩家数据集,在它的基础上做调整。
  • 从 csv 文件导入虚拟玩家数据集。
提示

在 Fake Player Dataset 页面点击 Tutorial,可以查看创建数据集的分步教程。

2. 生成虚拟玩家数据集​

点击 Add Fake Player Dataset 打开创建页面,需要配置两个必填参数:名称和票据规模(Ticket Scale)。一张票据(ticket)可以包含一名或多名玩家,是追踪匹配过程的基本单位。票据规模即要生成的票据数量,取值为 1 到 10000。

页面的每个区块右侧都有预览,例如票据人数构成、每个属性的取值分布,方便在创建之前检查参数。

2.1 配置票据生成器​

一张票据在单人对局中包含一名玩家,在组队对局中包含多名玩家。

根据验证场景,您可以为每种票据人数设置权重,以调整多人票据的比例。权重用于平衡不同人数票据之间的比例,而不是这些票据的绝对数量。

注意

如果票据中的玩家数量超过了某个 team 的 maxPlayers,该票据在匹配测试中将会超时。

image-20220425163905736

例如:

  • 要生成全部为单人的票据,请参考以下配置

image-20220425165647056

  • 要生成全部为四人组队的票据,请参考以下配置

image-20220425165751175

2.2 配置玩家属性生成器​

支持两种类型的玩家属性生成:

  • 数值:支持正态分布和连续均匀分布
    • 对于正态分布,需要设置期望值和标准差来创建正态分布公式,并设置左边界和右边界来把分布限制在一个区间内。
    • 对于均匀分布,需要设置最大值和最小值,数值将在此范围内连续均匀生成。
  • 字符串:支持生成带权重的字符串枚举
    • 为每个字符串枚举指定其权重。

添加所需玩家属性有两种方式:

  • 通过指定名称、类型和分布参数手动添加属性(Add Attribute)。
  • 通过从规则集快速导入(Quick Import from Ruleset),名称和类型已设置好,只需要编辑其分布参数。

数据集必须包含某个规则集声明的全部玩家属性,才能在模拟器中与该规则集一起使用,否则创建模拟案例时无法选择它。

例如,一个包含两个玩家属性 mmr 和 map 的生成器可参考如下:

image-20220425163917132

2.3 配置票据入场​

这一区块决定每张票据何时进入匹配池,写入数据集的 enter_offset_ms 列。只有当模拟案例的 Ticket Arrival 选择 From dataset 时,模拟器才会回放它。

分布行为
All at once默认。每张票据的 enter_offset_ms 都为 0,与此选项出现之前生成的数据集一致。
Uniform在 Arrival Span(秒)内随机均匀分布,然后排序。
Poisson按给定的 QPS(每秒票据数)产生指数分布的间隔,最接近线上流量。
Constant按给定的 QPS 等间隔入场。

2.4 配置网络延迟​

这一区块为每名玩家生成到各个 region 的延迟。点击 Add Region,为 region 设置名称和分布:

  • region 名会成为一列 latency.<region>,例如 latency.Z1。请使用线上 latencyRule 实际看到的 zone 名称,例如 Z1、Z2,而不是云厂商的 region ID。
  • 延迟为整数毫秒。与数值属性相同,支持正态分布(带左右边界)和均匀分布。
注意

如果没有添加任何 region,数据集中就没有延迟列。使用这个数据集、并把 Latency Source 设为 From dataset 的模拟案例,所有 latencyRule 都不会通过。请在这里添加 region,或者在创建模拟案例时选择 Fake 延迟。

3. 克隆虚拟玩家数据集​

在列表中点击某个数据集的 Clone,会打开创建页面并填好它的生成参数。调整参数后点击 Create Clone 即可生成一个新的数据集,原数据集保持不变。

从 csv 文件导入的数据集没有生成参数,克隆时只能还原从文件中推断出的部分:属性名、延迟的 region 名,以及根据最大 enter_offset_ms 推算的入场跨度。数值分布、字符串权重和票据人数构成都无法还原,Create Clone 会重新采样生成新的数据集,而不是复制导入的那些行。如果需要复用相同的行,请先 Download CSV 再重新导入。

4. 导入虚拟玩家数据集​

虚拟玩家数据集可以导出并在 Excel 等第三方软件中编辑,调整后再重新导入。

点击 Import From CSV File,指定名称并上传 csv 文件即可导入虚拟玩家数据集,文件最大为 300 MB。

导入后,如果数据集包含非 0 的 enter_offset_ms,列表中会为它标记 Arrival;如果包含 latency.<region> 列,则标记 Latency。这两个标记说明模拟器能否从数据集中回放入场时间和延迟。

5. CSV 格式说明​

每行代表一名玩家。如果一张票据包含多名玩家,这些玩家所在的行必须相邻,并共用同一个 ticket_id。

列是否必需说明
player_id是必须是第一列。
ticket_id是必须是第二列。
team否设置后,该票据只能加入同名的队伍。
enter_offset_ms否票据进入匹配池的时间,即相对第一张票据的毫秒数,取该票据第一行的值。缺失或为空表示 0。
latency.<region>否玩家到该 region 的延迟,单位为毫秒,每个 region 一列。空单元格表示该玩家没有这个 region 的延迟数据,与 0 不同。
玩家属性是每个属性一列,按列名与规则集声明的玩家属性对应。要模拟某个规则集,文件必须包含该规则集声明的全部属性。

PGOS 生成的数据集依次包含 player_id、ticket_id、team、enter_offset_ms、延迟列(配置了 region 时)和玩家属性:

player_id,ticket_id,team,enter_offset_ms,latency.Z1,latency.Z2,mmr,map
player-1,ticket-1,,0,45,62,1913.747060,Camp TriggerFish
player-2,ticket-2,,1200,38,71,1719.388103,MakoMart
player-3,ticket-3,,1850,52,,2043.800709,MakoMart
player-4,ticket-4,,2400,61,49,1867.210120,Skipper Pavillion
player-5,ticket-5,,3100,44,58,2098.715281,MakoMart
player-13,ticket-13,,9800,57,66,2324.447528,Camp TriggerFish
player-14,ticket-13,,9800,49,73,1496.947738,MakoMart
player-26,ticket-25,,15300,40,55,2107.402592,MakoMart
player-27,ticket-25,,15300,43,52,2306.995124,Skipper Pavillion
player-28,ticket-25,,15300,51,60,2245.593568,MakoMart
player-29,ticket-25,,15300,39,64,1798.676145,MakoMart
player-30,ticket-25,,15300,47,59,1848.814784,Skipper Pavillion
...

只包含 player_id、ticket_id 和玩家属性的文件(例如这些列出现之前导出的文件)仍然可以导入,其中的票据会同时进入匹配池,玩家也没有延迟数据。