学习强化学习《Reinforcement Learning An Introduction》,2.3节,做了个Matlab的仿真。
问题描述:the 10-armed bandit problem
这是一个重复做选择的问题。一共有10个选择,重复选择1000次。
每次选择都会有奖励,奖励是符合固定的正态分布的。
所以做不同的选择,获得的奖励不同;每次做的选择,尽管选择相同,但奖励也不同。
你的目的是,连续做了1000次选择后,得到的回报总和越高越好。
这个图是一个特殊的 10-armed bandit problem。特殊之处在于 q ⋆ ( a ) q_\star (a) q⋆(a)的值。
重要:10-armed bandit problem是一个系列问题的总称,每个特殊的10-armed bandit problem之间的不同之处在于 q ⋆ ( a ) q_\star (a) q⋆(a)的值的不同。选择选项 a a a后,获得奖励是符合正态分布的 N ( q ⋆ ( a ) , 1 ) N(q_\star(a),1) N(q⋆(a),1)。
算法1: ϵ − g r e e d y \epsilon-greedy ϵ−greedy algorithm
你是不知道 q ⋆ ( a ) q_\star(a) q⋆(a)的具体值的,所以首先要对每个选择的行为值做个估计,因为这个估计值是在不断更新的,所以定义为 Q t ( a ) Q_t( a ) Qt(a),意思是在 t t t时刻,选择行为 a a a后,估计得到的奖励值。
这个算法的大概步骤是:每次选择执行的行为是估计值最大的行为,小概率的情况下,随机选择其他的行为。
算法步骤如下:
-
初始化:将 Q ( a ) Q(a) Q(a)全部初始化为 0 0 0;将 N ( a ) N(a) N(a)全部初始化为0; R t o t a l ( t ) = 0 R^{total}(t)=0 Rtotal(t)=0;
-
for t = 1~1000
-
A = arg max a Q t ( a ) A=\arg\max_a Q_t(a) A=argmaxaQt(a) with probability 1 − ϵ 1-\epsilon 1−ϵ;
A = A= A= a random action with probability ϵ \epsilon ϵ;
-
计算回报 R ( t ) = b a n d i t ( A ) = N ( q ⋆ ( A ) , 1 ) R(t)=bandit(A)=N(q_\star(A),1) R(t)=bandit(A)=N(q⋆(A),1);
-
计算总回报 R t o t a l ( t ) + = R ( t ) R^{total}(t)+=R(t) Rtotal(t)+=R(t);
-
N A + = 1 N_A+=1 NA+=1;
-
Q ( A ) = Q ( A ) + 1 N ( A ) [ R − Q ( A ) ] Q(A)=Q(A)+\dfrac{1}{N(A)}[R-Q(A)] Q(A)=Q(A)+N(A)1[R−Q(A)];
-
仿真
因为存在不确定性,每次的回报都是服从一个正态分布,所以每次做实验的结果也是不一样的。为了说明问题,我们做2000次仿真实验,每次仿真实验都是,然后取平均值。
对于某一$\epsilon $的仿真步骤如下:
- for i = 1:2000
- 初始化 q ⋆ ( a ) q_\star(a) q⋆(a)为 N ( 0 , 1 ) N(0,1) N(0,1)的分布,由此确定了一个10-armed bandit problem;
- 对刚刚特殊化的问题,运行三次
ϵ
−
g
r
e
e
e
d
y
\epsilon-greeedy
ϵ−greeedy算法;
- for j = 1~3
- ϵ ( j ) = 0 ; 0.01 ; 0.1 \epsilon(j)=0;0.01;0.1 ϵ(j)=0;0.01;0.1
- 运行 ϵ − g r e e e d y \epsilon-greeedy ϵ−greeedy算法
- 得出 R i j t o t a l ( t ) R^{total}_{ij}(t) Rijtotal(t)
- for j = 1~3
- for t = 1:1000
- for i = 1:2000
- 对 i i i求均值 R ˉ j t o t a l ( t ) \bar{R}_j^{total}(t) Rˉjtotal(t);
- for i = 1:2000
- 作图,在一个图中,画出三个 R ˉ j t o t a l ( t ) \bar{R}_j ^{total}(t) Rˉjtotal(t)与时间的曲线图