Sistemas Especialistas

Estimated read time 10 min read

O que é um sistema especialista?

Para contextualizar temos alguns tipos de problemas de decisão, sendo eles os estruturados, no qual são problemas rotineiros que já temos soluções ótimas conhecidas e temos os objetivos bem definidos; os não estruturados, que são problemas complexos, que não há uma solução pré-definida, que muitas vezes é resolvido por intuição da gerência e, por último, temos os semiestruturados, no qual, algumas de suas fases são estruturadas, mas não todas.
Agora, que sabemos os tipos de problemas que temos em tomada de decisão, vamos explicar o que é um Sistema especialista (SE), que basicamente, são sistemas que usam conhecimento de especialistas para conseguir uma alta performance em algum problema específico. 

Gerações

1ª geração: Usa regras Se-Então;
2ª geração: Adotam múltiplos métodos de representação e de raciocínio.

O especialista

No parágrafo anterior, falamos que o SE usa conhecimentos de um especialista para resolver problemas específicos. No entanto, não especificamos o que é um especialista, e basicamente, é uma pessoa que possui um conhecimento avançado, julgamento, experiência ou um método em uma determinada área, o que o torna uma autoridade para resolver problemas no seu campo de conhecimento.

Por que utilizar um SE?

Sabendo o que é um SE é um especialista, pode surgir a pergunta do por que utilizar um SE ao invés de utilizar os especialistas humanos, e essa resposta é simples,  eles se aposentam, saem ou até mesmo morrem, logo, o SE é uma forma de preservar seu conhecimento profissional e é uma ferramenta crucial para a competitividade de uma empresa, já que eles são ótimos para documentar conhecimento profissional e dar treinamentos.

Agora que sabemos o que é um SE, vamos mostrar um tutorial da aplicação desse Sistema na prática. Em 2022, um grupo de alunos fizeram um projeto para a disciplina de Sistemas de Apoio a decisão, ministrada pelo professor João Bertini, e decidimos mostrar quais foram os passos que eles percorreram para executar seu sistema, no qual era um SE que ajudavam os alunos da Faculdade de Tecnologia da Unicamp, a encontrar os melhores bares em sua região para assistir os jogos da copa do mundo de 2022.

O projeto apresentado utiliza um Sistema Especialista de primeira geração, utilizando basicamente regras de Se-Então. Para a base de conhecimento, foram levantados bares que os membros do grupo conheciam tal qual especialistas e foram distribuídos em regras de Se-Então as características de cada bar. 

As regras consistem em perguntas, onde cada uma das respostas poderia levar a escolha de um bar:

Quantas pessoas vão com você?
Respostas: Eu e Deus OU 1-5 pessoas OU Mais de 5 pessoas

Quanto você pode gastar?

Respostas: To zerado OU R$5 a R$25 OU R$25 a R$45 OU Mais de R$45

Pretende comer no local?

Respostas: Nadinha, foco no hexa OU Porçãozinha é de lei OU Quero PF às 16h OU Burgão

TV ou Telão?

Respostas: TVzinha OU Telão pra ver tudo

Como você pretende chegar até o local?

Respostas: Carro/Uber/Transporte público OU A pé

Tais perguntas foram consideradas essenciais para os especialistas para ser possível tomar uma decisão de uma indicação de bar para a Copa do Mundo. Ainda mais considerando que cada uma das respostas poderia levar a uma decisão diferente, já que, cada bar tem suas características de menu, tamanho, budget, televisão e distância a partir da faculdade dos alunos.

Exemplo de inferência

SE cinco ou mais pessoas irão com você ao bar E o tipo do rolê é sozinho OU com amigos OU com família E seu orçamento é de a partir de R$5,00 E você pretende comer no local porção OU prato feito E prefere assistir o jogo em um telão E pretende chegar no local a pé a partir da faculdade ENTÃO você deveria assistir o jogo no bar Cascata do Vinho.

Passo a Passo

O primeiro passo para a criação do Sistema Especialista é pensar em qual problema você quer resolver, abrangendo desde situações cotidianas até as mais complexas, no qual, o grupo decidiu criar para resolver o problema dos alunos de qual local eles poderiam assistir aos jogos da Copa do Mundo de 2022. Após isso, foi decidido qual geração o SE seria criado, e foi decidido que seria criado um de 1ª geração, ou seja, com regras SE-Então.
Após isso decidido, foi pego os bares mais próximos da faculdade e suas características, para assim criar as perguntas que consistem nas regras, e cada resposta do usuário fazia o sistema chegar mais perto do resultado, pois, cada bar tinham suas características específicas, além disso, todas as perguntas eram super importantes, segundos os especialistas, para a escolha do bar.

Em seguida, para implementação do sistema foi utilizada a versão 3.8 do python e alguns packages fornecidos na linguagem, além de javascript e html, o fluxo do usuário foi o seguinte, primeiramente, temos um formulário com as perguntas que são as regras, após isso, as respostas são convertidas para um JSON que é enviado para o Server.py, que chama uma classe no arquivo ExpertSystem.py que é onde estão as regras e ele faz a escolha do bar, logo após o bar ser escolhido, Server.py encaminha o usuário para um html com as informações do bar escolhido, caso não tenha chegado a um bar, a resposta padrão é mandar o usuário assistir o jogo em casa. Agora, para ficar mais claro, vamos explicar detalhadamente esse fluxo e como foi implementado.

Para começar temos o index.html, onde se encontra a primeira tela do arquivo. Nela o usuário é solicitado a preencher um formulário do tipo radio, para que assim as respostas possam servir de dados úteis na a decisão do bar ao final do programa.

Cada uma das respostas pode levar a uma decisão diferente, já que, cada bar tem suas características de menu, tamanho, budget, televisão e distância a partir da faculdade dos alunos.

Ao completar o form, basta o usuário pressionar o botão “Enviar”.

Os dados são então coletados pelo arquivo client.js, que iniciará o seu processamento.

A segunda etapa é o arquivo Clients.js que consiste em organizar as respostas e enviar para o Flask. No nosso arquivo, temos diferentes funções para cada uma dessas ações, a primeira é a “getFormData(form)” no qual, consiste em pegar as respostas geradas no index.html e extrai os valores dos campos, como número de pessoas, orçamento disponível, o que o usuário quer comer e como quer chegar ao local, após isso, ele retorna esses valores organizados em um objeto.

As regras foram definidas de acordo com os especialistas nos bares do sistema, onde cada fato que a regra continha, visava mostrar uma característica do bar que poderia ser crucial na indicação para o usuário. Então, para facilitar a lógica, foram criados fatos ou não fatos, dependendo da abrangência do parâmetro.

Por exemplo: foi considerado “não fato” o people = lot, ou seja, todos os outros públicos eram bem vindos no bar (sozinho ou com até 5 pessoas) mas como o bar é pequeno, o usuário não teria uma boa experiência nesse bar caso viesse com 5 ou mais pessoas (ou seja, ‘lot’).

Já no fato watch=’tv’, como só haviam duas opções disponíveis e o bar em questão só havia a possibilidade de ver o jogo em uma TV, foi possível declarar como um fato. 

Em seguida, temos a função “sendData()”, que é chamada quando é preciso enviar as informações para o Flask. Mas para controlar a forma que é enviada, temos o “event.preventDefault()” na linha 12, logo após, é definido a url “http://localhost:5000/get-data” para o envio dos dados, ou seja, é o endpoint no servidor Flask. Para dar continuidade, são configuradas as opções para a solicitação fetch, o que indica que é uma solicitação POST, e os dados são convertidos para um JSON, em seguida, a solicitação fetch é realizada e envia os dados para o Flask. 


Após o local ser escolhido nos arquivos Server.py e ExpertSystem.py, é pego o lugar sugerido e a URL do site é atualizada, substituindo o index pelo local sugerido, sendo “nomedobar.html”, no qual aparecem todas as informações do bar, ou a informação que é melhor assistir jogo em casa.m

Após receber a solicitação POST no “get-data”, o programa cria uma instância de WhereToGo do arquivo ExpertSystem.py, e assim começa o processamento dos dados pelas regras definidas pela classe utilizando um laço for para correr por cada resposta. 

O arquivo ExpertSystem.py, é um arquivo importante neste projeto, como dito anteriormente, é por meio dele que os dados são processados pelas regras de inferência, de forma geral, o seu funcionamento acontece da seguinte forma:

Há uma classe que é definida pelo nome: WhereToGo: Podemos dizer que esta é uma subclasse de KnowledgeEngine, que é fornecida pela biblioteca experta do python. Essa classe é responsável por representar o mecanismo de inferência que será utilizado. Em seguida, temos o @DefFacts e _initial_action: Aqui, vemos que está sendo definido um fato inicial, iniciando o processo de inferência. O fato é que a ação é “where-to-go”.

As regras (@Rule): São regras de produção que definem as condições e ações associadas a essas condições. Já o cascata, fuxico, nova_rep, pirata, e barao, são resultados dos lugares que serão indicados ao usuário, por meio das regras de inferência.

E por último, temos o result, nol qual é um método, que retorna a mensame associada á última ação definida pelas regras, e sua execução é feita após obter o resultado. Então com o resultado adquirido, é retornado o resultado igualado a uma das opções dos bares, senão o resultado será aconselhar o usuário a ficar em casa. O resultado é então recebido de volta no arquivo cliente.js pela função “res.json()”, assim é atualizado o link da URL do aplicativo de acordo com o lugar sugerido, para que assim seja aberto a correta página HTML do bar selecionado como resultado.

Esperamos com este projeto nos aprofundar neste tema, introduzir pessoas ao conhecimento de sistemas especialistas, e mostrar formas de aplicar os sistemas especialistas, até mesmo em projetos simples, que muitas vezes estão ligados em nosso dia-dia.

Lucas Valente Mielle – 182707

Luiza Tirelli Rehbein – 254303

Lucas Kauê Pedralina Lobo – 239794

Lorena Eduarda Santos Vieira – 178806

Alysson Breno Contato – 245995

Referências

GitHub do código

Conteúdos da aula de Sistemas de Apoio a Decisão – João Roberto Bertini Junior