Я использую реализацию из: 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)
Я хочу, чтобы он обновил формулу в соответствии с верным или нет.
Спасибо за помощь заранее