強化學習入門: the 10-armed bandit problem,e-greedy 算法

學習強化學習《Reinforcement Learning An Introduction》,2.3節,做了個Matlab的仿真。

問題描述:the 10-armed bandit problem

這是一個重複做選擇的問題。一共有10個選擇,重複選擇1000次。

每次選擇都會有獎勵,獎勵是符合固定的正態分佈的。

所以做不同的選擇,獲得的獎勵不同;每次做的選擇,儘管選擇相同,但獎勵也不同。

你的目的是,連續做了1000次選擇後,得到的回報總和越高越好。

在這裏插入圖片描述

這個圖是一個特殊的 10-armed bandit problem。特殊之處在於q(a)q_\star (a)的值。

重要:10-armed bandit problem是一個系列問題的總稱,每個特殊的10-armed bandit problem之間的不同之處在於q(a)q_\star (a)的值的不同。選擇選項aa後,獲得獎勵是符合正態分佈的N(q(a),1)N(q_\star(a),1)

算法1:ϵgreedy\epsilon-greedy algorithm

你是不知道q(a)q_\star(a)的具體值的,所以首先要對每個選擇的行爲值做個估計,因爲這個估計值是在不斷更新的,所以定義爲Qt(a)Q_t( a ),意思是在tt時刻,選擇行爲aa後,估計得到的獎勵值。

這個算法的大概步驟是:每次選擇執行的行爲是估計值最大的行爲,小概率的情況下,隨機選擇其他的行爲。

算法步驟如下:

  1. 初始化:將Q(a)Q(a)全部初始化爲00;將N(a)N(a)全部初始化爲0;Rtotal(t)=0R^{total}(t)=0;

  2. for t = 1~1000

    1. A=argmaxaQt(a)A=\arg\max_a Q_t(a) with probability 1ϵ1-\epsilon;

      A=A= a random action with probability ϵ\epsilon

    2. 計算回報R(t)=bandit(A)=N(q(A),1)R(t)=bandit(A)=N(q_\star(A),1)

    3. 計算總回報Rtotal(t)+=R(t)R^{total}(t)+=R(t);

    4. NA+=1N_A+=1;

    5. Q(A)=Q(A)+1N(A)[RQ(A)]Q(A)=Q(A)+\dfrac{1}{N(A)}[R-Q(A)];

仿真

因爲存在不確定性,每次的回報都是服從一個正態分佈,所以每次做實驗的結果也是不一樣的。爲了說明問題,我們做2000次仿真實驗,每次仿真實驗都是,然後取平均值。

對於某一$\epsilon $的仿真步驟如下:

  1. for i = 1:2000
    1. 初始化q(a)q_\star(a)N(0,1)N(0,1)的分佈,由此確定了一個10-armed bandit problem;
    2. 對剛剛特殊化的問題,運行三次ϵgreeedy\epsilon-greeedy算法;
      1. for j = 1~3​
        1. ϵ(j)=00.010.1\epsilon(j)=0;0.01;0.1
        2. 運行ϵgreeedy\epsilon-greeedy算法
        3. 得出Rijtotal(t)R^{total}_{ij}(t)
  2. for t = 1:1000
    1. for i = 1:2000
      1. ii求均值Rˉjtotal(t)\bar{R}_j^{total}(t);
  3. 作圖,在一個圖中,畫出三個Rˉjtotal(t)\bar{R}_j ^{total}(t)與時間的曲線圖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章