我正在尝试在 R(奖励)是随机时间相关变量的环境中实现 Q 学习,并且它们在 const 时间间隔 deltaT 之后实时到达。状态 S(标量)也在 const 时间间隔 deltaT 之后到达。代理的任务是在获得 (S(n deltaT),R(n deltaT)) 后给出最优动作。
我的问题是我对 RL 很陌生,我不明白应该如何实现这个算法,大多数描述 Q-learning 算法的论文都是用“科学英语”写的,这对我没有帮助。
OnTimer() 在固定间隔后执行:
double a = 0.95;
double g = 0.95;
double old_state = 0;
action new_action = null;
action old_action = random_action;
void OnTimer()
{
double new_state = environment.GetNewState();
double Qmax = 0;
foreach(action a in Actions)
{
if(Q(new_state, a) > Qmax)
Qmax = Q(new_state, a);
new_action = a;
}
double reward = environment.Reward(old_state, old_action);
Q(old_state, old_action) = Q(old_state, old_action) + a*(reward + g*Qmax - Q(old_state, old_action));
old_state = new_state;
old_action = new_action;
agent.ExecuteInEnvironment(new_action);
}
问题:
这是在线 Q 学习的正确实施吗,因为它似乎不起作用?为什么当 n*deltaT -> inf 时这不是最佳工作,请帮助它非常重要。