Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Primero se crea la estructura que almacena

class Regla:
    def __init__(self, condiciones, conclusion):
        self.condiciones = condiciones
        self.conclusion = conclusion

    def __str__(self):
        return f"Si {' y '.join(self.condiciones)} -> Entonces {self.conclusion}"

Se crea la clase para gestionar los hechos y reglas

class BaseDeConocimiento:
    def __init__(self):
        self.hechos = set()
        self.reglas = []

    def agregar_hecho(self, hecho):
        self.hechos.add(hecho.lower().strip())

    def agregar_regla(self, condiciones, conclusion):
        # Normalizamos a minúsculas para evitar errores de dedo
        condiciones_limpias = [c.lower().strip() for c in condiciones]
        conclusion_limpia = conclusion.lower().strip()
        self.reglas.append(Regla(condiciones_limpias, conclusion_limpia))

Se crea la clase de sistema experto para la base conocimiento

class SistemaExperto:
    def __init__(self, base_conocimiento):
        self.bc = base_conocimiento

    def inferir(self):
        print("=== INICIANDO PROCESO DE INFERENCIA LÓGICA ===")
        print(f"Hechos iniciales del paciente: {list(self.bc.hechos)}\n")

        nuevos_hechos_descubiertos = True
        paso = 1

        while nuevos_hechos_descubiertos:
            nuevos_hechos_descubiertos = False

            for regla in self.bc.reglas:
                # Si la conclusión ya la conocemos, saltamos la regla
                if regla.conclusion in self.bc.hechos:
                    continue

                # Verificamos si TODAS las condiciones de la regla están en los hechos actuales
                # Esto equivale a la operación lógica AND (A ∧ B ∧ C...)

                if all(condicion in self.bc.hechos for condicion in regla.condiciones):
                    print(f"[Paso {paso}] Regla activada: {str(regla)}")
                    print(f"   -> Dedicido: Se agrega '{regla.conclusion}' a la base de conocimientos.")

                    self.bc.agregar_hecho(regla.conclusion)
                    nuevos_hechos_descubiertos = True
                    paso += 1

                    # Rompemos el ciclo actual para reiniciar la evaluación con el nuevo hecho
                    break 

        print("\n=== FIN DEL PROCESO ===")
        return self.bc.hechos

1. Inicializar la Base de Conocimiento

bc_medica = BaseDeConocimiento()

2. Agregar el motor de reglas solicitado

bc_medica.agregar_regla(["fiebre alta", "tos"], "infeccion respiratoria")
bc_medica.agregar_regla(["infeccion respiratoria", "dificultad para respirar"], "neumonia")
bc_medica.agregar_regla(["tos", "congestion nasal"], "resfriado comun") # Regla extra para robustez

3. Insertar los hechos del paciente (Síntomas reportados)

Ejemplo: El paciente llega con fiebre alta, tos y dificultad para respirar

bc_medica.agregar_hecho("fiebre alta")
bc_medica.agregar_hecho("tos")
bc_medica.agregar_hecho("dificultad para respirar")

4. Inicializar el Sistema Experto y ejecutar la inferencia

motor_diagnostico = SistemaExperto(bc_medica)
hechos_finales = motor_diagnostico.inferir()

5. Mostrar resultados

print("\n=== DIAGNÓSTICO FINAL ===")
diagnosticos_posibles = ["infeccion respiratoria", "neumonia", "resfriado comun"]
diagnosticos_encontrados = [h.upper() for h in hechos_finales if h in diagnosticos_posibles]

if diagnosticos_encontrados:
    print(f"El sistema ha diagnosticado: {', '.join(diagnosticos_encontrados)}")
else:
    print("No se pudo llegar a un diagnóstico definitivo con las reglas actuales.")

RESULTADO:
Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

¡Hola! ¿Cómo estás?

Gracias por compartir con nosotros en el foro. Tu contribución es fundamental para el crecimiento de nuestra comunidad en Alura. Sigue así y no dudes en regresar al foro en caso que tengas alguna duda o dificultad.

¡Abrazos y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!