強化學習(四):動態規劃
策略估值
給定馬爾科夫決策過程 和策略 ,有Bellman方程
通過不斷迭代,收斂到狀態價值函數
實現如下:
class DP(object): def __init__(self, states, actions, state_transition_table, reward_table, gamma): self.states = states self.actions = actions self.table = state_transition_table self.reward = reward_table self.gamma = gamma def policy_evaluation(self, iteration_num=None): while True: new_value_p = self.value_p.copy() for state in self.states: # 遍歷s s = 0.0 for action in self.actions: # 遍歷a for state_ in self.states: # 遍歷s sa = (state, action) target = self.reward[sa] + self.gamma * self.value_p[state_] s += self.policy[sa] * self.table[sa][state_] * target new_value_p[state] = s # 下面判斷是否已經收斂 # 如果收斂,跳出循環;如果不收斂,更新並繼續循環
在Grid World中,使用隨機策略
上述代碼估值如下:
策略改進
給定策略 及對應的狀態價值函數 ,動作價值函數 ,定義新策略 如下:
其中 ,並記 。
下面證明 。
- 首先,證明事實一:
- 其次,證明事實二:
反覆使用上述兩個事實,
- 步驟一:
- 步驟二:
依此類推,
策略迭代
結合策略估值和策略改進,有如下過程:
class DP(object): def policy_iteration(self, iteration_num=None, epsilon=0): while True: self.policy_evaluation(iteration_num) new_policy = self.policy_improvement(epsilon) if _all_equal(self.policy, new_policy): break else: self.policy = new_policy
通過策略迭代計算Grid World的最優策略如下:
價值迭代
給定馬爾科夫決策過程 和策略 ,有Bellman optimality方程
通過不斷迭代,收斂到最優狀態價值函數
實現參見agent.py,通過價值迭代計算Grid World的最優策略如下:
總結
事實上,
- 可以交替使用策略迭代和價值迭代求解最優策略
- 可以限制策略估值和價值迭代的迭代次數
本文代碼位於dynamical programming。
參考
- Planning by Dynamic Programming
- 無痛的機器學習
推薦閱讀:
※2018AI學習清單丨150個最好的機器學習和Python教程
※NLP文本分類實戰: 傳統方法與深度學習
※數據嗨客 | 第6期:不平衡數據處理
※斯坦福機器學習筆記10密度分布估計の混合高斯模型
※激活函數的實現與梯度檢查<五>
TAG:強化學習ReinforcementLearning | 機器學習 |