我在学习教程9时,会混淆rl_actions。 因为在程序上,rl_actions没有初始化和定义。 为什么在_apply_rl_actions函数和compute_reward函数中有一个“ rl_actions”参数? 我还检查了有关apply_acceleration函数的车辆内核代码。 原始的是:
def apply_acceleration(self, veh_ids, acc):
"""See parent class."""
# to hand the case of a single vehicle
if type(veh_ids) == str:
veh_ids = [veh_ids]
acc = [acc]
for i, vid in enumerate(veh_ids):
if acc[i] is not None and vid in self.get_ids():
this_vel = self.get_speed(vid)
next_vel = max([this_vel + acc[i] * self.sim_step, 0])
self.kernel_api.vehicle.slowDown(vid, next_vel, 1e-3)
答案 0 :(得分:1)
在flow/envs/base_env.py
方法中查看step
,这就是调用apply_rl_actions
和compute_reward
的地方。所有这三种方法都将要应用到代理的动作rl_actions
作为参数。这些动作由RL算法提供。 rl_actions
的形状是您环境的action_space
方法中提供的形状。
RL算法在每一步都会自动调用您的step
方法,并为其提供要应用的操作。 Flow的环境实际上封装在Gym
环境中,该环境已提供给RL算法。 RL算法可以与任何Gym
环境一起使用,这使得它非常通用,因为所有Gym
环境都具有诸如step
,reset
等方法。要了解有关此工作原理的更多信息,请研究如何训练自定义Gym
环境。