Простое Q-обучение|Одномерный мир Сяо Мина (1) Простое Q-обучение|Одномерный мир Сяо Мина (2)
Одномерный ускоренный мир
В этом мире Сяо Мин может контролировать только свое собственное ускорение и может выполнять только следующие три операции над ускорением: увеличить на 1, уменьшить на 1 или оставить без изменений. такпространство действияза:
Добавлено: для несогласованного обозначения ускоренияПутаница, здесь все теги действий изменены на.
В этот момент, в дополнение к информации о местоположении, Сяо Мин также имеет информацию о скорости, поэтому состояние становится трехмерным.. в,для Сяо Минположение момента,для Сяо Минскорость времени,для Сяоминускорение времени. Здесь пространство ускорения Сяо Мина также дискретно. Без потери общности здесьпространство ускоренияустановить как
В соответствии с комбинационным принципом состояние Сяо Мина имеет в общей сложностиКусок.государственное пространствоЧасть, как показано ниже:
Для ускорения сходимости плотныйфункция вознаграждения:Когда Сяо Мин находится в среднем камне, а скорость равен нулю, вознаграждение является крупнейшей.
В настоящее времязаматрица.
- тренироваться
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
def model_update(x, v, a, u):
a = a+u
if a < -2: # 保证加速度在区间[-2,2]
a = -2
if a > 2:
a = 2
v = v+a
if v < -3: # 保证速度在区间[-3,3]
v = -3
if v> 3:
v = 3
x = x+v
if x < -10: # 保证位置在区间[-10, 10]
x = -10
if x > 10:
x = 10
return x, v, a
xt = np.random.randint(-9, 10) # 随机初始化状态
vt = np.random.randint(-2, 3)
at = np.random.randint(-1, 2)
Q_table = np.zeros((735, 3)) # 初始化Q值为零
for i in range(5000000):
u = np.random.randint(0,3)-1
xt1, vt1, at1 = model_update(xt, vt, at, u)
r = -abs(xt1)-abs(vt1)-abs(at1)
Q_table[((at+2)*7+(vt+3))*21+xt+10, u+1] = r+0.9*np.max(Q_table[((at1+2)*7+(vt1+3))*21+xt1+10]) # 更新Q值
xt = xt1
vt = vt1
at = at1
- стратегия использования
Начальное состояние самое левое и скорость наименьшая, т.е.
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
is_ipython = 'inline' in matplotlib.get_backend()
if is_ipython:
from IPython import display
plt.ion()
xt = -10
vt = -3
at = -2
x = np.arange(-10, 11)
y = np.zeros(21)
for i in range(100):
u = np.argmax(Q_table[((at+2)*7+(vt+3))*21+xt+10])-1
xt1, vt1, at1= model_update(xt, vt, at, u)
print(xt, vt, at, u , xt1, vt1, at1)
xt = xt1
vt = vt1
at = at1
plt.clf()
plt.plot(x, y, 'b')
plt.plot(xt,[0], 'or')
plt.pause(0.1)
if is_ipython:
display.clear_output(wait=True)
display.display(plt.gcf())
steps. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Динамический график - зеленые точки представляют Сяо Мин
Протестированное здесь начальное состояние является наихудшим значением, поэтому размер шага может быть немного длиннее. Если начать с крайнего левого положения, начальная скорость равна 0, а начальное ускорение равно 0, то окончательный требуемый размер шага от крайнего левого положения до среднего: ускорение в мире
##Вывод
На этом одномерная мировая система Сяо Мина закончилась. От одномерного мира положения к одномерному миру скорости, к одномерному миру ускорения. Мир меняется от простого к сложному, количество состояний увеличивается от нескольких до многих, а количество шагов, необходимых для обучения, увеличивается от нескольких до многих. Конечно, это все в алгоритме обучения Q на основе таблицы Q. Если мы заменим Q-таблицу нейронной сетью с более сильными репрезентативными способностями, мы сможем делать более сложные и интересные вещи.