在 NetLogo 中实现强化学习(多代理模型中的学习)

Mar*_*rzy 6 reinforcement-learning agent-based-modeling netlogo q-learning

我正在考虑在我的模型中为不同类型的代理实施学习策略。说实话,我还是不知道该先问什么样的问题,或者从哪里开始。

我有两种类型的代理,我希望他们通过经验来学习,他们有一组行动,根据可能发生的具体情况,每种行动都有不同的奖励。我是强化学习方法的新手,因此欢迎任何关于我应该问自己什么样的问题的建议:)

以下是我将如何阐述我的问题:

  1. 代理有一个生命周期,他们会跟踪一些对他们来说重要的事情,这些指标对于不同的代理来说是不同的,例如,一个代理想要增加 A,另一个代理想要 B 多于 A。
  2. 状态是特工一生中的点,他们有不止一个选择(我对状态没有明确的定义,因为它们可能会发生几次或根本不会发生,因为特工四处走动,他们可能永远不会遇到一种情况)
  3. 奖励是智能体在特定状态下从某个动作中可以获得的指标的增加或减少,并且智能体不知道如果他选择另一个动作会获得什么收益。
  4. 增益不是恒定的,状态没有明确定义,并且没有从一种状态到另一种状态的正式转换,
  5. 例如,代理可以决定与同处一地的代理之一(操作 1)或同一位置的所有代理(操作 2)共享如果某些条件成立,则操作 A 将对该代理更有利,而在其他条件行动2将有更高的奖励;我的问题是我没有看到任何具有未知奖励的示例,因为在这种情况下共享还取决于其他代理的特征(这会影响奖励系统的条件)并且在不同的状态下它会有所不同。

在我的模型中,动作和后续状态之间没有关系,这让我想知道在这种情况下是否可以考虑强化学习。

我希望在这里优化的是我的代理能够以更好的方式推理当前情况,而不仅仅是响应由其内部状态触发的需求。他们有一些个性,可以定义他们的长期目标,并可以影响他们在不同情况下的决策,但我希望他们记住在某种情况下采取的行动有助于他们增加他们首选的长期目标。

Bry*_*ead 5

在我的模型中,动作和后续状态之间没有关系,这让我想知道在这种情况下是否可以考虑强化学习。

这看起来很奇怪。如果不改变状态,动作会做什么?请注意,代理不必知道他们的行为将如何改变他们的状态。同样,动作可能会不完美地改变状态(机器人的踏板可能会滑出,因此当它试图移动时它实际上并没有移动)。事实上,一些算法是专门针对这种不确定性而设计的。

无论如何,即使智能体在没有任何控制的情况下在状态空间中移动,它仍然可以学习不同状态的奖励。事实上,许多强化学习算法都涉及半随机地在状态空间中移动来找出奖励是什么。

我对状态没有明确的定义,因为它们可能会发生几次,也可能根本不会发生,因为特工会四处走动,他们可能永远不会遇到某种情况

您可能会考虑扩展您所认为的“状态”。例如,位置似乎肯定应该进入标识状态的变量中。并非所有状态都需要奖励(尽管好的强化学习算法通常会推断出中立状态的良好程度)。

我建议明确定义确定代理状态的变量。例如,状态空间可以是current-patch X internal-variable-value X other-agents-present。在最简单的情况下,代理可以观察构成其状态的所有变量。然而,有些算法不需要这样做。代理应该始终处于某种状态,即使该状态没有奖励值。

现在,关于未知的奖励。这实际上完全没问题。奖励可以是随机变量。在这种情况下,应用标准强化学习算法的一个简单方法是在做出决策时使用变量的期望值。如果分布未知,则算法可以仅使用迄今为止观察到的奖励的平均值。

或者,您可以在状态定义中包含确定奖励的变量。这样,如果奖励发生变化,那么它实际上就处于不同的状态。例如,假设机器人位于建筑物顶部。它需要到达前面建筑物的顶部。如果它只是向前移动,它就会掉到地上。因此,该状态的奖励非常低。然而,如果它首先放置一块木板从一栋建筑物到另一栋建筑物,然后向前移动,则奖励会发生变化。为了表示这一点,我们可以包含plank-in-place一个变量,以便将板放置到位实际上会改变机器人的当前状态以及前进所导致的状态。因此,奖励本身并没有改变;只是处于不同的状态。

希望这有帮助!

2018 年 2 月 7 日更新:最近的一次投票提醒我这个问题的存在。自从有人提出这个问题以来,我实际上已经在很大程度上深入研究了 NetLogo 中的强化学习。特别是,我为 NetLogo 做了一个python 扩展,主要是为了更容易地将机器学习算法与模型集成。该扩展的一个演示在模型运行时使用深度 Q 学习来训练一组代理。