Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

0
respostas

Faça como eu fiz: construindo um sistema especialista

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):
    self.regras.append({
        "condicoes": condicoes,
        "conclusao": conclusao
    })
    
    

class SistemaEspecialista:
def init(self, base_conhecimento):
self.base = base_conhecimento

def inferir(self):
    novos_fatos = True

    while novos_fatos:
        novos_fatos = False

        for regra in self.base.regras:
            condicoes = regra["condicoes"]
            conclusao = regra["conclusao"]

            if all(condicao in self.base.fatos for condicao in condicoes):
                if conclusao not in self.base.fatos:
                    print(
                        f"Regra aplicada: "
                        f"{' E '.join(condicoes)} -> {conclusao}"
                    )

                    self.base.adicionar_fato(conclusao)
                    novos_fatos = True

    return self.base.fatos
    
    

base = BaseDeConhecimento()

base.adicionar_fato("febre alta")
base.adicionar_fato("tosse")
base.adicionar_fato("dificuldade para respirar")

base.adicionar_regra(
["febre alta", "tosse"],
"infecção respiratória"
)

base.adicionar_regra(
["infecção respiratória", "dificuldade para respirar"],
"pneumonia"
)

sistema = SistemaEspecialista(base)

resultado = sistema.inferir()

Regra aplicada: febre alta E tosse -> infecção respiratória
Regra aplicada: infecção respiratória E dificuldade para respirar -> pneumonia

print("\nFatos e diagnósticos obtidos:")

for fato in resultado:
print("-", fato)

Fatos e diagnósticos obtidos:

  • dificuldade para respirar
  • febre alta
  • infecção respiratória
  • tosse
  • pneumonia