Els sistemes basats en regles són una tècnica de presa de decisions en la qual les accions es determinen mitjançant un conjunt de regles predefinides. Aquest enfocament és àmpliament utilitzat en la IA per a videojocs per la seva simplicitat i efectivitat en la implementació de comportaments complexos.
Conceptes Clau
- Regles
Les regles són declaracions condicionals que defineixen accions a prendre quan es compleixen certes condicions. Cada regla té dues parts:
- Condició (if): Una expressió que s'avalua com a certa o falsa.
- Acció (then): Una operació que es realitza si la condició és certa.
- Base de Regles
La base de regles és el conjunt de totes les regles que defineixen el comportament del sistema. Les regles es poden organitzar en una estructura jeràrquica o plana.
- Motor d'Inferència
El motor d'inferència és el component que avalua les condicions de les regles i executa les accions corresponents. Pot utilitzar diferents estratègies per determinar l'ordre d'execució de les regles, com ara:
- Forward Chaining (Enllaç Endavant): Comença amb les dades disponibles i aplica les regles per derivar noves dades fins que es compleixi un objectiu.
- Backward Chaining (Enllaç Enrere): Comença amb un objectiu i treballa cap enrere per determinar quines dades són necessàries per complir-lo.
Exemple Pràctic
- Definició de Regles
Considerem un joc on un NPC (personatge no jugador) ha de decidir si atacar, defensar-se o fugir basant-se en la seva salut i la proximitat de l'enemic.
Regla 1: IF salut < 30% AND enemic_proxim = true THEN accio = "fugir" Regla 2: IF salut >= 30% AND enemic_proxim = true THEN accio = "atacar" Regla 3: IF enemic_proxim = false THEN accio = "defensar-se"
- Implementació en Codi
A continuació, es mostra una implementació simple en Python d'aquest conjunt de regles:
class NPC: def __init__(self, salut, enemic_proxim): self.salut = salut self.enemic_proxim = enemic_proxim self.accio = None def decidir_accio(self): if self.salut < 30 and self.enemic_proxim: self.accio = "fugir" elif self.salut >= 30 and self.enemic_proxim: self.accio = "atacar" else: self.accio = "defensar-se" # Exemple d'ús npc = NPC(salut=25, enemic_proxim=True) npc.decidir_accio() print(npc.accio) # Sortida: "fugir"
- Exercici Pràctic
Enunciat
Implementa un sistema basat en regles per a un NPC que decideixi entre "explorar", "recollir recursos" o "tornar a la base" basant-se en els següents criteris:
- Si la salut és inferior al 20% o la capacitat d'inventari està plena, l'acció serà "tornar a la base".
- Si hi ha recursos propers i la capacitat d'inventari no està plena, l'acció serà "recollir recursos".
- En qualsevol altre cas, l'acció serà "explorar".
Solució
class NPC: def __init__(self, salut, capacitat_inventari, recursos_proxims): self.salut = salut self.capacitat_inventari = capacitat_inventari self.recursos_proxims = recursos_proxims self.accio = None def decidir_accio(self): if self.salut < 20 or self.capacitat_inventari == 100: self.accio = "tornar a la base" elif self.recursos_proxims and self.capacitat_inventari < 100: self.accio = "recollir recursos" else: self.accio = "explorar" # Exemple d'ús npc = NPC(salut=50, capacitat_inventari=50, recursos_proxims=True) npc.decidir_accio() print(npc.accio) # Sortida: "recollir recursos"
Errors Comuns i Consells
Errors Comuns
- Condicions Mal Definides: Assegura't que les condicions de les regles siguin clares i no es contradiguin.
- Ordre d'Execució: L'ordre en què s'avaluen les regles pot afectar el comportament del sistema. Revisa l'ordre de les regles si el comportament no és l'esperat.
Consells
- Modularitat: Mantingues les regles modulars i fàcils de comprendre. Això facilita la depuració i l'extensió del sistema.
- Proves: Prova el sistema amb diferents escenaris per assegurar-te que les regles cobreixen tots els casos possibles.
Conclusió
Els sistemes basats en regles són una eina poderosa per a la presa de decisions en videojocs. Permeten definir comportaments complexos de manera clara i estructurada. Amb la pràctica i l'experimentació, podràs crear NPCs que reaccionin de manera intel·ligent a una varietat de situacions dins del joc.
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