Дэвид Рид

Нейросети. Основы


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

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

      Цель агента – найти оптимальный путь от начальной позиции до цели, минимизируя общие штрафы (отрицательные вознаграждения) и избегая обрыва.

      Основные компоненты задачи

      1. Окружение:

      – `CliffWalking-v0` представляет собой сетку размером 4x12.

      – Агент начинает в ячейке (3, 0) и должен достичь ячейки (3, 11).

      2. Действия:

      – Агент может двигаться в четырех направлениях: влево, вправо, вверх и вниз.

      3. Награды:

      – Каждое движение агента дает штраф -1.

      – Падение с обрыва приводит к большому штрафу (например, -100) и возвращает агента в начальную позицию.

      4. Конечное состояние:

      – Когда агент достигает цели в ячейке (3, 11), эпизод заканчивается.

      Примерный процесс выполнения задачи

      1. Инициализация:

      – Создаем окружение и инициализируем параметры Q-обучения.

      – Инициализируем Q-таблицу нулями.

      2. Цикл обучения:

      – В каждом эпизоде агент начинает в начальной позиции и выполняет действия, выбираемые согласно ε-жадной стратегии.

      – Обновляем Q-таблицу на основе полученного опыта (текущее состояние, действие, вознаграждение и следующее состояние).

      – Эпизод продолжается, пока агент не достигнет цели или не упадет в обрыв.

      3. Тестирование:

      – После завершения обучения тестируем агента, чтобы увидеть, как он выполняет задачу, используя обученную политику (выбор действий с максимальными Q-значениями).

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

      Для начала нужно установить OpenAI Gym, если он еще не установлен:

      ```bash

      pip install gym

      ```

      Пример кода

      ```python

      import numpy as np

      import gym

      # Создаем окружение "CliffWalking-v0"

      env = gym.make('CliffWalking-v0')

      # Параметры Q-обучения

      alpha = 0.1 # Скорость обучения

      gamma = 0.99 # Коэффициент дисконтирования

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

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

      q_table = np.zeros((env.observation_space.n, env.action_space.n))

      def choose_action(state):

      if np.random.uniform(0, 1) < epsilon:

      return env.action_space.sample() # Случайное действие

      else:

      return np.argmax(q_table[state]) # Действие с максимальным Q-значением

      def update_q_table(state, action, reward, next_state):

      best_next_action = np.argmax(q_table[next_state])

      td_target = reward + gamma * q_table[next_state][best_next_action]

      td_error = td_target – q_table[state][action]

      q_table[state][action] += alpha * td_error

      # Основной цикл обучения

      num_episodes = 500

      for episode in range(num_episodes):

      state = env.reset()

      done = False

      while not done:

      action = choose_action(state)

      next_state, reward, done, _ = env.step(action)

      update_q_table(state, action, reward, next_state)

      state = next_state

      # Тестирование агента после обучения

      state = env.reset()

      done = False

      total_reward