beer.expertSystem – Sistema Especialista em Cervejas Artesanais

Os sistemas especialistas (SE) representam uma área do conhecimento que está englobada na grande área de Inteligência Artificial, justamente com os sistemas baseados em conhecimento.

Os SE são programas computacionais que emulam o comportamento de um especialistas humanos, podendo assim inferir respostas para um determinado problema ou questão. Um programa convencional faz uso e representação de dados, enquanto um sistema especialista faz uso e representação de conhecimento.


Uma das grandes vantagens da computação é poder juntar o útil ao agradável xD e para um melhor entendimento sobre Sistemas Especialistas, desenvolvi um SE capaz de indicar a melhor família e a melhor cerveja artesanal, baseado na interação feita com o usuário através de perguntas. Para o desenvolvimento, foi utilizado uma sheel chamada Expert Sinta que tem como objetivo principal simplificar o trabalho de implementação de sistemas especialistas.

Etapas do desenvolvimento

Aquisição do conhecimento: apesar de não ser tão especialista no assunto, para reunir as informações necessárias eu consultei o querido Google e também videos e documentários, para assim, poder me colocar no papel do especialista do sistema.

Foquei nas grandes famílias de cervejas artesanais: ALES e LAGER e selecionei 5 cervejas de cada família. Abaixo, mais informações:

Este slideshow necessita de JavaScript.

Conceitos e Objetivos: Após a coleta, foi feita a análise das informações para a formulação das perguntas que seriam feitas ao usuário.

  1. Você já experimentou alguma cerveja artesanal?
  2. Você prefere aromas intensos ou suaves?
  3. Qual o teor alcoólico permitido para o momento?
  4. Prefere cervejas claras, douradas ou escuras?
  5. Gostaria de uma cerveja de sabor doce ou amargo?
  6. Você acha que chocolate e cerveja combinam?
  7. Você gosta de uma cerveja com leve sabor de caramelo?
  8. Você gostaria de degustar uma cerveja com leve sabor de banana e cravo?
  9. Gosta de sabores cítricos?

Conclusão: Reunindo o conhecimento e as informações, foi feito o fluxograma abaixo:

fluxograma

E então era hora de passar o sistema para o Expert Sinta. O programa utiliza quatro processos para a utilização:

  1. Estabelecer variáveis
  2. Estabelecer objetivos (variáveis de saída)
  3. Estabelecer interfaces (perguntas a serem feitas)
  4. Criar as regras.

As regras são feitas em um estrutura bem similar ao “if”.

regras

Ao total, o sistema foi concluído com 18 regras e 10 variáveis e esta é a “cara” dele quando executado, conforme o usuário responde, o sistema utiliza as regras para avançar ou concluir a consulta.

regras

Para quem quiser utilizar ou conhecer um pouco mais sobre a ferramenta, o sistema(+ Expert Sinta) está disponível no meu Github e pode ser baixado aqui.

Espero que tenham gostado e até a próxima! 🙂

Desenvolvendo um jogo com CSharp (C#)

Logo no inicio do semestre me deparei com um desafio na disciplina de Inteligência Artificial, o professor definiu que uns dos trabalhos seria a construção de um jogo. Poderia ser em qualquer linguagem e a categoria deveria ser estratégia.

O principal objetivo do trabalho era colocar em prática dois conceitos aprendidos em sala:

  • Simulação de uma inteligência: O jogo deveria ser  Homem X Máquina e  o computador deveria ser capaz de “reconhecer” as regras.
  • Busca Heurística: Esse tipo de busca leva em conta o objetivo para decidir qual caminho escolher.

PS: A interface gráfica não era tãaao importante assim, deveria apenas ser “jogavél” rs.


Para a elaboração do trabalho, eu escolhi desenvolver o jogo Mancala utilizando a linguagem C#.

Objetivo do jogo: Capturar o maior número de “sementes”.

Forma de jogar: O jogo é executado em um tabuleiro, onde cada jogador fica com uma fileira de 6 casas, que é considerado o seu “campo” e mais uma casa onde deposita as “sementes” capturadas.

Regras do jogo:

Ao início do jogo, são dispostas 4 “sementes” em cada uma das casas dos jogadores. O primeiro a jogar apanha todas as peças de uma de suas casas e distribui-as uma a uma nas casas adiante, seguindo no sentido anti-horário, incluindo o seu depósito.

• Não se pode tirar “sementes” de casas que só tenham 1 semente enquanto houver casas com 2 ou mais.

• Se a última “semente” do movimento for no depósito o jogador pode fazer uma nova jogada.

• Não se pode mover “sementes” de casas do campo adversário.

• Se a última “semente” do movimento cair em uma casa vazia que seja do seu campo, e a casa oposta do campo do adversário tiver “sementes”, estas vão para o seu depósito.

• Se um jogador, ao realizar um movimento, ficar sem “sementes”, o adversário é obrigado a fazer uma jogada que coloque pelo menos uma semente no seu lado (se tal for possível).

• Se um jogador ao efetuar uma captura, deixar o adversário sem sementes, é obrigado a jogar novamente para colocar pelo menos uma semente no lado deste (se tal for possível).

A partida acaba quando um jogador fica sem sementes e o adversário não consegue fazer uma jogada que passe uma semente para o seu lado, ficando com as sementes existentes o jogador que as tenha do seu lado ou restarem tão poucas sementes sobre o tabuleiro que nenhuma captura seja mais possível.

mancala

O código-fonte do jogo está disponível neste link, quem quiser baixar para jogar, sinta-se a vontade e divirta-se =)

Engenharia de Software

– A engenharia que foge dos números.

Cá estou eu iniciando o meu projeto da disciplina de Engenharia de Software, e refletindo sobre o quando nós, que somos apegados ao código, podemos encontrar algumas dificuldades na hora de transmitir a ideia para uma forma gramatical e desenvolver um template para o que queremos projetar.

Como desenvolvedores, a gente pensa no produto pronto e apenas na codificação, mas esquece (ou tenta) que tem muuuito trabalho antes de podermos colocar a mão na massa e se colocar no lugar do cliente, do analista e do usuário, não é uma tarefa nada fácil.

Particularmente, estou dando uma atenção especial à este projeto, porque é algo que eu realmente quero avançar e desenvolver, como uma forma de aprendizado e também por enxergar um potencial bem bacana na ideia.

No documento, será necessário descrever os seguintes tópicos:

  • Escopo do produto: nome, funcionalidades principais, público alvo, etc;
  • Requisitos: exigências, propriedades e componentes necessários;
  • Histórias: modelo de diálogo através de cartões que pretende armazenar informações sobre os requisitos;
  • Alguns diagramas específicos;
  • Matriz de rastreabilidade: é uma forma de descrever as dependências entre os requisitos do sistema;
  • “Desenhar” uma ideia de gestão.

Resumindo, tem trabalho pra uma vida inteira rs. 🙂


Este post faz parte de uma série de reflexões que eu pretendo fazer sobre as disciplinas, porque por mais que as vezes a gente não goste, se está na grade do curso, tem utilidade, não é mesmo? :p