1
resposta

Faça como eu fiz: construindo um sistema especialista

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

def adicionar_fato(self, fato):
    self.fatos.append(fato)

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

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

def inferir(self):
    novos_fatos = True
    while novos_fatos:
        novos_fatos = False
        for condicao, conclusao in self.base_conhecimento.regras:
            if all(fato in self.base_conhecimento.fatos for fato in condicao):
                if conclusao not in self.base_conhecimento.fatos:
                    self.base_conhecimento.fatos.append(conclusao)
                    novos_fatos = True

Criando a base de conhecimento

base = BaseDeConhecimento()

Adicionando fatos

base.adicionar_fato("febre alta")
base.adicionar_fato("tosse")

Adicionando regras

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

Criando o sistema especialista

sistema = SistemaEspecialista(base)

Executando a inferência

sistema.inferir()

Exibindo os fatos atualizados

print("Fatos inferidos:")
print(base.fatos)

1 resposta

Olá, Ronaldo. Como vai?

Parabéns por mais uma excelente contribuição! Você construiu um Sistema Especialista utilizando a lógica de encadeamento para frente (forward chaining), que é a base dos sistemas clássicos de Inteligência Artificial baseados em conhecimento.

Sua implementação destaca componentes cruciais dessa arquitetura:

  • Base de Conhecimento: Você separou corretamente os fatos (informações conhecidas) das regras (conhecimento "se-então").
  • Motor de Inferência: O uso do laço while garante que o sistema continue derivando novas conclusões enquanto houver regras aplicáveis, simulando o raciocínio de um especialista humano.
  • Aplicação Prática: O exemplo médico de diagnóstico é perfeito para ilustrar como o sistema "aprende" que o paciente tem uma "infecção respiratória" a partir dos sintomas iniciais.

Como você está avançando nos sistemas baseados em regras, uma sugestão para tornar seu sistema ainda mais robusto seria implementar o encadeamento para trás (backward chaining). Nele, o sistema parte de uma hipótese (ex: "o paciente tem pneumonia?") e busca na base de fatos e regras as evidências necessárias para confirmá-la ou negá-la.

Espero que possa ter lhe ajudado!