我提出这个问题的动机是我发现了一个在图数据集上使用机器学习的有趣问题。关于这个主题已经有一些论文。例如,“Learning from Labeled and Unlabeled Data on a Directed Graph” (Zhou, Huang, Scholkopf)。然而,我没有在人工智能或机器学习方面的背景,所以我想在进行任何科学研究之前,先为更广泛的受众编写一个较小的程序。
几年前,我编写了一个名为Solumns的游戏。这是一个经典的Sega游戏Columns的邪恶变体。受到bastet的启发,它通过暴力破解来寻找对玩家不利的颜色组合。这个游戏很难。
我想改进它的AI。我认为游戏空间(彩色块的网格、列位置、列颜色)更适合图结构,而不是属性列表。如果是这样的话,那么这个问题与我的研究问题相似。
我正在考虑使用以下高层次计划来解决这个问题:
- 我想如果AI对手能够根据比移动后棋盘上现有方块数量更多的数据来为可能的移动分配一个适应性评分会很有用。我在考虑使用分类器。使用移动和所有过去的移动进行训练,并以游戏的剩余过程作为成功的衡量标准。
- 我也在考虑开发一个能够击败标准AI对手的玩家机器人。这在生成1的数据时可能会有用。
- 使用玩家机器人的游戏样本来构建一个能够击败战略玩家的AI。也许也可以将这些数据用于1。
- 编写一个有趣的AI,它在适当的时候委托给1、3和原始AI的可能组合,我将通过实验来确定启发式调整因子。
为了构建玩家机器人,我认为我可以使用暴力方法来计算样本空间。然后使用构建随机森林时使用的机器学习技术来创建某种决策者。
构建AI对手是我最困惑的地方。
具体问题如下:
- 评级移动听起来像是人们在下棋时做的事情,虽然我承认我的方法可能有些无知,但文献中有很多关于这方面的信息,我可以从中学习。问题是,玩家机器人和AI对手是否应该创建数据样本?听起来我对不同的样本集感到困惑,这听起来像是训练不当的配方。我应该多玩几次游戏吗?
- 我应该考虑使用什么样的算法来训练玩家机器人对抗当前的AI?
- 我应该考虑使用什么样的算法来训练AI对手对抗玩家机器人?
额外信息:
- 我故意不问这种策略是否适合编程游戏AI。当然,你可能能够更简单地编写一个很棒的AI(毕竟它已经很难玩了)。我想通过做一些有趣的事情来学习机器学习。
- 原始游戏是用racket和C的混合编写的。我正在将其移植到jruby中,出于各种原因,可能会扩展或进行RPC调用到另一种更快的语言。我对这里现有的特定于语言的解决方案不太感兴趣。我想在这个领域发展技能,并且不怕自己实现一个算法。
你可以在这里获取原始游戏的源代码
回答:
我不会在这里使用机器学习。看看游戏玩法AI。
你有一个对抗性游戏(如围棋),有两个不对称的玩家:
- 放置棋子的用户,
- 以及选择棋子的电脑(而不是随机选择棋子)。
我可能会从蒙特卡洛树搜索开始。