O sistema terá uma base de conhecimento para armazenar fatos e regras, um mecanismo de inferência para deduzir diagnósticos e exemplos de uso para testar o sistema.
Definição da Base de Conhecimento Primeiro, vamos criar a classe BaseDeConhecimento para armazenar os fatos e as regras:
class BaseDeConhecimento:
def __init__(self):
self.fatos = set()
self.regras = []
def adicionar_fato(self, fato):
self.fatos.add(fato)
def adicionar_regra(self, regra):
self.regras.append(regra)
def verificar_fatos(self):
return self.fatos
Desenvolvimento do Mecanismo de Inferência Agora, vamos implementar a classe SistemaEspecialista, que usará a base de conhecimento para inferir diagnósticos:
class SistemaEspecialista:
def __init__(self, base_de_conhecimento):
self.base_de_conhecimento = base_de_conhecimento
def inferir_diagnostico(self):
for regra in self.base_de_conhecimento.regras:
if regra['condicoes'].issubset(self.base_de_conhecimento.fatos):
self.base_de_conhecimento.adicionar_fato(regra['conclusao'])
print(f"Regra aplicada: {regra['descricao']}")
return self.base_de_conhecimento.verificar_fatos()
Implementação dos Diagnósticos Agora, vamos adicionar exemplos de fatos e regras à base de conhecimento e testar o sistema:
# Criando a base de conhecimento
base_conhecimento = BaseDeConhecimento()
# Adicionando fatos (sintomas)
base_conhecimento.adicionar_fato("febre alta")
base_conhecimento.adicionar_fato("tosse")
base_conhecimento.adicionar_fato("dificuldade para respirar")
# Adicionando regras
base_conhecimento.adicionar_regra({
'descricao': "Se febre alta e tosse, então infecção respiratória.",
'condicoes': {"febre alta", "tosse"},
'conclusao': "infecção respiratória"
})
base_conhecimento.adicionar_regra({
'descricao': "Se infecção respiratória e dificuldade para respirar, então pneumonia.",
'condicoes': {"infecção respiratória", "dificuldade para respirar"},
'conclusao': "pneumonia"
})
# Inicializando o sistema especialista
sistema = SistemaEspecialista(base_conhecimento)
# Inferindo diagnósticos
diagnosticos = sistema.inferir_diagnostico()
# Exibindo os diagnósticos
print("Diagnósticos inferidos:")
for diagnostico in diagnosticos:
print(diagnostico)
Testando o Sistema Neste exemplo, estamos testando o sistema com os seguintes fatos:
"febre alta" "tosse" "dificuldade para respirar" As regras adicionadas são:
Se o paciente tem "febre alta" e "tosse", então o diagnóstico é "infecção respiratória". Se o paciente tem "infecção respiratória" e "dificuldade para respirar", então o diagnóstico é "pneumonia".