Скачать книгу

управление автономными системами и другие, благодаря своей эффективности и способности обучаться на основе опыта в реальном времени.

      Пример 1

      Рассмотрим пример использования метода Q-обучения на простой задаче блоков:

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

      1. Инициализация Q-таблицы: Сначала мы инициализируем Q-таблицу, которая будет содержать оценки Q-функций для каждой пары состояние-действие. Начальные значения могут быть случайно выбранными или нулевыми.

      2. Выбор действия: Агент выбирает действие на основе текущего состояния с помощью некоторой стратегии, такой как epsilon-жадная стратегия. Например, с некоторой вероятностью агент выбирает случайное действие, а с вероятностью 1-epsilon выбирает действие с максимальной оценкой Q-функции.

      3. Взаимодействие со средой и получение награды: Агент выполняет выбранное действие и взаимодействует со средой. Он получает награду за свое действие, которая может быть положительной, если он приближается к цели, или отрицательной, если он удаляется от нее.

      4. Обновление Q-значения: После выполнения действия агент обновляет значение Q-функции для текущего состояния и выбранного действия на основе полученной награды и оценки Q-функции следующего состояния. Это происходит согласно формуле обновления Q-значения, например, с использованием метода временной разности.

      5. Повторение: Процесс выбора действия, взаимодействия со средой и обновления Q-значения повторяется до тех пор, пока агент не достигнет целевой позиции или не выполнит определенное количество шагов.

      Приведенный ниже код демонстрирует простую реализацию метода Q-обучения на примере задачи блоков, используя библиотеку `numpy` для вычислений:

      ```python

      import numpy as np

      # Инициализация Q-таблицы

      num_states = 5 # Количество состояний

      num_actions = 4 # Количество действий (вверх, вниз, влево, вправо)

      Q_table = np.zeros((num_states, num_actions)) # Инициализация Q-таблицы нулями

      # Гиперпараметры

      learning_rate = 0.1

      discount_factor = 0.9

      epsilon = 0.1 # Вероятность выбора случайного действия

      # Простая среда блоков (0 – пустое место, 1 – блок)

      environment = np.array([

      [0, 0, 0, 0, 0],

      [0, 1, 1, 1, 0],

      [0, 0, 0, 1, 0],

      [0, 1, 1, 1, 0],

      [0, 0, 0, 0, 0]

      ])

      # Функция для выполнения одного шага Q-обучения

      def q_learning_step(state):

      # Выбор действия

      if np.random.rand() < epsilon:

      action = np.random.randint(num_actions) # Случайное действие

      else:

      action = np.argmax(Q_table[state]) # Действие с наибольшим Q-значением

      # Взаимодействие со средой и получение награды

      reward = -1 # Негативная награда за каждый шаг

      # Обновление Q-значения

      next_state = (state[0] + 1, state[1]) # Пример следующего состояния (движение вниз)

      max_next_Q = np.max(Q_table[next_state]) if next_state[0]

Скачать книгу