1
resposta

[Projeto] Sistema especialista

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".

1 resposta

Olá, Carlos, como vai?

Parabéns pela implementação. Sua abordagem de usar dicionários para as regras, com condições e conclusões bem definidas, demonstra um bom entendimento da lógica. O código está muito bem organizado, seguindo o que foi solicitado na atividade. Continue compartilhando seus projetos e dúvidas no fórum. Suas contribuições enriquecem as discussões e ajudam outros colegas a aprenderem também.

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