A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Pesquisa e Heurísticas

Apresentações semelhantes


Apresentação em tema: "Pesquisa e Heurísticas"— Transcrição da apresentação:

1 Pesquisa e Heurísticas
Os algoritmos que mantêm um qualquer critério de consistência ao eliminar valores redundantes dos domínios reduzem, mas não eliminam a necessidade de pesquisa. Com efeito se uma rede é consistente isto não implica que qualquer enumeração não esteja sujeita a falhas. Na realidade, uma rede de restrições consistente não é sequer necessáriamente satisfazivel (tal como uma rede satisfazível não é necessáriamente consistente). Tudo o que se pode garantir ao manter um qualquer critério de consistência é que “não se perdem soluções” isto é, todas as soluções da rede de restrições original são igualmente soluções da rede consistente.

2 Pesquisa e Heurísticas
Desta forma a redução de domínios não implica em geral a eliminação da pesquisa. Em geral essa pesquisa será feita organizando o espaço de pesquisa numa árvore, havendo lugar a um retrocesso se se detectar uma falha (insatisfazibilidade). Como vimos antes, na árvore de pesquisa cada nível corresponde a uma atribuição de valor a uma variável, pelo que a pesquisa em árvore pretende construir uma etiqueta composta completa (incluido todas as variáveis) de uma forma incremental, isto é, completando sucessivamente uma etiqueta inicialmente vazia.

3 Pesquisa e Heurísticas
Em termos do esquema de programação em lógica com restrições (ou mais geralmente, em qualquer algoritmo de pesquisa entrelaçado com propagação de restrições) Problema ( Vars):- Declaração de Variáveis e Domínios, Lançamento das Restrições, Enumeração das Variáveis. a enumeração das variáveis determina a árvore a ser pesquisada, porque os nós a pesquisar são condicionados pela ordem em que as variáveis são enumeradas. Com efeito, consideremos duas enumerações distintas das variáveis X in 1..2,Y in 1..3 e Z in 1..4 com os domínios indicados, que têm diferente cardinalidade.

4 Pesquisa e Heurísticas
enum([X,Y,Z]):- indomain(X) propagação indomain(Y), propagação, indomain(Z). # de nós = 32 ( ) 1 2 3 4

5 Pesquisa e Heurísticas
enum([X,Y,Z]):- indomain(Z), propagação indomain(Y), propagação, indomain(X). # de nós = 32 ( ) 1 2 3 4

6 Pesquisa e Heurísticas
A ordem de enumeração das variáveis pode ter uma enorme influência na eficiência da pesquisa em árvore, pois O número de nós das árvores é diferente, apesar do espaço de pesquisa ser O( #Xi). As falhas podem ser detectadas de forma diferente, consoante as ordenações das variáveis. Durante a propagação, diferentes ordens podem conduzir a diferentes cortes no espaço de pesquisa. A ordem de escolha dos valores não tem influência no espaço de pesquisa, embora possa ter influência na detecção da primeira solução. Desta forma o estudo das heurísticas vai incidir fundamentalmente na ordem de escolha das variáveis.

7 Escolha Heurística da Variável
A heurística na escolha da ordem de enumeração das variáveis pode ser Estática - determinada antes de se começar a enumeração e não tendo em consideração os efeitos da propagação Dinâmica - escolha que é determinada por análise do estado do problema após a enumeração de cada variável. Nas heurísticas estáticas que iremos abordar, são tidas em conta na ordenação das variáveis as características da rede de restrições, nomeadamenta a sua largura e largura de banda, pelo que a sua explicação será antecedida de algumas definições.

8 Heurística para Árvores de Restrições
Antes ainda vamos estudar um caso especial de redes de restrições, constituído pelas redes em que as restrições (binárias) se podem representar numa árvore (não confundir com pesquisa em árvore !). A E C B G F D H I Se se enumerar a variável A em primeiro lugar, por exemplo com um valor a do seu domínio (A = a), o problema reduz-se a três problemas independentes. E C B G F D H I

9 Heurística para Árvores de Restrições
Neste caso, para garantir que esta enumeração não conduz “imediatamente” a qualquer inconsistência, o valor a da variável A deve ter suporte nas variáveis B, C e D. E C B G F D H I Mas este raciocínio pode ser continuado recursivamente, para cada uma das sub-árvores independentes, com raízes B, C e D. Por exemplo a enumeração de B não conduz a qualquer inconsistência, se o valor b que fôr escolhido (isto é B = b) tiver suporte em E e F.

10 Heurística para Árvores de Restrições
De uma forma geral, fazendo-se a enumeração das variáveis de uma forma descendente na árvore, os valores escolhidos para as variáveis nunca irão conduzir a contradições se os valores mantidos num nó tiverem suporte em todos os seus descendentes. A E C B G F D H I Assim uma boa heurística para a escolha da variável para árvores de restrições é a escolha de variáveis de forma descendente na árvore.

11 Heurística para Árvores de Restrições
Embora este não seja o caso geral, como já foi visto anteriormente, no caso das árvores a consistência de arco é equivalente à satisfazibilidade das restrições! Com efeito, Usando uma qualquer heurística descendente na enumeração das variáveis, a escolha dos valores nunca conduz a contradições, pois estes têm suporte nos nós descendentes, que se tormam as raízes de sub-problemas independentes. Na realidade, a direccionalidade na enumeração, permite utilizar um algoritmo de manutenção de consistência de arco direccionado, e menos custoso que os AC-X.

12 Heurística para Árvores de Restrições
Voltando ao exemplo anterior, não é necessário que todos os valores nos domínios de B, C e D tenham suporte nos valores do domínio de A. Apenas é necessário que todos os valores de A tenham suporte nos domínios de B, C e D. Quando um valor de A fôr escolhido, os valores não compatíveis com esse valor são eliminados pela simples manutenção de consistência de nó. A E C B G F D H I E C B G F D H I

13 Heurística para Árvores de Restrições
Duma forma geral, pode definir-se um critério de consistência de arco dirigida se, ao contrário do que temos feito, considerarmos um grafo dirigido para representar a rede de restrições. Mais especificamente, se arbitrarmos uma direcção para cada restrição do problema. Definição (Consistência de Arco Dirigida): Um problema de restrições tem os seus arcos dirigidos consistentes sse Tiver todos os nós consistentes; e Para qualquer etiqueta Xi-vi de qualquer variável Xi, e para todas os arcos aij dirigidos correspondentes a restrições Rij, existe um valor vj de suporte, isto é, a etiqueta composta {Xi-vi, Xj-vj} satisfaz a restrição Rij.

14 Algoritmo DAC Manutenção de Consistência de Arcos
O algoritmo descrito abaixo assume que as variáveis estão “ordenadas” de 1 a n, sendo os arcos dirigidos da “menor” para a “maior” variável, e limita-se a impôr a consistência em todos os arcos dirigidos, começando pelas maiores variáveis, e sem posterior reavaliação procedimento DAC(V, D, R); para i de n até 1 com passo -1 fazer para Rij in R fazer se i < j então rev_dom(aij,V,D,R) fim se fim para fim procedimento Nota: rev_dom(aij,V,D,R) é o usado nos algoritmos AC-1 e AC-3.

15 Algoritmo DAC Complexidade temporal do algoritmo DAC
Como habitual, vamos assumir que os arcos são em número de a, e que as n variáveis do problema têm cada com d valores no seu domínio. O algoritmo visita cada um dos a arcos exactamente uma vez. Em cada arco aij, cada um dos d valores da variável Xi é testado com d valores da variável Xj. Tendo em conta estes factores, a complexidade temporal do DAC , no pior caso, é, tal como nos AC-4/6/7 O(ad2) não apresentando o algoritmo quaisquer requisitos de espaço. Numa árvore, a = n, e a complexidade é O(nd2)

16 Algoritmo DAC Naturalmente, o algoritmo DAC descrito não garante a eliminação de todos os valores redundantes numa rede dirigida genérica, por não reavaliar as consequências das reduções de domínios. No entanto ele é suficiente para o caso das árvores se os arcos forem dirigidos no sentido descendente e analisados (revistos) no sentido ascendente, isto é, se as variáveis forem ordenadas de forma a que cada nó seja “menor” que os seus descendentes. Assim, todos os valores de um nó têm garantido suporte nos seus descendentes, embora não nos seus ascendentes! Quando estes são enumerados, a consistência de nó elimina os valores que não conduzam a soluções.

17 Algoritmo DAC Exemplo: Consideremos a árvore de restrições abaixo >
1 5 3 2 7 6 4 8 9 > X1 in {1, 3, 5, 7, 9}, X2 in {2, 4, 6}, X5 in {3, 9}, X6 in {4, 8}, X3 in {1, 5, 7}, X7 in {3, 9}, X4 in {1, 5, 8}, X8 in {3, 7}, X9 in {2, 9} Após revisão do arco X2 -> X5 X2 in {2, 4, 6} % X5 >= 3 X2 -> X6 X2 in {2, 4, 6} % X6 >= 3 X3 -> X7 X3 in {1, 5, 7} % X7 >= 3 X4 -> X8 X4 in {1, 5, 8} % X8 >= 3 X4 -> X9 X4 in {1, 5, 8} % X9 >= 2 X1 -> X2 X1 in {1, 3, 5, 7, 9} % X6 >= 5 X1 -> X3 X1 in {1, 3, 5, 7, 9} % X3 >= 5 X1 -> X4 X1 in {1, 3, 5, 7, 9} % X4 >= 8

18 Algoritmo DAC Exemplo(cont): A enumeração não está sujeita a retrocesso 1 5 3 2 7 6 4 8 9 > X1 in {7, 9}, X2 in {6}, X5 in {3, 9}, X6 in {4, 8}, X3 in {5, 7}, X7 in {3, 9}, X4 in {5, 8}, X8 in {3, 7}, X9 in {2, 9} X1 = 7 NC impõe X2 in {6}, X3 in {5}, X4 in {4} X2 = 6 NC impõe X5 in {3}, X4 in {6}, X3 = 5 NC impõe X5 in {3}, X4 = 4 NC impõe X8 in {3}, X9 in {2}, X1 = 9 NC impõe X2 in {6}, X3 in {3}, X4 in {4, 8} X2 = , X3 = 5, .... X4 = 4 NC impõe X8 in {3}, X9 in {2} ou X4 = 8 NC impõe X8 in {3, 7}, X9 in {2}

19 Largura de Grafos O caso especial das árvores pode ser generalizado para outros tipos de redes de restrições binárias, se tivermos em conta que as árvores são um caso especial de grafos. Definição (Largura de Nó, segundo uma ordem O): Para uma ordenação total, O, dos nós de um grafo G, a largura de um nó N, segundo O é o número de nós anteriores que lhe são adjacentes. Como é imediato constatar, com qualquer ordenação crescente, da raíz para as folhas, todos os nós de uma árvore (excepto a raíz) têm largura igual a 1. 1 5 3 2 7 6 4 8 9 >

20 Largura de Grafos Definição (Largura de um grafo G, segundo uma ordem O): Para uma ordenação total, O, dos nós de um grafo G, a largura do grafo segundo O, é a máxima largura dos seus nós, segundo essa ordem. Definição (Largura de um grafo G): A largura de um grafo G, é sua menor largura, para qualquer ordenação total, O, que seja considerada para os seus nós. 1 5 3 2 7 6 4 8 9 > Como é imediato por estas definições, uma árvore é um caso especial de um grafo com largura igual a 1.

21 Largura de Grafos Exemplo: No grafo abaixo poderemos considerar várias ordenações dos nós, conducentes a diferentes larguras. A largura do grafo é 3 (é a largura obtida, por exemplo, pela ordenação O1dir). 1 2 3 4 5 6 7 2 3 5 6 1 7 4 < wO1dir = 3 (nós 4, 5, 6 e 7) > wO1inv = 5 (nó 1) 4 3 2 5 6 7 1 < wO2dir = 5 (nó 1) > wO1inv = 6 (nó 4)

22 Largura de Grafos Para evitar retrocessos, na enumeração, da raiz para as folhas, de uma rede de restrições (binárias) com a forma de árvore bastaria garantir que para cada nó existissem valores nos seus nós descendentes que os suportassem. A generalização para o caso de redes arbitrárias deverá ter em conta a ordenação considerada na enumeração. Se nessa ordenação, cada nó tiver no máximo k nós vizinhos enumerados antes de si, bastará manter consistência-k+1 forte, para garantir que não serão necessários retrocessos na enumeração. Na realidade, e tal como nas árvores, bastará manter uma consistência-k+1 forte ordenada, se o algoritmo que a mantiver visitar os grupos de k nós por ordem “decrescente”.

23 Largura de Grafos Exemplo:
Com a ordenação Lo1dir, bastará garantir consistência-4 forte. A consistência-4 forte garante que qualquer etiqueta de até 3 variáveis que satisfaz as restrições relevantes, pode ser estendida com uma quarta variável que satisfaça as restrições relevantes. Por um lado, qualquer valor v1 do domínio da variável 1 pode ser escolhido (uma etiqueta-1 pode ser estendida, pois o sistema é fortemente consistente-4). Por outro lado, um algoritmo que mantenha a consistência-4 forte, elimina eventualmente valores dos domínios das variáveis, mas não “esvazia” o domínio de nenhuma variável (ver adiante). 2 3 5 6 1 7 4 1 2 3 4 5 6 7

24 Largura de Grafos Exemplo (cont.):
Assim o sistema de 6 variáveis é fortemente consistente-4 e tem menos uma variável que o anterior. Por recursão, pode verificar-se que não haverá lugar a retrocesso na enumeração das outras variáveis. Com efeito, podem ir-se enumerando as variáveis por ordem crescente. Após cada enumeração obtem-se um sistema, fortemente consistente-4, e com menos uma variável. Eventualmente atinge-se um sistema fortemente consistente-4, com apenas 4 variáveis, em que pode naturalmente ser feita uma enumeração sem retrocesso. 2 3 5 6 1 7 4 1 2 3 4 5 6 7

25 Largura de Grafos Há que mostrar que, após enumeração da menor variável (segundo uma ordenação que garante uma largura w) de um sistema fortemente consistente-k (com k > w), o sistema resultante mantem valores no domínio de todas as outras variáveis (2 a n). Sendo o sistema fortemente consistente-k, as variáveis 2, ... , k tem valores compatíveis com o valor v1, escolhido arbitrariamente para a primeira variável. Um algoritmo que mantenha a consistência-4 forte pode eliminar os valores não compatíveis. A variável k+1 só pode estar ligada a w das variáveis anteriores (no exemplo, a variável 5 está ligada a 1, 2 e 4). Assim, qualquer triplo de valores dessas variáveis, nomeadamente os que não foram eliminados, tem um valor compatível na variável 5. O algoritmo que mantem a consistência-4 forte pode eliminar os valores não compatíveis. Continuando o raciocínio recursivamente, as variáveis 6, ..., n manterão valores no domínio, como se pretendia mostrar.

26 Largura de Grafos Fica assim demonstrado (informalmente) o seguinte
Teorema: Uma rede de restrições fortemente consistente- k, pode ser enumerada em profundidade sem retrocesso, se existir uma ordenação O segundo a qual o grafo tem uma largura w inferior a k. Em termos práticos, a enumeração livre de retrocesso faz- se por ordem crescente (segundo O) das variáveis, mantendo-se a consistência-k forte no problema resultante após a enumeração de cada variável.

27 Heurística de Mínima Largura (MWO)
A manutenção de consistência-k forte é muito custosa computacionalmente, e não é em geral mantida. No entanto, especialmente em redes pouco densas e em que os graus dos nós variem significativamente, as ordens dos nós do grafo conducentes à sua menor largura podem ser usadas como heurística para a escolha da variável a enumerar. Mais especificamente, pode definir-se a Heurística MWO (Minimum Width Ordering): A heurística MWO (ordem de minima largura) determina que num problema de restrições as variáveis sejam enumeradas por ordem crescente duma enumeração que conduza à menor largura do grafo primal do problema.

28 Heurística de Mínima Largura (MWO)
A definição dada refere o grafo primal de um problema. No caso das restrições serem binárias, o grafo de restrições é o grafo primal. No caso de restrições n-árias, o grafo primal inclui um arco entre quaiquer variáveis ligadas por uma restrição n-ária. Por exemplo, o grafo que temos vindo a utilizar, pode ser o grafo primal do problema com 2 restrições quaternárias (R1245 e R1346) e 3 restrições ternárias (R123, R457 e R467 ). R123 --> arcos a12, a13 e a23 R > arcos a12, a14, a15, a24, a25 e a45 R > arcos a13, a14, a16, a34, a36 e a46 R457 --> arcos a45, a47 e a57 R467 --> arcos a46, a47 e a67 2 3 5 6 1 7 4

29 Heurística de Mínima Largura (MWO)
Para se aplicar a heurística MWO, há que determinar a ordenação O dos nós, conducente à menor largura do grafo (primal) de restrições. O seguinte algoritmo pode ser utilizado para esse efeito função vars_ordenadas(V,R): Lista de nós; se V = {N} então % N é o único nó vars_ordenadas <- N senão N <- arg Vi min {grau(Vi,R) | Vi in V} % N é um dos nós com menor número de vizinhos R’<- R \ arcos(N,R) V’<- V \ {N} vars_ordenadas <- vars_ordenadas(V’,R’) & N fim se fim função

30 Heurística de Mínima Largura (MWO)
Exemplo: No grafo anterior o nó 7 é o de menor grau (=3). 2 3 5 6 1 7 4 Retirado o nó 7, os nós 5 e 6 são os de menor grau (=3). 2 3 5 6 1 4 Retirando-se o nó 6 obtem-se São de seguida retirados sucessivamente os nós 5 e 4 (grau 3), e ainda os nós 3 (grau 2) e 2 (grau 1). 2 3 5 1 4 2 3 1 4 2 3 1 2 1 Obtem-se assim, por ordem crescente, a ordenação [1,2,3,4,5,6,7] e verifica-se que a largura do grafo é 3.

31 Heurística de Mínimo Grau (MDO)
Um aproximação da heurística MWO é a heurística MDO em que se evita o cálculo da ordem que conduz à mínima largura do grafo Heurística MDO (Maximum Degree Ordering): A heurística MDO (ordenação pelo maior grau) determina que num problema de restrições as variáveis sejam enumeradas por valor decrescente do seu grau no grafo primal do problema. 2 3 5 6 1 7 4 Exemplo: A heurística MDO usaria uma ordenação começada pelos nós 4 (g=6) e 1(5) e terminada no nó 7(3). Os nós 2, 3, 5 e 6, todos com grau 4, seriam escolhidos arbitrariamente.

32 Heurísticas MWO e MDO As heurísticas MWO e MDO baseiam-se no mesmo princípio - começar a enumeração pelas variáveis que têm mais variáveis ligadas a si por restrições, com o objectivo de detectar mais rapidamente as falhas na enumeração. (de notar que no algoritmo para determinar a ordem de largura mínima, as últimas variáveis são as de menor grau). As ordenações não são coincidentes necessariamente e podem ser usadas para desempate. Por exemplo as duas ordenações MDO O1 = [4,1,5,6,2,3,7] O2 = [4,1,2,3,5,6,7] induzem diferentes larguras (4 e 3). 2 3 5 6 1 7 4

33 Conjuntos Corta-Ciclos
A heurística MWO é particularmente útil quando se mantêm níveis “elevados” de consistência, e baseia-se no Teorema que generaliza para redes de restrições arbitrárias as heurísticas usadas para as árvores. Uma alternativa quando não se se pretendem manter níveis elevados de consistência, é enumerar as variáveis por uma ordem que torne o grafo de restrições numa árvore, a partir do qual, a coerência de arco dirigida garante a eliminação do retrocesso. Esta é a ideia por detrás da determinação dos conjuntos corta-ciclos (“Cycle-cut sets”).

34 Conjuntos Corta-Ciclos
2 3 5 6 1 7 4 Enumerando-se inicialmente os nós 1 e 4 no exemplo que temos usado, obtem-se o grafo. Desta forma, a adição de qualquer nó ao conjunto {1,4} elimina o ciclo (tornando os restantes 4 nós numa árvore). Os conjuntos {1,4,2}, {1,4,3}, {1,4,5}, {1,4,6} e {1,4,7}, são pois conjuntos corta-ciclos. 1 Ao enumerar os nós do conjunto corta-ciclos {1,4,7}, o grafo resultante é uma árvore! 2 3 5 6 4 7

35 Conjuntos Corta-Ciclos
Obviamente, o que se pretende é obter os conjuntos corta-ciclos de menor cardinalidade. Com efeito, numa rede de restrições, com n variáveis com domínios de dimensão d, se se determinar um conjunto corta-ciclos com k nós, a complexidade da pesquisa fica reduzida à pesquisa dum tuplo nos k nós, com complexidade temporal O(dk) E à manutenção de consistência de arco dirigida na árvore de n-k nós, com complexidade O(ad2). Tendo em atenção que a = n-k-1, e para k “pequeno”, a complexidade temporal global é de O(n dk+2).

36 Conjuntos Corta-Ciclos
Pode portanto definir-se a Heurística CCS (Cycle-Cut Sets) Segundo a heurística CCS (Conjunto Corta-Ciclos), as primeiras variáveis a enumerar devem ser os elementos de um conjunto corta-ciclos de cardinalidade mínima. Infelizmente, não parece haver bons algoritmos para determinar os conjuntos corta-ciclos com cardinalidade mínima, ficando a utilidade da heurística dependente das aproximações utilizadas. Duas aproximações correspondem a utilizar o algoritmo vars_ordenadas, com a ordenação inversa, ou simplesmente começar pelos nós com maior grau.

37 Conjuntos Corta-Ciclos
Usando o algoritmo vars_ordenadas mas seleccionando os nós com maior grau obteríamos a seguinte ordenação 2 3 5 6 1 7 4 Nó 4 - grau(6) ficando o grafo 2 3 5 6 1 7 4 Nó 1 - grau(4) ficando o grafo Nesta altura, a inclusão de qualquer dos outros nós (todos de grau 2) converte o sistema numa árvore. Escolhendo o nó 2, obtem-se um dos conjuntos corta-ciclos, {1,2,4}, que é mínimo.

38 Heurística MBO Em contraste com as heurísticas MWO e MDO que pretendem detectar mais rapidamente as falhas na enumeração, a heurística MBO tem como objectivo eliminar o retrocesso irrelevante. Para esse efeito pretende-se, na medida do possível, garantir que se uma variável X não pode ser enumerada então as variáveis que possam estar em conflito com X lhe sejam imediatamente anteriores, na ordem de enumeração. A ideia é que se o retrocesso fôr feito para uma variável Y que não está ligada a X por uma restrição, então é natural que a mudança de valor de Y não resolva a impossibilidade de enumeração de X. Tais ideias são captadas na noção de Largura de Banda.

39 Largura de Banda de Grafos
Definição (Largura de Banda de G, segundo uma ordem O): Para uma ordenação total, O, dos nós de um grafo G, a largura de banda do grafo segundo O, é a máxima distância nessa ordem entre dois nós adjacentes. Exemplo: Com a ordem O1, ao lado, a largura de banda é 5, distância entre os nós adjacentes 1/2 e 6/7. Se a escolha do valor da variável X1 fôr determinante para a escolha do valor de X6, a alteração de X1 só se faz após retrocesso das variáveis X5, X4, X3 e X2. 2 6 3 5 1 4 7 1 2 3 4 5 6 7

40 Largura de Banda de Grafos
Definição (Largura de Banda de um grafo G): A largura de banda de um grafo G, é menor largura de banda que pode ser obtida por uma qualquer ordenação total dos seus nós considerada. Exemplo: Com a ordem O2, ao lado, a largura de banda é 3, distância entre os nós adjacentes 2/3/4 e 5/6/7. Não há ordenação que induza uma largura de banda inferior a esta, pelo que a largura de banda do grafo é 3. 2 3 4 6 1 7 5 1 2 3 4 5 6 7

41 Heurística MBO Com base no conceito de Largura de Banda define-se a
Heurística MBO (Minimum Bandwidth Ordering): Segundo a heurística MBO (ordenação pela menor largura de banda) as variáveis de um problema de restrições devem ser enumeradas de acordo com uma ordem que induza uma largura de banda mínima no grafo primal do problema. 2 3 4 6 1 7 5 Exemplo: A heurística MBO usaria uma ordenação como a O2 que induz uma largura de banda 3. 1 2 3 4 5 6 7

42 Heurística MBO A utilização da heurística MBO em conjunto com a propagação de restrições é algo problemática já que: Os grafos de restrições em que é mais útil devem ser esparsos e não ter nós com elevedo grau. Havendo um nó com grau elevado, a sua distância ao “último” vizinho domina a largura de banda. O princípio em que se baseia, evitar retrocesso irrelevante é atingido, eventualmente mais eficientemente, pela propagação de restrições. Não há algoritmos eficientes para calcular a largura de banda de um grafo (ver [Tsan93], cap. 6, para referências).

43 Heurística MBO Caso 1: Os grafos de restrições em que é mais útil devem ser esparsos e não ter nós com elevado grau. Havendo um nó com grau elevado, a sua distância ao “último” vizinho domina a largura de banda. Exemplo: O nó interior, de grau 6, determina que não pode haver uma largura inferior a 3 (3 nós antes e 3 depois). Há muitas ordenações com essa largura de banda, e se 3 estivesse ligado a 7 não havia hipótese de evitar uma largura de banda 4. 5 6 1 2 3 7 4

44 Heurística MBO Caso 2: O retrocesso irrelevante é eliminado por propagação de restrições. Exemplo: Se a escolha do valor da variável X1 fôr determinante para a escolha do valor de X6, é muito natural que a propagação de restrições determine o esvaziamento do domínio de X6 sem necessitar do retrocesso das variáveis X5, X4, X3 e X2. 2 6 3 5 1 4 7 1 2 3 4 5 6 7 A heurística MBO é mais apropriada se os algoritmos de retrocesso não usarem propagação de restrições.

45 Heurística MBO Caso 3: Não há algoritmos eficientes para calcular a largura de banda de um grafo . Em geral, menores larguras correspondem a menores larguras de banda, mas as ordenações que obtêm as menores larguras e larguras de banda não são coincidentes. C D A B E F G H A B C D E F G H Largura (mínima) = 2; Largura de Banda = 5 C D E A B F G H Largura = 3; Largura de Banda (mínima) = 4

46 Heurísticas Dinâmicas para Escolha da Variável
Para além das heurísticas estáticas analizadas, MWO, MDO, CCS e MBO) a escolha da ordem de enumeração das variáveis pode ser determinada dinamicamente, isto é, em vez de fixada antes de começar a enumeração a escolha da variável é determinada (ou ajustada) durante a mesma. Para além de heurísticas dependentes do problema, existe um princípio genérico, first-fail, que se tem revelado muito eficiente. A ideia é muito simples: quando um problema se decompõe em vários sub-problemas relacionados, deveremos começar pelos mais difíceis. Não vale a pena resolver vários problemas simples com hipóteses irrealistas que depois serão desmentidas na resolução dos mais difíceis.

47 Heurísticas First-Fail
Há várias maneiras de interpretar e implementar este princípio genérico de first-fail. Em primeiro lugar, identificamos no problema de satisfação das restrições os vários sub-problemas como sendo os de enumerar valores para as diversas variáveis. Como medir a dificuldade destes problemas? Como enumerar é imediato (uma escolha), o que torna os problemas “difíceis” é garantir que após a propagação de restrições a escolha do valor é viável. Esta avaliação é difícil em geral, pelo que devermos considerar características das variáveis fáceis de determinar, como O domínio das variáveis O número de restrições em que participam.

48 Heurísticas First-Fail
O domínio das variáveis Intuitivamente, se tivermos uma variável X1 com m1 valores no seu domínio e outra X2 com m2 valores, é mais difícil atribuir valores à variável X1, porque a escolha é mais reduzida! No limite, se a variável X1 só tiver um valor no seu domínio (m1 = 1), não há escolha possível e o melhor a fazer é mesmo atribuir o valor disponível à variável. Outra forma de ver a questão é a seguinte: Por um lado, a hipótese de “acertar” num valor de X1 que pertence a uma solução é maior do que no caso de X2. Por outro lado se esse valor se vier a revelar errado, pode eliminar-se um maior espaço de pesquisa.

49 Heurísticas First-Fail
Exemplo: Na situação ao lado do problema da 8 rainhas em que já foram enumeradas as rainhas Q1, Q2 e Q3, temos para domínio das restantes rainhas 1 2 3 Q4 in {2,7,8}, Q5 in {2,4,8}, Q6 in {4}, Q7 in {2,4,8}, Q8 in {2,4,6,7}. Desta forma, a variável a enumerar de seguida deverá ser a variável Q6, e não Q4, que se seguiria na ordem “natural”. De notar que a consistência de nó, com a escolha de variáveis de domínio unitário, atinge o mesmo efeito da consistência de arco, sem os seus custos computacionais!

50 Heurísticas First-Fail
O número de restrições em que participam as variáveis Esta heurística é basicamente a heurística MDO, mas em que o grau das restrições é avaliado dinâmicamente. Como a heurística pretende resolver primeiro as variáveis mais difíceis, a enumeração torna-se mais difícil com o número de restrições em que participa a variável, já que uma restrição só pode limitar as possibilidades de atribuir valores a uma variável. Naturalmente, e tal como no caso do domínio, esta decisão é puramente heurística. O efeito das restrições depende muito da sua propagação, que é em geral muitodependente (da instância) do problema .

51 Outras Heurísticas Dinâmicas
Em certos tipo de problemas podem utilizar-se heurísticas especialmente adequadas para a estrutura do problema. Por exemplo em problemas de escalonamento de tarefas, em que elas têm de se fazer num determinado período e não se podem “sobrepôr”, convem espalhá-las o mais possível no período em causa. Isto sugere que se comecem por enumerar (as variáveis que modelam) as tarefas que podem começar primeiro ou que podem acabar em ultimo lugar, de forma a dar “espaço” para acomodar as restantes tarefas. Neste caso, convém uma escolha dinâmica da variável que tenha em conta os valores existentes no domínio.

52 Heurísticas Mistas Tendo em conta as características das várias heurísticas descritas, poder-se-ão considerar estratégias híbridas, que integrem várias destas heurísticas. Por exemplo, a heurística estática CCS (Conjunto Corta-Ciclos), determina um conjunto de variáveis que devem ser enumeradas em primeiro lugar, de forma a converter o grafo de retsrições numa árvore. Dentro deste conjunto de nós, pode aplicar-se uma heurística dinâmica first-fail. Por outro lado, quando um conjunto de variáveis é enumerado de acordo com uma heurística estática, essa heurística pode ser reavalida tendo em conta a propagação já efectuada, tornando-a mais “dinâmica”

53 Heurísticas de Escolha de Valor
Uma vez seleccionada uma variável para enumerar, há que escolher um valor dentro do seu domínio corrente. Neste caso, existem poucos métodos de aplicação generalizada. Existe no entanto um princípio genérico, que corresponde a escolher o valor que aumente a probabilidade do sucesso. A razão para isto é óbvia. Ao contrário da escolha da variável, a escolha do valor não vai influir no espaço de pesquisa, e portanto há que tentar descobrir o mais eficientemente possível o caminho para uma solução. A aplicação deste princípio depende muito do tipo de problema em consideração.

54 Heurísticas de Escolha de Valor
Algumas heurísticas para escolha de valor são as seguintes: Escolha ad hoc: Em problemas de escalonamento de tarefas referidos, uma vez seleccionada uma variável com menores/maiores valores no seu domínio, a essa variável deverá ser atribuído o menor/maior valor desse domínio que é o que aumneta a possibilidade de sucesso. Antevisão de Sucesso: Pode-se tentar prever (lookahead) a probabilidade de sucesso, avaliando para os vários valores possíveis, e após a sua propagação, essa probabilidade através de medidas agregadas da cardinalidade dos domínios das variáveis ainda não enumeradas(como é feito na medida kappa), escolhendo-se naturalmente o valor que maximize essa medida.

55 Heurísticas de Escolha de Valor
Optimização: Em problemas nos quais se pretenda optimizar uma função objectivo, podem obter-se limites (bounds) dessa função para os valores ainda permitidos nas variáveis não enumeradas, e verificar como eles se alteram com a atribuição dois vários valores possíveis para a variável escolhida. Naturalmente, a heurística optará pelo valor que optimize os limites da função em causa. De notar que neste caso, tanto se poderá fazer o cálculo dos limites antes da propagação (menos computação, mas também menos informação) ou após essa propagação ser efectuada.

56 Heurísticas no SICStus
Baseado no paradigma da programação em lógica com restrições, um programa em SICStus tem a estrutura atrás descrita Problema ( Vars):- Declaração de Variáveis e Domínios, Lançamento das Restrições, Enumeração das Variáveis. Na enumeração das variáveis pretende atribuir-se às variáveis X1, X2, ..., Xn, de uma lista Lx, valores no seu domínio. A implementação das heurísticas depende da forma como são seleccionadas as variáveis Xi da lista, e escolhidos os seus valores.

57 Heurísticas no SICStus
O SICStus permite controlar a enumeração de várias maneiras. A enumeração pode ser feita através de um único predicado predefinido, labeling/2, em que o 1º argumento é a lista de opções, eventualmente vazia o 2º argumento é a lista Lx de variáveis a enumerar. Por omissão, a chamada de labeling([], Lx)selecciona as variáveis X1, X2, ..., Xn, da lista Lx, de acordo com a sua posição, da esquerda para a direita. O valor escolhido à variável é o menor valor do seu domínio. Este predicado pode ser usado sem quaisquer opções para heurísticas estáticas, desde que as variáveis sejam previamente ordenadas, de forma adequada, na lista Lx.

58 Heurísticas no SICStus
Com a lista de opções vazia, o predicado labeling([],L) é equivalente ao predicado enumera(L) abaixo enumera([]). enumera([Xi|T]):- indomain(Xi), enumera(T). Em que o predicado, pré-definido, indomain(Xi), escolhe para a variável Xi valores no domínio por ordem crescente. Há alternativas para escolha do valor, que passam pela análise do domínio corrente da variável, disponibilizado pelo predicado fd_dom/2. Por exemplo ?- X in 1..5, X #\=3, fd_dom(X,D). D = (1..2)\/(4..5), X in(1..2)\/(4..5) ?

59 Heurísticas no SICStus
Geralmente, não é necessário descer a esse nível de programação, usando-se as opções pré-definidas no predicado labeling/2. As opções de interesse para a escolha do valor da variável seleccionada são up e down permitindo a atribuição por ordem crescente e decrescente de valores. Se se pretender garantir que os valores de algumas das variáveis Xi são escolhidos de forma decrescente, poder-se-á, para as variáveis em causa , substituir a chamada do predicado indomain(Xi) por labeling([down],[Xi])

60 Heurísticas no SICStus
As opções de interesse para a escolha da variável são leftmost, min, max, ff, ffc e variable(Sel) leftmost - é o modo por omissão. Escolhe as variáveis pela sua ordem na lista. min, max - escolhe a variável com menor/maior valor no seu domínio. Pode ser útil por exemplo, para problemas de escalonamento de tarefas em que se pretende ir alocando as tarefas “sequencialmente”. ff, ffc - implementa e heurística first-fail, escolhendo a variável com domínio de menor cardinalidade, com desempate pelo número de restrições.

61 Heurísticas no SICStus
variable(Sel) Sel deve ser definido no programa como um predicado, cujos últimos 3 últimos parâmetros são Vars, Selected, Rest em que dada a lista Vars de variáveis a atribuir, Selected é a variável seleccionada, sendo Rest uma lista com as restrantes variáveis. Outros parâmetros podem ser incluídos, antes destes três. Por exemplo, se se usar opção variable(contem(5)) dever-se-á especificar o predicado contem(V,Vars, Selected, Rest) que deverá escolher, na lista Vars, uma variável Selected, que contenha o valor V no seu domínio.

62 Heurísticas no SICStus
De notar que todas estas opções do predicado labeling/2 podem ser programadas a mais baixo nível, usando as primitivas adequadas disponibilizadas pelo SICStus para inspecção do domínio das variáveis (Predicados Reflexivos) nomeadamente os predicados fd_min(?X, ?Min) fd_max(?X, ?Max) fd_size(?X, ?Size) fd_degree(?X, ?Degree) com o significado óbvio. Por exemplo ?- X in 3..8, Y in 1..5, X #< Y, fd_size(X,S), fd_max(X,M), fd_degree(Y,D). D = 1, M = 4,S = 2, X in 3..4, Y in 4..5 ?

63 Exemplo no SICStus O programa rainhas_fd_h resolve o problema das rainhas rainhas(N,M,O,S,F) com várias opções de enumeração: Escolha da Variável A opção ff é utilizada. As variáveis passadas para o predicado labeling/2 podem/não (com M=2/1) ser ordenadas do meio para as pontas (por exemplo, [X4,X5,X3,X6,X2,X7,X1,X8]) através do predicado ordena(2,Lx,Lo). Escolha do Valor Em vez de começar a enumeração das variáveis pelo valor 1, pode ser especificado um offset (valor do parâmetro O) começando a enumeração “a meio” do domínio.

64 Variantes à Pesquisa em Profundidade
O paradigma da Programação em Lógica com Restrições, utiliza pesquisa em profundidade do espaço de soluções. Apesar de “entrelaçado” com a propagação de restrições, e da utilização de heurísticas, a eficiência da pesquisa depende criticamente das primeiras escolhas, isto é dos valores atribuídos às primeiras variáveis seleccionadas. Com efeito, o retrocesso destes valores, dito cronológico, apenas tem efeito quando todo os valores das restantes k variáveis são “visitados”, num tempo O(2k). Desta forma têm sido estudadas variantes à pesquisa em profundidade com retrocesso cronológico, nomeadamente o retrocesso inteligente, alargamento iterativo, discrepância limitada, e duração incremental.

65 Retrocesso Inteligente
No retrocesso cronológico, a falha na enumeração de uma variável causa o retrocesso com a escolha do valor seguinte na variável enumerada imediatamente antes, mesmo que não seja esta a causa da falha. As várias técnicas de retrocesso inteligente, ou dirigido por dependências, (dependency directed backtracking) tentam identificar essas causas, de forma a retroceder directamente para a primeira variável com alguma participação na falha. Algumas das variantes de retrocesso inteligente são: Backjumping ; Backchecking ; e Backmarking .

66 Retrocesso Inteligente
Backjumping Ao falhar a atribuição de valores para uma variável são analisadas todas as variáveis que contribuem para a falha de cada um dos valores, sendo o retrocesso feito para a “maior” das “menores” variáveis. 1 2 3 2 5 4 5 3 5 2 3 No exemplo ao lado, ao analisar-se a causa da falha na atribuição devalores à variável Q6, verifica-se que o retrocesso deve ser feito para a variável Q4, já que é a maior das menores variáveis que aparece nas variáveis em conflito.

67 Retrocesso Inteligente
Backchecking e Backmarking Estas técnicas podem ser útil quando os testes de compatibilidade entre os valores de duas variáveis são “custosos”. A ideia base é memorizar conflitos, de forma a evitar calculá-los repetidamente. Em backchecking, são memorizados apenas as atribuições que entraram em conflito. Em backmarking são adicioanalmente memorizadas as atribuições que não entraram em conflito. Em geral, a utilidade destas técnicas é limitada se existir propagação de restrições (há algumas excepções como em alguns sistemas SAT), já que a propagação antecipa, de alguma forma, o retrocesso e evita retrocesso irrelevante!

68 Alargamento Iterativo
No alargamento iterativo (iterative broadening) é atribuído um limite b ao número de vezes que um nó é visitado (a visita inicial mais as vezes em retrocesso). Se esse limite é atingido, o nó e os seus descendentes não são mais explorados. 1 2 3 4 No exemplo, assumindo-se que b=2, o espaço de solucões a sombreado não é visitado. Naturalmente, se a pesquisa falhar para um dado valor de b, ele pode ser aumentado incrementalmente, pelo que o espaço percorrido vai-se iterativamente alargando.

69 Discrepância Limitada
A discrepância limitada, pressupõe que a heurística de atribuição de valores pode falhar um número pequeno de vezes, e dirige a pesquisa para a zona onde potencialmente estão as soluções, limitando a um valor d, o número de vezes que a sugestão da heurística não é seguida. 1 2 3 4 d = 3 d = 2 No exemplo, assumindo-se as opções “certas” à esquerda e d=3, o espaço de solucões a sombreado não é visitado. Naturalmente, se a pesquisa falhar para um dado valor de b, ele pode ser aumentado incrementalmente, pelo que o espaço percorrido vai-se iterativamente alargando.

70 Duração Incremental A objectivo é semelhante ao alargamento iterativo, discrepância limitada mas implementado de forma diferente. Escolhidas os valores para as primeiras k variáveis, para cada etiqueta {X1-v1, ... , Xk-vk} é permitida uma pesquisa durante um tempo T. Se após esse limite não fôr encontrada solução, é testada outra etiqueta. Naturalmente, se a pesquisa falhar para um dado valor de T, ele pode ser aumentado incrementalmente nas próximas iterações, pelo que o espaço percorrido vai-se igualmente alargando iterativamente. Apesar de em todos estes algoritmos (alargamento iterativo, discrepância limitada e duração incremental) se repetir a pesquisa de partes do espaço de soluções, esse efeito não aumenta a complexidade (pior caso).

71 Duração Incremental Com efeito, e para o caso da duração incremental se as sucessivas iterações (falhadas) tiverem um aumento a de tempo entre iterações, isto é Tj+1 = a Tj, as sucessivas iterações duram T1 + T Tj = T ( 1+ a + a aj-1) = = T(aj-1)/(a -1)  T aj Assim, se uma solução fôr encontrada na j+1-ésima iteração, o tempo desperdiçado nas iterações anteriores é de apenas T aj. Em média, a solução encontrada nessa iteração demoraria metade do tempo dessa iteração (T aj) /2 pelo que o tempo “desperdiçado” é da ordem de grandeza do tempo “útil”.


Carregar ppt "Pesquisa e Heurísticas"

Apresentações semelhantes


Anúncios Google