【问题标题】:Implementing reinforcement learning in NetLogo (Learning in multi-agent models)在 NetLogo 中实施强化学习(多智能体模型中的学习)
【发布时间】:2014-01-15 12:32:23
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: netlogo reinforcement-learning agent-based-modeling q-learning


    【解决方案1】:

    在我的模型中,动作和后续状态之间没有关系,这让我怀疑在这种情况下考虑 RL 是否可以。

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

    在任何情况下,即使代理在没有任何控制的情况下在状态空间中移动,它仍然可以学习不同状态的奖励。实际上,许多 RL 算法涉及半随机地在状态空间中移动以找出奖励是什么。

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

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

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

    现在,关于未知奖励。这其实完全没问题。奖励可以是random variable。在这种情况下,应用标准 RL 算法的一种简单方法是在做出决策时使用变量的expected value。如果分布未知,那么算法可以只使用目前观察到的奖励的平均值。

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

    希望这会有所帮助!

    2018 年 2 月 7 日更新:最近的一次投票让我想起了这个问题的存在。在被问到之后的这些年里,我实际上在 NetLogo 中更深入地研究了强化学习。特别是,我为 NetLogo 制作了一个python extension,主要是为了更容易将机器学习算法与模型集成。扩展的One of the demos 在模型运行时使用深度 Q 学习训练一组代理。

    【讨论】:

    • 非常感谢,正如我所说,我对状态没有明确的定义,我的模拟涉及社会互惠交换,例如分享和偷窃或无所事事,但所有这些行动可能不是可用于所有代理,因为一些基于其内部状态的人通常共享而其他人窃取,但是,每个行为都有一系列不同的操作,例如他们只能与组内人员或组外人员共享,或者他们只能决定从外部窃取,该决定会影响代理人的声誉和自我满意度
    • 你的回答很有帮助,因为我是 RL 的新手,我不知道应该问自己什么样的问题:D
    • 我很高兴它有帮助!关于动作的可用性:可用动作应该完全由状态决定。请记住,内部变量可以包含在状态中。因此,如果代理倾向于不偷窃,那么该倾向是状态的一部分,并且该操作不可用。类似地,假设一个代理人靠近一个外群代理人,因此可以偷窃。那是一种状态。现在假设该代理靠近组内代理,因此不能偷窃。那是一种不同的状态。通过这种方式,状态决定了代理可以采取的行动。
    • 再次感谢我会考虑这个:)
    猜你喜欢
    • 2022-09-28
    • 2019-11-21
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2020-10-07
    • 2019-04-16
    相关资源
    最近更新 更多