# ================================
# Base de Conhecimento
# ================================
class BaseDeConhecimento:
def __init__(self):
self.fatos = set()
self.regras = []
def adicionar_fato(self, fato):
self.fatos.add(fato)
def adicionar_regra(self, condicoes, conclusao):
"""
condicoes: lista de fatos necessários
conclusao: fato que será inferido
"""
self.regras.append((condicoes, conclusao))
def mostrar_fatos(self):
return self.fatos
# ================================
# Sistema Especialista
# ================================
class SistemaEspecialista:
def __init__(self, base_conhecimento):
self.base = base_conhecimento
self.explicacoes = []
def inferir(self):
novos_fatos = True
while novos_fatos:
novos_fatos = False
for condicoes, conclusao in self.base.regras:
if all(cond in self.base.fatos for cond in condicoes):
if conclusao not in self.base.fatos:
self.base.adicionar_fato(conclusao)
novos_fatos = True
explicacao = f"Regra aplicada: SE {condicoes} ENTÃO {conclusao}"
self.explicacoes.append(explicacao)
def mostrar_resultados(self):
print("Fatos finais:")
for fato in sorted(self.base.fatos):
print("-", fato)
print("\nExplicação do raciocínio:")
for exp in self.explicacoes:
print("-", exp)
# ================================
# Teste do Sistema
# ================================
if __name__ == "__main__":
# Criando base de conhecimento
base = BaseDeConhecimento()
# Adicionando regras
base.adicionar_regra(["febre_alta", "tosse"], "infeccao_respiratoria")
base.adicionar_regra(["infeccao_respiratoria", "dificuldade_respirar"], "pneumonia")
# Adicionando fatos (sintomas do paciente)
base.adicionar_fato("febre_alta")
base.adicionar_fato("tosse")
base.adicionar_fato("dificuldade_respirar")
# Criando sistema especialista
sistema = SistemaEspecialista(base)
# Executando inferência
sistema.inferir()
# Mostrando resultados
sistema.mostrar_resultados()