Inteligência Artificial
Sistemas Especialistas


  Sistemas especialistas são programas que têm como objetivo simular o raciocínio de um profissional especialista em alguma área de conhecimento [1]. Um especialista é alguém que detém altos conhecimentos acerca de um determinado tema.
  Um dos conceitos básicos de Sistemas Especialistas consiste em captar a perícia de especialistas e passá-las ao computador, de forma que qualquer pessoa possa ter acesso a esses conhecimentos [2]. Dessa forma, podem auxiliar ou até mesmo, em determinados casos, substituir o especialista humano.
  A construção da base de conhecimentos é feita com o auxílio de um Engenheiro de Conhecimento, no qual tem a missão de extrair os conhecimentos do especialista em uma determinada área e codificá-los na base de dados de um Sistema Especialista [1][2].

  Um sistema especialista é geralmente formado por uma série de declarações do tipo SE / ENTÃO [2]. O exemplo a seguir [2] simula um diagnóstico médico, a partir de uma série de perguntas.
SE o paciente tosse
E se esteve em contato com chuva
E depois esteve em contato com vento gelado durante uma hora
ENTÃO o doente sofre de gripe OU pneumonia
  A conclusão do médico depende das respostas apresentadas pelo paciente, através das perguntas formuladas com base em seu conhecimento sobre o assunto.

  Podemos ver outro exemplo [3] de um especialista em Meteorologia.
SE o céu está negro
E está nublado
ENTÃO há alta probabilidade de chuva
  Um dos problemas que podemos citar sobre os Sistemas Especialistas é que eles são muito focados na especialidade que foram desenhados. Além disso, seus conhecimentos estão limitados à construção de sua base de dados, bem como ao conhecimento dos especialistas envolvidos na sua elaboração.
  A menos que estejam especificamente programados para alertarem o usuário, os Sistemas Especialistas podem tornar-se bastante idiotas quando encontram qualquer coisa que não esteja no seu repertório. É como alguém brilhante em xadrez, mas incapaz de dar um nó na gravata [2].

  Alguns Sistemas Especialistas são capazes de aumentar seus conhecimentos dinamicamente, como por exemplo o sistema baseado em árvore de conhecimento [3]. Outros não permitem que o usuário comum adicione conhecimentos, como o baseado em pontuação [2]. Dentre outros motivos, a inserção de informações erradas por meio de um não especialista pode comprometer o bom funcionamento do sistema.
Sistemas Especialistas Baseados em Árvore de Conhecimento   Vimos que o Sistema Especialista é baseado em uma série de perguntas do tipo IF/THEN/ELSE. A proposta da Árvore de Conhecimento é simplificar o uso dessas regras, permitindo a modificação e expansão dessas regras de forma dinâmica [3].
  Por exemplo, vamos construir um sistema especialista sobre animais. Começaremos por distinguir os animais por terem penas ou não.
 Tem penas?
    / \
 S /   \ N
  /     \
 ?       ?

  O sistema pede para que o usuário pense em um determinado animal. Se ele existir no sistema, será encontrado após serem respondidas algumas perguntas. Caso contrário, o sistema irá pedir ao usuário que informe o nome do animal. Caso já exista um outro animal para uma sequência de perguntas, esse animal é substituído por uma pergunta de forma a diferenciar o animal registrado daquele que o usuário pensou.

  Vejamos isso agora na prática.

  Inicialmente, a árvore tem apenas uma pergunta e nenhuma resposta. O sistema nesse momento está vazio. Qualquer animal que o usuário pensar será registrado no ramo da árvore correspondente à resposta da pergunta. Por exemplo, se eu pensar em uma águia, a resposta para a pegunta "Tem penas?" é sim, e a águia será registrada do lado do "S".
 Tem penas?
    / \
 S /   \ N
  /     \
AGUIA    ?

  Após registrar o nome da águia, o sistema termina sua busca e deverá recomeçar da primeira pergunta.

  Ao iniciar novamente o sistema, caso eu pense novamente na águia, agora ele a encontrará. Entretanto, caso eu pense em uma nova ave, como um canário, o sistema dirá que não a encontrou, e pede para que ela seja registrada. Veja o exemplo a seguir.
         Tem penas?
            / \
         S /   \ N
          /     \
      Ave de     ?
      rapina?
       / \
    S /   \ N
     /     \
  AGUIA  CANARIO 

  No exemplo acima, o sistema perguntou se o animal tinha penas e o usuário disse que sim. Depois, perguntou se o animal procurado era a águia e o usuário informou que não.
  A partir disso, o sistema pede ao usuário que formule uma pergunta de forma a distinguir a águia do animal que ele pensou. Nesse caso, o usuário optou por realizar uma pergunta que identificasse a águia através do sim. Por essa razão, a águia foi deslocada para o caminho do sim. Por fim, o sistema pergunta ao usuário o nome do animal que ele pensou, e o insere na árvore no caminho do não.

  Nota: sabemos que um determinado nó da árvore é uma resposta, quando esse nó é um nó folha.

  Observe que percorrendo a árvore gerada, podemos deduzir as regras de inferência do Sistema Especialista:
IF tem_penas AND ave_rapina THEN animal="aguia"
IF tem_penas AND NOT ave_rapina THEN animal="canario"

  O programa em Basic a seguir apresenta um exemplo de Sistema Especialista baseado em Árvore de Conhecimento.
10 SCREEN 0:COLOR 15,0,0:KEY OFF:WIDTH 40:CLEAR 5000
20 PRINT"Sistema Especialista"
30 PRINT:PRINT"Pense em um animal que tentarei descobri-lo"
40 PRINT:PRINT"Responda cada pergunta com S para sim"
50 PRINT"e N para nao.":PRINT
60 ' Base de dados
70 DIM PN$(100),S(100),N(100)
80 ' Valores iniciais
90 P=1:PN$(1)="Tem penas"
100 ' Rotina principal
110 IF P>1 AND S(P)=0 AND N(P)=0 THEN 300 ' Resposta
120 PRINT PN$(P);:INPUT R$
130 IF R$="s" OR R$="S" THEN IF S(P)<>0 THEN P=S(P):GOTO 100 ELSE 200
140 IF R$="n" OR R$="N" THEN IF N(P)<>0 THEN P=N(P):GOTO 100 ELSE 200
150 GOTO 120
200 ' Pede o nome de um animal
210 PRINT"Eu nao conheco o animal."
220 GOSUB 500
230 INPUT"Qual o nome dele";PN$(I)
240 IF R$="s" OR R$="S" THEN S(P)=I ELSE N(P)=I
250 GOTO 600
300 ' E' o animal ou cria divisao no no'
310 PRINT"O animal que voce pensou e' ";PN$(P);:INPUT R$
320 IF R$="s" OR R$="S" THEN PRINT"Acertei !!!!":GOTO 600
340 IF R$="n" OR R$="N" THEN 400
350 GOTO 310
400 ' Cria divisao no no'
410 GOSUB 500
420 PN$(I)=PN$(P):PRINT"Desisto!"
430 PRINT"Qual o animal que voce pensou";:INPUT PN$(I+1)
440 PRINT"Formule uma pergunta para distinguir:"
445 PRINT PN$(I);" e ";PN$(I+1)
450 INPUT PN$(P)
460 PRINT PN$(I);" ";PN$(P);:INPUT R$
470 IF R$="s" OR R$="S" THEN S(P)=I:N(P)=I+1:GOTO 600
480 IF R$="n" OR R$="N" THEN S(P)=I+1:N(P)=I:GOTO 600
490 GOTO 460
500 ' Obtém proximo espaco livre
510 FOR I=1 TO 100
520 IF PN$(I)="" THEN RETURN
530 NEXT I
540 PRINT"Base de dados cheia!"
600 ' Reinicia
610 P=1:PRINT:PRINT"Pense em outro animal."
620 GOTO 100

  A seguir, apresentamos um exemplo de como utilizar o programa apresentado.
Sistema Especialista

Pense em um animal que tentarei descobri
-lo

Responda cada pergunta com S para sim
e N para nao.

Tem penas? s
Eu nao conheco o animal.
Qual o nome do animal? Canario

Pense em outro animal.
Tem penas? s
O animal que voce pensou e' Canario? n
Desisto!
Qual o animal que você pensou? Galinha
Formule uma pergunta para distinguir:
Canario e Galinha
? E' pequeno
Canario E' pequeno? s

Pense em outro animal.
Tem penas? s
E' pequeno? s
O animal que voce pensou e' Canario? s
Acertei !!!!

  Vimos que a base de conhecimento do Sistema Especialista do programa apresentado, é construída a partir de interações com o usuário. Conforme o número de interações aumenta, o sistema vai se tonando mais inteligente.
  Felizmente, a base de dados pode ser salva em disco para depois ser recuperada. Com isso, podemos inclusive transmitir o conhecimento adquirido em um Sistema Especialista nosso para outras pessoas.
  Para adicionar o recurso de gravação, necessitamos apenas salvar a informação contida nos vetores PN$, S e N em disco. De forma similar, carregamos os dados contidos no disco nesses vetores. Veja o código a seguir.
1000 ' Salva base de dados
1010 OPEN"SISESP.DAT" FOR OUTPUT AS#1
1020 FOR I=1 TO 100
1030 PRINT #1,PN$(I);",";STR$(S(I));",";STR$(N(I))
1040 NEXT I
1050 CLOSE 1:GOTO 600
1100 ' Recupera base de dados
1110 OPEN"SISESP.DAT" FOR INPUT AS#1
1120 FOR I=1 TO 100
1130 INPUT #1,PN$(I)
1135 INPUT #1,A$:S(I)=VAL(A$):INPUT #1,A$:N(I)=VAL(A$)
1140 NEXT I
1150 CLOSE 1:GOTO 600

  Podemos incluir uma opção para salvar e outra para ler:
145 IF R$="g" THEN GOTO 1000
146 IF R$="c" THEN GOTO 1100

  O Sistema Especialista apresentado é sobre animais. Entretanto, poderá ser utilizado para qualquer outro assunto. Para isso, basta alterar a primeira pergunta na linha 90.

  O programa completo (sistesp1.bas) mais uma base de dados (siesp.dat) podem ser baixados aqui.
Sistemas Especialistas Baseados em Pontuação   Diferente da Árvore apresentada no exemplo anterior, esse sistema não cresce interativamente. Ele é formulado por um especialista no assunto e utilizado apenas para consultas.
  Nesse sistema proposto em [2], temos P perguntas pré-formuladas, onde cada pergunta tem um peso (caso a resposta seja afirmativa), e a soma desses pesos irão definir qual o nome do objeto correspondente. Dessa forma, de acordo com a combinação de nossas respostas às perguntas, é definido o nome do objeto a ser retornado.
  Um exemplo de um Sistema Especialista de pontuação, criado por um especialista, é apresentado a seguir.
Nomes:
Homem, Animal

Perguntas:
1- Tem quatro patas?
2- É racional?

  O especialista definiu dois nomes: homem e animal. Além disso, formulou duas perguntas para diferenciar o homem do animal: "Tem quatro patas" e "É racional".
  Cada uma dessas duas peguntas terá um peso diferente associado à ela. Geralmente, o peso varia como potência de 2:
Pergunta 1 - 1 ponto
Pergunta 2 - 2 pontos
Pergunta 3 - 4 pontos
Pergunta 4 - 8 pontos
Pergunta 5 - 16 pontos
Pergunta 6 - 32 pontos
...

  A resposta SIM multiplica o peso por 1, enquanto que o NÃO multiplica o peso por 0.

  Caso eu pense em HOMEM, temos:
Tem quatro patas? n
E' racional? s
  A pontuação será:
Tem quatro patas? s → 0 x 1 = 0
E' racional? n      → 1 x 2 = 2

Total de pontos: 2

  Caso eu pense em ANIMAL, temos:
Tem quatro patas? s → 1 x 1 = 1
E' racional? n      → 0 x 2 = 0

Total de pontos: 1

  O especialista deverá acrescentar ao sistema a pontuação de cada objeto, para que o sistema saiba qual objeto retornar com base nas respostas do usuário.
Homem 2
Animal 1

  O sistema a seguir apresenta o Sistema Especialista proposto por [2].
10 SCREEN 0:WIDTH 40:KEY OFF:COLOR 15,0,0:CLEAR 5000
20 DIM NO$(100),PE$(100),PT(100)
30 INPUT"Nome do sistema";SI$
40 INPUT"Numero de objetos";N
50 INPUT"Numero de perguntas";P
60 PRINT:PRINT"Entre com o nome dos objetos"
70 FOR I=1 TO N
80 PRINT "Qual o objeto";I;:INPUT NO$(I)
90 NEXT I
100 PRINT:PRINT"Entre com as perguntas sem o '?'"
110 FOR I=1 TO P
120 PRINT "Qual a pergunta";I;:INPUT PE$(I)
130 NEXT I
140 PRINT:PRINT"Para cada objeto responda as perguntas:"
150 FOR I=1 TO N:PRINT:PRINT NO$(I);":":PT(I)=0
160 FOR J=1 TO P:PRINT PE$(J);:INPUT R$
170 IF R$="S" OR R$="s" THEN PT(I)=PT(I) + 2^(J-1)
180 NEXT J,I
190 PRINT:PRINT"Pontuacao dos objetos:"
200 FOR I=1 TO N
210 PRINT NO$(I);":";PT(I);"pontos"
220 NEXT I
500 ' Roda o sistema especialista
510 PRINT:PRINT"Pense em ";
520 FOR I=1 TO N:PRINT NO$(I);
530 IF I<N THEN PRINT", ";
540 NEXT I
550 PRINT:PRINT"Agora responda as perguntas:":PRINT
560 PP=0:FOR I=1 TO P
570 PRINT PE$(I);:INPUT R$
580 IF R$="S" OR R$="s" THEN PP=PP + 2^(I-1)
590 NEXT I
600 ' Confere resposta
610 FOR I=1 TO N
620 IF PP=PT(I) THEN PRINT"Voce pensou em: ";NO$(I):GOTO 650
630 NEXT I
640 PRINT"Nao conheco o animal que voce pensou"
650 PRINT:GOTO 500

  Exemplo de como utilizar esse sistema.
Nome do sistema? Animais
Numero de objetos? 3
Numero de perguntas? 3

Entre com o nome dos objetos
Qual o objeto 1 ? Homem
Qual o objeto 2 ? Passaro
Qual o objeto 3 ? Peixe

Entre com as perguntas sem o '?'
Qual a pergunta 1 ? Voa
Qual a pergunta 2 ? Anda
Qual a pergunta 3 ? Fala

Para cada objeto responda as perguntas:

Homem:
Voa? n
Anda? s
Fala? s

Passaro:
Voa? s
Anda? s
Fala? n

Peixe:
Voa? n
Anda? n
Fala? n

Pontuacao dos objetos:
Homem: 6 pontos
Passaro: 3 pontos
Peixe: 0 pontos

Pense em Homem, Passaro, Peixe
Agora responda as perguntas:

Voa? s
Anda? s
Fala? n
Voce pensou em: Passaro

  Podemos salvar toda a base de dados e depois carregá-la. Após carregar, rodamos o programa a partir da linha 500.
25 INPUT"Deseja carregar (c) ou criar novo (n)";R$
26 IF R$="c" OR R$="C" THEN 1200
230 GOSUB 1000
1000 ' Salva base de dados
1010 OPEN "SISESP2.DAT" FOR OUTPUT AS#1
1020 PRINT #1,SI$ ' Nome do sistema
1030 PRINT #1,STR$(N) ' Numero de objetos (e pontuacoes)
1040 PRINT #1,STR$(P) ' Numero de perguntas
1050 FOR I=1 TO N
1060 PRINT #1,NO$(I) + "," + STR$(PT(I))
1070 NEXT I
1080 FOR I=1 TO P
1090 PRINT #1,PE$(I)
1100 NEXT I
1110 CLOSE 1:RETURN
1200 ' Carrega base de dados
1210 OPEN "SISESP2.DAT" FOR INPUT AS #1
1220 INPUT #1,SI$
1230 INPUT #1,A$:N=VAL(A$)
1240 INPUT #1,A$:P=VAL(A$)
1250 FOR I=1 TO N
1260 INPUT #1,NO$(I):INPUT #1,A$:PT(I)=VAL(A$)
1270 NEXT I
1280 FOR I=1 TO P
1290 INPUT #1,PE$(I)
1300 NEXT I
1310 GOTO 500

  O programa completo (sistesp2.bas) mais uma base de dados (siesp2.dat) podem ser baixados aqui.



  Referências

  1. Sistema Especialista, em https://pt.wikipedia.org/wiki/Sistema_especialista
  2. Inteligência Artificial no Seu Spectrum e Spectrum +, T. Hartnell. Editorial Presença, Portugal, 1984.
  3. Inteligência Artificial em Basic, M. James. Editora Campus, Brasil, 1986.



<< Anterior   AI   Próxima >>


/MARMSX/CURSOS/AI