• Nenhum resultado encontrado

1. CONSIDERAÇÕES INICIAIS

2.2. Fundamentação teórica das técnicas utilizadas

2.2.2. Algoritmos de busca e otimização

2.2.2.1. CSP (Constraint Satisfaction Problem)

O CSP (Constraint Satisfaction Problem) é um sistema de busca onde se conhece os estados possíveis com um conjunto de variáveis sob um determinado domínio (RUSSELL; NORVIG, 2010). O CSP (Constraint Satisfaction Problem) pode ser considerado como o estudo de sistemas computacionais baseados em restrições, tendo por fundamento resolver problemas apenas especificando os requisitos (restrições) sobre a área problema ou, em outras palavras, sobre os valores possíveis (domínio) das variáveis. A solução para o problema, portanto, um conjunto de valores que atendam todos os requisitos (PEREIRA, 2011).

Um problema formulado como satisfação de restrições possui três componentes principais: variáveis, domínios e restrições.

O domínio das variáveis pode ser classificado em discretos ou contínuos, ou seja, em um domínio discreto são conhecidos todos os possíveis valores das variáveis, enquanto no contínuo podem existir infinitos valores em um intervalo.

As restrições podem ser classificadas pela natureza e pelo número de argumentos. Quanto à natureza as restrições podem ser absolutas, quando não podem ser violadas, ou preferenciais que devem ser satisfeitas quando possível.

Em função do número de argumentos ou aridade, as restrições podem ser: unárias quando possuírem apenas uma variável; binária quando possuírem duas variáveis ou n-árias, sendo que as restrições com mais de uma variável são produtos cartesianos dos domínios.

Para Tsang (1993) e Russell e Norvig (2010) um problema com n variáveis, e restrições

d com a cardinalidade máxima de todos os conjuntos de domínio das variáveis apresenta

complexidade O(d n), ou seja o problema é de ordem exponencial para todas as soluções possíveis. À medida que se introduz novas restrições ao problema, aumenta-se o espaço de busca por uma solução, o que faz com que este problema aumente sua complexidade e o tempo para encontrar a solução. Porém, o espaço de busca pode ser diminuído em função das restrições impostas ao problema, ou seja, utiliza-se das próprias restrições para diminuir o espaço de busca.

Para exemplificar um problema de satisfação de restrições será utilizado como exemplo o problema de n rainhas, no qual serão posicionadas n rainhas em um tabuleiro de xadrez com dimensões n x n de tal forma que as rainhas não se ataquem.

As rainhas se atacam se estiverem na mesma linha, na mesma coluna, ou na mesma diagonal principal ou diagonal secundária. Cada rainha deve ser colocada em uma linha do tabuleiro. O problema consiste em selecionar uma coluna para cada rainha, de forma que elas não se ataquem. Uma forma de representação deste problema é associar para cada rainha dois valores, sendo um para a linha e outro para a coluna, sendo ambas dentro do domínio válido de inteiros positivos até n.

As restrições são as condições para que o problema seja considerado válido, ou seja, que as rainhas não se ataquem. Para ilustrar (Figura 7) considera-se um tabuleiro 4 x 4 e os passos para encontrar a primeira solução.

A cada passo ou iteração, em função das restrições, somente serão testadas as opções válidas. As demais foram marcadas para demonstrar que a cada passo diminuem o espaço de possibilidades de busca. Portanto, a cada atribuição de uma variável a restrição imposta ao problema reduz o domínio das variáveis. Este é um exemplo da técnica de propagação de

restrições, também encontrada na literatura como técnica de consistência e filtro de domínio (PEREIRA, 2011).

Para ilustrar o funcionamento da técnica de propagação de restrições, será exemplificado em um algoritmo de busca que considera somente as alternativas válidas a cada passo como pode ser observado na Figura 7.

Figura 7 - Exemplo das 4 rainhas com propagação das restrições. Fonte: O autor

A cada novo passo do algoritmo ilustrado na Figura 8, resta apenas uma posição por linha até todas as quatro rainhas estejam posicionadas, sendo então encontrada a primeira solução válida.

Figura 8 - Exemplo da segunda tentativa do algoritmo. Fonte: O autor

Para melhorar o desempenho da busca em problemas CSP (Constraint Satisfaction

Problem) podem ser utilizadas duas estratégias: ordenação das variáveis ou dos valores a serem

associados às variáveis, sendo que as mais comuns estão citadas na sequência:

a) Variável mais restritiva: variável envolvida no maior número de restrições é preferida; b) Variável mais restringida: variável que pode assumir menos valores é preferida; c) Valor menos restritivo: valor que deixa mais liberdade para futuras escolhas.

Também é possível em função da estrutura do problema, utilizar uma heurística específica. Como exemplo, a heurística dos conflitos mínimos para o problema de n Rainhas

onde a sugestão da próxima tentativa é na linha e coluna que possua menor número de conflitos (TSANG, 1993 ; RUSSELL e NORVIG, 2010).

CSP (Constraint Satisfaction Problem) também pode ser modelado por meio de grafo de restrições, formando uma rede onde as variáveis de decisão são representadas pelos vértices e as restrições pelas arestas, que permite a utilização das ferramentas para manipulação de grafos.

Dentre as principais formas de busca em restrições modeladas através de grafos podemos citar: consistência de nó, consistência de arco e consistência de caminho. Todos com o mesmo objetivo de minimizar o retrocesso do algoritmo por não ter encontrado a solução pelo caminho selecionado inicialmente (BRUCKER, 2002)

Também pode ser encontrada na literatura alternativa para resolução de problemas de satisfação de restrições como o particionamento do problema, denominado DCSP (Distributed

Constraint Satisfaction Problem), cujo principal objetivo é permitir o processamento em

paralelo e distribuído das restrições e com a possibilidade do uso de agentes inteligentes (PEREIRA, 2006 ; GIACOMET, 2010).

Outra característica importante é a facilidade em modelar o problema, uma vez que se podem adicionar restrições independentemente de como será a solução do problema. Também difere de outros tipos de busca, por que não interessa qual o caminho para encontrar a solução, mas se encontrou uma solução que satisfaça as restrições (RUSSELL;NORVIG, 2010).

Problemas reais também foram observados no trabalho de (FRAMINAN;RUIZ, 2010) com o uso de CSP (Constraint Satisfaction Problem).

Zeballon (2010) descreveu em seu trabalho a aplicação do uso de restrições para a programação de produção. Além do detalhamento dos tipos de restrições o autor argumenta sobre a facilidade de modelar problemas reais, pois durante o desenvolvimento do modelo não é necessário ter a preocupação com qual tipo de solução.

Documentos relacionados