如何实现具有异步操作和每个代理奖励的多代理环境?

人工智能 强化学习 人工智能设计 多代理系统
2021-10-24 04:17:29

在单代理环境中,代理采取行动,然后观察下一个状态和奖励:

for ep in num_episodes:
    action = dqn.select_action(state)
    next_state, reward = env.step(action)

隐式地,用于向前移动模拟(env)的 嵌入在 env.step() 函数中。

现在在多智能体场景中,智能体 1 (a1) 必须及时做出决定t1a, 这将在 time 结束t2a, 和代理 2 (a2) 及时做出决定t1b<t1a 完成于t2b>t2a.

如果他们的两个动作同时开始和结束,那么它可以很容易地实现为:

for ep in num_episodes:
    action1, action2 = dqn.select_action([state1, state2])
    next_state_1, reward_1, next_state_2, reward_2 = env.step([action1, action2])

因为 env 可以并行执行,等待它们完成,然后返回下一个状态和奖励。但是在我之前描述的场景中,尚不清楚如何实现这一点(至少对我而言)。在这里,我们需要明确地跟踪时间,在任何时间点检查以查看代理是否需要做出决定,具体来说:

for ep in num_episodes:
    for t in total_time:
       action1 = dqn.select_action(state1)
       env.step(action1) # this step might take 5t to complete. 
       as such, the step() function won't return the reward till 5 t later. 
        #In the mean time, agent 2 comes and has to make a decision. its reward and next step won't be observed till 10 t later. 

总而言之,如何实现具有每个代理异步操作/奖励的多代理环境?

1个回答

从理论的角度来看,最简洁的解决方案是切换到分层框架,即一些支持时间抽象的框架。我最喜欢的是由 Sutton、Precup 和 Singh 形式化的选项框架

基本思想是,您认为代理的“动作”成为“选项”,它们是“大动作”,可能需要不止一个原始时间步长。当代理选择一个选项时,它将继续“自动驾驶”,并按照最后选择的选项所指示的更原始、更细粒度的时间尺度继续选择原始操作,直到该选项实际完成执行。在您的情况下,您可以:

  • 实现选项的第一个“原始动作”以立即将所有效果应用于状态,然后附加一系列“无操作”动作以确保该选项实际上具有比单个原始时间步长更长的持续时间,或者
  • 实现选项的最后一个原始操作以实际将更改应用于状态,并在其前面添加一系列“无操作”操作以使选项花费更多时间,或者
  • 介于两者之间的东西(即实际上在选项执行期间对可见的状态进行部分更改)。

由于您的场景中代理的所有合法选择似乎都是选项,即您不允许代理在更细粒度的时间尺度上选择原始动作,您只需在您的 RL 算法中实现“选项间”学习;没有必要进行“选项内”学习。

在实践中,如果您只有少量的代理并且有需要花费相对大量时间的选项,您不必实际循环所有原始时间步长。例如,您可以计算应该提前执行“事件”的原始时间戳,并根据这些时间戳将这些要处理的事件插入到事件处理队列中。然后,您总是可以直接跳到需要处理事件的下一个时间戳。对于“事件”,我基本上是指应该发生某事的所有时间步长,例如,一个选项结束的时间步长以及一个或多个代理应该选择一个新选项的时间步长。选项间强化学习技术基本上忽略了更细粒度时间尺度的存在,