Алгоритмы машинного обучения: базовый курс - страница 33
1. Инициализация: Агент начинает с инициализированной Q-таблицей, где значения всех состояний и действий равны нулю.
2. Выбор действия: В процессе обучения агент выбирает действие, используя стратегию ε-реже (ε-greedy). Это означает, что с вероятностью ε агент будет выбирать случайное действие (исследование), а с вероятностью 1-ε – наилучшее действие на основе текущих значений в Q-таблице (эксплуатация).
3. Получение награды: После выполнения действия агент получает награду (например, +1 за движение в пустую клетку и -1 за столкновение со стеной).
4. Обновление Q-таблицы: Агент обновляет значения в Q-таблице с использованием формулы Q-learning, учитывая полученную награду и наилучшую стратегию для следующего состояния.
5. Повторение: Агент повторяет процесс, взаимодействуя с окружающей средой, обновляя Q-таблицу, пока не достигнет цели или не выполнит достаточное количество шагов.
В результате обучения, когда агент выполнит достаточно шагов, его стратегия будет ориентирована на выбор оптимальных действий для достижения цели, избегая столкновений со стенами.
Пример кода Q-Learning для задачи CartPole
Давайте возьмём другую задачу для применения алгоритма Q-learning. Рассмотрим задачу Maze Navigation (навигация по лабиринту), где агент должен найти выход из лабиринта, начиная с одной клетки. Лабиринт состоит из клеток, и агент может двигаться вверх, вниз, влево или вправо. Задача будет заключаться в том, чтобы агент научился искать оптимальный путь к выходу, используя награды за правильные действия и штрафы за неправильные.
Описание задачи:
– Агент начинает в случайной точке лабиринта.
– Он должен найти путь к выходу, избегая стен.
– Если агент сталкивается со стеной, он получает отрицательную награду.
– Если агент достиг цели (выхода), он получает положительную награду.
Мы будем использовать Q-learning для обучения агента, где Q-значения будут обновляться в процессе взаимодействия агента с лабиринтом.
Пример кода для задачи навигации по лабиринту с использованием Q-Learning:
```python
import numpy as np
import random
# Параметры лабиринта
maze = [
[0, 0, 0, 0, 0],
[0, 1, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 1, 2]
]
# 0 – свободная клетка
# 1 – стена
# 2 – выход
# Размеры лабиринта
n_rows = len(maze)
n_cols = len(maze[0])
# Гиперпараметры Q-learning
learning_rate = 0.1 # Скорость обучения
discount_factor = 0.9 # Дисконтирование
epsilon = 0.2 # Эпсилон для epsilon-greedy
num_episodes = 1000 # Количество эпизодов обучения
# Инициализация Q-таблицы
q_table = np.zeros((n_rows, n_cols, 4)) # 4 действия: вверх, вниз, влево, вправо
actions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # Действия: (изменение по строкам, изменение по столбцам)
# Функция выбора действия с использованием epsilon-greedy
def epsilon_greedy(state):
if random.uniform(0, 1) < epsilon:
return random.choice([0, 1, 2, 3]) # Случайное действие
else:
return np.argmax(q_table[state[0], state[1]]) # Лучшее действие по Q-таблице
# Функция проверки, находится ли клетка внутри лабиринта и является ли она свободной
def is_valid_move(state, action):
new_row = state[0] + actions[action][0]
new_col = state[1] + actions[action][1]
if 0 <= new_row < n_rows and 0 <= new_col < n_cols and maze[new_row][new_col] != 1:
return True
return False
# Обучение
for episode in range(num_episodes):
state = (0, 0) # Начальное состояние (агент стартует в верхнем левом углу)