Sistema de produção (ciência da computação)

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Ambox rewrite.svg
Esta página precisa ser reciclada de acordo com o livro de estilo (desde abril de 2015).
Sinta-se livre para editá-la para que esta possa atingir um nível de qualidade superior.
Text document with red question mark.svg
Este artigo ou secção contém fontes no fim do texto, mas que não são citadas no corpo do artigo, o que compromete a confiabilidade das informações. (desde abril de 2015)
Por favor, melhore este artigo inserindo fontes no corpo do texto quando necessário.
Ambox grammar.svg
Esta página ou secção precisa de correção ortográfico-gramatical.
Pode conter incorreções textuais, podendo ainda necessitar de melhoria em termos de vocabulário ou coesão, para atingir um nível de qualidade superior conforme o livro de estilo da Wikipédia. Se tem conhecimentos linguísticos, sinta-se à vontade para ajudar.

Um sistema de produção (ou sistema de regras de produção) é um programa de computador, normalmente usado para fornecer alguma forma de inteligência artificial, que consiste basicamente de um conjunto de regras sobre o comportamento. Estas regras, chamadas de produções, são uma representação básica considerada útil no planejamento automatizado, sistemas especialistas e seleção de ação. Um sistema de produção fornece o mecanismo necessário para executar produções, a fim de atingir alguma meta para o sistema.

Produções consistem de duas partes: uma pré-condição sensorial (ou "se") e uma ação (ou "então"). Se uma pré-condição de produção coincide com o estado atual do mundo, então é dito que a produção foi desencadeada. Se a ação de uma produção é executada, é dito que ela foi disparada. Um sistema de produção também contém um banco de dados, às vezes chamado memória de trabalho, que mantém dados sobre o estado atual ou conhecimento, e um interpretador de regras. O interpretador de regras deve fornecer um mecanismo para priorizar produções quando mais de uma é desencadeada.

Operações Básicas[editar | editar código-fonte]

Os interpretadores de regra geralmente executam um algoritmo de encadeamento para a frente para selecionar as produções a serem executadas para atingir as metas atuais, o que pode incluir a atualização de dados do sistema ou crenças. A porção de condição de cada regra (lado esquerdo ou LE) é testado contra o estado atual da memória de trabalho.

Em sistemas de produção idealizados ou orientados a dados, há um pressuposto de que quaisquer condições desencadeadas devem ser executadas: as ações conseqüentes (lado direito ou LD) vão atualizar o conhecimento do agente, removendo ou adicionando dados para a memória de trabalho. O sistema interrompe o processamento quando: o usuário interrompe o loop de encadeamento para a frente; um determinado número de ciclos têm sido realizados; uma LD de "parada" é executada; ou não têm regras LE verdadeiras.

Sistemas especialistas e de tempo-real, ao contrário, muitas vezes tem que escolher entre as produções mutuamente exclusivas --- uma vez que ações levam tempo, apenas uma ação pode ser tomada, ou (no caso de um sistema especialista) recomendada. Nesses sistemas, o interpretador de regras, ou motor de inferência, percorre duas etapas: combinar regras de produção com o banco de dados, seguido de selecionar quais as regras combinadas para aplicar e executar as ações selecionadas.

Correspondência de regras de produção com a memória de trabalho[editar | editar código-fonte]

Sistemas de produção podem variar no poder expressivo das condições em regras de produção. Assim, o algoritmo de casamento de padrões que coleta regras de produção com as condições correspondentes podem variar desde o ingênuo -- tentando todas as regras em seqüência, parando na primeira correspondência -- para o otimizado, no qual as regras são "compiladas" em uma rede de condições inter-relacionadas.

Este último é ilustrado pelo algoritmo RETE, concebido por Charles L. Forgy em 1983, que é usado em uma série de sistemas de produção, chamado OPS e originalmente desenvolvida na Universidade Carnegie Mellon culminando na OPS5 na década de oitenta. OPS5 pode ser visto como uma linguagem de programação completa para a programação de sistemas de produção.

Escolhendo quais as regras a avaliar[editar | editar código-fonte]

Sistemas de produção também podem diferir na seleção final de regras de produção para executar, ou disparar. O conjunto de regras resultantes a partir do algoritmo de correspondência anterior é chamado o conjunto de conflitos, e o processo de selecção é também chamado de uma estratégia de resolução de conflitos.

Aqui, novamente, essas estratégias podem variar do simples -- usar a ordem em que as regras de produção foram escritas; atribuir pesos ou prioridades para regras de produção e ordenar o conjunto de conflitos nesse sentido -- para o complexo -- ordenar o conjunto de conflitos de acordo com os tempos em que regras de produção foram previamente disparadas; ou de acordo com a extensão das modificações induzidas pelos seus LDs. Qualquer que seja a estratégia de resolução de conflitos implementada, o método é realmente crucial para a eficiência e corretude do sistema de produção.

Usando sistemas de produção[editar | editar código-fonte]

O uso de sistemas de produção varia de simples regras de reescrita de cadeia para a modelagem de processos cognitivos humanos, de reescrita de termos e sistemas de redução para sistemas especialistas.

Um simples exemplo de sistema de produção para reescrever cadeias[editar | editar código-fonte]

Este exemplo mostra um conjunto de regras de produção para reverter uma seqüência de caracteres de um alfabeto que não contém os símbolos "$" e "*" (que são usados ​​como símbolos de marcação).

P1: $$ → *
P2: *$ → *
P3: *x → x*
P4: * → null & halt
P5: $xy → y$x
P6: null → $

Neste exemplo, as regras de produção são escolhidas para testes de acordo com a ordem na lista de produção. Para cada regra, a seqüência de entrada é analisada da esquerda para a direita com uma janela móvel para encontrar uma correspondência com o LE da regra de produção. Quando uma correspondência for encontrada, a subsequência encontrada na sequência de entrada é substituída pelo LD da regra de produção. Neste sistema de produção, X e Y são variáveis ​​correspondendo a qualquer caracter do alfabeto da cadeia de entrada. A correspondência recomeça com P1 uma vez que a substituição tenha sido feita.

A cadeia "ABC", por exemplo, sofre a seguinte seqüência de transformações sob estas regras de produção:

$ABC (P6)
B$AC (P5)
BC$A (P5)
$BC$A (P6)
C$B$A (P5)
$C$B$A (P6)
$$C$B$A (P6)
  • C$B$A (P1)
C*$B$A (P3)
C*B$A (P2)
CB*$A (P3)
CB*A (P2)
CBA* (P3)
CBA (P4)

Em tal sistema simples, a ordenação das regras de produção é fundamental. Muitas vezes, a falta de estrutura de controle faz sistemas de produção difíceis de arquitetar. É, evidentemente, possível adicionar estrutura de controle para o modelo de sistemas de produção, a saber no motor de inferência, ou na memória de trabalho.

Um exemplo de regra de produção OPS5[editar | editar código-fonte]

Em uma simulação de mundo de brinquedo onde um macaco em uma sala pode pegar objetos diferentes e subir em outros, uma regra de produção de exemplo para agarrar um objeto suspenso no teto, ficaria assim:

(p Holds::Object-Ceiling
  {(goal ^status active ^type holds ^objid <O1>) <goal>}
  {(physical-object
    ^id <O1>
    ^weight light
    ^at <p>
    ^on ceiling) <object-1>}
  {(physical-object ^id ladder ^at <p> ^on floor) <object-2>}
  {(monkey ^on ladder ^holds NIL) <monkey>}
  -(physical-object ^on <O1>)
-->
  (write (crlf) Grab <O1> (crlf))
  (modify <object1> ^on NIL)
  (modify <monkey> ^holds <O1>)
  (modify <goal> ^status satisfied)

)

Neste exemplo, os dados na memória de trabalho são estruturados e variáveis ​​aparecem entre sinais de desigualdade (<e >). O nome da estrutura de dados, como "objetivo" e "objeto-físico", é o primeiro literal em condições, os campos de uma estrutura são prefixados com "^". O "-" indica uma condição negativa.

Regras de produção em OPS5 aplicam-se a todas as instâncias de estruturas de dados que correspondam às condições e em conformidade com ligações de variáveis​​. Neste exemplo, devem ser suspensos vários objetos no teto, cada um com uma escada diferente nas proximidades apoiando um macaco com as mãos vazias, o conjunto de conflitos deverá conter muitas instâncias de regras de produção derivada da mesma produção "Holds::Object-Ceiling". A etapa de resolução de conflitos, mais tarde, deverá selecionar as instâncias de produção a disparar.

Note que a ligação de variáveis ​​resultantes a partir do casamento de padrões no LE é usado no LD para se referir aos dados a serem modificados. Note também que a memória de trabalho contém estruturas de dados de controle explícitas em forma de estrutura de dados "objetivo". No exemplo, uma vez que um macaco mantém o objeto suspenso, o status do objetivo é definido para "satisfeito" e a mesma produção não pode mais ser aplicada conforme sua primeira condição falhar.

Sistemas relacionados[editar | editar código-fonte]

  • CLIPS: ferramenta de software de domínio público para a construção de sistemas especialistas.
  • ILOG rules: um sistema de gestão de regras de negócio.
  • JBoss Drools: um sistema de código aberto de gestão de regras negócios (BRMS) Drools.
  • JESS: um mecanismo de regras para a plataforma Java - é um superconjunto da linguagem de programação CLIPS.
  • Prolog: uma linguagem de programação lógica de propósito geral.
  • Lisa: um mecanismo de regra escrito em Common Lisp.
  • DTRules: um mecanismo de regras open-source para Java, baseada em Tabelas de Decisão.
  • OpenL Tablets: regras de negócio centradas e BRMS de código aberto.

Bibliografia[editar | editar código-fonte]

  • Brownston, L., Farrell R., Kant E. (1985). Programming Expert Systems in OPS5 Reading, Massachusetts: Addison-Wesley. ISBN 0-201-10647-7
  • Waterman, D.A., Hayes-Roth, F. (1978). Pattern-Directed Inference Systems New York: Academic Press. ISBN 0-12-737550-3
  • Klahr, D., Langley, P. and Neches, R. (1987). Production System Models of Learning and Development. Cambridge, Mass.: The MIT Press.

Ver também[editar | editar código-fonte]