reinforcement-learning - 状态,多体环境中的每一步奖励
问题描述
(交叉发布: https ://ai.stackexchange.com/questions/15693/state-reward-per-step-in-a-multiagnet-environment )
在单代理环境中,代理采取行动,然后观察下一个状态和奖励:
for ep in num_episodes:
action = dqn.select_action(state)
next_state, reward = env.step(action)
隐式地,用于向前移动模拟(env)的 嵌入在 env.step() 函数中。
现在在多智能体场景中,智能体 1 ($a_1$) 必须在时间 $t_{1a}$ 做出决定,这将在时间 $t_{2a}$ 完成,并且智能体 2 ($a_2$) 做出决定在时间 $t_{1b} < t_{1a}$ 结束于 $t_{2b} > t_{2a}$。
如果他们的两个动作同时开始和结束,那么它可以很容易地实现为:
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.
总而言之,如何实现具有每个代理异步操作/奖励的多代理环境?
解决方案
推荐阅读
- asp.net-core - 如何在 .NET Core 3.1 中为 SOAP 请求设置证书?
- angular - 如何访问应用程序后端和管理员 - Laravel 5 后端 + Angular JS 管理员
- android - 将菜单项添加到应用程序外部的弹出菜单
- c# - Xamarin 表单:如何从 CRUD 函数动态(在应用程序中)添加菜单项?
- javascript - 在移动或拖动时检测两个对象在右边缘的碰撞
- android - 如何使用导航组件保持对话框打开?
- sql - 绑定变量到子查询
- sql - STRING_SPLIT 逻辑对我来说失败了
- javascript - document.write() 方法创建的文档没有收到来自其中的 iframe 的消息
- mysql - Google Apps 脚本 - JDBC 到 Google 云数据库的连接失败