Artificial intelligence 构建NetHack机器人:贝叶斯分析是一个好策略吗?

Artificial intelligence 构建NetHack机器人:贝叶斯分析是一个好策略吗?,artificial-intelligence,bots,bayesian,nethack,Artificial Intelligence,Bots,Bayesian,Nethack,我的一个朋友正在开始建造一个NetHack机器人(一个玩类似流氓的游戏:NetHack的机器人)。对于类似的游戏Angband,有一个非常好的工作机器人,但它的工作部分是因为它可以轻松地返回城镇,并且总是能够从低级别的人渣中获得物品 在NetHack中,这个问题要困难得多,因为游戏奖励大胆的实验,基本上是1000个边缘案例 最近我建议使用某种朴素的贝叶斯分析,与创建垃圾邮件的方式非常相似 基本上,机器人首先会建立一个语料库,用它找到的每一个物品或生物尝试每一个可能的动作,并存储这些信息,例如,它

我的一个朋友正在开始建造一个NetHack机器人(一个玩类似流氓的游戏:NetHack的机器人)。对于类似的游戏Angband,有一个非常好的工作机器人,但它的工作部分是因为它可以轻松地返回城镇,并且总是能够从低级别的人渣中获得物品

在NetHack中,这个问题要困难得多,因为游戏奖励大胆的实验,基本上是1000个边缘案例

最近我建议使用某种朴素的贝叶斯分析,与创建垃圾邮件的方式非常相似

基本上,机器人首先会建立一个语料库,用它找到的每一个物品或生物尝试每一个可能的动作,并存储这些信息,例如,它离死亡、伤害的负面影响有多近。随着时间的推移,您似乎可以生成一个合理的可玩模型

有谁能给我们指出一个好的开始的正确方向吗?我是找错人了还是误解了贝叶斯分析的概念


编辑:我的朋友发布了一个允许python绑定的应用程序。它仍然处于相当原始的状态,但如果有人对nethack感兴趣……

未知操作通常具有布尔效应——要么获得,要么失去。贝叶斯网络以“模糊逻辑”值为基础——一个动作可能会以给定的概率获得收益。因此,您不需要贝叶斯网络,只需要一个“已发现效应”列表以及它们是好是坏

不用再吃鸡冠花了,是吗


总而言之,这取决于你想给机器人多少“知识”作为起点。你是想让他以“艰苦的方式”学习一切,还是让他吃破坏者的东西,直到他吃饱为止?

有一个先例:可怕的rog-o-matic程序成功地扮演了盗贼,甚至几次带着Yendor的护身符回来。不幸的是,rogue只发布了一个二进制文件,而不是源文件,所以它已经死了(除非你可以在Micromax上设置一个4.3BSD系统),这使得rog-o-matic无法播放任何克隆版本。它只是挂起,因为它们没有足够的模拟

然而,我认为,rog-o-matic是我一直以来最喜欢的程序,不仅因为它实现了什么,还因为代码的可读性及其算法的可理解智能。它使用了“基因遗传”:一个新玩家将继承前一对成功玩家的偏好组合,带有一些随机偏移,然后与机器对抗。更成功的偏好会在基因库中向上迁移,而不太成功的偏好会向下迁移


这些天很难找到来源,但搜索“rogomatic”会让你走上正轨。

尽管贝叶斯分析包含更多内容,但垃圾邮件过滤器中众所周知的朴素贝叶斯算法基于一个非常基本的假设:所有变量本质上相互独立。例如,在垃圾邮件过滤中,每个词通常被视为一个变量,因此这意味着假设电子邮件中包含“伟哥”一词,则该知识确实会影响其也包含“药物”一词(或“foo”或“spam”或其他任何词)的可能性。有趣的是,当涉及到自然语言时,这个假设显然是错误的,但仍然能够产生合理的结果

现在,人们有时绕过独立性假设的一种方法是定义变量,这些变量在技术上是事物的组合(比如搜索代币“购买伟哥”)。如果你知道要寻找的具体案例,这是可行的,但一般来说,在游戏环境中,这意味着你通常什么都记不住。因此,每次你必须移动,执行一个动作,等等,它完全独立于你迄今为止所做的任何事情。我想说,即使是最简单的游戏,这也是学习游戏的一种非常低效的方式

我建议改用q-learning。你会发现大多数的例子通常只是简单的游戏(比如学习如何在地图上导航,同时避开墙壁、陷阱、怪物等)。强化学习是一种在线无监督学习,在可以建模为与环境交互的代理(如游戏(或机器人))的情况下效果非常好。它这样做是为了找出环境中每个状态下的最佳操作是什么(每个状态可以根据需要包含尽可能多的变量,而不仅仅是“我在哪里”)。然后,诀窍是保持足够的状态,以帮助机器人做出正确的决策,而不必在您的状态“空间”中为之前操作的每个可能组合指定一个不同的点

更具体地说,如果你要构建一个象棋机器人,你可能会遇到麻烦,如果你试图创建一个决策策略,该策略根据之前的所有动作做出决策,因为所有可能的象棋动作组合集增长非常快。即使是一个更简单的模型,其中每一块都在电路板上,它仍然是一个非常大的状态空间,因此您必须找到一种方法来简化您跟踪的内容。但请注意,您确实需要跟踪某些状态,这样您的机器人就不会一次又一次地试图将左项插入墙中

维基百科的术语相当多,但它能更好地将概念转化为现实世界的例子


一个问题是,你确实需要能够定义奖励,以提供积极的“强化”。也就是说,您需要能够定义bot试图达到的状态,否则它将永远持续下去。

我怀疑贝叶斯分析会让您走得更远,因为NetHack的大部分内容都是高度关联的。很少有行动总是一个坏主意;大多数人在“正确”的情况下也是救生员(一个极端的例子是吃鸡冠花:那很糟糕,除非你饿了,吃了咖喱