我為具有 4 種可能狀態(tài)和 4 種可能操作的板設置了一個簡單的 MDP。董事會和獎勵設置如下所示:這里S4是目標狀態(tài),S2是吸收狀態(tài)。我在我編寫的代碼中定義了轉移概率矩陣和獎勵矩陣,以獲得此 MDP 的最佳值函數(shù)。但是,當我運行代碼,我得到一個錯誤,指出:OverflowError: cannot convert float infinity to integer。我無法理解這樣做的原因。import mdptoolboximport numpy as nptransitions = np.array([ # action 1 (Right) [ [0.1, 0.7, 0.1, 0.1], [0.3, 0.3, 0.3, 0.1], [0.1, 0.2, 0.2, 0.5], [0.1, 0.1, 0.1, 0.7] ], # action 2 (Down) [ [0.1, 0.4, 0.4, 0.1], [0.3, 0.3, 0.3, 0.1], [0.4, 0.1, 0.4, 0.1], [0.1, 0.1, 0.1, 0.7] ], # action 3 (Left) [ [0.4, 0.3, 0.2, 0.1], [0.2, 0.2, 0.4, 0.2], [0.5, 0.1, 0.3, 0.1], [0.1, 0.1, 0.1, 0.7] ], # action 4 (Top) [ [0.1, 0.4, 0.4, 0.1], [0.3, 0.3, 0.3, 0.1], [0.4, 0.1, 0.4, 0.1], [0.1, 0.1, 0.1, 0.7] ]])rewards = np.array([ [-1, -100, -1, 1], [-1, -100, -1, 1], [-1, -100, -1, 1], [1, 1, 1, 1]])vi = mdptoolbox.mdp.ValueIteration(transitions, rewards, discount=0.5)vi.setVerbose()vi.run()print("Value function:")print(vi.V)print("Policy function")print(vi.policy)如果我將 的值更改discount為1from 0.5,它工作正常。值迭代不適用于折扣值0.5或任何其他十進制值的原因是什么?更新:看起來我的獎勵矩陣有問題。我無法按照我的意圖編寫它。因為如果我改變獎勵矩陣中的一些值,錯誤就會消失。
1 回答

30秒到達戰(zhàn)場
TA貢獻1828條經(jīng)驗 獲得超6個贊
所以結果是我定義的獎勵矩陣是不正確的。根據(jù)上圖中定義的獎勵矩陣,它應該是文檔中(S,A)給出的類型,其中每一行對應一個狀態(tài),從until開始,每一列對應于從until開始的動作。新的獎勵矩陣如下所示:S1S4A1A4
#(S,A)
rewards = np.array([
[-1, -1, -1, -1],
[-100, -100, -100, -100],
[-1, -1, -1, -1],
[1, 1, 1, 1]
])
它可以正常工作。但我仍然不確定,內部發(fā)生了什么導致溢出錯誤。
添加回答
舉報
0/150
提交
取消