artificial-intelligence - 构建 NetHack 机器人 : is Bayesian Analysis a good strategy?

标签 artificial-intelligence bots bayesian nethack

我的一个 friend 正在开始构建一个 NetHack 机器人(一个玩 Roguelike 游戏的机器人:NetHack)。类似的游戏《Angband》有一个非常好的工作机器人,但它的工作部分是因为回到城镇很容易,并且总是能够在低水平上获得元素。

在 NetHack 中,问题要困难得多,因为游戏奖励大胆的实验,并且基本上是由 1,000 个边缘情况构建的。

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

基本上,机器人首先会构建一个语料库,通过尝试对其找到的每个元素或生物的所有可能的操作,并存储该信息,例如,它距离死亡、伤害或负面影响有多近。随着时间的推移,您似乎可以生成一个相当可玩的模型。

谁能给我们指出正确的方向,什么是一个好的开始?我是不是找错了对象或者误解了贝叶斯分析的思想?

编辑:我的 friend 发布了一个github repo of his NetHack patch允许 python 绑定(bind)。它仍处于相当原始的状态,但如果有人感兴趣......

最佳答案

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

现在,人们有时绕过独立性假设的一种方法是定义技术上是事物组合的变量(例如搜索标记“购买伟哥”)。如果您知道要查找的特定案例,那么这可能会起作用,但一般来说,在游戏环境中,这意味着您通常无法记住任何内容。因此,每次您必须移动、执行某个操作等时,它都完全独立于您迄今为止所做的任何其他操作。我想说,即使对于最简单的游戏,这也是一种非常低效的学习游戏的方式。

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

更具体地说,如果您要构建一个国际象棋机器人,如果您尝试创建一个决策策略,该决策策略根据自国际象棋移动的所有可能组合的集合以来的所有先前移动做出决策,那么您可能会遇到麻烦成长得非常快。即使是棋盘上每个棋子所在位置的更简单模型仍然是一个非常大的状态空间,因此您必须找到一种方法来简化您跟踪的内容。但请注意,您确实需要跟踪某些状态,这样您的机器人就不会一遍又一遍地尝试将左项放入墙上。

维基百科 article行话很重,但这tutorial在将概念转化为现实世界的例子方面做得更好。

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

关于artificial-intelligence - 构建 NetHack 机器人 : is Bayesian Analysis a good strategy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114303/

相关文章:

node.js - Facebook Messenger 机器人永久菜单

python - PyMC3 大 MvNormal 先验

python - 在python中建立redis连接

python - 我如何获得opencv中显示的图像坐标

artificial-intelligence - MinMax 树 - 当 Min 可以分两步获胜时

multithreading - 多线程反向传播

artificial-intelligence - 人工智能 - 清洁和油漆的智能代理

javascript - 我如何通过nodejs返回获取mysql json

bots - Facebook 聊天机器人中响应文本的富文本格式

machine-learning - 使用基于规则的方法而不是适当的算法进行二元分类