Markov Decision Process(馬爾科夫決策過程)

一、基礎概念

Markov Decision Process(MDP)是以馬爾科夫過程為基礎,加入決策變數而形成的數學模型。它主要包含以下成分:

狀態(State):描述系統當前的所有狀態,可能是一維或多維向量。在某一時刻,系統處於某個具體的狀態。

決策(Decision):指當前狀態下擬採取的行動或策略。決策的選擇受到限制,如有些狀態下只有一個可選擇的決策,有些則有多個不同的決策可供選擇。

獎勵(Reward):在當前狀態下,由於做出該決策所獲得的收益或者價值。

轉移概率(Transition Probability):指在某個狀態下,執行某個決策轉移到另一個狀態的概率。在馬爾科夫過程中,當前狀態的下一個狀態僅與當前狀態相關,與之前的狀態和決策無關。

MDP模型可以用以下狀態轉移矩陣表示:

                    s1      s2      s3      ...     sn
   a1,s1 -> s'1    p11     p12     p13     ...     p1n
   a1,s2 -> s'2    p21     p22     p23     ...     p2n
   a1,s3 -> s'3    p31     p32     p33     ...     p3n
   ...             ...     ...     ...     ...     ...
   a1,sn -> s'n    pn1     pn2     pn3     ...     pnn
   a2,s1 -> s'1    q11     q12     q13     ...     q1n
   a2,s2 -> s'2    q21     q22     q23     ...     q2n
   a2,s3 -> s'3    q31     q32     q33     ...     q3n
   ...             ...     ...     ...     ...     ...
   a2,sn -> s'n    qn1     qn2     qn3     ...     qnn
   ...             ...     ...     ...             ...
   am,s1 -> s'1    r11     r12     r13     ...     r1n
   am,s2 -> s'2    r21     r22     r23     ...     r2n
   am,s3 -> s'3    r31     r32     r33     ...     r3n
   ...             ...     ...     ...     ...     ...
   am,sn -> s'n    rm1     rm2     rm3     ...     rmn

其中,$s_i$表示第$i$個狀態,$a_j$表示第$j$個決策,$s’_k$表示第$k$個狀態。$p_{i,k}$表示在狀態$s_i$下,執行決策$a_1$,轉移到狀態$s’_k$的概率;$q_{i,k}$表示在狀態$s_i$下,執行決策$a_2$,轉移到狀態$s’_k$的概率;$r_{i,k}$表示在狀態$s_i$下,執行決策$a_m$,轉移到狀態$s’_k$的概率。

二、價值函數

價值函數是MDP中的一個核心概念,用於評價某個狀態或狀態集合的價值,即在這個狀態或狀態集合下,執行某個策略所能獲得的期望獎勵。

具體來說,對於某個狀態$s$,我們定義它的價值函數為$V(s)$,表示在狀態$s$下,執行我們所選擇的策略能夠獲得的期望獎勵。進一步地,我們可以將所有狀態的價值函數組合成一個向量:

$$
V = [V(s_1), V(s_2), …, V(s_n)]^T
$$

同樣,對於某個狀態$s$和一個決策$a$,我們定義它的價值函數為$Q(s,a)$,表示從狀態$s$開始,採取決策$a$,以後策略的預期收益。進一步地,我們可以將所有狀態和所有決策的價值函數組合成一個$nxm$維的矩陣$Q$:

$$
Q = \begin{bmatrix} Q(s_1,a_1) & Q(s_1,a_2) & … & Q(s_1,a_m) \\ Q(s_2,a_1) & Q(s_2,a_2) & … & Q(s_2,a_m) \\ … & … & … & … \\ Q(s_n,a_1) & Q(s_n,a_2) & … & Q(s_n,a_m) \end{bmatrix}
$$

三、策略(Policy)

策略指從狀態到決策的映射,即在每個狀態下採取哪個決策。如果策略是確定性策略,那麼對於同一個狀態,總是選擇相同的決策;如果是隨機策略,那麼在相同的狀態下,每個決策的選擇是按一定概率分布隨機選擇的。

我們可以使用$\pi(a|s)$表示從狀態$s$開始採取決策$a$的概率。同時,我們也可以使用$\pi$來表示整個MDP中的策略,即$pi = [\pi(a|s_1), \pi(a|s_2), …, \pi(a|s_n)]$,其中$s_1, s_2, …, s_n$是所有可能的狀態。

四、MDP的求解

1. 值迭代

值迭代是解決MDP的最簡單的方法。它的思路很簡單:我們從某個初始狀態開始,按照某個策略,不斷地更新當前狀態的價值函數,直到價值函數不再變化。這時,我們可以得到這個策略的「最優」價值函數。因此,我們可以選擇每個狀態中最具有代表性的決策,組成一個最優策略。該過程中,我們使用式子(1)來更新價值函數:

$$
V(s) = \max_{a_i \in A(s)}\sum_{s’\in S}p(s’ | s, a_i) [ R(s, a_i, s’) + \gamma V(s’) ]
$$

其中,$A(s)$表示在狀態$s$下可選擇的決策的集合,$p(s’|s,a_i)$表示根據$s$和$a_i$轉移到$s’$的概率,$R(s,a_i,s’)$表示在狀態$s$下執行決策$a_i$轉移到狀態$s’$時所獲得的獎勵,$\gamma$表示考慮未來遠期收益的折扣因子。

2. 策略迭代

策略迭代是一種交替進行策略評估和策略改進的演算法。在每輪迭代中,首先通過與當前策略不同的一些策略,計算出它們的價值函數,然後根據新的價值函數來改進策略,最後返回一個新的策略。迭代循環直到策略收斂。在策略評估過程中,有兩種方法用來計算一個策略的價值函數。一種是採用而非確定性策略(stochastic policy),計算價值函數時考慮採用每個決策的概率。另一種是採用確定性策略(deterministic policy)。

下面是策略迭代的代碼示例:

import numpy as np

# 策略評估
def policy_evaluation(transitions, policy, gamma=1.0, theta=0.00001):
    num_states = transitions.shape[0]
    V = np.zeros(num_states)
    while True:
        delta = 0
        for state in range(num_states):
            v = 0
            for action, next_states in enumerate(transitions[state]):
                for next_state in next_states:
                    prob, reward = next_state[0], next_state[1]
                    v += policy[state][action] * prob * (reward + gamma * V[next_state[2]])
            delta = max(delta, abs(v - V[state]))
            V[state] = v
        if delta < theta:
            break
    return np.array(V)

# 策略改進
def policy_improvement(transitions, policy_eval_fn=policy_evaluation, gamma=1.0):
    num_states, num_actions = transitions.shape[0], transitions.shape[1]
    policy = np.ones([num_states, num_actions]) / num_actions
    while True:
        policy_stable = True
        value_function = policy_eval_fn(transitions, policy, gamma)
        for state in range(num_states):
            chosen_action = np.argmax(policy[state])
            action_values = np.zeros(num_actions)
            for action in range(num_actions):
                for next_state in transitions[state][action]:
                    prob, reward = next_state[0], next_state[1]
                    action_values[action] += prob * (reward + gamma * value_function[next_state[2]])
            best_action = np.argmax(action_values)
            if chosen_action != best_action:
                policy_stable = False
            policy[state] = np.eye(num_actions)[best_action]
        if policy_stable:
            return policy, value_function

五、總結

本文介紹了MDP的基本概念,包括狀態、決策、獎勵和轉移概率,在此基礎上進一步介紹了價值函數和策略的概念。接著,我們討論了兩種常用的MDP求解方法:值迭代和策略迭代。值迭代通過不斷找到最大價值函數來推導出最優決策。而策略迭代則通過不斷改進策略,來得出最優策略。最後,我們給出了策略評估和策略改進的示例代碼。

原創文章,作者:DZSP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/150125.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DZSP的頭像DZSP
上一篇 2024-11-07 09:49
下一篇 2024-11-07 09:49

相關推薦

  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python調用C代碼過程用法介紹

    本文將從多個方面詳細闡述Python調用C代碼的過程,包括相關的知識點、實例代碼以及注意事項等內容。 一、概述 Python作為一門高級語言,在很多情況下不能滿足開發人員的需求。此…

    編程 2025-04-27
  • Python自動搶購代碼實現過程

    本文將詳細介紹使用Python實現自動搶購的代碼實現過程。 一、安裝selenium庫 Selenium是一個自動化測試框架,可以在瀏覽器中模擬用戶操作,可以用來實現自動搶購。 首…

    編程 2025-04-27
  • 詳解Base64加密解密過程

    一、Base64加密解密的簡介 Base64是一種基於64個可列印字元來表示二進位數據的表示方法,主要應用於電子郵件、網頁傳輸、音樂播放器等多媒體文件的傳輸和保存.由於Base64…

    編程 2025-04-22
  • 五大過程組十大知識領域

    項目管理是在一定的資源限制下,通過有組織、系統、科學的管理方法,以預期的目標為導向,全面協調利用各種資源,使持續不斷的創造出符合客戶期望的成果的過程。而項目管理的核心內容就是五大過…

    編程 2025-04-12
  • 面向過程與面向對象的對比分析

    一、面向過程與面向對象的基本概念 面向過程和面向對象是兩種不同的程序設計方法,面向過程是一種以執行過程為中心進行設計和編寫的程序設計方法,它主要強調把數據和函數分開處理,利用流程式控制…

    編程 2025-04-12
  • Vue渲染過程詳解

    一、初始化實例 在Vue渲染過程的開始階段,首先需要進行實例化操作,即建立Vue實例。 這個過程中,Vue會將數據對象進行響應式處理,即將數據對象變成Observer對象,並添加監…

    編程 2025-02-25
  • SwiftExtension:優化Swift開發過程的利器

    一、簡介 SwiftExtension 是一個優化 Swift 開發過程的開源框架,它包含了很多常用方法的拓展,能夠節約我們開發時間,提高開發效率。同時,SwiftExtensio…

    編程 2025-02-05
  • 狄利克雷過程

    狄利克雷過程(Dirichlet Process, DP)是貝葉斯統計學中一個非常重要的概率過程,它是一種無限可分布的隨機過程。狄利克雷過程的引入,可以很好的處理聚類問題中,聚類中…

    編程 2025-02-01

發表回復

登錄後才能評論