Назад к вопросам
JuniorТеорияЧасто
Что выведет эта программа?
import numpy as np
counts = np.array([0, 0])
means = np.array([0.0, 0.0])
for arm, reward in [(0, 1.0), (1, 0.0), (0, 0.0), (0, 1.0)]:
counts[arm] += 1
means[arm] += (reward - means[arm]) / counts[arm]
print(round(means[0], 2), counts[0])0.67 3
- Ждать
0.5 3, две награды на все четыре шага: у каждой ручки свой счётчик, ручку 0 тянули 3 раза, поэтому её среднее —2 / 3, после округления0.67. - Ждать
2.0 3, сумму наград: обновление сдвигает среднее на1 / countот разрыва с новой наградой, поэтомуmeans[0]остаётся средним, а не суммой.
- Зачем бандиту пошаговое среднее по каждой ручке вместо хранения всех наград?
- Что сломается, если увеличивать
counts[arm]после обновления среднего, а не до него?