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!

1
resposta

(Fundamentos de IA: explorando a estrutura e abordagens de sistemas inteligentes) Faça como eu fiz: construindo um sistema especialista

class BaseDeConhecimento:
    def __init__(self):
        self.fatos = []
        self.regras = []

    def adicionar_fato(self, fato):
        if fato not in self.fatos:
            self.fatos.append(fato)

    def adicionar_regra(self, condicao, conclusao):
        self.regras.append((condicao, conclusao))


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

    def inferir(self):
        print("=== Processo de Inferência ===")

        novos_fatos = True

        while novos_fatos:
            novos_fatos = False

            for condicao, conclusao in self.base.regras:
                if all(fato in self.base.fatos for fato in condicao):
                    if conclusao not in self.base.fatos:
                        self.base.adicionar_fato(conclusao)
                        novos_fatos = True
                        print(f"Regra aplicada: Se {', '.join(condicao)} então {conclusao}")

        print("\nInferência concluída.\n")


# Base de conhecimento
base = BaseDeConhecimento()

# Fatos informados pelo paciente
base.adicionar_fato("febre alta")
base.adicionar_fato("tosse")
base.adicionar_fato("dificuldade para respirar")

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

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

# Sistema especialista
sistema = SistemaEspecialista(base)

# Executa a inferência
sistema.inferir()

# Resultado final
print("=== Fatos conhecidos ===")
for fato in base.fatos:
    print("-", fato)

print("\n=== Diagnóstico Final ===")
if "pneumonia" in base.fatos:
    print("Diagnóstico: Pneumonia.")
elif "infecção respiratória" in base.fatos:
    print("Diagnóstico: Infecção respiratória.")
else:
    print("Nenhum diagnóstico identificado.")
1 resposta

Olá, Eduardo! Como vai?

Parabéns pela realização das atividades!

Você apresentou um código bem organizado, com clareza na definição da BaseDeConhecimento, organização no processo de inferência e precisão na aplicação das regras. Isso mostra domínio da lógica de programação e atenção aos detalhes, fundamentais para sistemas especialistas.
Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Documentação: registrar cada regra e fato para facilitar manutenção futura.
  • Validação: criar testes automatizados para verificar se as inferências estão corretas.
  • Escalabilidade: pensar em como ampliar a base de conhecimento sem perder desempenho.

Ah uma pergunta: O que você considera mais interessante nesse projeto, expandir a base de regras para novos diagnósticos ou otimizar o processo de inferência para maior eficiência?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!