Q-learning

Reinforcement Learning з Gymnasium у Python

Fouad Trad

Machine Learning Engineer

Вступ до Q-learning

  • Розшифровується як quality learning
  • Метод без моделі
  • Вчиться оптимальної Q-таблиці через взаємодію

Схема кроків у Q-learning: ініціалізація Q-таблиці, вибір дії, отримання винагороди від середовища, оновлення таблиці. Агент повторює цикл до збіжності після певної кількості епізодів.

Reinforcement Learning з Gymnasium у Python

Q-learning vs. SARSA

SARSA

Зображення з математичною формулою правила оновлення SARSA.

  • Оновлює на основі виконаної дії
  • Навчання за політикою (on-policy)
Q-learning

Зображення з математичною формулою правила оновлення Q-learning.

  • Оновлює незалежно від виконаних дій
  • Навчання поза політикою (off-policy)
Reinforcement Learning з Gymnasium у Python

Реалізація Q-learning

env = gym.make("FrozenLake", is_slippery=True)

num_episodes = 1000 alpha = 0.1 gamma = 1
num_states, num_actions = env.observation_space.n, env.action_space.n Q = np.zeros((num_states, num_actions))
reward_per_random_episode = []
Reinforcement Learning з Gymnasium у Python

Реалізація Q-learning

for episode in range(num_episodes):
    state, info = env.reset()
    terminated = False
    episode_reward = 0

while not terminated:
# Random action selection action = env.action_space.sample()
# Take action and observe new state and reward new_state, reward, terminated, truncated, info = env.step(action)
# Update Q-table update_q_table(state, action, new_state)
episode_reward += reward state = new_state
reward_per_random_episode.append(episode_reward)
Reinforcement Learning з Gymnasium у Python

Оновлення в Q-learning

Зображення з математичною формулою правила оновлення Q-learning.

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

old_value = Q[state, action]
next_max = max(Q[new_state])
Q[state, action] = (1 - alpha) * old_value + alpha * (reward + gamma * next_max)
Reinforcement Learning з Gymnasium у Python

Використання політики

reward_per_learned_episode = []
policy = get_policy()

for episode in range(num_episodes): state, info = env.reset() terminated = False episode_reward = 0 while not terminated: # Select the best action based on learned Q-table action = policy[state] # Take action and observe new state new_state, reward, terminated, truncated, info = env.step(action) state = new_state
episode_reward += reward
reward_per_learned_episode.append(episode_reward)
Reinforcement Learning з Gymnasium у Python

Оцінювання Q-learning

import numpy as np
import matplotlib.pyplot as plt

avg_random_reward = np.mean(reward_per_random_episode) avg_learned_reward = np.mean(reward_per_learned_episode)
plt.bar(['Random Policy', 'Learned Policy'], [avg_random_reward, avg_learned_reward], color=['blue', 'green']) plt.title('Average Reward per Episode') plt.ylabel('Average Reward') plt.show()

Стовпчикова діаграма показує, що навчена політика дає значно вищу віддачу (близько 0,26), ніж випадкова політика (близько 0,01).

Reinforcement Learning з Gymnasium у Python

Давайте потренуємось!

Reinforcement Learning з Gymnasium у Python

Preparing Video For Download...