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

1. 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: diagnóstico ou novo fato
        self.regras.append((condicoes, conclusao))

    def obter_fatos(self):
        return self.fatos

    def obter_regras(self):
        return self.regras

2. Inferência:

class SistemaEspecialista:
    def __init__(self, base_conhecimento):
        self.base = base_conhecimento
        self.diagnosticos = []

    def inferir(self):
        mudou = True
        while mudou:
            mudou = False
            for condicoes, conclusao in self.base.obter_regras():
                if all(cond in self.base.obter_fatos() for cond in condicoes):
                    if conclusao not in self.base.obter_fatos():
                        self.base.adicionar_fato(conclusao)
                        self.diagnosticos.append(conclusao)
                        mudou = True

    def mostrar_diagnosticos(self):
        return self.diagnosticos

3. Implementação de diagnósticos:

# Criação da base de conhecimento:
base = BaseDeConhecimento()

# Adição dos sintomas relatados pelo paciente:
base.adicionar_fato("febre alta")
base.adicionar_fato("tosse")
base.adicionar_fato("dificuldade para respirar")

# Adição de regras:
base.adicionar_regra(["febre alta", "tosse"], "infecção respiratória")
base.adicionar_regra(["infecção respiratória", "dificuldade para respirar"], "pneumonia")

# Criação do sistema especialista:
sistema = SistemaEspecialista(base)

# Execução de inferência:
sistema.inferir()

# Possíveis diagnósticos:
print("Como diagnósticos possíveis foram encontrados:", sistema.mostrar_diagnosticos())

Como diagnósticos possíveis foram encontrados: ['infecção respiratória', 'pneumonia']