bellman找到了一種方法來估計任何狀態s的最佳狀態值(*),記為v*(s),v*(s)是**在達到狀態s時(假設採取最佳行為)所期望的所有折價未來獎勵的總和。 他表明,如果**能發揮最佳作用,則適用bellman最優性方程。 這個遞迴方程式表示,如果主體採取最佳行動,那麼當前狀態的最優值等於採取一項最佳行動後平均獲得的報酬,加上該行動可能導致的所有可能的下一狀態的預期最優值。即,
v ∗(
s)=m
axa∑
st(s
,a,s
′)[r
(s,a
,s′)
+γv∗
(s′)
]……(
∗)
v^*(s)=max_a\sum_s)[r(s,a,s^)+\gamma v^*(s^)]}……(*)
v∗(s)=
maxa
s∑
t(s,
a,s′
)[r(
s,a,
s′)+
γv∗(
s′)]
……(∗
) 該方程式直接導致可以精確估計每個可能狀態的最佳狀態值的演算法:首先將所有狀態值估計值初始化為零,然後使用值迭代演算法(**)迭代更新它們,那麼給定足夠的時間,這些估計值可以保證收斂到最佳狀態值
v k+
1(s)
←max
a∑s′
t(s,
a,s′
)[r(
s,a,
s′)+
γvk(
s′)]
……(∗
∗)
v_(s) \leftarrow max_a\sum_})[r(s,a,s^)+\gamma v_k(s^)]}……(**)
vk+1(
s)←m
axa
s′∑
t(s,
a,s′
)[r(
s,a,
s′)+
γvk
(s′)
]……(
∗∗)
知道最佳狀態值時很有用的,特別是對於評估策略,但是它不能為我們提供**的最佳策略。 幸運的是,貝爾曼找到了一種非常相似的演算法來估算最佳狀態作用值,通常稱為q值(質量值)。 狀態動作對(s,a)的最佳q值,記為q*(s,a),是**到達狀態s並選擇行為a(假定採取最佳行為),但是在它得到採取這一行為的結果之前,**可以期望的折價未來獎勵的總和的平均值。 這樣,我們可以的出q值迭代演算法如下
q k+
1(s)
←∑s′
t(s,
a,s′
)[r(
s,a,
s′)+
γmax
a′qk
(s′,
a′)]
……(∗
∗∗
)q_(s) \leftarrow \sum_})[r(s,a,s^)+\gamma}q_k(s^,a^)}]}……(***)
qk+1(
s)←s
′∑t
(s,a
,s′)
[r(s
,a,s
′)+γ
maxa
′qk
(s′
,a′)
]……(
∗∗∗)
通過最優q值,很容易得到我們的最優策略:當**處於狀態s,它應該選擇可以得到這個狀態最高q值得行為,即:
π ∗(
s)=a
rgma
xaq∗
(s,a
)……(
∗∗∗∗
)\pi^*(s)=argmax_a……(****)
π∗(s)=
argm
axa
q∗(s
,a)…
…(∗∗
∗∗)
def
qvalueiteration
(n_states,n_acitons,transition_probabilities,rewards,possible_actions,gamma=
0.90
,n_iteration=50)
:"""note for choosing gamma:
the more you value future rewards,
the more you are willing to put up
with some pain now for the promise
of future bliss.
"""q_values = np.full(
(n_states,n_actions)
,-np.inf)
for state,actions in
enumerate
(possible_actions)
: q_values[state,actions]
=0.0
for iteration in
range
(n_iteration)
: q_prev = q_values.copy(
)for s in
range(3
):for a in possible_actions[s]
: q_values[s,a]
= np.
sum(
[transition_probabilities[s]
[a][sp]
*(rewards[s]
[a][sp]
+gamma*np.
max(q_prev[sp]))
for sp in
range(3
)])return q_values
示例:
transition_probabilities =[[
[0.7
,0.3
,0.0],
[1.0
,0.0
,0.0],
[0.8
,0.2
,0.0]]
,# in s0, if action a0 then proba 0.7 to state s0 and 0.3 to state s1, etc.[[
0.0,
1.0,
0.0]
,none,[
0.0,
0.0,
1.0]],
[none,[
0.8,
0.1,
0.1]
,none],
]rewards =[[
[+10,
0,0]
,[0,
0,0]
,[0,
0,0]
],[[
0,0,
0],[
0,0,
0],[
0,0,
-50]]
,[[0
,0,0
],[+
40,0,
0],[
0,0,
0]],
]possible_actions =[[
0,1,
2],[
0,2]
,[1]
]q_values = qvalueiteration(3,
3,transition_probabilities,rewards,possible_actions,gamma=
0.90
)
最優性原理
看了很多有關最優性原理的解釋,總是感覺不清晰 不透徹,以下是我個人的理解 我們先給出定義 最優性原理 對於多階段決策過程的最優決策序列具有如下性質 不論初始狀態和初始決策如何,對於前面決策所造成的某一狀態而言,其後各階段的決策序列必須構成最優策略 它看上去很討厭,如同與你玩文字遊戲,我們單看冒號前的...
最優性原理
最優性原理是指 多階段決策過程中的最優決策序列具有如下性質 不論初始狀態和初始決策如何,對於前面決策所造成的某一狀態而言,其後各階段的決策序列必須構成最優策略 最優性原理是動態規劃的基礎。簡而言之,最優性原理的含義就是 最優策略的任何一部分子策略都必須是最優的。舉個例子,如下圖所示,如果給定從a到c...
uva140 dfs(回溯)最優性剪枝
題解 1.原書中已經說明,如果兩個節點的頻寬 最小頻寬,無論如何也不可能比原解更優,應該剪掉。2.注意此題讀入的時候一定要按字典序儲存,這樣計算出的最小值才是符合要求的 3.注意strtok的用法 include include include include include include inc...