Here is the batch TD(0) algorithm:
Here is the AB example I want to solve using batch TD(0):
And finally here is my Matlab code:
% eps1: A 0 B 0
% eps2: B 1
% eps3: B 1
% eps4: B 1
% eps5: B 1
% eps6: B 1
% eps7: B 1
% eps8: B 0
% (s, r, s') cases:
% (A,0,B)
% (B,0,Ter)
% (B,1,Ter)
% (B,1,Ter)
% (B,1,Ter)
% (B,1,Ter)
% (B,1,Ter)
% (B,1,Ter)
% (B,0,Ter)
n_s=2; % number of states
v(1)=0;
v(2)=0;
v_ter=0;
thrs=1e-3;
delta=1e6;
alpha=0.1;
while (delta > thrs)
for i=1:9 % we have 9 (s, r, s') cases
if i==1
v_pr(1)=v(1)+alpha*[0+1*v(2)-v(1)];
Delta(1)=abs(v_pr(1)-v(1));
elseif i==2
v_pr(2)=v(2)+alpha*[0+1*v_ter-v(2)];
Delta(2)=abs(v_pr(2)-v(2));
elseif (i>=3) && (i<=8)
v_pr(2)=v(2)+alpha*[1+1*v_ter-v(2)];
Delta(2)=abs(v_pr(2)-v(2));
else
v_pr(2)=v(2)+alpha*[0+1*v_ter-v(2)];
Delta(2)=abs(v_pr(2)-v(2));
end
end
v=v_pr;
delta=max(Delta);
delta
end
However, my code fails to find the correct result $v_{TD}(A)=v_{TD}(B)=3/4$. Where is the problem: in the batch TD(0) algorithm, in my code or in both?