【问题标题】:Algorithm to optimize a team formation based on player rating and power基于球员等级和力量优化球队阵型的算法
【发布时间】:2021-11-10 20:49:50
【问题描述】:

我想为一个假设的游戏创建一个算法,您可以在其中使用给定的玩家列表创建任意数量的组。 假设我有一个玩家列表,其中每个玩家都由他们的评分表示。

Given The following matrix

黄色数字对应于任何给定组的玩家数量。

白色数字对应组中每个玩家贡献的分数。

橙色数字对应相应分数所需的评分阈值。

例如,如果我有一组评分为 [50, 100] 的玩家,使用矩阵可以确定他们每个人的得分为 26.45,因为总评分为 150,并且有两个玩家那个组。该队的总分是 52.90。

理想情况下,该算法会返回产生最高分数的组,并且我可以根据需要创建任意数量的组,并且不需要将所有玩家都放在一个组中。

什么是开始或解决这个算法的好方法?

【问题讨论】:

  • 可能是 MIP 求解器,但我们谈论的是多少玩家?
  • 大约15-20名玩家

标签: algorithm math language-agnostic


【解决方案1】:

我会将此问题简化为加权集打包并使用混合整数程序 (MIP) 求解器库,例如 OR-Tools

对于每个可以组成一个组的玩家子集 S,我们有一个变量 x(S),如果我们选择子集,则为 1,否则为 0。我们让子集的得分为 score(S),以便目标是最大化 score(S) x(S) 在 S 上的总和。我们对每个玩家 p 有一个约束:包含 x(S) 的 p 的所有 S 的总和最多为 1。

例如,将所有非空子集的三个玩家作为可能的组,我们会得到

maximize score({1}) x({1}) + score({2}) x({2}) + score({3}) x({3}) +
score({1,2}) x({1,2}) + score({1,3}) x({1,3}) + score({2,3}) x({2,3}) +
score({1,2,3}) x({1,2,3})

subject to

x({1}) + x({1,2}) + x({1,3}) + x({1,2,3}) <= 1
x({2}) + x({1,2}) + x({2,3}) + x({1,2,3}) <= 1
x({3}) + x({1,3}) + x({2,3}) + x({1,2,3}) <= 1

x({1}), ..., x({1,2,3}) in {0, 1}

除非分数接近线性,否则现代硬件上的现代 MIP 求解器应该能够扩展到 20 个玩家。如果没有,还有更复杂的技术。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2011-06-22
    相关资源
    最近更新 更多