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

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

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

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

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

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

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).
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:
* C$B$A (P1)
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

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:
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

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