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

Origem: Wikipédia, a enciclopédia livre.

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 precondição sensorial (ou "se"); e uma ação (ou "então"). Se uma precondiçã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, que 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 regras 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 consequentes (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 há regras LE verdadeiras.

Sistemas especialistas e de tempo real, ao contrário, muitas vezes têm 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; e posteriormente, selecionar quais as regras combinadas para aplicar e executar as ações selecionadas.

Correspondência: regras de produção X 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, pode variar desde o ingênuo - tentando todas as regras em sequência, parando na primeira correspondência - até o otimizado, no qual as regras são "compiladas" em uma rede de condições interrelacionadas.

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 desenvolvido na Universidade Carnegie Mellon, culminando na OPS5 na década de 1980. OPS5 pode ser visto como uma linguagem de programação completa para a programação de sistemas de produção.

Escolha de 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 conjunto de conflitos; e o processo de seleçã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 - até 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 LD's. Qualquer que seja a estratégia de resolução de conflitos implementada, o método é realmente crucial para a eficiência e exatidão do sistema de produção.

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

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

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 sequê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 sequê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 caractere 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 sequê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 uma estrutura de controle para o modelo de sistemas de produção, a saber, no motor de inferência; ou na memória de trabalho.

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

Nota-se que a ligação de variáveis ​​resultantes a partir do casamento de padrões no LE é usada no LD para se referir aos dados a serem modificados. Nota-se 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 de 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 regras escrito em Common Lisp;
  • DTRules: um mecanismo de regras open-source para Java, baseado 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]