问题标签 [reinforcement-learning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
1332 浏览

lisp - 如何运行 Sutton 和 Barton 的“强化学习”Lisp 代码?

我最近阅读了很多关于强化学习的内容,我发现“强化学习:简介”是一本很好的指南。作者为他们的许多工作示例提供了有用的源代码。

在我开始这个问题之前,我应该指出我对 lisp 的实际知识很少。我知道基本概念及其工作原理,但我从未真正以有意义的方式使用 lisp,所以很可能我只是在做一些令人难以置信的 n00b-ish。:)

另外,作者在他的页面上声明他不会回答有关他的代码的问题,所以我没有联系他,并认为 Stack Overflow 会是一个更好的选择。

我一直在尝试在 linux 机器上运行代码,同时使用 GNU 的 CLISP 和 SBCL,但无法运行它。我不断使用任一解释器获取完整的错误列表。特别是,大多数代码似乎使用了包含在文件“utilities.lisp”中的许多实用程序,该文件包含以下行

:ccl 似乎是指某种基于 Mac 的 lisp 版本,但我无法确认这一点,它可能只是其他一些代码包。

我尝试删除这个特定的部分(将行更改为

但这只会产生更多错误。

有人知道我如何运行这段代码吗?我只是对所有的lisp一无所知吗?

更新 [2009 年 3 月]:我安装了 Clozure,但仍然无法让代码运行。

在 CCL 命令提示符下,命令

导致以下错误输出:

不幸的是,我还在学习 lisp,所以虽然我感觉有些东西没有完全定义,但我并不真正理解如何阅读这些错误消息。

0 投票
9 回答
6245 浏览

language-agnostic - 强化学习的良好实现?

对于一个 ai 类项目,我需要实现一个强化学习算法,它可以击败一个简单的俄罗斯方块游戏。游戏是用 Java 编写的,我们有源代码。我知道强化学习理论的基础知识,但想知道 SO 社区中是否有人亲身体验过这类事情。

  1. 对于在俄罗斯方块游戏中实施强化学习,您推荐的阅读材料是什么?
  2. 有没有什么好的开源项目可以完成类似的事情,值得一试?

编辑:越具体越好,但欢迎使用有关该主题的一般资源。

跟进:

认为如果我发布后续内容会很好。

这是我为任何未来的学生提供的解决方案(代码和文章):)。

论文/代码

0 投票
1 回答
1024 浏览

language-agnostic - Q-Learning 的泛化函数

我必须和 Q Learning 一起做一些工作,关于一个必须在房子周围移动家具的人(基本上就是这样)。如果房子足够小,我可以有一个代表行动/奖励的矩阵,但是随着房子的大小变得越来越大,这还不够。所以我必须使用某种泛化函数来代替它。我的老师建议我不要只用一个,而是用几个,这样我就可以比较它们等等。大家推荐什么?

我听说对于这种情况,人们正在使用支持向量机,也就是神经网络。我不是真正的领域内,所以我不能说。我过去在神经网络方面有过一些经验,但 SVM 似乎更难掌握。还有其他我应该寻找的方法吗?我知道肯定有无数个,但我需要一些东西才能开始。

谢谢

0 投票
4 回答
2789 浏览

neural-network - 如何使用神经网络解决“软”解决方案?

我正在考虑使用神经网络在我正在构建的太空射击游戏中为我的敌人提供动力,我想知道;当网络没有一组明确的好输出时,你如何训练神经网络?

0 投票
2 回答
1513 浏览

language-agnostic - 改善 Q 学习

我目前正在使用 Q-Learning 来尝试教机器人如何在充满墙壁/障碍物的房间中移动。它必须从房间的任何地方开始并达到目标状态(例如,这可能是有门的瓷砖)。目前,当它想移动到另一个图块时,它会去那个图块,但我在想将来我可能会添加一个随机的机会去另一个图块,而不是那个。它只能上下左右移动。达到目标状态产生 +100,其余动作产生 0。

我正在使用此处找到的算法,如下图所示。

替代文字 替代文字

现在,关于这个,我有一些问题:

  1. 使用 Q-Learning 时,有点像神经网络,我必须区分学习阶段和使用阶段?我的意思是,似乎他们在第一张图片中显示的是学习的,而在第二张图片中显示的是使用的。
  2. 我在某处读到,要达到最佳 Q 值表需要无数个步骤。真的吗?我会说这不是真的,但我必须在这里遗漏一些东西。
  3. 我也听说过 TD(Temporal Differences),它似乎由以下表达式表示:

    对于 alpha = 1,这似乎是图片中第一个显示的那个。伽马值在这里有什么不同?

  4. 如果我尝试一个非常大的房间(例如 300x200 像素),我会遇到一些复杂情况。由于它本质上是随机运行的,如果房间很大,那么从第一个状态随机进入目标状态将需要很长时间。我可以使用哪些方法来加快速度?我想也许有一张桌子,里面装满了对与错,关于我在那一集中所拥有的任何东西是否已经处于那种状态。如果是,我会丢弃它,如果不是,我会去那里。如果我已经去过所有这些州,那么我会去一个随机的。这样一来,就像我现在正在做的事情一样,我知道我会比现在更频繁地重复状态。
  5. 除了 Q 值的查找表之外,我还想尝试其他的东西,所以我正在考虑使用带有反向传播的神经网络。我可能会尝试为每个动作(上、下、左、右)设置一个神经网络,因为这似乎是产生最佳结果的方法。是否有任何其他方法(除了 SVM,这似乎太难以实现自己)我可以使用和实现给我很好的 Q-Values 函数逼近?
  6. 你认为遗传算法在这种情况下会产生好的结果吗,使用 Q 值矩阵作为它的基础?如何测试我的健身功能?它给我的印象是 GA 通常用于更随机/更复杂的事情。如果我们仔细观察,我们会注意到 Q 值遵循一个明显的趋势 - 靠近目标的 Q 值越高,离目标越远,Q 值越低。试图通过 GA 得出这个结论可能需要太长时间吗?
0 投票
2 回答
5665 浏览

language-agnostic - 将递归神经网络与强化学习一起使用时,它们有什么用途?

我确实知道带有反向传播的前馈多层神经网络与强化学习一起使用,以帮助它概括我们的代理所做的动作。也就是说,如果我们有一个很大的状态空间,我们可以做一些动作,它们将有助于泛化整个状态空间。

相反,递归神经网络做什么?一般来说,它们用于什么任务?

0 投票
1 回答
416 浏览

artificial-intelligence - QLearning 和永无止境的情节

假设我们有一个机器人可以移动的 (x,y) 平面。现在我们将世界的中间定义为目标状态,这意味着一旦我们的机器人达到该状态,我们将给予 100 的奖励。

现在,假设有 4 个状态(我称之为 A、B、C、D)可以导致目标状态。

我们第一次处于 A 并进入目标状态时,我们将更新我们的 QValues 表,如下所示:

可能发生两件事之一。我可以在这里结束这一集,然后开始一个不同的集,机器人必须再次找到目标状态,或者即使我找到了目标状态,我也可以继续探索世界。如果我尝试这样做,我会看到一个问题。如果我处于目标状态并回到状态 A,它的 Qvalue 将如下:

现在,如果我尝试从 A 再次进入目标状态:

这意味着如果我继续这样做,因为 0 <= gamma <= 0,两个 qValue 都将永远上升。

这是 QLearning 的预期行为吗?难道我做错了什么?如果这是预期的行为,这不会导致问题吗?我知道从概率上讲,所有 4 个状态(A、B、C 和 D)都会以相同的速度增长,但即便如此,让它们永远增长还是有点让我烦恼。

即使在找到目标之后允许代理继续探索的想法与他离目标状态越近,它越有可能处于当前可以更新的状态有关。

0 投票
3 回答
5690 浏览

artificial-intelligence - QLearning 中的负回报

假设我们在一个房间里,我们的代理可以沿着 xx 和 yy 轴移动。在每个点上,他都可以上下左右移动。所以我们的状态空间可以由 (x, y) 定义,我们在每个点的动作由 (up, down, right, left) 给出。让我们假设,无论我们的代理在哪里做了一个让他撞墙的动作,我们都会给他一个负奖励 -1,并让他回到之前的状态。如果他在房间中央找到一个木偶,他将获得+10 奖励。

当我们为给定的状态/动作对更新我们的 QValue 时,我们正在查看在新状态下可以执行哪些操作并计算可能到达那里的最大 QValue 是多少,因此我们可以更新我们的 Q(s, a)我们当前状态/动作的价值。这意味着如果我们在点 (10, 10) 有一个目标状态,那么它周围的所有状态都会随着距离的增加而变得越来越小。现在,就墙壁而言,在我看来,情况并非如此。

当智能体撞墙时(假设他处于 (0, 0) 位置并执行了 UP 动作),他将针对该状态/动作获得 -1 的奖励,从而获得 -1 的 QValue。

现在,如果稍后我处于状态 (0, 1),并假设状态 (0,0 0) 的所有其他动作为零,则在计算动作 LEFT 的 (0, 1) 的 QValue 时,它​​将计算它通过以下方式:

也就是说,撞墙不会传播到附近的状态,这与当你有积极的奖励状态时发生的情况相反。

在我看来,这似乎很奇怪。起初我认为找到给予负奖励的状态/动作对在学习方面与正奖励一样好,但从我上面展示的例子来看,这种说法似乎并不成立。该算法似乎存在一种偏见,即更多地考虑积极奖励而不是消极奖励。

这是 QLearning 的预期行为吗?坏奖励不应该和积极奖励一样重要吗?什么是“解决方法”?

0 投票
3 回答
14689 浏览

language-agnostic - QLearning 中的 Alpha 和 Gamma 参数

伽玛值大或小对算法有什么影响?在我的光学系统中,只要它既不是 0 也不是 1,它的工作方式应该完全相同。另一方面,无论我选择什么伽玛,似乎 Qvalues 很快就接近于零(我在快速测试中得到了大约 10^-300 的值)。考虑到这个问题,人们通常如何绘制 Qvalues(我正在为那个状态绘制一个 (x, y, best QValue))?我正在尝试使用对数,但即便如此感觉有点尴尬。

另外,我不明白 Q Learning 更新函数中具有和 alpha 参数的原因是什么。它基本上设置了我们将对 Q 值函数进行的更新幅度。我认为它通常会随着时间的推移而减少。让它随着时间的推移而减少的兴趣是什么?一开始的更新值应该比之后的 1000 集更重要?

另外,我认为每次代理不想执行贪婪动作时探索状态空间的一个好主意是探索仍然具有零 QValue 的任何状态(这意味着,至少在大多数情况下,以前从未做过的状态),但我没有看到任何文献中提到过。这有什么缺点吗?我知道这不能与(至少某些)泛化函数一起使用。

另一个想法是保留一张已访问状态/动作的表格,并尝试执行之前在该状态下尝试次数较少的动作。当然,这只能在相对较小的状态空间中完成(在我的情况下这绝对是可能的)。

探索过程后期的第三个想法是不仅要查看所选动作以寻找最佳 qvalues,还要查看所有可能的动作和该状态的内部,然后查看该状态的其他动作等等。

我知道这些问题有点不相关,但我想听听以前曾与此相关的人的意见,并且(可能)也曾与他们中的一些人斗争过。

0 投票
3 回答
7925 浏览

c# - C#中的强化学习

  • 我打算在我的项目中使用强化学习,但我不知道如何实现它。
  • 所以我正在寻找一个可以在我的 C# 项目中使用的具有不同 RL 算法的库。

谢谢

请注意:我找到了用于神经网络的 NeuronDotNet 库,我现在正在寻找 RL 库..

编辑:或 Dot NET 库