簡體   English   中英

馬爾可夫決策過程的轉移矩陣必須是隨機的嗎?

[英]Must a transition matrix from a Markov Decision Process be stochastic?

我正在嘗試使用值迭代(通過 pymdptoolbox)和 NumPy 找到此圖中指定的馬爾可夫決策過程問題的最佳策略。 但是 pymdptoolbox 說我的轉換矩陣“不是隨機的”。

是不是因為有 [0, 0, 0, 0] 的數組? 有些轉換是不可能的,比如從狀態 1 到狀態 3。如果不是用零,我如何表示這些不可能的轉換?

我的代碼:

import mdptoolbox 
import numpy as np

transitions = np.array([
#action1
    [
            [0.2, 0.8, 0, 0], #s1
            [0, 0, 0, 0], #s2
            [0, 0, 0, 0], #s3
            [0, 0, 0.9, 0.1] #s4
    ],

#action2
    [
            [0.2, 0, 0, 0.8], #s1
            [0, 0.2, 0.8, 0], #s2
            [0, 0, 0, 0], #s3
            [0, 0, 0, 0] #s4
    ],

#action3
    [
            [0, 0, 0, 0], #s1
            [0.8, 0.2, 0, 0], #s2
            [0, 0, 0, 1], #s3
            [0, 0, 0, 0] #s4
    ],

#action4
        [
                [0.8, 0, 0, 0.2], #s1
                [0, 0, 0, 0], #s2
                [0, 1, 0, 0], #s3
                [0, 0, 0, 0] #s4
        ]
])

rewards = np.array([
        [0, 0, 0, 0],
        [0, 0, 0, 0],
        [1, 1, 1, 1],
        [0, 0, 0, 0]
        ])

vi = mdptoolbox.mdp.ValueIteration(transitions, rewards, 0.4)

問題是您使用了所有 0 值來表示無法訪問的狀態。 每行的總概率必須為 1。 由於狀態無法訪問,因此無論您如何操作都無所謂——將“1”放入第一列,均勻分配值,無論您喜歡什么。 當我遇到這個問題時,我只是在主對角線上使用“1”:讓不可能的狀態成為一個接收器。

我沒有足夠的代表來評論回復,但我想擴展 Prune 的答案。 目前正在做一個練習,將 mdp 工具箱值迭代結果與我們自己在 python 中實現的算法進行比較。 我要說的是,我不確定您所說的 sink Prune 是什么意思,所以我可能會以某種方式重復您的答案,如果是這樣,請編輯/標記我的評論以進行刪除。

我基本上最終會聽從你的建議。 但是,我的同學做出了很好的貢獻,我認為這確實使之奏效。 基本上,假設你有三個狀態,state1、state2 和 state 3。此外,你有一個給定動作的轉換矩陣,一個 3x3,狀態 1,2,3 作為行以及轉換到狀態 1,2 的概率,3 在列中(因此單元格 [1,2] 將是在從狀態 1 采取行動的情況下轉換到狀態 2 的概率。如果您像 Prune 建議的那樣在對角線上全是 1,您將有 100% 的機會如果您采取行動,無論您處於何種狀態,都將保持在該狀態。

為了讓它與 mdptoolbox 一起工作並且是隨機的,你確實希望像 Prune 所說的那樣強制所有行的總和為 1。 但是,我認為您不能隨意選擇可以將“1”放入全為零的行中的列。 我認為要讓程序一致且准確地運行,您需要確保在全零的那一行(即狀態 s)中,您將 1 放在與返回相同狀態的轉換相對應的單元格中(即 [s, s] =1)。 這與將其放在給定行的正確“對角線”位置基本相同。 此外,請確保此操作的獎勵 (reward[s,s]) 為 0。這實質上是說,如果您在狀態 s 上采取感興趣的不可能操作,您有 100% 的機會保持在同一狀態沒有獎勵。

這個答案對我來說非常天真,盡管我會說我搜索了手冊和源代碼試圖找到解決方案(這是手冊的鏈接)。 我對這個發布的答案充滿信心,因為我編寫了一個不依賴於完美隨機矩陣的值迭代的實現,並且獲得了與我按照上述 mdptoolbox 值迭代方法時所做的相同的最佳策略和值。 而且,當我任意選擇列強制“1”進入並使矩陣隨機時,我沒有得到一致的結果,也沒有任何一個與算法的手動實現一致。 作為參考,這里是我為值迭代引用的偽代碼。 如果我做錯了什么,有人叫我出去!

值迭代的偽代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM