Алгоритм Q-Learning: методы и примеры кода для обучения с подкреплением

Алгоритм Q-обучения — это популярный метод обучения с подкреплением, используемый для решения марковских процессов принятия решений (MDP). Это позволяет агенту изучить оптимальную политику путем итеративного обновления оценок ценности действия на основе наблюдаемых вознаграждений и будущих состояний. Вот несколько методов и примеров кода, связанных с реализацией алгоритма Q-обучения:

  1. Табличное Q-обучение:
    Табличное Q-обучение — это базовая форма алгоритма, который использует справочную таблицу для хранения и обновления Q-значений для каждой пары состояние-действие. Вот пример на Python:
import numpy as np
# Initialize Q-table
num_states = 10
num_actions = 4
q_table = np.zeros((num_states, num_actions))
# Q-learning hyperparameters
alpha = 0.1  # learning rate
gamma = 0.9  # discount factor
epsilon = 0.1  # exploration rate
# Q-learning algorithm
for episode in range(num_episodes):
    state = env.reset()
    done = False
    while not done:
        # Choose action using epsilon-greedy policy
        if np.random.uniform() < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(q_table[state])
        # Perform action and observe reward, next_state
        next_state, reward, done, _ = env.step(action)
        # Update Q-value for the state-action pair
        q_table[state, action] += alpha * (reward + gamma * np.max(q_table[next_state]) - q_table[state, action])
        state = next_state
  1. Глубокая Q-сеть (DQN):
    DQN расширяет Q-обучение за счет использования глубокой нейронной сети для аппроксимации значений Q, что позволяет создавать более сложные и многомерные пространства состояний. Вот пример использования библиотеки Keras в Python:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
# Define the DQN agent class
class DQNAgent:
    def __init__(self, state_size, action_size):
        self.state_size = state_size
        self.action_size = action_size
        self.model = self._build_model()
    def _build_model(self):
        model = Sequential()
        model.add(Dense(24, input_dim=self.state_size, activation='relu'))
        model.add(Dense(24, activation='relu'))
        model.add(Dense(self.action_size, activation='linear'))
        model.compile(loss='mse', optimizer=Adam(lr=0.001))
        return model
    # Other methods for experience replay, exploration, etc.
# DQN algorithm
agent = DQNAgent(state_size, action_size)
for episode in range(num_episodes):
    state = env.reset()
    done = False
    while not done:
        action = agent.act(state)
        next_state, reward, done, _ = env.step(action)
        agent.remember(state, action, reward, next_state, done)
        agent.train()
        state = next_state