Алгоритмы машинного обучения: базовый курс - страница 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 – это метод, который позволяет агентам учиться принимать оптимальные решения в различных средах, используя опыт. Он подходит для множества задач, начиная от игр и робототехники и заканчивая оптимизацией бизнес-процессов и управления.
Полусупервизорное обучение – это метод машинного обучения, который сочетает в себе как размеченные, так и неразмеченные данные. В отличие от традиционного супервизорного обучения, где все данные имеют метки (цели), и несупервизорного обучения, где метки отсутствуют, полусупервизорное обучение позволяет использовать как небольшую часть размеченных данных, так и большое количество неразмеченных. Этот подход особенно полезен, когда получение меток для данных является дорогим или трудоемким процессом, а неразмеченные данные доступны в большом объеме.