桌上足球结果预测

时间:2008-11-04 13:26:33

标签: java mysql prediction

在我们的办公室,我们经常在下班后享受几轮桌上足球/桌上足球。我已经整理了一个小的java程序,它从可用的玩家中生成随机的2vs2阵容,然后将匹配结果存储在数据库中。

结果的当前预测使用来自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,进行计算或使用外部库?

5 个答案:

答案 0 :(得分:5)

使用TrueSkill算法,它非常擅长。我已经为桌上足球和国际象棋实现了它,它运作良好。同事告诉我,这几乎了。

有关其工作原理的完整详情以及指向我的实施的链接,请参阅我的“Computing Your Skill”博文。

答案 1 :(得分:2)

为什么要使用神经网络?使用统计数据,可能是每个玩家之间的相关性很好。

答案 2 :(得分:1)

刚开始让我们收集一些信息: 对于我们需要的特定玩家:

  1. 他们的位置
  2. 最终得分
  3. 一名优秀的攻击者将获得积分。 一个好的防守者会阻止得分。

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

答案 3 :(得分:0)

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

  

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

玩家的相同确切分布可能导致不同的匹配结果。如果你的数据中有一个模式,一个基于变量的模式,Naive Bayes分类器可能会产生很好的结果。

算法不是很复杂。我认为,对概率有一定了解的人,可以理解&应用它。

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

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

答案 4 :(得分:0)

一种选择是尝试将点差推测为some sort of linear model。如果你有比玩家更多的游戏,可以通过为所有游戏构建游戏矩阵(一个队员为+1,另一个为-1,观众为0)为每个玩家进行最小二乘点积分传播的矢量。