自定义匹配算法 - Amazon GameLift Servers

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自定义匹配算法

FlexMatch优化了大多数游戏的默认算法,让玩家以最少的等待时间进入可接受的比赛。您可以自定义算法并调整游戏的对战。

以下是默认的FlexMatch配对算法:

  1. FlexMatch将所有未开的配对门票和回填门票放入票池中.

  2. FlexMatch将池中的门票随机分组为一个或多个批次。随着工单池的增大,会FlexMatch形成额外的批次以保持最佳的批次大小。

  3. FlexMatch在每批次中按年龄对门票进行排序。

  4. FlexMatch根据每批中最旧的票证建立匹配项。

要自定义匹配算法,请在您的规则集架构中添加一个 algorithm 组件。有关完整参考信息,请参阅FlexMatch 规则集架构

使用以下可选自定义项来影响对战过程的不同阶段。

添加批处理前排序

您可以在形成批次之前对票池进行排序。这种类型的自定义对于拥有大量票证池的游戏最为有效。预批次排序可以帮助加快对战过程并提高玩家在定义特征上的统一性。

使用算法属性 batchingPreference 定义批处理前的排序方法。默认设置为 random

自定义批处理前排序的选项包括:

  • 按玩家属性排序。提供玩家属性列表以对票证池进行预排序。

    要按玩家属性排序,batchingPreference 请设置为 sorted,然后在 sortByAttributes 中定义您的玩家属性列表。要使用属性,请先在规则集的 playerAttributes 组件中声明该属性。

    在以下示例中,根据玩家的首选游戏地图,然后按玩家技能对门票池进行FlexMatch排序。生成的批次更有可能包含想要使用相同地图的技能相似的玩家。

    "algorithm": { "batchingPreference": "sorted", "sortByAttributes": ["map", "player_skill"], "strategy": "exhaustiveSearch" },
  • 按延迟排序。以最低的可用延迟创建匹配项,或者以可接受的延迟快速创建匹配项。此自定义对于形成超过 40 名玩家的大型对战的规则集非常有用。

    将算法属性 strategy 设置为 balanced。平衡策略限制了规则语句的可用类型。有关更多信息,请参阅 设计一个 FlexMatch 大型比赛规则集

    FlexMatch通过以下方式之一根据玩家报告的延迟数据对门票进行排序:

    • 延迟最低的位置。彩票池按玩家报告最低延迟值的位置进行预先排序。 FlexMatch然后在相同的地点以低延迟批量处理门票,从而创造更好的游戏体验。它还减少了每批票证的数量,因此对战可能需要更长的时间。要使用此自定义设置,请将 batchingPreference 设置为 fastestRegion,如以下示例所示。

      "algorithm": { "batchingPreference": "fastestRegion", "strategy": "balanced" },
    • 可接受的延迟很快就会匹配。票证池按玩家报告可接受延迟值的位置进行预先排序。这会形成更少的批次,包含更多的票证。每批票证越多,就能更快地找到可接受的匹配项。要使用此自定义设置,请将属性 batchingPreference 设置为 largestPopulation,如以下示例所示。

      "algorithm": { "batchingPreference": "largestPopulation", "strategy": "balanced" },
    注意

    平衡策略的默认值为 largestPopulation

优先考虑回填工单

如果您的游戏实现了自动回填或手动回填功能,则可以根据请求类型自定义FlexMatch处理配对票证的方式。请求类型可以是新的匹配请求或回填请求。默认情况下,FlexMatch对两种类型的请求都一视同仁。

回填优先级会影响批FlexMatch处理工单后的处理方式。回填优先级要求规则集使用详尽的搜索策略。

FlexMatch无法将多张回填票证匹配在一起。

要更改回填票证的优先级,请设置属性 backfillPriority

  • 先匹配回填票证。在创建新的匹配项之前,此选项会尝试匹配回填票证。这意味着新玩家加入现有游戏的几率更高。

    如果您的游戏使用自动回填功能,则最好使用此选项。自动回填通常用于游戏会话短、玩家周转率高的游戏。自动回填可以帮助这些游戏形成最低限度的可行匹配项,并在FlexMatch搜索更多玩家来填补空缺位置的同时开始游戏。

    backfillPriority 设置为 high

    "algorithm": { "backfillPriority": "high", "strategy": "exhaustiveSearch" },
  • 最后匹配回填票证。此选项会忽略回填票证,直到它评估所有其他票证。这意味着,当新玩家无法与新游戏匹配时,它会将他们重新FlexMatch填充到现有游戏中。

    当您想使用回填作为最后机会让玩家进入游戏时,例如当没有足够的玩家来组建新的对战时,这个选项很有用。

    backfillPriority 设置为 low

    "algorithm": { "backfillPriority": "low", "strategy": "exhaustiveSearch" },

偏爱带有扩展版的旧票证

当比赛难以完成时,扩展规则会放宽匹配标准。 Amazon GameLift Servers当部分完成的比赛中的门票达到一定年龄时,将适用扩展规则。票证的创建时间戳决定何时Amazon GameLift Servers应用规则;默认情况下,FlexMatch跟踪最近匹配的票证的时间戳。

要更改何时FlexMatch应用扩展规则,请expansionAgeSelection按以下方式设置该属性:

  • 根据最新票证进行扩展。此选项根据添加到潜在匹配项中的最新票证来应用扩展规则。每次FlexMatch匹配一张新票时,时钟都会重置。使用此选项,结果匹配的质量往往更高,但匹配时间更长;如果匹配请求需要太长时间才能匹配,则匹配请求可能会在完成之前超时。将 expansionAgeSelection 设置为 newestnewest 为默认值。

  • 根据最旧的票证进行扩展。此选项根据潜在匹配中最旧的票证应用扩展规则。使用此选项,可以更快地FlexMatch应用扩展,从而缩短最早匹配的玩家的等待时间,但会降低所有玩家的比赛质量。将 expansionAgeSelection 设置为 oldest

"algorithm": { "expansionAgeSelection": "oldest", "strategy": "exhaustiveSearch" },