3

私は SARSA アルゴリズムの MATLAB 実装を作成しており、1 ステップの実装を作成することに成功しました。

現在、適格性トレースを使用するように拡張しようとしていますが、得られる結果はワンステップよりも悪いものです。(つまり、アルゴリズムはより遅い速度で収束し、エージェントがたどる最終パスはより長くなります。)

        e_trace(action_old, state_old) = e_trace(action_old, state_old) + 1;

        % Update weights but only if we are past the first step
        if(step > 1)

            delta = (reward + discount*qval_new - qval_old);

            % SARSA-lambda (Eligibility Traces)
            dw = e_trace.*delta;

              % One-step SARSA
            dw = zeros(actions, states);
            dw(action_old, state_old) = delta;

            weights = weights + learning_rate*dw;

        end

        e_trace = discount*decay*e_trace;

基本的に、q 値は nXm 重み行列に格納されます。ここで、n = アクションの数、m = 状態の数です。適格性トレース値は、e_trace マトリックスに保管されます。ワンステップと ET のどちらを使用するかによって、dw の 2 つの定義のいずれかを使用します。どこが間違っているのかわかりません。アルゴリズムは、次のように実装されています: http://webdocs.cs.ualberta.ca/~sutton/book/ebook/node77.html

dw = e_trace .* delta 

ネットワーク内のすべての重みの重みの変化 (つまり、すべての Q(s,a) ペアの値の変化) を定義し、学習率によって調整されたネットワークに供給されます。

最初は重みと e 値が 0 に設定されていることを付け加えておきます。

何かアドバイス?

4

0 に答える 0