Необходимо поменять местами, чтобы каждое вознаграждение умножалось в x раз на коэффициент дисконтирования, где x - это количество временных шагов, на которое вознаграждение находится за пределами настоящего. Кроме того, поскольку это совокупное вознаграждение, оно добавляет следующее вознаграждение к предыдущему вознаграждению. Это не было бы возможно без обратного хода.
С обратным, последнее вознаграждение - это первое вознаграждение, которое будет добавлено к R, а затем в каждой итерации, когда l oop продолжается, оно будет умножено на 0,95. для количества временных шагов, которые произошли до события вознаграждения.
Что делает l oop, так это:
R = 0
R += 0.95 ** 5 * 1
R += 0.95 ** 4 * 0
R += 0.95 ** 3 * 0
R += 0.95 ** 2 * 0
R += 0.95 ** 1 * 0
R += 0
Правка:
Полученный результат: накопительное дисконтированное вознаграждение. Первый индекс в вашем списке вывода означает, что ваш агент в этот момент накопил дисконтированное вознаграждение 0,7737 для следующих кортежей состояния действия. Затем вы продвигаетесь go в будущее (увеличиваете индекс списка), и ваша дисконтированная награда будет выше, поскольку вы приближаетесь к награде net, равной 1 (выигрывая игру).