问题标签 [q-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 投票
1 回答
202 浏览

c++ - 未知大小的无向图的 C++ 数据结构

我正在尝试制作一个程序来探索未知大小的无向图并在运行时构建邻接列表。通常我会做一个set<set<String>>(房间由一个字符串标识),但有人告诉我这在 C++ 中是不稳定的。什么是更好的数据结构?

0 投票
0 回答
286 浏览

machine-learning - 如何将 Q-learning 应用于物理系统?

我们是两个对强化学习感兴趣的法国机械工程专业的学生,​​他们试图将 Q-learning 应用于一个项目的旋转倒立摆。我们观看了 David Silver 的“youtube 课程”并阅读了 Sutton & Barto 的章节,基本理论很简单……但我们还没有看到我们的钟摆有任何积极的结果。

是我们构建的旋转倒立摆的图片和我们最新测试的图表,显示了每集的平均奖励(绿色)。运行 python 代码的计算机与 Arduino 换向,后者又控制步进电机。我们有一个旋转编码器,它可以为我们提供摆的角度(我们也可以从中计算角速度)。

作为第一步,我们选择在离散的二维状态空间(角位置和速度)中使用 Q 学习。我们让我们的系统运行了好几个小时,没有任何改进的迹象。我们已经尝试改变算法的参数、可能的动作、状态的数量及其划分等。此外,我们的系统往往会变热,因此我们将学习分为大约 200 个步骤的片段,然后是一个短暂的休息时间。为了提高速度和精度,我们在每集结束时批量更新 Q 值。

这是我们的更新功能:

这是代码的“主要”部分:Github(https://github.com/Blabby/inverted-pendulum/blob/master/QAlgo.py

这里我们关于为什么测试不成功的一些假设: - 系统运行时间不够长 - 我们的探索(e-greedy)不适应问题 - 超参数未优化 - 我们的物理系统太不可预测

有人有将强化学习应用于物理系统的经验吗?我们遇到了障碍,正在寻求帮助和/或想法。

0 投票
1 回答
954 浏览

algorithm - 使用线性函数逼近的 Q 学习

我想获得一些有关如何使用具有函数逼近的 Q 学习算法的有用说明。对于基本的 Q 学习算法,我找到了一些例子,我想我确实理解了。如果使用函数逼近,我会遇到麻烦。有人可以通过一个简短的例子给我一个解释它是如何工作的吗?

我知道的:

  1. 我们使用特征和参数而不是使用矩阵来表示 Q 值。
  2. 使用 fauters 和参数的线性组合进行近似。
  3. 更新参数。

我检查了这篇论文:Q-learning with function approximation

但我找不到任何有用的教程如何使用它。

感谢帮助!

0 投票
2 回答
478 浏览

pybrain - Q 学习系数溢出

我一直在使用黑盒挑战(www.blackboxchallenge.com)来尝试学习一些强化学习。

我已经为挑战创建了一个任务和一个环境,并且我正在使用 PyBrain 基于黑盒环境进行训练。环境的总结是每个状态都有许多特性,它们是浮点数的 numpy ndarray 和一组动作。对于训练示例,它是 36 个特征和 4 个动作。

我已经尝试过 Q_LinFA 和 QLambda_LinFA 学习器,但它们的系数都溢出(._theta 数组)。在训练期间,值开始正常并迅速增加,直到它们都是 NaN。当我尝试自己使用线性函数逼近器实现 Q 学习时,我遇到了类似的问题。我也尝试将功能缩小到 -1,1 但这没有任何帮助。

我的代码如下:

我的直觉是这可能与这两个运行时错误有关,但我无法弄清楚。请帮忙?

0 投票
1 回答
1504 浏览

machine-learning - Adding constraints in Q-learning and assigning rewards if constraints are violated

I took an RL course recently and I am writing a Q-learning controller for a power management application where I have continuous states and discrete actions. I am using a neural network (Q-network) for approximation the action values and selecting the maximum action value. Like any control system, I have certain constraints or bounds over variables that cannot be violated by the agent. Say, if my controller's (agent) actions are to discharge or charge a battery, the resultant energy cannot be less than 0 or more than the maximum capacity respectively.

I want to understand how do add such constraints in the action selection or value approximation routine? Two approaches come to mind

(1) Say I am running one episode for T steps. At every step, I input my current state to the Q-network and select the maximum action value. Upon taking this action, if my constraints are violated I can assign a huge negative reward, if not I can assign the associated reward. Eventually all the actions that get huge negative rewards (corresponding to undesirable behaviour), will be avoided thus the agent will operate within the model constraints. However, if I think from an optimazation point of view, such actions should NEVER be taken since they don't fall in the allowed region. So ideally, I should stop the iterations right there because there is all sequential actions will be unacceptable. This will cause a severe waste of data.

(2) Second, I feed my current state to the Q-network, select the action corresponding to max Q-value and check the constraint. IF violated, I go take the action corresponding to the second highest Q-value and repeat until my constraint(s) is satisfied. But will this ever lead to optimality?

I posit this might be a recurring problem while training autonomous control systems that involve constraints over multiple variables. Will be really glad to get your feedback!

0 投票
1 回答
271 浏览

machine-learning - 强化学习——代理如何知道选择哪个动作?

我正在尝试了解Q-Learning

基本更新公式:

我了解公式及其作用,但我的问题是:

代理如何知道选择 Q(st, at)?

我知道代理遵循一些策略 π,但是你首先如何创建这个策略?

  • 我的代理人正在玩西洋跳棋,所以我专注于无模型算法。
  • 代理所知道的只是它所处的当前状态。
  • 我知道它执行操作时,您会更新实用程序,但它如何知道首先要执行该操作。

目前我有:

  • 检查你可以从那个状态做出的每一个动作。
  • 选择具有最高效用的移动。
  • 更新移动的实用程序。

但是,这并不能真正解决很多问题,您仍然会陷入局部最小值/最大值。

所以,为了圆满结束,我的主要问题是:

对于一个一无所知并且使用无模型算法的代理,你如何生成一个初始策略,以便它知道要采取什么行动?

0 投票
1 回答
1091 浏览

machine-learning - 这是跳棋 Q-Learning 的正确实现吗?

我正在尝试了解Q-Learning


我当前的算法操作如下:

1.维护一个查找表,将状态映射到有关每个可用操作的即时奖励和效用的信息。

2.在每个状态,检查它是否包含在查找表中,如果没有则初始化它(默认实用程序为 0)。

3.选择采取以下概率的行动:

4.根据以下内容更新当前状态的实用程序:


我目前正在与我的代理对抗一个简单的启发式玩家,他总是采取会给它最好的即时奖励的举动。

结果- 结果很差,即使在几百场比赛之后,Q-Learning 代理的输球也比赢球多得多此外,胜率的变化几乎不存在,尤其是在达到几百场比赛之后。

我错过了什么吗?我已经实现了几个代理:

(死记硬背、TD(0)、TD(Lambda)、Q-Learning)

但它们似乎都产生了相似的、令人失望的结果。

在此处输入图像描述

0 投票
1 回答
950 浏览

neural-network - 神经网络的网格世界表示

我正在尝试为 Q 学习算法提出一个更好的表示二维网格世界状态的方法,该算法将神经网络用于 Q 函数。

在教程Q-learning with Neural Networks中,网格表示为整数(0 或 1)的 3-d 数组。第一维和第二维表示对象在网格世界中的位置。第三个维度编码它是哪个对象。

因此,对于其中包含 4 个对象的 4x4 网格,您将使用包含 64 个元素的 3-d 数组 (4x4x4) 来表示状态。这意味着神经网络将在输入层中有 64 个节点,因此它可以接受网格世界的状态作为输入。

我想减少神经网络中的节点数量,这样训练就不会花那么长时间。那么,您可以将网格世界表示为二维双精度数组吗?

我试图将 4x4 网格世界表示为一个二维数组,并使用不同的值来表示不同的对象。例如,我用 0.1 代表球员,用 0.4 代表进球。然而,当我实现这个算法时,算法完全停止了学习。

现在我认为我的问题可能是我需要更改我在图层中使用的激活函数。我目前正在使用双曲正切激活函数。我的输入值范围为 (0 - 1)。我的输出值范围从(-1 到 1)。我也试过sigmoid函数。

我意识到这是一个复杂的问题要问一个问题。任何关于网络架构的建议将不胜感激。

更新

游戏有三种变体: 1. 世界是静态的。所有对象都从同一个地方开始。2. 玩家起始位置随机。所有其他对象保持不变。3. 每个网格都是完全随机的。

通过更多的测试,我发现我可以用我的二维数组表示来完成前两个变体。所以我认为我的网络架构可能没问题。我发现我的网络现在特别容易发生灾难性遗忘(比我使用 3d 数组时更容易)。我必须使用“经验回放”让它学习,但即使如此我仍然无法完成第三个变体。我会继续努力的。我很震惊改变网格世界表示所产生的差异。它根本没有提高性能。

0 投票
1 回答
714 浏览

c++ - Q学习ludo游戏?

我目前正在尝试使用 Q-learning 实现一个 AI 玩家来对抗 2 个不同的随机玩家。

我不确定 Q-learning 是否适用于 Ludo 游戏,所以我对此有点怀疑。

我为游戏定义了 11 个状态。每个状态都是根据其他玩家的位置来定义的。

我可能的行动是 6,(受骰子限制)。

从理论上讲,我可以有四种不同的状态(每个 Ludo 令牌一个)可以执行骰子选择的动作,但我只会选择移动具有最高 Q(s,a) 的令牌并执行动作..

我不明白的是,在更新阶段会发生什么。

我知道我用新值更新了以前的值?...

基于 wiki 的更新如下:

在此处输入图像描述

我不明白的是奖励值与旧值有何不同?它是如何定义的,矩阵中的这些值有什么不同?

0 投票
1 回答
2662 浏览

c++ - 使用 softmax 进行动作选择?

我知道这可能是一个非常愚蠢的问题,但到底是什么......

我目前正在尝试实现使用 Boltzmann 分布的软最大动作选择器。

公式

我有点不确定,如果你想使用一个特定的动作怎么知道?我的意思是该函数为我提供了一个概率?但是我如何使用它来选择我想要执行的操作?