Introducció
L'aprenentatge per reforç (Reinforcement Learning, RL) és una branca de l'aprenentatge automàtic que es basa en la idea d'entrenar agents perquè prenguin decisions seqüencials per maximitzar una recompensa acumulada. En el context dels videojocs, l'agent pot ser un personatge no jugador (NPC) que aprèn a jugar o a completar tasques específiques dins del joc.
Conceptes Clau
- Agent: L'entitat que pren decisions en l'entorn.
- Entorn: El món amb el qual interactua l'agent.
- Acció: Una decisió presa per l'agent que afecta l'entorn.
- Estat: Una representació de la situació actual de l'entorn.
- Recompensa: Un valor numèric que l'agent rep després de prendre una acció, indicant el resultat d'aquesta acció.
- Política: Una estratègia que l'agent segueix per decidir quina acció prendre en cada estat.
- Funció de valor: Una funció que estima la recompensa esperada a llarg termini per a cada estat o estat-acció.
Funcionament de l'Aprenentatge per Reforç
L'agent interactua amb l'entorn en una sèrie de passos. En cada pas, l'agent observa l'estat actual de l'entorn, pren una acció basada en la seva política, i rep una recompensa juntament amb el nou estat resultant. L'objectiu de l'agent és aprendre una política que maximitzi la recompensa acumulada a llarg termini.
Algoritmes d'Aprenentatge per Reforç
Q-Learning
Q-Learning és un dels algoritmes més coneguts d'aprenentatge per reforç. Utilitza una taula Q per emmagatzemar els valors de les accions en cada estat. La taula Q s'actualitza iterativament utilitzant la següent fórmula:
\[ Q(s, a) \leftarrow Q(s, a) + \alpha \left[ r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right] \]
On:
- \( s \) és l'estat actual.
- \( a \) és l'acció presa.
- \( r \) és la recompensa rebuda.
- \( s' \) és el nou estat resultant.
- \( \alpha \) és el ritme d'aprenentatge.
- \( \gamma \) és el factor de descompte.
Deep Q-Learning (DQN)
Deep Q-Learning utilitza xarxes neuronals per aproximar la funció Q en lloc d'utilitzar una taula. Això permet manejar entorns amb espais d'estats molt grans o continus. La xarxa neuronal pren com a entrada l'estat actual i produeix els valors Q per a totes les accions possibles.
Exemple Pràctic: Implementació de Q-Learning
A continuació, es presenta un exemple d'implementació de Q-Learning en Python per a un agent que aprèn a moure's en una quadrícula.
import numpy as np import random # Paràmetres de l'entorn n_estats = 5 n_accions = 2 gamma = 0.9 alpha = 0.1 episodis = 1000 # Inicialitzar la taula Q Q = np.zeros((n_estats, n_accions)) # Funció de recompensa def recompensa(s, a): if s == 4: return 1 else: return 0 # Entrenament de l'agent for episodi in range(episodis): s = random.randint(0, n_estats - 1) while s != 4: a = random.randint(0, n_accions - 1) s_prime = (s + a) % n_estats r = recompensa(s, a) Q[s, a] = Q[s, a] + alpha * (r + gamma * np.max(Q[s_prime, :]) - Q[s, a]) s = s_prime # Política resultant política = np.argmax(Q, axis=1) print("Política:", política)
Exercici Pràctic
Exercici: Implementa un agent de Q-Learning per a un entorn de laberint on l'objectiu és trobar la sortida. Defineix l'entorn, les recompenses i les accions possibles. Entrena l'agent i mostra la política resultant.
Solució:
import numpy as np import random # Definició de l'entorn del laberint laberint = [ [0, 0, 0, 1], [1, 1, 0, 1], [0, 0, 0, 0], [0, 1, 1, 0], [0, 0, 0, 0] ] n_files = len(laberint) n_columnes = len(laberint[0]) n_accions = 4 # Amunt, Avall, Esquerra, Dreta gamma = 0.9 alpha = 0.1 episodis = 1000 # Inicialitzar la taula Q Q = np.zeros((n_files, n_columnes, n_accions)) # Funció de recompensa def recompensa(s): if s == (4, 3): return 1 else: return -0.1 # Funció per obtenir el nou estat després de prendre una acció def nou_estat(s, a): if a == 0: # Amunt return (max(s[0] - 1, 0), s[1]) elif a == 1: # Avall return (min(s[0] + 1, n_files - 1), s[1]) elif a == 2: # Esquerra return (s[0], max(s[1] - 1, 0)) elif a == 3: # Dreta return (s[0], min(s[1] + 1, n_columnes - 1)) # Entrenament de l'agent for episodi in range(episodis): s = (0, 0) while s != (4, 3): a = random.randint(0, n_accions - 1) s_prime = nou_estat(s, a) r = recompensa(s_prime) Q[s[0], s[1], a] = Q[s[0], s[1], a] + alpha * (r + gamma * np.max(Q[s_prime[0], s_prime[1], :]) - Q[s[0], s[1], a]) s = s_prime # Política resultant política = np.argmax(Q, axis=2) print("Política:") print(política)
Resum
En aquesta secció, hem explorat els conceptes bàsics de l'aprenentatge per reforç, incloent-hi els components clau com l'agent, l'entorn, les accions, els estats, les recompenses i les polítiques. Hem vist com funciona l'algoritme de Q-Learning i hem implementat un exemple pràctic. A més, hem proposat un exercici per reforçar els coneixements adquirits. En el proper tema, explorarem com implementar agents d'aprenentatge per reforç més avançats utilitzant xarxes neuronals.
IA per a Videojocs
Mòdul 1: Introducció a la IA en Videojocs
Mòdul 2: Navegació en Videojocs
Mòdul 3: Presa de Decisions
Mòdul 4: Aprenentatge Automàtic
- Introducció a l'Aprenentatge Automàtic
- Xarxes Neuronals en Videojocs
- Aprenentatge per Reforç
- Implementació d'un Agent d'Aprenentatge
Mòdul 5: Integració i Optimització
Mòdul 6: Projectes Pràctics
- Projecte 1: Implementació de Navegació Bàsica
- Projecte 2: Creació d'un NPC amb Presa de Decisions
- Projecte 3: Desenvolupament d'un Agent amb Aprenentatge Automàtic