Представим, что ситуация немного поменялась и началась флуктуация реальных ожидаемых наград, то есть они перестали быть стационарными, как в предыдущем случае.

Допустим, исходные значения ожидаемых наград заданы одинаково, например, они равны 0.1, и на каждом шагу к ним начало прибавляться случайное число, взятое из нормального распределения со средним 0 и стандартным отклонением 0.01.

q_star[problem] += np.random.normal(0, 0.01, k)

В этом случае всё становится, мягко говоря, очень печально.

У средней награды пропадает резкий скачок вверх на первом десятке шагов, а сам график становится практически линейным для любого значения \(\varepsilon\) (ср. с графиком в предыдущей статье).

Процент выбора оптимального действия тоже значительно падает:

Если в стационарном случае максимальный процент начинал подбираться к отметке 80%, то здесь, в лучшем случае он добирается до 35%.

Первое, что следует попробовать — увеличить количество шагов. Так как считается довольно долго, оставим один параметр, показавший наилучшие значения в стационарном случае, то есть \(\varepsilon = 0.1\):

Получается, что для того, чтобы начать приближаться к результатам стационарного случая, при котором максимум близкий к 1.4 достигался за 1000 шагов, количество шагов пришлось увеличить на порядок. При этом максимально среднее качество приблизилось к 1.2.

При этом процент оптимального выбора за 10000 шагов едва добрался до 45% (в стационарном случае он был где-то в районе 75%):

Оказывается, эту проблему можно решить при небольшого изменения формулы оценочного вознаграждения, которая выглядит вот так:

\[Q_{n+1} = Q_n + \frac{1}{n}\big[R_n-Q_n\big]\]

В этой формуле присутствует, меняющийся на каждом шагу коэффициент \(1/n\). Заменим его на постоянный коэффициент \(\alpha\):

\[Q_{n+1} = Q_n + \alpha[R_n-Q_n]\]

и поглядим, как изменится при этом поведение графика функции:

Заменив коэффициент на постоянную и увеличив количество шагов до 10000, удалось добраться до тех значений, которые были получены в стационарном случае.

Процент оптимального выбора при этом значительно повысился:

Значение увеличилось с 45% до 75%.


Можно сделать вывод, что в случае, когда значение ожидаемой награды изменяется на каждом шагу, ситуацию может спасти значительное увеличение количества шагов и замена коэффициента на константу.


https://github.com/kukumber/k-armed_epsilon-greedy/blob/master/k-armed_epsilon-greedy_random_walk.ipynb