學習強化學習《Reinforcement Learning An Introduction》,2.3節,做了個Matlab的仿真。
問題描述:the 10-armed bandit problem
這是一個重複做選擇的問題。一共有10個選擇,重複選擇1000次。
每次選擇都會有獎勵,獎勵是符合固定的正態分佈的。
所以做不同的選擇,獲得的獎勵不同;每次做的選擇,儘管選擇相同,但獎勵也不同。
你的目的是,連續做了1000次選擇後,得到的回報總和越高越好。
這個圖是一個特殊的 10-armed bandit problem。特殊之處在於的值。
重要:10-armed bandit problem是一個系列問題的總稱,每個特殊的10-armed bandit problem之間的不同之處在於的值的不同。選擇選項後,獲得獎勵是符合正態分佈的。
算法1: algorithm
你是不知道的具體值的,所以首先要對每個選擇的行爲值做個估計,因爲這個估計值是在不斷更新的,所以定義爲,意思是在時刻,選擇行爲後,估計得到的獎勵值。
這個算法的大概步驟是:每次選擇執行的行爲是估計值最大的行爲,小概率的情況下,隨機選擇其他的行爲。
算法步驟如下:
-
初始化:將全部初始化爲;將全部初始化爲0;;
-
for t = 1~1000
-
with probability ;
a random action with probability ;
-
計算回報;
-
計算總回報;
-
;
-
;
-
仿真
因爲存在不確定性,每次的回報都是服從一個正態分佈,所以每次做實驗的結果也是不一樣的。爲了說明問題,我們做2000次仿真實驗,每次仿真實驗都是,然後取平均值。
對於某一$\epsilon $的仿真步驟如下:
- for i = 1:2000
- 初始化爲的分佈,由此確定了一個10-armed bandit problem;
- 對剛剛特殊化的問題,運行三次算法;
- for j = 1~3
- 運行算法
- 得出
- for j = 1~3
- for t = 1:1000
- for i = 1:2000
- 對求均值;
- for i = 1:2000
- 作圖,在一個圖中,畫出三個與時間的曲線圖