[RL學習篇][#3] 自動學習grid_mdp最佳的策略

本文修改 policy_iteration.py程式,讓他可以執行[#1]的程式,並找出最佳動作。

 1 # /bin/python
 2 import numpy;
 3 import random;
 4 import gym;
 5 #from grid_mdp import Grid_Mdp
 6
 7
 8 class Policy_Value:
 9     def __init__(self, grid_mdp):
10         self.v = [0.0 for i in range(len(grid_mdp.env.states) + 1)] # 初始變數v <-- 值函數
11
12         self.pi = dict()
13         for state in grid_mdp.env.states:
14             if state in grid_mdp.env.terminate_states: continue
15             self.pi[state] = grid_mdp.env.action_s[0] #初始pi <-- 策略pi
16
17     def policy_improve(self, grid_mdp):
18
19         for state in grid_mdp.env.states:
20             grid_mdp.env.setAction(state)  # upate state
21             if state in grid_mdp.env.terminate_states: continue
22
23             a1 = grid_mdp.env.action_s[0]
24             s, r, t, z = grid_mdp.env._step(a1)
25             v1 = r + grid_mdp.env.gamma * self.v[s]
26
27             for action in grid_mdp.env.action_s:
28                 s, r, t, z = grid_mdp.env._step(action)
29                 if v1 < r + grid_mdp.env.gamma * self.v[s]: # 當action有更好的值,則更新動作
30                     a1 = action
31                     v1 = r + grid_mdp.env.gamma * self.v[s]
32
33             self.pi[state] = a1   # 紀錄最佳動作
34
35     def policy_evaluate(self, grid_mdp):
36         for i in range(1000):
37             delta = 0.0
38             for state in grid_mdp.env.states:
39                 grid_mdp.env.setAction(state) # upate state
40                 if state in grid_mdp.env.terminate_states: continue
41                 action = self.pi[state]
42
43                 s, r, t, z = grid_mdp.env.step(action)
44                 new_v = r + grid_mdp.env.gamma * self.v[s]
45                 delta += abs(self.v[state] - new_v)
46                 self.v[state] = new_v
47
48             if delta < 1e-6:
49                 break;
50
51     def policy_iterate(self, grid_mdp):
52         for i in range(100):
53             self.policy_evaluate(grid_mdp);
54             self.policy_improve(grid_mdp);
55
56
57 if __name__ == "__main__":
58     #grid_mdp = Grid_Mdp()
59     env = gym.make(‘GridWorld-v0‘)
60
61     policy_value = Policy_Value(env)
62     policy_value.policy_iterate(env)
63     print("value:")
64     for i in range(1, 6):
65         print("%d:%f\t" % (i, policy_value.v[i]), )
66     print("")
67
68     print("policy:")
69     for i in range(1, 6):
70         print("%d->%s\t" % (i, policy_value.pi[i]), )
71     print("")

執行結果如下:

/home/lsa-dla/anaconda3/envs/tensorflow/bin/python /home/lsa-dla/PycharmProjects/grid_mdp/lsa_test2.py
WARN: Environment ‘<class ‘gym.envs.classic_control.grid_mdp.GridEnv‘>‘ has deprecated methods. Compatibility code invoked.
value:
1:0.640000
2:0.800000
3:1.000000
4:0.800000
5:0.640000

policy:
1->e
2->e
3->s
4->w
5->w

Process finished with exit code 0

reference:

[1]  Reinforcement_Learning_Blog/2.强化学习系列之二:模型相关的强化学习/

原文地址:https://www.cnblogs.com/lishyhan/p/9052816.html

时间: 2024-10-10 15:08:49

[RL學習篇][#3] 自動學習grid_mdp最佳的策略的相关文章

Git 初學筆記 - 指令操作教學

Git 是分散式的版本控制系統, 從架設.簡易操作.設定, 此篇主要是整理 基本操作.遠端操作 等. 註: Git 的範圍太廣了, 把這篇當作是初學入門就好了. 注意事項 由 project/.git/config 可知: (若有更多, 亦可由此得知) origin(remote) 是 Repository 的版本 master(branch) 是 local 端, 正在修改的版本 平常沒事不要去動到 origin, 如果動到, 可用 git reset --hard 回覆到沒修改的狀態. Gi

[RL學習篇][#2] 簡單的grid_mdp測試程式

下方是用來簡單的測試 grid_mdp.py的程式,執行後會用隨機動作去跑動作. 1 import gym 2 import tensorflow 3 import random 4 from gym import wrappers 5 6 env = gym.make('GridWorld-v0') 7 8 env = wrappers.Monitor(env, './outputs/grid_mdp-experiment-', force=True) 9 10 for episode in

無心插柳的Linux學習者代言人——蔡德明

誰是「蔡德明」恐怕沒有多少人知道,不過提到「鳥哥」這個稱號,在臺灣的Linux社群幾乎是無人不知無人不曉,蔡德明正是鳥哥的本名.鳥哥究竟多有名? 如果你是有意學習Linux的初學者,卻不知如何下手,10個人當中有9個人會告訴你,先上「鳥哥的Linux私房菜」網站(http://linux.vbird.org) 瞧瞧,或是去書店買一本「鳥哥的Linux私房菜-基礎學習篇」來研讀,因為前者早已是臺灣最具人氣的Linux技術教學網站(從2002年至今,上站人 數已突破380萬人次),後者則是從2003

大一上學期學習生活情況總結

在本學期各科都已結課的某個夜裏,我開始寫我的這份總結.說實話,我真的很喜歡夜的這種安靜--靜能生慧. 我是高二下學期開始與計算機結緣,好吧,接觸的比較晚啦.但這並不妨礙我對它的興趣.從基礎的開始,到Word.Excel之類的,然後是PS.Flash,最後是VB.C. 在高考結束時,我用VB做了一些小玩具,學完了譚浩強那本C語言的教材,當然,還有裏面的例題.我的編程路,應該是從這個時候正式開始的吧! 報了計算機專業,沒有服從調劑.終於,我來到了大學,開始我的大學生活.這個學期,我學了很多知識,也經

老男孩老師課程學習筆記----linux目錄特點

linux 目錄的特點 1./根是所有目錄的頂點 2.目錄結構像一顆倒掛的樹 3.目錄和磁盤分區默認是沒有關聯的 4./根下不同的目錄可能會對應不同的分區和磁盤 5.所有的目錄都是按照一定的類別有規律的組織和命名的 linux裡設備如果不掛載是看不到入口的,類似沒有窗戶沒門的監獄 如果希望設備被訪問,就必須給這個設備一個入口 這個入口就叫作掛載點,掛載點的表現實質是一個目錄 mount 光驅也是一種設備 ---> cdrom mount /dev/cdrom /mnt / 第一塊盤 系統程序 /

邁向IT專家成功之路的三十則鐵律 鐵律八:IT人學習之道-基礎功

修練過中國武術的人都知道,任何一種拳法的學習最重要的就是基礎功,而基礎功又可分為內在與外在的修練,內在的修練強調在平心.靜氣.不爭的調息.至於外在這首重在站樁.鬆沉.不疾不徐的應對能力.有了深厚基礎的奠定,才能訓練出真正的武林高手.同樣的在IT技能專業的學習之路上,我們經常得在一兩年之內,就必須吸收一項全新的技術與應用,如何對於一門全新的技術並快速上手,以及擁有從故障排除到系統效調的能力,這些都得仰賴您相關的基礎功是否修練完善. 筆者曾經看過一些從事IT技術服務工作的朋友,對於「技術」這門課的學

邁向IT專家成功之路的三十則鐵律 鐵律二十八 IT人教學之道-速戰

所謂IT人教學之道是指可善用在工作之中帶領新人快速上手,或是使用在生活中指導他人迅速學會某項技能的重要經驗.相信大家都有當過新手被指導的體驗,也有擔任過資深的老手帶領新人的經驗.然而您可能不知道,即便是一位實戰經驗豐富的頂尖IT人,直到今日可能都還不知道如何指導別人快速上手.藉由本文筆者將分享自己最拿手的IT人教學之道,告訴IT朋友們如何成為一位既專業,又懂得如何傳授功力給新人的頂尖好手. 首先請記住IT人教學之道中最重要的前提條件,那就是「無私」.因為一旦有了藏私的念頭,最終便不能真正獲得教學

開學小問題

暗號:老師別錯過學生們吐露心聲的時候喔! 1.翻阅邹欣老师的关于师生关系博客,并回答下列问题,每个问题的答案不少于500字: 1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得来自老师的哪些帮助? 在這種關係中,我期望獲得來自老師的幫助就是:老師能定期的根據我們學生的學習新知識的時間長度來安排相應PTA作業的難易程度,根據休息時間的長短來限定作業量,使它們兩能成正比,此外對於學生們的問題能夠及時地指出,最好是針對個人的單獨提醒,不是在班級里的班級批評.在課堂上,老師的教學不僅

統計學簡史

統計是初產生於研究對國家,特別是對其經濟以及人口的描述.當時現代數學尚未形成.因此那時的統計史基本上是經濟史的範疇.現代統計主要起源於研究總體(population),變差(variation)和簡化數據(reduction of data). 第一個經典文獻屬於John Graunt(1620-1674),其具有技巧的分析指出了把一些龐雜.令人糊塗的數據化簡為幾個說明問題的表格的價值.他注意到在非瘟疫時期,一個大城市每年死亡數有統計規律,而且出生兒的性別比為1.08,即每生13個女孩就有14個