【发布时间】:2011-12-22 10:21:17
【问题描述】:
我正在尝试使用具有最小均方 (LMS) 规则的机器学习来实现著名的游戏 Tic Tac Toe(在 Tom Mitchell 的著名著作 Machine Learning 中提出的练习)。
我通过与选择最佳动作的最佳对手对战,然后与随机玩家对战来让计算机学习。在与最佳对手的比赛中,我的程序赢得了大约 90% 的比赛,其余的比赛并没有输球。面对一个随机的对手,它赢了大约 83%,输掉了 15% 的比赛。
但是,当我与程序对战时,我每次都使用相同的策略获胜。
我的程序是这样工作的:
* 创建学习者和玩家(随机或最优)
* while(游戏运行)
* 生成转弯的所有可能状态并使用最佳状态进行转弯
* 最佳转弯已保存
* 浏览已保存的图板并计算每个功能的价值
* 使用特征和当前权重计算棋盘分数
* 计算训练分数:
* 如果最后一局获胜:最后一局的训练值 == 100
* 如果最后一局输了:最后一局的训练值:-100
* 使用 LMS 规则调整权重
我希望这种方法可以使计算机完美运行(大部分时间获胜,否则平局)?是我错了,还是我的训练方法有问题?
非常感谢您在此问题上使用有关板载功能的想法、想法、代码和建议。
【问题讨论】:
-
井字游戏只需很短的搜索即可解决。您打算收集哪些功能?鉴于棋盘位置的数量很少,人们可以简单地创建足够的功能来以编程方式解决这个问题。机器学习在这里不仅没有必要,而且也不合适。
-
我知道状态空间对于蛮力来说足够小,但我想看看机器学习是否可以在这里完成,这是在 Tom Mitchell 的书(机器学习)中作为练习发布的,并且换一种方式回答我,是否可以选择某些棋盘特征,以便学习算法可以完美地玩游戏?
-
是的:棋盘配置,最多轮换,可存储,完美玩游戏。我只需要一张特征小表来描述董事会位置“类别”,将类别中的成员资格作为特征,然后对类别之间的变化进行评分。
-
“与最佳对手相比,我的程序赢得了大约 90% 的比赛” - 可以肯定这不是最佳对手。
-
正如 rob mayoff 正确注意到的那样,您的最佳对手肯定不是最佳的(或者您的程序中存在一些其他错误),因为井字游戏的最佳策略永远不会失败。但是,当始终使用相同策略仅从单个对手生成训练数据时,您可能会过度拟合该策略。相反,对于井字游戏来说,使用随机播放生成所有训练数据是有意义的。
标签: machine-learning