Джейд Картер – Искусственный интеллект. Машинное обучение (страница 8)
[0, -1, 0, -1], # Препятствие (-1)
[0, 0, 0, -1], # Препятствие (-1)
[0, -1, 0, 1] # Целевая ячейка (1)
])
```
Теперь создадим простое правило для агента: если агент находится в ячейке, он может выбирать случайное действие: двигаться вверх, вниз, влево или вправо. Если агент попадает в препятствие, он не двигается и остается на месте. Если агент достигает целевой ячейки, он получает награду +10 и игра завершается.
```python
import random
# Функция для выполнения действия в игре
def take_action(state):
row, col = state
if grid_world[row, col] == -1: # Если попали в препятствие, остаемся на месте
return state
action = random.choice(['up', 'down', 'left', 'right']) # Случайное действие
if action == 'up':
row = max(0, row – 1)
elif action == 'down':
row = min(grid_world.shape[0] – 1, row + 1)
elif action == 'left':
col = max(0, col – 1)
elif action == 'right':
col = min(grid_world.shape[1] – 1, col + 1)
return (row, col)
# Функция для проверки завершения игры и получения награды
def get_reward(state):
row, col = state
if grid_world[row, col] == 1: # Если достигли целевой ячейки
return 10, True
return 0, False # Игра продолжается
# Функция для запуска игры
def play_game():
state = (0, 0) # Начальное состояние агента
total_reward = 0
done = False
while not done:
state = take_action(state)
reward, done = get_reward(state)
total_reward += reward
return total_reward
# Запуск игры
total_reward = play_game()
print("Total reward:", total_reward)
```
Это простой пример задачи обучения с подкреплением, где агент играет в игру "Сетка мира", перемещаясь по полю и получая награду за достижение целевой ячейки.
Пример 2
Рассмотрим пример задачи с использованием обучения с подкреплением. Давайте представим симуляцию игры в кости, где агент должен научиться выбирать наилучшие действия (выбор числа от 1 до 6) для максимизации своего выигрыша.
```python
import numpy as np
class DiceGame:
def __init__(self):
self.state = 0 # текущее состояние – результат броска кости
self.done = False # флаг окончания игры
self.reward = 0 # награда за текущий шаг
def step(self, action):
# Выполняем действие – бросаем кость
self.state = np.random.randint(1, 7)
# Вычисляем награду
if action == self.state:
self.reward = 10 # выигрыш, если действие совпало с результатом броска
else:
self.reward = 0 # нет выигрыша
# Устанавливаем флаг окончания игры (игра заканчивается после одного хода)
self.done = True
return self.state, self.reward, self.done
def reset(self):