1
深層強化学習に関するBerkely CS 294コースを見ています。しかし、私は割り当てにいくつかの問題を抱えています。私は以下の式を実装しようとしました。私はそれは非常にシンプルだと思うが、私はコメントに示されているように期待された結果を得ることに失敗した。私が誤解したことがあるはずです。詳細は以下のコードに示されています。誰も助けることができますか?ここで状態値関数の実装方法は?
state value function http://quicklatex.com/cache3/4b/ql_a4e0ff64c86ce8e3e60f94cfb9fc4b4b_l3.png
私のコードです:
def compute_vpi(pi, P, R, gamma):
"""
:param pi: a deterministic policy (1D array: S -> A)
:param P: the transition probabilities (3D array: S*A*S -> R)
:param R: the reward function (3D array: S*A*S -> R)
:param gamma: the discount factor (scalar)
:return: vpi, the state-value function for the policy pi
"""
nS = P.shape[0]
# YOUR CODE HERE
############## Here is what I wrote ######################
vpi = np.zeros([nS,])
for i in range(nS):
for j in range(nS):
vpi[i] += P[i, pi[i], j] * (R[i, pi[i], j] + gamma*vpi[j])
##########################################################
# raise NotImplementedError()
assert vpi.shape == (nS,)
return vpi
pi0 = np.zeros(nS,dtype='i')
compute_vpi(pi0, P_rand, R_rand, gamma)
# Expected output:
# array([ 5.206217 , 5.15900351, 5.01725926, 4.76913715, 5.03154609,
# 5.06171323, 4.97964471, 5.28555573, 5.13320501, 5.08988046])
私が得たもの:
array([ 0.61825794, 0.67755819, 0.60497582, 0.30181986, 0.67560153,
0.88691815, 0.73629922, 1.09325453, 1.15480849, 1.21112992])
いくつかの初期化コード:
nr.seed(0) # seed random number generator
nS = 10
nA = 2
# nS: number of states
# nA: number of actions
R_rand = nr.rand(nS, nA, nS) # reward function
# R[i,j,k] := R(s=i, a=j, s'=k),
# i.e., the dimensions are (current state, action, next state)
P_rand = nr.rand(nS, nA, nS)
# P[i,j,k] := P(s'=k | s=i, a=j)
# i.e., dimensions are (current state, action, next state)
P_rand /= P_rand.sum(axis=2,keepdims=True) # normalize conditional probabilities
gamma = 0.90
あなたが見たいものと見たものを教えてください。 – BadZen
私はいくつかの説明を追加しました。これは補強学習の価値関数という数式について書かれていますが、私は間違っていると私に伝えています - – joe
与えられた関数が合計だけを実装しようとしているときに、s( 'i')とs(' j') ? (また、あなたのコメントはあなたが関数を返すと述べていますが、実際には配列を返しています...) – BadZen