Читать книгу Нейросети. Основы онлайн

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

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

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() # Случайное действие