在我们的办公室,我们经常在下班后享受几轮桌上足球/桌上足球。我已经整理了一个小的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,进行计算或使用外部库?
答案 0 :(得分:5)
使用TrueSkill算法,它非常擅长。我已经为桌上足球和国际象棋实现了它,它运作良好。同事告诉我,这几乎太了。
有关其工作原理的完整详情以及指向我的实施的链接,请参阅我的“Computing Your Skill”博文。
答案 1 :(得分:2)
为什么要使用神经网络?使用统计数据,可能是每个玩家之间的相关性很好。
答案 2 :(得分:1)
刚开始让我们收集一些信息: 对于我们需要的特定玩家:
一名优秀的攻击者将获得积分。 一个好的防守者会阻止得分。
真正的信息将来自一名优秀的攻击者与优秀的防守者对抗。
答案 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)为每个玩家进行最小二乘点积分传播的矢量。