Читать книгу Нейросети. Основы онлайн
else:
return np.argmax(q_table[state]) # Действие с максимальным Q-значением
def update_q_table(state, action, reward, next_state):
best_next_action = np.argmax(q_table[next_state])
td_target = reward + gamma * q_table[next_state][best_next_action]
td_error = td_target – q_table[state][action]
q_table[state][action] += alpha * td_error
# Основной цикл обучения
num_episodes = 500
for episode in range(num_episodes):
state = env.reset()
done = False
while not done:
action = choose_action(state)
next_state, reward, done, _ = env.step(action)
update_q_table(state, action, reward, next_state)
state = next_state
# Тестирование агента после обучения
state = env.reset()
done = False
total_reward = 0
while not done:
action = np.argmax(q_table[state])
state, reward, done, _ = env.step(action)
total_reward += reward
env.render()
print(f"Total reward after training: {total_reward}")
env.close()
```
Объяснение кода
1. Инициализация окружения и параметров:
– Создаем окружение `CliffWalking-v0` из OpenAI Gym.
– Устанавливаем параметры Q-обучения: `alpha` (скорость обучения), `gamma` (коэффициент дисконтирования) и `epsilon` (вероятность выбора случайного действия).
2. Инициализация Q-таблицы:
– Q-таблица инициализируется нулями. Она будет хранить Q-значения для всех пар «состояние-действие».
3. Выбор действия:
– Используем ε-жадную стратегию для выбора действия. С вероятностью `epsilon` выбирается случайное действие, иначе выбирается действие с максимальным Q-значением для текущего состояния.
4. Обновление Q-таблицы:
– Вычисляем целевое значение (TD target), состоящее из текущего вознаграждения и максимального Q-значения для следующего состояния.
– Обновляем Q-значение для текущей пары «состояние-действие» с использованием разности TD (TD error).
5. Основной цикл обучения:
– В каждом эпизоде агент взаимодействует с окружением, выполняя действия и обновляя Q-таблицу на основе полученного опыта.
– Процесс повторяется до тех пор, пока агент не достигнет конечного состояния.
6. Тестирование агента: