2

R(報酬)が確率的時間依存変数であり、const時間間隔deltaTの後にリアルタイムで到着する環境で、Qラーニングを実装しようとしています。状態 S (スカラー) も const 時間間隔 deltaT の後に到着します。エージェントのタスクは、(S(n deltaT),R(n deltaT)) を得た後に最適なアクションを与えることです。

私の問題は、私がRLに非常に慣れていないことです。このアルゴリズムをどのように実装する必要があるのか​​ わかりません。Qラーニングアルゴリズムを説明するほとんどの論文は「科学的な英語」であり、役に立ちません。

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 の場合、これが最適に機能しないのはなぜですか。非常に重要です。助けてください。

4

1 に答える 1

0

詳細な情報がなければ、何が問題なのかを正確に判断するのは困難ですが、アルゴリズムを正しく実装したようには見えません。一般に、アルゴリズムは次のとおりです。

  1. 現在の状態として初期状態で開始します。
  2. 学習ポリシー (epsilon greedy など) を使用して、現在の状態から次のアクションを選択します。学習アルゴリズムは、現在の状態から次の状態への遷移を引き起こすアクションを選択します。
  3. (現在の状態、アクション) のペアは、次の状態が何であるかを示します。
  4. Qmax を見つけます (これは正しく行っていると思います)。1 つの例外として、次の状態が最終状態の場合は Qmax を 0 にする必要がありますが、そうでない場合があります。
  5. (現在の状態、アクション、次の状態) タプルの報酬を取得します。計算で次の状態への遷移を無視しているようです。
  6. (古い状態、古いアクション) の Q 値を更新します。あなたはこれを正しくやっていると思います。
  7. 現在の状態を次の状態に設定
  8. 現在の状態が終了でない限り、手順 2 に戻ります。

選択したアクションが実際にエージェントを意図した状態に移行させる確率を知っていますか?それとも観察によって推定する必要があるものですか? 状態が恣意的に到着し、何が起こるかを制御できない場合、これは強化学習を適用するのに適切な環境ではない可能性があります。

于 2015-04-10T20:19:54.203 に答える