q-learning一步步更新q表,收斂速度慢,就是在當前狀態下探測後序狀態對當前狀態的影響,若可以得到n步狀態的評估,可以加速當前狀態的收斂。修改q(s,a)表的更新公式,
從公式中可以看出來由原來的學習一步變成要學習n步,這n步才使用貪婪策略來**未來n步每一步狀態的行為進行學習,這樣可以探索更遠距離的狀態對當前狀態的影響,更利於對當前狀態的評價,n的取值不可太大,不然就接近td演算法,需要對完整序列進行計算,效率低。如此更新還存在當未來狀態未被智慧型體發現時,只有**與環境行進n此互動才能計算,並且計算無意義。這是前向更新需要**未來狀態,後向更新只需要記錄進過的狀態、行為及回報就可以更新。只需要在q-learning演算法中加入後向更新函式就可以。在狀態s執行q-learning演算法b步驟後,遍歷記錄的之前狀態執行更新,
直至之前的n步更新:
與q-learning演算法的更新方式與了一些區別,不再使用貪婪策略進行需要下一狀態的**,因為這是已經發生了的行為,可直接使用。這是使用向後更新,在這q-learning演算法可以不必執行借助**下一步狀態的q(s,a)更新,即可去掉b步驟,此演算法便是sarsa(γ)演算法。從更新方式可以看出與sarsa演算法的相似,所以稱為sarsa(γ)演算法,sarsa演算法在q(s,a)表更新時不用**下一步狀態的行為,直接使用當前狀態的行為。
演算法學習記錄
排序演算法複雜度 層序遍歷 雙端佇列 演算法流程 特例處理 當樹的根節點為空,則直接返回空列表 初始化 列印結果空列表 res 包含根節點的雙端佇列 queue bfs 迴圈 當 queue 為空時跳出 新建列表 temp 用於臨時儲存當前層列印結果 當前層列印迴圈 迴圈次數為當前層節點數 即 qu...
演算法學習 4
排序是演算法學習中最基礎的內容,也有很多中排序演算法,這裡簡單介紹學一下堆排序。理解堆排序之前,一定要先明白什麼是堆,其實它就是乙個陣列或者是陣列的一部分,一定要記住明白這一點,不然容易有一種樹結構的錯覺。它就是在陣列的元素間定義一些關係,讓這些元素看起來近似乙個二叉樹。這些元素組成的陣列就叫做堆。...
Manacher s演算法學習記錄
在leetcode上刷題時遇到了這個問題,認真學習了該演算法。參考 演算法共分為三步 1.將字串a轉化為奇數長度字串b 2.計算字串b中以每乙個元素為中心的回文子串長度得到數字陣列c 3.獲取c中的最大值並依據此最大值擷取字串a得到目標最長的回文字串。直接上關鍵 預處理原始字串,將其轉化為奇數長度。...