Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Faça como eu fiz: construindo um sistema especialista

A ideia é partir dos sintomas informados pelo paciente e, por meio de lógica proposicional, deduzir novas conclusões de forma sequencial.

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, 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 condicoes, conclusao in self.base.regras:
                if all(condicao in self.base.fatos for condicao in condicoes):
                    if conclusao not in self.base.fatos:
                        self.base.adicionar_fato(conclusao)
                        print(f"Regra aplicada: se {condicoes}, então {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)

diagnosticos = sistema.inferir()

print("\nFatos e diagnósticos inferidos:")
for fato in diagnosticos:
    print("-", fato)

Execução do Código

Nesse exemplo, o sistema parte dos sintomas relatados e chega a diagnósticos de forma sequencial, o que ajuda a entender como a IA pode apoiar decisões em contextos como o da saúde. Mesmo sendo um modelo simples, ele já demonstra bem a lógica de inferência baseada em conhecimento.

1 resposta
solução!

Ei! Tudo bem, Leandro?

Seu projeto ficou muito bem estruturado, parabéns!

O uso do while para continuar inferindo novos fatos até não haver mais mudanças foi um ótimo ponto, porque garante que todas as regras possíveis sejam aplicadas, exatamente como esperamos em um motor de inferência.

Continue assim e, qualquer dúvida, conte sempre conosco.

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