Ahora sí me siento mucho más cómodo, mis ojos vieron lógica y me activé completamente.
Esta implementación está basada en la respuesta del profesor, pero hice algunos cambios: agregué más reglas (amigdalitis y resfriado común, que no se activan porque no hay esos síntomas), y el print muestra qué regla se activó y por qué en cada paso, y el diagnóstico final está separado de los síntomas iniciales para que sea más legible.
class BaseDeConocimiento:
def __init__(self):
self.hechos = []
self.reglas = []
def agregar_hecho(self, hecho):
self.hechos.append(hecho)
def agregar_regla(self, condicion, conclusion):
self.reglas.append((condicion, conclusion))
class SistemaExperto:
def __init__(self, base_conocimiento):
self.base_conocimiento = base_conocimiento
def inferir(self):
print("Sintomas iniciales:")
for hecho in self.base_conocimiento.hechos:
print(f" - {hecho}")
print()
nuevos_hechos = True
while nuevos_hechos:
nuevos_hechos = False
for condicion, conclusion in self.base_conocimiento.reglas:
if all(h in self.base_conocimiento.hechos for h in condicion):
if conclusion not in self.base_conocimiento.hechos:
self.base_conocimiento.hechos.append(conclusion)
nuevos_hechos = True
print(f"Regla activada: {' + '.join(condicion)}")
print(f" => Se infiere: {conclusion}\n")
base = BaseDeConocimiento()
base.agregar_hecho("fiebre alta")
base.agregar_hecho("tos")
base.agregar_hecho("dificultad para respirar")
base.agregar_regla(["fiebre alta", "tos"], "infeccion respiratoria")
base.agregar_regla(["infeccion respiratoria", "dificultad para respirar"], "neumonia")
base.agregar_regla(["fiebre alta", "dolor de garganta"], "amigdalitis")
base.agregar_regla(["tos", "congestion nasal"], "resfriado comun")
sistema = SistemaExperto(base)
sistema.inferir()
print("Diagnostico final:")
diagnosticos = [h for h in base.hechos if h not in ["fiebre alta", "tos", "dificultad para respirar", "dolor de garganta", "congestion nasal"]]
for d in diagnosticos:
print(f" => {d}")
Output:
Regla activada: fiebre alta + tos
=> Se infiere: infeccion respiratoria
Regla activada: infeccion respiratoria + dificultad para respirar
=> Se infiere: neumonia
Diagnostico final:
=> infeccion respiratoria
=> neumonia