2008-11-04 27 views
4

在我们的办公室,我们经常在下班后享受一些桌上足球或桌上足球。我已经制作了一个小型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,做计算或使用外部库?

回答

3

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

有关它如何工作的完整细节以及指向我的实施的链接,请参阅我的“Computing Your Skill”博文。

2

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

+0

没错。有些人建议一个神经网络* *所有*;请参阅每日跆拳道:http://thedailywtf.com/Articles/No,_We_Need_a_Neural_Network.aspx :-) – ShreevatsaR 2008-11-04 15:10:25

1

刚刚开始,让我们收集一些信息: 对于一个给定的球员,我们需要:

  1. 位置他们打
  2. 最终得分

一个好的攻击者将架起来点。 一名优秀的后卫将阻止得分。

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

0

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

贝叶斯学习是一种概率 的做法,是基于一个 假设的 感兴趣的量是通过概率管辖 分布和最佳 决定,可以通过观察推理 这些概率一起 进行数据。 [Mitchell,T. (1997),机器学习]

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

算法不是很复杂。我认为,一个有一定概率的知识,可以理解&适用它。

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

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

0

一种选择是尝试猜测点分布为some sort of linear model。如果你的球员数量多于你的球员,可以通过构建一个游戏矩阵(对于一个球队的球员为+1,对另一个球员为-1,对于观众为0)对所有比赛进行最小二乘拟合价差的传染媒介。