虚拟玩家数据集
1. 概述
完成规则集脚本后,确保规则适合使用匹配系统的玩家数据特征非常重要。如果限制条件过于严格,可能需要花费太长时间才能找到匹配结果。同时,如果限制条件过于宽松,虽然可以快速完成匹配,但将经验丰富的玩家和新手玩家混在一起可能会降低游戏的乐趣。
PGOS 提供了一个使用虚拟玩家数据集验证规则集的工具,这是一个包含多个虚拟玩家记录的数据集。虚拟玩家数据集可以通过指定所需参数生成、从已有数据集克隆、以 csv 格式导出,也可以从 csv 文件导入。它是匹配模拟器的输入。
完成本教程后,您将能够执行以下操作:
- 配置票据、玩家属性、票据入场和网络延迟生成器,以创建虚拟玩家数据集。
- 克隆一个虚拟玩家数据集,在它的基础上做调整。
- 从
csv文件导入虚拟玩家数据集。
在 Fake Player Dataset 页面点击 Tutorial,可以查看创建数据集的分步教程。
2. 生成虚拟玩家数据集
点击 Add Fake Player Dataset 打开创建页面,需要配置两个必填参数:名称和票据规模(Ticket Scale)。一张票据(ticket)可以包含一名或多名玩家,是追踪匹配过程的基本单位。票据规模即要生成的票据数量,取值为 1 到 10000。
页面的每个区块右侧都有预览,例如票据人数构成、每个属性的取值分布,方便在创建之前检查参数。
2.1 配置票据生成器
一张票据在单人对局中包含一名玩家,在组队对局中包含多名玩家。
根据验证场景,您可以为每种票据人数设置权重,以调整多人票据的比例。权重用于平衡不同人数票据之间的比例,而不是这些票据的绝对数量。
如果票据中的玩家数量超过了某个 team 的 maxPlayers,该票据在匹配测试中将会超时。

例如:
- 要生成全部为单人的票据,请参考以下配置

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

2.2 配置玩家属性生成器
支持两种类型的玩家属性生成:
- 数值:支持正态分布和连续均匀分布
- 对于正态分布,需要设置
期望值和标准差来创建正态分布公式,并设置左边界和右边界来把分布限制在一个区间内。 - 对于均匀分布,需要设置
最大值和最小值,数值将在此范围内连续均匀生成。
- 对于正态分布,需要设置
- 字符串:支持生成带权重的字符串枚举
- 为每个字符串枚举指定其权重。
添加所需玩家属性有两种方式:
- 通过指定名称、类型和分布参数手动添加属性(Add Attribute)。
- 通过从规则集快速导入(Quick Import from Ruleset),名称和类型已设置好,只需要编辑其分布参数。
数据集必须包含某个规则集声明的全部玩家属性,才能在模拟器中与该规则集一起使用,否则创建模拟案例时无法选择它。
例如,一个包含两个玩家属性 mmr 和 map 的生成器可参考如下:

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 和玩家属性的文件(例如这些列出现之前导出的文件)仍然可以导入,其中的票据会同时进入匹配池,玩家也没有延迟数据。