Алгоритмы машинного обучения: базовый курс - страница 34



done = False

total_reward = 0

while not done:

action = epsilon_greedy(state) # Выбор действия

if is_valid_move(state, action):

next_state = (state[0] + actions[action][0], state[1] + actions[action][1])

else:

next_state = state # Если движение невозможно, остаемся на месте

# Получение награды

if maze[next_state[0]][next_state[1]] == 2:

reward = 100 # Если агент достиг выхода, награда

done = True

elif maze[next_state[0]][next_state[1]] == 1:

reward = -10 # Если агент столкнулся со стеной, штраф

else:

reward = -1 # Пустая клетка, небольшая отрицательная награда для побуждения к поиску выхода

# Обновление Q-таблицы

q_table[state[0], state[1], action] = q_table[state[0], state[1], action] + learning_rate * (

reward + discount_factor * np.max(q_table[next_state[0], next_state[1]]) – q_table[state[0], state[1], action]

)

state = next_state # Переход к следующему состоянию

total_reward += reward

if episode % 100 == 0:

print(f"Episode {episode}/{num_episodes}, Total Reward: {total_reward}")

# Тестирование обученной модели

state = (0, 0)

done = False

total_reward = 0

steps = []

while not done:

action = np.argmax(q_table[state[0], state[1]]) # Лучшее действие по Q-таблице

if is_valid_move(state, action):

next_state = (state[0] + actions[action][0], state[1] + actions[action][1])

else:

next_state = state

# Получение награды

if maze[next_state[0]][next_state[1]] == 2:

reward = 100

done = True

elif maze[next_state[0]][next_state[1]] == 1:

reward = -10

else:

reward = -1

state = next_state

total_reward += reward

steps.append(state)

print(f"Test Total Reward: {total_reward}")

print("Optimal path to the exit:")

print(steps)

```

Объяснение шагов кода:

1. Определение лабиринта: Лабиринт задан двумерным массивом, где 0 – это свободная клетка, 1 – стена, а 2 – выход. Агент должен найти путь из верхнего левого угла к выходу, избегая стен.

2. Инициализация Q-таблицы: Мы создаём Q-таблицу размером ( n_{text{rows}} times n_{text{cols}} times 4 ), где 4 – это количество возможных действий (вверх, вниз, влево, вправо).

3. epsilon-greedy стратегия: Агент выбирает действие с использованием ε-стратегии. С вероятностью ε агент выбирает случайное действие (для исследования), а с вероятностью 1 – ε выбирает наилучшее действие (по текущим значениям в Q-таблице).

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

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

Результаты

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

Q-learning – это метод, который позволяет агентам учиться принимать оптимальные решения в различных средах, используя опыт. Он подходит для множества задач, начиная от игр и робототехники и заканчивая оптимизацией бизнес-процессов и управления.


Полусупервизорные подходы

Полусупервизорное обучение – это метод машинного обучения, который сочетает в себе как размеченные, так и неразмеченные данные. В отличие от традиционного супервизорного обучения, где все данные имеют метки (цели), и несупервизорного обучения, где метки отсутствуют, полусупервизорное обучение позволяет использовать как небольшую часть размеченных данных, так и большое количество неразмеченных. Этот подход особенно полезен, когда получение меток для данных является дорогим или трудоемким процессом, а неразмеченные данные доступны в большом объеме.