这里给出一个带有扰动项的马尔科夫链问题,即每一次都可以采用不同的决策改变转移矩阵以及自身的收益矩阵,这里马尔科夫链就需要通过自后向前的递推得到每一步的最优策略
这里需要对于之前的马尔科夫链的代码进行较大的改动,这里给出一种双层循环的写法,具体参考的式子如下(每一次循环判断策略数次的maxium)
clc;clear
tic
load homework2
% S对应每一种状态所对应的策略数
i=input('状态数');
S=[2 2]; %%%%%对应不同状态所可以使用的策略,每次使用的时候需要调整
n=input('希望得到几期的收益');
vExpect=nan*ones(n,i);
sCumulate=nan*ones(n,i);
%这里初始化第一行的期望收益
%这里进行状态一的循环
sBest1=-100;
vBest1=-100;
for st=1:S(1)
v=P1(st,:)*(R1(st,:))';
if vBest1 < v
vBest1=v;
sBest1=st;
end
end
%这里进行状态二的循环
sBest2=-100;
vBest2=-100;
for st=1:S(2)
v=P2(st,:)*(R2(st,:))';
if vBest2 < v
vBest2=v;
sBest2=st;
end
end
vExpect(n,1)= vBest1;
vExpect(n,2)= vBest2;
sCumulate(n,1)= sBest1;
sCumulate(n,2)= sBest2;
for t=2:n %这里进行的是期数的循环
%这里进行状态一的循环
sBest1=-100;
vBest1=-100;
for st=1:S(1)
v=P1(st,:)*(R1(st,:)+vExpect(n-t+2,:))';
if vBest1 < v
vBest1=v;
sBest1=st;
end
end
%这里进行状态二的循环
sBest2=-100;
vBest2=-100;
for st=1:S(2)
v=P2(st,:)*(R2(st,:)+vExpect(n-t+2,:))';
if vBest2 < v
vBest2=v;
sBest2=st;
end
end
vExpect(n-t+1,1)= vBest1;
vExpect(n-t+1,2)= vBest2;
sCumulate(n-t+1,1)= sBest1;
sCumulate(n-t+1,2)= sBest2;
end
toc
其实这里是自后向前递推,所以这里所获得的vExpect矩阵并没有什么实际的意义。