Q学习实施

时间:2015-04-09 11:30:30

标签: reinforcement-learning q-learning

我正在尝试在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-learning的正确实施,因为它似乎不起作用?当n * deltaT - >时,为什么这不起作用? inf,请帮助它非常重要。

1 个答案:

答案 0 :(得分:0)

如果没有更多信息,很难确切地说出了什么问题,但看起来你并没有正确地实现算法。通常,算法是:

  1. 以初始状态开始作为当前状态。
  2. 使用学习政策(例如epsilon greedy)从当前状态中选择下一个操作。学习算法将选择将导致从当前状态转换到下一状态的动作。
  3. (当前状态,动作)对将告诉您下一个状态是什么。
  4. 找到Qmax(我认为你做的正确)。一个例外可能是,如果下一个状态是终端状态,Qmax应为0,但您可能没有。
  5. 获得(当前状态,动作,下一个状态)元组的奖励。您似乎忽略了计算中向下一个状态的转换。
  6. 更新(旧状态,旧操作)的Q值。我认为你正确地做到了这一点。
  7. 将当前状态设置为下一个状态
  8. 返回步骤2,除非当前状态为终端。
  9. 您是否知道您选择的行动实际上导致您的代理人移动到预期状态的可能性,或者您必须通过观察估计的事情?如果国家只是随意到达并且您无法控制所发生的事情,那么这可能不适合应用强化学习。