在单代理环境中,代理采取行动,然后观察下一个状态和奖励:
for ep in num_episodes:
action = dqn.select_action(state)
next_state, reward = env.step(action)
隐式地,用于向前移动模拟(env)的 嵌入在 env.step() 函数中。
现在在多智能体场景中,智能体 1 () 必须及时做出决定, 这将在 time 结束, 和代理 2 () 及时做出决定 完成于.
如果他们的两个动作同时开始和结束,那么它可以很容易地实现为:
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.
总而言之,如何实现具有每个代理异步操作/奖励的多代理环境?