3

我正在编写 SARSA 算法的 MATLAB 实现,并成功编写了一步实现。

我现在正在尝试将其扩展为使用资格跟踪,但我获得的结果比一步更差。(即:算法收敛速度较慢,代理所遵循的最终路径较长。)

        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 的两种定义中的任何一种。我不确定我哪里出错了。该算法的实现如下所示:http ://webdocs.cs.ualberta.ca/~sutton/book/ebook/node77.html

dw = e_trace .* delta 

定义网络中所有权重的权重变化(即:所有 Q(s,a) 对的值变化),然后将其馈入由学习率调整的网络。

我应该补充一点,最初我的权重和 e 值设置为 0。

有什么建议吗?

4

0 回答 0