下班后,我们经常在办公室玩几轮桌上足球。我编写了一个小型 java 程序,可以从可用玩家中生成随机 2v2 阵容,然后将比赛结果存储在数据库中。

当前的结果预测使用 4 名相关球员之前所有比赛结果的简单平均值。这给出了一个非常粗略的估计,但我想用更复杂的东西替换它,考虑到以下因素:

  • 球员可能作为进攻者表现出色,但作为防守者表现不佳(反之亦然)
  • 玩家对抗特定对手时表现出色/对抗其他对手时表现不佳
  • 有些团队可以很好地合作,有些则不然
  • 技能会随着时间而改变

尽可能准确地预测游戏结果的最佳算法是什么?

有人建议为此使用神经网络,这听起来很有趣......但我对这个主题没有足够的知识来判断这是否可行,而且我还怀疑可能需要太多的游戏才能进行合理的训练。

编辑:
由于一些项目的截止日期,不得不休息更长的时间。为了使问题更具体:

给出以下 mysql 表,其中包含迄今为止进行的所有比赛:

table match_result

match_id      int pk
match_start   datetime
duration      int (match length in seconds)
blue_defense  int fk to table player
blue_attack   int fk to table player
red_defense   int fk to table player
red_attack    int fk to table player
score_blue    int
score_red     int

你会如何编写一个函数predictResult(blueDef, blueAtk, redDef, redAtk) {...}
尽可能接近地估计结果,执行任何sql,进行计算或使用外部库?

有帮助吗?

解决方案

使用TrueSkill算法,它非常擅长这一点。我已经在足球和国际象棋中实现了它,效果非常好。同事告诉我,差不多了 擅长这个。

有关其工作原理的完整详细信息以及我的实现的链接,请参阅我的“计算你的技能” 博客文章。

其他提示

为什么使用神经网络?使用统计数据,每个球员之间的相关性可能是一个很好的衡量标准。

首先让我们收集一些信息:对于给定的玩家,我们需要:

  1. 他们所踢的位置
  2. 最终得分

一个好的进攻者会得分。一个好的防守者会阻止得分。

真正的信息将来自于优秀的攻击者与优秀的防守者的对抗。

尝试应用朴素贝叶斯分类器。

贝叶斯学习是一种概率 方法,该方法基于 假设数量 利息受概率支配 分布和最优 可以通过推理做出决定 关于这些概率一起 用观察到的数据。[米切尔,T.(1997),机器学习]

相同的球员分布可能会导致不同的比赛结果。如果您的数据中有一个模式,基于您的变量的模式,朴素贝叶斯分类器可能会产生良好的结果。

该算法不是很复杂。我认为,具有一定概率知识的人可以理解和应用它。

在入侵检测系统中,它通过查看各种网络参数来确定网络异常。贝叶斯方法在特定类型的数据中可能非常成功,并产生高 TP 率和低 FP 率。但它也可能会导致较高的 FP 率,具体取决于您的数据。您的数据将决定最佳方法。

您可以使用Weka(http://www.cs.waikato.ac.nz/~ml/weka/),数据挖掘软件库,并尝试不同的算法。它包含朴素贝叶斯分类器。试试看吧。

一种选择是尝试猜测点差为 某种线性模型. 。如果您的比赛数量多于玩家数量,则可以通过为所有比赛建立游戏矩阵(一支球队的球员为+1,另一支球队的球员为-1,观众为0)来对每个球员的得分进行最小二乘拟合并得出结果点差的向量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top