Как я могу изменить свой Q_Target с init на основной цикл? - PullRequest
0 голосов
/ 18 февраля 2019

Я использую реализацию из: https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/blob/master/contents/9_Deep_Deterministic_Policy_Gradient_DDPG/DDPG_update2.py, и в этом коде он на самом деле не использует функцию done, чтобы отметить конец эпизода, поэтому он просто выполняет q_target = r + q_ * Gamma, однако яВы хотите использовать переменную «Done», чтобы указать конец epsiode, а затем иметь q_target = R вместо этой другой формулы.Обычно это делается в большинстве сред.

но он находится в init, и я не знаю, как переместить его в мой основной цикл, потому что там я могу сказать, выполнено ли значение true, или нет, как вы можете видеть в коде основного цикла.

выполнено, объяснено openai:

выполнено (логическое значение): пора ли снова выполнить сброс среды.Большинство (но не все) задач делятся на четко определенные эпизоды, и выполнение «Истина» означает, что эпизод завершен.(Например, возможно, столб опрокинулся слишком далеко, или вы потеряли свою последнюю жизнь.)

Как мне ее решить?

основной цикл:

    for j in range(MAX_EP_STEPS): #Steps
        s = env.reset()                 
        a = ddpg.choose_action(s)           
        s_, r, done = env.step(a)  

        if done:
            r = r
        else:
            r = r * GAMMA

        kapper += 1         
        if kapper == 10:
            kapper = 0
            print("")
            print(ddpg.pointer)
            print("printed pointer")
            print(a[0])
            print(a[1])
            print(a[2])

        a = env.get_action()   

        if a == 0:
            a = [1,0,0]
        elif a == 1:
            a = [0,1,0]
        elif a == 2:
            a = [0,0,1]

        ddpg.store_transition(s, a, r / 10, s_)

        if ddpg.pointer > MEMORY_CAPACITY:
            ddpg.learn()

        s = s_
        if env.StopEpisode:
            print("")
            print("Next Episode")
            print("")
            break

init

def __init__(self, a_dim, s_dim, a_bound, s):
    target_update = [ema.apply(a_params), ema.apply(c_params)]      # soft update operation
    a_ = self._build_a(self.S_, reuse=True, custom_getter=ema_getter)   # replaced target parameters
    q_ = self._build_c(self.S_, a_, reuse=True, custom_getter=ema_getter)

    self.a_loss = - tf.reduce_mean(q)  # maximize the q
    self.atrain = tf.train.AdamOptimizer(LR_A).minimize(self.a_loss, var_list=a_params)

    with tf.control_dependencies(target_update):    # soft replacement happened at here
        q_target = self.R + GAMMA * q_
        self.td_error = tf.losses.mean_squared_error(labels=q_target, predictions=q)
        self.ctrain = tf.train.AdamOptimizer(LR_C).minimize(self.td_error, var_list=c_params) 

Я хочу, чтобы он обновил формулу в соответствии с верным или нет.

Спасибо за помощь заранее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...