【強化學習】第02期:動態規劃方法

筆者近期上了國科大周曉飛老師《強化學習及其應用》課程,計劃整理一個強化學習系列筆記。筆記中所引用的內容部分出自周老師的課程PPT。筆記中如有不到之處,敬請批評指正。

文章目錄

  • 2.1 動態規劃:策略收斂法/策略迭代法
  • 2.2 動態規劃:值迭代法


總的來說,DP方法就是在已知bellman方程的環境參數(回報R和轉移概率P)的情況下,求取最優策略 u ? u^* u?和最優值 v ? v^* v?

2.1 動態規劃:策略收斂法/策略迭代法

總體思路:算V --> 算Q --> 策略改進 (不斷重復)
初始化最優策略 u,
Step1 策略評估: 確定當前策略 𝜋 的值函數 V π V^π Vπ,可通過下面的式子求解。

Step2 計算動作值函數Q: 使用值函數 V π V^π Vπ來計算每個狀態-動作對的動作值函數 Q π ( s , a ) Q^π(s,a) Qπ(s,a)。這一步是為了計算在當前策略 𝜋 下,每個狀態-動作對的期望回報。

Step3 策略改進: 對每個狀態 𝑠 選擇能使 Q π ( s , a ) Q^π(s,a) Qπ(s,a)最大的動作𝑎,從而形成新的策略 𝜋′。這一步是為了更新策略,使其更接近最優策略。
在這里插入圖片描述
Step4: goto Step1, 直到最優策略u不變。
在這里插入圖片描述

2.2 動態規劃:值迭代法

值迭代(Value Iteration)是一種用于求解馬爾可夫決策過程(MDP)的經典動態規劃算法。它通過迭代地更新值函數,逐步逼近最優值函數 V ? V^* V? ,最終得到最優策略 π ? π^* π?
在這里插入圖片描述

值迭代一般分為這幾個步驟:
step1 初始化:設定初始值函數 V ( s ) V(s) V(s)為零或其他任意值。
step2 迭代更新:對于每個狀態 𝑠 ,根據當前值函數 V k V_k Vk?計算新的值函數 V k + 1 V_{k+1} Vk+1?。這個更新過程通過遍歷所有狀態和所有可能的動作,計算在每個狀態下采取每個動作所能獲得的期望累計獎勵,并選擇其中的最大值作為新的值函數值。
在這里插入圖片描述
step3 收斂判定:當值函數的變化小于某個預設的閾值 𝜃 時,認為值函數已經收斂,可以停止迭代。
在這里插入圖片描述
step4 策略提取:在值函數收斂后,通過值函數 V ? V^* V? 提取最優策略 π ? π^* π?
在這里插入圖片描述

關于值迭代,也有很多處理技巧,這里簡單介紹三種。
(1)In-place Dynamic Programming
在標準的值迭代過程中,我們通常會維護兩個值函數,一個用于保存當前迭代的結果,另一個用于保存上一次迭代的結果。而在 In-place Dynamic Programming 中,我們只使用一個值函數數組,在每次更新時直接覆蓋舊的值。
特點:只需要一個數組來存儲值函數,減少了內存消耗。

(2)Prioritized Sweeping
是一種加速值迭代的方法,通過優先更新那些對值函數變化影響較大的狀態,從而提高收斂速度。

(3)Real-time Dynamic Programming (RTDP)
是一種在實際運行過程中更新值函數的方法,適用于在線學習。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37334.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GD32F4時鐘配置

1.前言 硬件:GD32F450 最高時鐘頻率200MHZ(外部晶振8MHZ) 軟件:KEIL(V5.35) 固件包:GD32F4xx_Firmware_Library_V3.2.0 2.時鐘樹 時鐘配置大概流程如下圖紅線指示,GD32F470的最高頻率可以到240MHZ,GD32F450最高…

【frp】cron定時檢查zfrpc.service是否啟動成功

zfrpc 經常自動啟動失敗cron定時檢查zfrpc.service是否啟動成功 ChatGPT 要使用 cron 定期檢查 zfrpc.service 是否啟動成功,并在服務未運行時嘗試啟動它,你可以按照以下步驟進行操作: 創建腳本 首先,你需要創建一個腳本,這個腳本將檢查 zfrpc.service 的狀態,并在服務未…

字符串反轉字符串單詞(1)

大家好,今天我們來探討一道經典的編程問題——翻轉字符串里的單詞。這個問題要求我們編寫一個函數,將輸入字符串中的所有單詞進行翻轉,但單詞內部的字符順序保持不變。 問題分析: 1. 首先,我們需要理解翻轉字符串里的…

Codeforces Round 143 (Div. 2) C. To Add or Not to Add 題解 前綴和 二分

To Add or Not to Add 題目描述 A piece of paper contains an array of n n n integers a 1 , a 2 , . . . , a n a_{1},a_{2},...,a_{n} a1?,a2?,...,an?. Your task is to find a number that occurs the maximum number of times in this array. However, before l…

點云壓縮配置開發環境遇到一些bug

1、配置基于cuda的計算庫,Chamfer3D和pointops 編譯chamfer3D時候會遇到一個cub版本的校驗錯誤。 解決方法:根據錯誤提示,進入cuda的config配置文件中,使用#define將校驗功能關閉 編譯pointops,會遇到報錯:…

C++Primer Plus 第十四章代碼重用:14.4.4 數組模板示例和非類型參數2

14.4.4 數組模板示例和非類型參數 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 例如:第一章 Python 機器學習入門之pandas的使用 提示:寫完文章后,目錄可以自動生成,如何生成可參考右…

《分析模式》漫談08-單繼承不是“唯一繼承”

DDD領域驅動設計批評文集 做強化自測題獲得“軟件方法建模師”稱號 《軟件方法》各章合集 《分析模式》第2章這一段: 劃線處的single inheritance,2004中譯本的翻譯: 翻譯為“單繼承”,是正確的。 2020中譯本的翻譯&#xff1a…

Java NIO(一) 概述

NIO主要用于以少量線程來管理多個網絡連接,處理其上的讀寫等事件。在大量連接情況下,不管是效率還是空間占用都要優于傳統的BIO。 Java NIO 由以下幾個核心部分組成: Channel Buffer Selector Selector 如果你的應用打開了多個連接&#x…

分頁插件 count有數據,代碼不往下執行

如下:如果打印了sql那么當row>0時會有圖2下面sql詳情的輸出 問題出在了分頁參數上,pageNum為1,并且pageSize>2才能打印出圖二的結果,圖一為pageNum值是0,注意,查詢第一頁,分頁應該傳入的是1而不是0

大數據批處理系統和業務系統是兩種不同類型的系統,它們在目的、設計、功能和使用場景上有所區別

大數據批處理系統和業務系統是兩種不同類型的系統,它們在目的、設計、功能和使用場景上有所區別。以下是大數據批處理系統和業務系統之間的一些主要差異: 1. **目的**: - **大數據批處理系統**:主要用于處理和分析大量數據&am…

MySQL高級1.0

目錄 📌MySQL存儲過程和函數 ??存儲過程和函數介紹 ??存儲過程的創建和調用 ??存儲過程的查看和刪除 ??存儲過程語法-變量 ??存儲過程語法-if語句 ??存儲過程語法-參數傳遞 ??存儲過程語法-while循環 ??存儲過程語法-存儲函數 &#x1f4…

Linux高并發服務器開發(六)線程

文章目錄 1. 前言2 線程相關操作3 線程的創建4 進程數據段共享和回收5 線程分離6 線程退出和取消7 線程屬性(了解)8 資源競爭9 互斥鎖9.1 同步與互斥9.2 互斥鎖 10 死鎖11 讀寫鎖12 條件變量13 生產者消費者模型14 信號量15 哲學家就餐 1. 前言 進程是C…

【FFmpeg】avio_open2函數

【FFmpeg】avio_open2函數 1.avio_open21.1 創建URLContext(ffurl_open_whitelist)1.1.1 創建URLContext(ffurl_alloc)1.1.1.1 查找合適的protocol(url_find_protocol)1.1.1.2 為查找到的URLProtocol創建UR…

影響Cache命中率的因素有哪些?

緩存命中率(Cache Hit Rate)是指處理器訪問緩存時,所需數據已經在緩存中找到的次數與總訪問次數的比例。提高緩存命中率可以顯著提升系統性能,因為緩存訪問速度遠快于主存訪問速度。影響緩存命中率的關鍵因素包括: 1.…

C語言異常處理就機制setjmp()和longjmp()

C語言setjmp()和longjmp()實現異常處理機制。 setjmp() 用于保存當前的程序執行狀態。 longjmp() 用于在后面的某個時刻返回到setjmp()點的狀態。 類似goto。但goto是本地的,只能在函數內部跳轉。 setjmp()和longjmp()是非局部跳轉語句,可在調用棧上&a…

通信系統網絡架構_3.移動通信網絡架構

移動通信網為移動互聯網提供了強有力的支持,尤其是5G網絡為個人用戶、垂直行業等提供了多樣化的服務。以下從業務應用角度給出面向5G網絡的組網方式。 1.5GS與DN互連 5GS(5G System)在為移動終端用戶(User Equipment,…

CSRF的其他防范措施?

一般情況下,我們可以通過各種防護策略來防御CSRF,對于QA、SRE、安全負責人等,我們可以做哪些事情來提升安全性呢? 一、CSRF測試 CSRFTester是一款CSRF漏洞的測試工具,CSRFTester工具的測試原理大概是這樣的&#xff…

BLACKBOX.AI:解鎖開發新紀元,加速編程學習的AI神器!

文章目錄 💯BLACKBOX.AI 官網🍁1 BLACKBOX.AI 工具使用教程🍁2 BLACKBOX.AI工具使用界面介紹🍁3 Chat(聊天)功能🍁4 Explore (探索)功能💎4.1 Terminal(終端)功能💎4.2 Discover(發現)功能&…

STM32 IWDG(獨立看門狗)

1 IWDG簡介 STM32有兩個看門狗:一個是獨立看門狗(IWDG),另外一個是窗口看門狗。獨立看門狗也稱寵物狗,窗口看門狗也稱警犬。本文主要分析獨立看門狗的功能和它的應用。 獨立看門狗用通俗一點的話來解釋就是一個12位的…

關于轉BigDecimal對象時,精度問題

//浮點型數值Double d 0.0003d;//轉BigDecimal對象BigDecimal a new BigDecimal(d);System.out.println(String.format("浮點類型數字:%.4f創建BigDecimal對象并且保留多位小數并且保留多位小數時,精度會變多,結果為%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));…