2016-06-14 8 views
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]) 

Некоторые Init код:

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 
+3

Возможно, вы захотите попробовать рассказать нам, что вы ожидали увидеть, и то, что вы видели ... – BadZen

+0

Я добавил некоторое объяснение, речь идет об уравнении с именем value в обучении по усилению, я думал, что это довольно простой и простой но неправильный вывод говорит мне, что я ошибаюсь -, - – joe

+0

Почему вы суммируете по s ('i'), а также s '(' j'), когда данная функция вы пытаетесь реализовать только суммы над s? (Кроме того, в ваших комментариях указано, что вы возвращаете функцию, но вы на самом деле возвращаете массив ...) – BadZen

ответ

0

Собственно, задание 2 при условии, Солу если кто-то еще изучит этот курс онлайн и встретит некоторые проблемы, попробуйте найти несколько советов из следующего задания.