我的一个朋友开始构建一个NetHack bot(一个玩Roguelike游戏的机器人:NetHack).类似的游戏Angband有一个非常好的工作机器人,但它部分工作,因为回到城镇很容易,并总是能够低水平获得物品.
在NetHack中,问题要困难得多,因为游戏奖励了鼓舞人心的实验,并且基本上构建为1000个边缘案例.
最近我建议使用某种天真的贝叶斯分析,就像创建垃圾邮件一样.
基本上,机器人首先会建立一个语料库,通过尝试每个可能的行动来查找它所发现的每个物品或生物,并将这些信息存储起来,例如,死亡的接近程度,负面影响的伤害.随着时间的推移,您似乎可以生成一个合理的可玩模型.
任何人都能指出我们正确的方向是一个良好的开端吗?我是在吠叫错误的树还是误解了贝叶斯分析的想法?
编辑:我的朋友提出了他的NetHack补丁的github回购,允许python绑定.它仍处于一个非常原始的状态,但如果有人感兴趣...
尽管贝叶斯分析包含更多内容,但从垃圾邮件过滤器中众所周知的朴素贝叶斯算法基于一个非常基本的假设:所有变量基本上彼此独立.因此,例如,在垃圾邮件过滤中,每个单词通常被视为变量,因此这意味着假设如果电子邮件包含单词"viagra",则该知识确实会影响它还包含单词"medicine"(或'foo)的概率. '或'垃圾邮件'或其他任何东西).有趣的是,这种假设在自然语言方面显然是错误的,但仍能产生合理的结果.
现在,人们有时会绕过独立假设的一种方式是定义技术上组合的变量(比如搜索令牌'buy viagra').如果您知道要查找的特定案例,那么这可以起作用,但一般来说,在游戏环境中,这意味着您通常无法记住任何事情.因此,每次你必须移动,执行动作等,它完全独立于你迄今为止所做的任何事情.我会说,即使是最简单的游戏,这也是一种非常低效的学习游戏的方式.
我建议改为使用q-learning.你会发现的大多数例子通常都是简单的游戏(比如学习导航地图,同时避开墙壁,陷阱,怪物等).强化学习是一种在线无监督学习,在可以建模为与环境相互作用的代理(如游戏(或机器人))的情况下表现非常好.它试图弄清楚环境中每个状态的最佳动作是什么(每个状态可以包含所需的变量,远远超过'我在哪里').然后诀窍是保持足够的状态,帮助机器人做出正确的决定,而不会在你的状态"空间"中为每个可能的先前行动组合提供明确的点.
换句话说,如果你要建立一个国际象棋机器人,你可能会遇到麻烦,如果你试图创建一个基于所有先前动作做出决定的决策政策,因为国际象棋移动的所有可能组合的增长真的很快.即使是更简单的模型,每个部件在板上的位置仍然是一个非常大的状态空间,所以你必须找到一种方法来简化你跟踪的内容.但请注意,你确实要跟踪一些状态,这样你的机器人就不会一直试图让一个左边的术语一遍又一遍.
维基百科的文章很重,但本教程在将概念转化为现实世界的例子方面做得更好.
唯一的问题是,您确实需要能够定义奖励以提供积极的"强化".那就是你需要能够定义机器人试图达到的状态,否则它将永远持续下去.