1
resposta

Sistema Especialista para Diagnóstico Respiratório

Implementação em Python
python
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((set(condicoes), conclusao))

class SistemaEspecialista:
def init(self, base):
self.base = base
self.historico = []

def inferir(self, fatos_iniciais):
    for fato in fatos_iniciais:
        self.base.adicionar_fato(fato)
    
    novos = True
    while novos:
        novos = False
        for condicoes, conclusao in self.base.regras:
            if condicoes.issubset(self.base.fatos) and conclusao not in self.base.fatos:
                self.base.adicionar_fato(conclusao)
                self.historico.append((condicoes, conclusao))
                novos = True
    return self.base.fatos

def exibir_diagnostico(self):
    diag = [f for f in self.base.fatos if 'pneumonia' in f or 'infeccao' in f]
    print(f"Diagnóstico: {diag if diag else 'Nenhum'}")
    for c, concl in self.historico:
        print(f"  {c} → {concl}")

Teste

base = BaseDeConhecimento()
base.adicionar_regra(['febre', 'tosse'], 'infeccao_respiratoria')
base.adicionar_regra(['infeccao_respiratoria', 'dificuldade_respirar'], 'pneumonia')

sistema = SistemaEspecialista(base)
sistema.inferir(['febre', 'tosse', 'dificuldade_respirar'])
sistema.exibir_diagnostico()
Saída
text
Diagnóstico: ['infeccao_respiratoria', 'pneumonia']
{'febre', 'tosse'} → infeccao_respiratoria
{'infeccao_respiratoria', 'dificuldade_respirar'} → pneumonia
Como funciona
Componente Função
Fatos Sintomas do paciente (ex: febre, tosse)
Regras SE condições ENTÃO diagnóstico
Inferência Aplica regras repetidamente até nenhum fato novo
Regras do sistema
SE febre E tosse → infeccao_respiratoria

SE infeccao_respiratoria E dificuldade_respirar → pneumonia

Aplicações
Diagnóstico médico assistido

Suporte a decisões clínicas

Treinamento de profissionais

1 resposta

Olá, Marcus. Como vai?

Seu exemplo de Sistema Especialista é uma aula prática de como a IA Simbólica funciona através do Encadeamento Progressivo (Forward Chaining).

O que mais se destaca na sua implementação em Python é a clareza com que você separou a Base de Conhecimento (os fatos e as regras) do Motor de Inferência (o algoritmo que processa as regras). Essa estrutura é a essência dos sistemas baseados em regras que dominaram a IA antes da explosão das redes neurais.

Alguns pontos técnicos que merecem destaque no seu código:

  • Uso de Conjuntos (set): A escolha de set para as condições e fatos é excelente, pois a operação issubset torna a verificação de regras muito eficiente e elegante.
  • Lógica de Inferência: O seu loop while novos garante que o sistema continue "raciocinando" até esgotar todas as conclusões possíveis, permitindo diagnósticos em camadas (como o fato de a pneumonia depender da identificação prévia da infecção).
  • Explicabilidade: Ao manter um historico, seu sistema permite o que chamamos de auditabilidade, ou seja, ele consegue explicar o porquê de ter chegado a aquela conclusão.

Para complementar seu projeto, uma sugestão interessante seria implementar o Encadeamento Regressivo (Backward Chaining). Enquanto o seu sistema parte dos sintomas para o diagnóstico, o regressivo partiria de uma hipótese (ex: "O paciente tem pneumonia?") e voltaria nas regras para verificar se os sintomas necessários estão presentes.

É fascinante ver como uma lógica relativamente simples pode simular o raciocínio de um especialista humano em áreas críticas como a medicina.

Espero que possa ter lhe ajudado!