Introducción

Los sistemas basados en reglas son una técnica de inteligencia artificial utilizada para la toma de decisiones en videojuegos. Estos sistemas se basan en un conjunto de reglas predefinidas que determinan el comportamiento de los personajes del juego (NPCs). Las reglas son expresiones condicionales que se evalúan para decidir qué acción debe realizar el NPC en una situación dada.

Conceptos Clave

  1. Regla: Una instrucción condicional que define una acción a realizar si se cumple una condición específica.
  2. Motor de Reglas: El componente que evalúa las reglas y ejecuta las acciones correspondientes.
  3. Hechos: Información sobre el estado actual del mundo del juego que se utiliza para evaluar las reglas.
  4. Base de Conocimientos: Conjunto de todas las reglas y hechos disponibles para el motor de reglas.

Ejemplo de Regla

Una regla típica en un sistema basado en reglas podría ser:

SI el NPC ve al jugador ENTONCES el NPC ataca al jugador.

Implementación Básica

Paso 1: Definir las Reglas

Las reglas se pueden definir en un formato sencillo como una lista de condiciones y acciones. Por ejemplo:

rules = [
    {"condition": "see_player", "action": "attack"},
    {"condition": "low_health", "action": "flee"},
    {"condition": "hear_noise", "action": "investigate"}
]

Paso 2: Evaluar las Reglas

El motor de reglas evalúa cada regla en función de los hechos actuales. Aquí hay un ejemplo de cómo podría implementarse esto en Python:

class NPC:
    def __init__(self):
        self.state = {
            "see_player": False,
            "low_health": False,
            "hear_noise": False
        }
        self.rules = [
            {"condition": "see_player", "action": "attack"},
            {"condition": "low_health", "action": "flee"},
            {"condition": "hear_noise", "action": "investigate"}
        ]

    def evaluate_rules(self):
        for rule in self.rules:
            if self.state[rule["condition"]]:
                self.perform_action(rule["action"])

    def perform_action(self, action):
        if action == "attack":
            print("NPC is attacking!")
        elif action == "flee":
            print("NPC is fleeing!")
        elif action == "investigate":
            print("NPC is investigating!")

# Ejemplo de uso
npc = NPC()
npc.state["see_player"] = True
npc.evaluate_rules()  # Output: NPC is attacking!

Paso 3: Actualizar los Hechos

Los hechos deben actualizarse en función de los eventos del juego. Por ejemplo, si el jugador se acerca al NPC, el hecho see_player debe actualizarse a True.

# Actualizar hechos en función de eventos del juego
npc.state["see_player"] = True
npc.state["low_health"] = False
npc.state["hear_noise"] = False

# Evaluar reglas nuevamente
npc.evaluate_rules()  # Output: NPC is attacking!

Ejercicio Práctico

Ejercicio 1: Añadir Nuevas Reglas

Añade las siguientes reglas al sistema y actualiza el código para que el NPC pueda realizar estas nuevas acciones:

  1. Regla: Si el NPC está cerca de un objeto valioso, recoger el objeto.
  2. Regla: Si el NPC está herido y ve un botiquín, recoger el botiquín.

Solución

class NPC:
    def __init__(self):
        self.state = {
            "see_player": False,
            "low_health": False,
            "hear_noise": False,
            "near_valuable": False,
            "see_medkit": False
        }
        self.rules = [
            {"condition": "see_player", "action": "attack"},
            {"condition": "low_health", "action": "flee"},
            {"condition": "hear_noise", "action": "investigate"},
            {"condition": "near_valuable", "action": "collect_valuable"},
            {"condition": "see_medkit", "action": "collect_medkit"}
        ]

    def evaluate_rules(self):
        for rule in self.rules:
            if self.state[rule["condition"]]:
                self.perform_action(rule["action"])

    def perform_action(self, action):
        if action == "attack":
            print("NPC is attacking!")
        elif action == "flee":
            print("NPC is fleeing!")
        elif action == "investigate":
            print("NPC is investigating!")
        elif action == "collect_valuable":
            print("NPC is collecting a valuable item!")
        elif action == "collect_medkit":
            print("NPC is collecting a medkit!")

# Ejemplo de uso
npc = NPC()
npc.state["near_valuable"] = True
npc.evaluate_rules()  # Output: NPC is collecting a valuable item!

Conclusión

Los sistemas basados en reglas son una forma poderosa y flexible de implementar comportamientos inteligentes en NPCs de videojuegos. Permiten definir de manera clara y estructurada cómo deben actuar los personajes en diferentes situaciones. A medida que los juegos se vuelven más complejos, estos sistemas pueden ampliarse y combinarse con otras técnicas de IA para crear experiencias de juego más inmersivas y realistas.

En el siguiente módulo, exploraremos cómo integrar estos sistemas de toma de decisiones con otras técnicas avanzadas como los árboles de comportamiento y las máquinas de estados finitos.

© Copyright 2024. Todos los derechos reservados