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

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

1 Algoritmo AC-4 Ineficiência do algoritmo AC-3 Cada vez que um valor v i é removido do domínio de uma variável X i, pelo predicado rev_dom(a ij,V,D,R),

Apresentações semelhantes


Apresentação em tema: "1 Algoritmo AC-4 Ineficiência do algoritmo AC-3 Cada vez que um valor v i é removido do domínio de uma variável X i, pelo predicado rev_dom(a ij,V,D,R),"— Transcrição da apresentação:

1 1 Algoritmo AC-4 Ineficiência do algoritmo AC-3 Cada vez que um valor v i é removido do domínio de uma variável X i, pelo predicado rev_dom(a ij,V,D,R), todos os arcos que conduzem a essa variável são reexaminados. Na realidade, apenas alguns desses arcos a ki (para k i e k j ) deveriam ser reexaminados. Com efeito, apesar de a remoção de v i poder eliminar um suporte de um valor v k de uma variável X k para a qual existe uma restrição R ki (ou R ik ), outros valores da variável Xi podem manter o par X k -v k suportado! Essa ineficiência é eliminada no algoritmo AC-4.

2 2 Algoritmo AC-4 Algoritmo AC-4 (Contadores) O algoritmo AC-4 mantém estruturas de dados (contadores) para contabilizar o número de valores de uma variável X i que suportam um valor v k de uma variável X k, entre as quais exista uma restrição R ik. Por exemplo, no problema das 4 rainhas os contadores que indicam o suporte para o valor X 1 = 2 são inicializados como c(2,X 1,X 2 ) = 1 % X 2 -4 não ataca X 1 -1 c(2,X 1,X 3 ) = 2 % X 3 -1 e X 3 -3 não atacam X 1 -1 c(2,X 1,X 4 ) = 3 % X 4 -1, X 4 -3 e X 4 -4 não atacam X 1 -1

3 3 Algoritmo AC-4 Algoritmo AC-4 (Conjuntos de suporte) Para actualizar os contadores quando um valor é eliminado do domínio de uma variável, é útil conhecer quais os pares Variável-Valor suportados por cada valor. Assim, o algoritmo AC-4 mantém igualmente um conjunto de apontadores para contabilizar os pares Variável-Valor suportados por cada par Variável-Valor. sup(2,X 1 ) = [X 2 -4,X 3 -1,X 3 -3,X 4 -1,X 4 -3,X 4 -4] % X 2 -2 suporta (não ataca) X 2 -4, X 3 -1,... sup(1,X 1 ) = [X 2 -2, X 2 -3, X 3 -2, X 3 -4, X 4 -2, X 4 -3] sup(3,X 1 ) = [X 2 -1, X 3 -2, X 3 -4, X 4 -1, X 4 -2, X 4 -4] sup(4,X 1 ) = [X 2 -1, X 2 -2, X 3 -1, X 3 -3, X 4 -2, X 4 -3]

4 4 Algoritmo AC-4 Algoritmo AC-4 (Propagação) Cada vez que se detecta que um valor de uma variável não tem suporte noutra variável, esse valor é retirado do domínio da variável, e é colocado numa Lista para posterior propagação. No entanto, e apesar de o valor poder perder o suporte várias vezes a sua remoção só pode ser propagada uma vez de forma útil. Para controlar bem esta situação o algoritmo AC-4 mantém uma matriz de booleanos M. O valor 1/0 do booleano M[X,v] representa o facto de o valor v estar/não estar presente no domínio da variável X.

5 5 Algoritmo AC-4 Algoritmo AC-4 (Estrutura geral) O algoritmo AC-4 faz uso das estruturas definidas da forma previsível. Numa primeira fase, o algoritmo inicializa as estruturas de dados (contadores, conjuntos de suporte, matriz e lista de remoções). Numa segunda fase, não só executada posteriormente à primeira fase, mas após qualquer passo de enumeração, o algoritmo estabelece a propagação das restrições, ajustando os valores das estruturas de dados.

6 6 Algoritmo AC-4 Algoritmo AC-4 (Fase 1 - Inicialização) procedimento inicializa_AC-4(V,D,R); M <- 1; sup <- ; Lista = ; para Rij in R fazer para v i in dom(X i ) fazer ct <- 0; para v j in dom(X j ) fazer se satisfaz({X i -v i, X j -v j }, R ij ) então ct <- ct + 1; sup(v j,X j )<- sup(v j,X j ) {X i -v i } fim se fim para se ct = 0 então M[X i,v i ] <- 0; Lista <- Lista {X i -v i } dom(X i ) <- dom(X i )\{v i } senão c(v i, X i, X j ) <- ct; fim se fim para fim procedimento

7 7 Algoritmo AC-4 Algoritmo AC-4 (Fase 2 - Propagação) procedimento propaga_AC-4(V,D,R); enquanto Lista fazer List <- Lista \ {X i -v i } % remove elemento da Lista para X j -v j in sup(v i,X i ) fazer c(v j,X j,X i ) <- c(v j,X j,X i ) - 1; se c(v j,X j,X i ) = 0 M[X j,v j ] = 1 então Lista = Lista {X j -v j }; M[X i,v i ] <- 0; dom(X j ) <- dom(X j ) \ {v j } fim se fim para fim procedimento

8 8 Algoritmo AC-4 Complexidade temporal do algoritmo AC-4 (Inicialização) Analizando os ciclos executados pelo procedimento inicializa_AC-4, para Rij in R fazer para v i in dom(X i ) fazer para v j in dom(X j ) fazer e assumindo que o número de restrições (arcos) do problema é a, e que as variáveis no problema tem cada uma d valores no seu domínio, o ciclo interno do procedimento é executado 2ad 2 vezes, pelo que a complexidade temporal da fase 1 do algoritmo AC-4 é de O(ad 2 ).

9 9 Algoritmo AC-4 Complexidade temporal do algoritmo AC-4 (Propagação) No ciclo interior do procedimento de propagação é decrementado um contador relativo ao par X j -v j c(v j,X j,X i ) <- c(v j,X j,X i ) - 1; Ora havendo 2a arcos e tendo cada variável d valores no seu domínio, existem 2ad contadores. Cada contador é inicializado a um valor não superior a d, já que cada par X j -v j só pode ter d valores de suporte noutra variável X i. Assim o número máximo de vezes que o ciclo interno é executado é de 2ad 2, o que determina que a complexidade temporal da fase 2 do algoritmo AC-4 é de O(ad 2 )

10 10 Algoritmo AC-4 Complexidade temporal do algoritmo AC-4 Desta forma, a complexidade temporal global do algoritmo AC-4, é de O(ad 2 ) quer no início (inicialização + propagação) quer na sua utilização após cada enumeração. Esta complexidade assintótica de pior caso é melhor que a obtida no algoritmo AC-3 que era de O(ad 2 ). Infelizmente esta melhoria da complexidade temporal é obtida à custa de uma complexidade espacial bastante menos favorável.

11 11 Algoritmo AC-4 Complexidade espacial do algoritmo AC-4 No total o algoritmo AC-4 mantém Contadores: Como discutido atrás, em número de 2ad Conjuntos de Suporte: No pior caso, em cada uma das a restrições R ij, cada um dos d pares X i -v i suporta d valores v j de X j. (e vice-versa). Assim o espaço para manter as listas de suporte é de ordem O(ad 2 ). Lista: Contém no máximo 2a arcos Matriz M: mantém nd valores booleanos. O espaço necessário para os conjuntos de suporte domina os restantes. Comparado com o algoritmo AC-3 (O(a)) o algoritmo AC-4 tem pior complexidade espacial O(ad 2 )

12 12 Algoritmo AC-4 O algoritmo AC-4 é óptimo? A complexidade assintótica do algoritmos AC-4, não pode ser ultrapassada por nenhum algoritmo! Com efeito, para um problema consistente nos arcos, é necessário testar, para cada uma das restrições R ij a, que os d 2 pares de valores X i -v i e X j -v j satisfazem R ij, ou seja fazer ad 2 testes, que é a complexidade assintótica do AC-4. No entanto, é preciso ter em conta que a complexidade pior caso é assintótica. Para pequenos valores dos parâmetros, as constantes podem ser não negligenciáveis. Por outro lado, em termos típicos, toda a artilharia usada pode tornar-se desnecessária. De facto, o algoritmo AC-3 é tipicamente mais eficiente que o AC-4!

13 13 Algoritmo AC-6 Deficiências do Algoritmo AC-4 Apesar de optimo assintoticamente, o algoritmo AC-4 apresenta má complexidade típica. De facto, as estruturas de dados, e em particular os contadores, que permitem melhorar a detecção de suporte são muito pesadas. A inicialização destas estruturas é muito pesada, nomeadamente quando os domínios têm grande cardinalidade. O espaço requerido pelo AC-4 é igualmente problemático, especialmente quando as restrições são representadas por intenção e não por extensão.

14 14 Algoritmo AC-6 Alterações ao AC-4 - Algoritmo AC-6 O algoritmo AC-6 evita estas ineficiências com uma ideia base: em vez de manter os valores v i da variável X i que suportam um par X i -v i, apenas mantém o menor valor v i. A inicialização fica mais leve, já que ao primeiro valor v i encontrado se pára de procurar outros valores de suporte. Por outro lado, o AC-6 não precisa de inicializar, para uma variável X i, a lista de todos os conjuntos de pares X i -v i suportados por um par X j -v j, mas apenas o menor dos v is. A contrapartida, é que os valores seguintes têm de ser determinados durante a fase de propagação!

15 15 Algoritmo AC-6 Estruturas de dados do Algoritmo AC-6 A Lista e a matriz M de booleanos do AC-4 mantêm-se; Os contadores do AC-4 desaparecem; Os conjuntos de suporte apenas contêm uma entrada por variável, assumindo-se que os domínios das variáveis são ordenados sup(2,X 1 ) = [X 2 -4,X 3 -1,X 3 -3,X 4 -1,X 4 -3,X 4 -4] % X 2 -2 suporta (não ataca) X 2 -4, X 3 -1,... sup(1,X 1 ) = [X 2 -2, X 2 -3, X 3 -2, X 3 -4, X 4 -2, X 4 -3] sup(3,X 1 ) = [X 2 -1, X 3 -2, X 3 -4, X 4 -1, X 4 -2, X 4 -4] sup(4,X 1 ) = [X 2 -1, X 2 -2, X 3 -1, X 3 -3, X 4 -2, X 4 -3]

16 16 Algoritmo AC-6 Ambas as fases do AC-6 utilizam o predicado suporte_seguinte (X i,v i,X j,v j, out v) que sucede se existir na variável X j um valor seguinte, v, que é o menor valor, não inferior a v j, tal que X j -v suporta X i -v i. predicado suporte_seguinte(X i,v i,X j,v j,out v): booleano; sup_s <- falso; v <- v j ; enquanto não sup_s e v =< max(dom(X j )) fazer se não satisfaz({X i -v i,X j -v},R ij ) então v <- seguinte(v,dom(X j )) senão sup_s <- verdade fim se fim enquanto suporte_seguinte <- sup; fim predicado.

17 17 Algoritmo AC-6 Algoritmo AC-6 (Fase 1 - Inicialização) procedimento inicializa_AC-6(V,D,R); Lista <- ; M <- 0; sup <- ; para R ij in R fazer para v i in dom(X i ) fazer v = min(dom(X j )) se suporte_seguinte(X i,v i,X j,v,v j ) então sup(v j,X j )<- sup(v j,X j ) {X i -v i } senão dom(X i ) <- dom(X i )\{v i }; M[X i,v i ] <- 0; Lista <- Lista {X i -v i } fim se fim para fim procedimento

18 18 Algoritmo AC-6 Algoritmo AC-6 (Fase 2 - Propagação) procedimento propaga_AC-6(V,D,R); enquanto Lista fazer Lista <- Lista \ {X j -v j } % remove elemento da Lista para X i -v i in sup(v j,X j ) fazer sup(v j,X j ) <- sup(v j,X j ) \ {X i -v i } ; se M[X i,v i ] = 1 então se suporte_seguinte(X i,v i,X j,v j,v) então sup(v,X j )<- sup(v,X j ) {X i -v i } senão dom(X i ) <- dom(X i )\{v i }; M[X i,v i ] <- 0; Lista <- Lista {X i -v i } fim se fim para fim enquanto fim procedimento

19 19 Algoritmo AC-6 Complexidade espacial do algoritmo AC-6 No total o algoritmo AC-6 mantém Conjuntos de Suporte: No pior caso, para cada uma das a restrições R ij, cada um dos d pares X i -v i é suportado por um só valor v j de X j (e vice-versa). Assim o espaço para manter as listas de suporte é de ordem O(ad). Lista: Contém no máximo 2a arcos Matriz M: mantém nd valores booleanos. O espaço necessário para os conjuntos de suporte é dominante e o algoritmo AC-6 apresenta uma complexidade O(ad) intermédia entre a do AC-3 (O(a)) e do AC-4 (O(ad 2 )).

20 20 Algoritmo AC-6 Complexidade temporal do algoritmo AC-6 Quer na inicialização, quer na propagação, o ciclo interno chama o predicado suporte_seguinte(X i,v i,X j,v,v j ). Para cada par X i -v i, a variável X j é verificada, no máximo d vezes. Para cada arco correspondente a uma restrição R ij, são considerados, no máximo, d pares X i -v i. Existindo 2a arcos (2 por cada restrição R ij ), a complexidade temporal, no pior caso, de qualquer das fases do AC-6 é pois O(ad 2 ). que, tal como no AC-4, é uma complexidade óptima..

21 21 Algoritmo AC-6 Complexidade típica do algoritmo AC-6 As complexidades do pior caso que se podem inferir por análise dos algoritmos, não dão uma ideia precisa de como é que eles se comportam em situações típicas. Para esse estudo, recorre-se normalmente a benchmarks, ou seja em problemas que se pretendem representativos. Para estes algoritmos, ou se recorrem a instâncias de problemas bem conhecidos (por exemplo, as n rainhas) ou a problemas aleatórios parametrizados pelo número de variáveis, cardinalidade dos domínios, densidade e grau de aperto.

22 22 Algoritmo AC-6 Complexidade típica dos algoritmos AC-3, AC-4 e AC-6 no problema das N-rainhas # rainhas

23 23 Algoritmo AC-6 Complexidade típica dos algoritmos AC-3, AC-4 e AC-6 em problema gerado aleatoriamente n = 12 variáveis, d= 16 valores, densidade = 50% Grau de Aperto (em %)

24 24 Algoritmo AC-7 Deficiências do Algoritmo AC-6 - Algoritmo AC-7 O AC-6 (tal como a AC-4 e o AC-3) duplica desnecessariamente a detecção de suportes, por não entrar em conta com o facto de que o suporte é bidireccional, isto é, se X i -vi suporta X j -v j então X j -v j suporta X i -vi O algoritmo AC-7 vai usar esta propriedade para inferir suporte em vez de pesquisar suporte. Outros tipos de inferência poderiam ser usados (p. exemplo, as propriedades de reflexividade, simetria, e transitividade de certas restrições), mas o AC-7 limita-se a explorar a bidireccionalidade do suporte.

25 25 Algoritmo AC-7 Exemplo: Consideremos 2 países que podem ser coloridos por 3 cores. A pesquisa feita pelos vários algoritmos AC-x para inicializar a consistência de arco é a seguinte AC-3 8 testes AC-6 8 testes AC-7 5 testes 2 inferências AC-4 18 testes

26 26 Algoritmo AC-7 Estruturas de dados do Algoritmo AC-7 O algoritmo AC-7 mantem, para cada par X i -v i um conjunto CS(v i,X i,X j ), que é o conjunto de valores do domínio de X j presentemente suportados pelo par X i -v i. Mantém ainda, para cada triplo (v i,X i,X j ) um valor ultimo(v i,X i,X j ) que representa o último (por ordem crescente) valor do domínio de X j que foi testado para suporte do par X i -v i. Para qualquer variável, o domínio é ordenado e introduzem-se os valores artificiais bottom e top, repectivamente menores e maiores que qualquer elemento do domínio.

27 27 Algoritmo AC-7 Algoritmo AC-7 (Fase 1 - Inicialização) procedimento inicializa_AC-7(V,D,R out Rem); Rem <- ; para R ij R e v i dom(X i ) fazer CS(v i,X i,X j ) <- ; ultimo(v i,X i,X j ) <- bottom; fim fazer para X i V fazer para v i dom(X i ) para X j | R ij R fazer v <- procuraSuporte(v i,X i,X j ); se v top então CS(v,X j,X i ) <- CS(v,X j,X i ) {v i } senão dom(X i ) <- dom(X i )\{v i }; Rem <- Rem {X i -v i } fim se fim para fim procedimento

28 28 Algoritmo AC-7 Algoritmo AC-7 (Fase 2 - Propagação) procedimento propaga_AC-7(V,D,R,Rem); enquanto Rem fazer Rem <- Rem \ {X j -v j } para X i | R ij R fazer enquanto CS(v j,X j,X i ) fazer CS(v j,X j,X i ) <- CS(v j,X j,X i ) \ {v i } se v i dom(X i ) então v <- procuraSuporte(v i,X i,X j ); se v top então CS(v,X j,X i ) <- CS(v,X j,X i ) {v i } senão dom(X i ) <- dom(X i )\{v i }; Rem <- Rem {X i -v i } fim se fim enquanto fim para fim enquanto fim procedimento

29 29 Algoritmo AC-7 Algoritmo AC-7 (Função auxiliar procuraSuporte) A função procuraSuporte procura, no domínio de X j, um valor v j que suporte o par X i -v i. Em primeiro lugar tenta inferir esse suporte nos pares X i -v i que suportam um par X j -v j (explorando a bidireccionalidade do suporte). Caso contrário pesquisa v j no domínio de X j na forma habitual. função procuraSuporte(v i,X i,X j ): valor; se infereSuporte(v i,X i,X j,v) então procuraSuporte <- v; senão procuraSuporte <- pesquisaSuporte(v i,X i,X j ) fim se fim função De notar, que as funções procuraSuporte podem retornar o valor artificial top.

30 30 Algoritmo AC-7 Algoritmo AC-7 (Predicado auxiliar infereSuporte) Explorando a bidireccionalidade do suporte, o predicado auxiliar infereSuporte, procura um valor v j da variável X j que suporte o par X i -v i, nos valores do domínio de X j suportados pelo par X i -v i. predicado infereSuporte(v i,X i,X j,out v j ): booleano; descoberto <- falso; enquanto CS(v i,X i,X j ) e não descoberto fazer CS(v i,X i,X j ) = {v} Z; se v in dom(X j ) então descoberto <- verdade; v j <- v; senão CS(v i,X i,X j ) = CS(v i,X i,X j ) \ {v}; fim se fim fazer infereSuporte <- descoberto fim predicado.

31 31 Algoritmo AC-7 Algoritmo AC-7 (Função auxiliar pesquisaSuporte) função pesquisaSuporte(v i,X i,X j ): valor; b <- ultimo(v i,X i,X j ); se b = top então pesquisaSuporte <- b senão descoberto = falso; b <- seguinte(b,dom(X j )) enquanto b top e não descoberto fazer se ultimo(b,X j,X i ) =< v i e satisfaz({X i -v i,X j -b}, R ij ) então descoberto <- verdade senão b <- seguinte(b,dom(X j )) fim se fim enquanto ultimo(v i,X i,X j ) <- b; pesquisaSuporte <- b; fim se fim função;

32 32 Algoritmo AC-7 Complexidade espacial do algoritmo AC-7 No total o algoritmo AC-6 mantém Conjuntos de Suporte CS(v i,X i,X j ): Tal como no AC-6, para cada uma das a restrições R ij, para cada um dos d pares X i -v i só é calculado um valor v j do domínio de X j (que é suportado por X i -v i (e vice-versa). Assim o espaço para manter as listas de suporte é de ordem O(ad). Valores ultimo(v i,X i,X j ): Idem O espaço necessário para estas estruturas é dominante, e tal como o algoritmo AC-6, o AC-7 apresenta complexidade O(ad) intermédia entre a do AC-3 (O(a)) e do AC-4 (O(ad 2 )).

33 33 Algoritmo AC-7 Complexidade temporal do algoritmo AC-7 Quer na inicialização, quer na propagação, o ciclo interno chama o predicado procuraSuporte(v i,X i,X j ). Existem no máximo 2ad triplos (v i,X i,X j ), já que existem 2a arcos correspondentes às restrições R ij e o domínio de X i tem no máximo d valores. Em cada chamada de procuraSuporte(v i,X i,X j ) são testados, no máximo d valores do domínio de Xj. Assim a complexidade temporal, no pior caso, de qualquer das fases do AC-7 é, como no AC-6, de O(ad 2 ). que, tal como no AC-4, é uma complexidade óptima..

34 34 Algoritmo AC-7 Dadas as idênticas complexidades, em que é que o AC-7 melhora o AC-6 (e os outros AC-x)? Consideremos pois, algumas propriedades do algoritmo AC-7. 1.Nunca testa R ij (v i,v j ) se existe um v j ainda no domínio de X j tal que R ij (v i, v j ) foi testado com sucesso. 2.Nunca testa R ij (v i,v j ) se existe um v j ainda no domínio de X j tal que R ij (v j, v i ) foi testado com sucesso. 3.Nunca testa R ij (v i,v j ) se a)já foi testado ; ou b)Se R ij (v i,v j ) já foi testado 4.Tem complexidade espacial O(ad) Por comparação, o AC-3 só goza da propriedade 4; o AC-4 só goza da propriedade 3a; o AC-6 goza de 1, 3a e 4.

35 35 Algoritmo AC-7 Complexidade típica do algoritmo AC-7 As características não podem ser detectadas na análise de complexidade do pior caso, que não detectam pois diferenças entre o AC-6 e o AC-7. Os resultados seguintes consideram problemas de teste gerados aleatoriamente com os parâmetros indicados. Os primeiros são fáceis (under- e over-constrained). Os dois últimos estão na transição de fase, sendo desdobrados os resultados das instâncias consistentes (a) e não consistentes (b)

36 36 Algoritmo AC-7 Comparação das complexidades típicas (# de checks)

37 37 Algoritmo AC-7 Comparação das complexidades típicas (tempo CPU em ms num PC Pentium 200 MHz)

38 38 Algoritmo AC-3d Ideias semelhantes de explorar a bidireccionalidade do suporte foram adoptadas numa adaptação, não do algoritmo AC-6 mas sim do algoritmos AC-3, obtendo-se o algoritmos AC-3d. A principal diferença entre o AC-3 e o AC-3d consiste em que quando se retira o arco a ij da lista Q, é também retirado o arco Aji no caso de ele estar lá presente. Neste caso são revistos simultaneamente os domínios de Xi e Xj, o que evita bastante trabalho repetido. Apesar de não melhorar a complexidade do pior caso, a complexidade típica parece interessante (pelo menos em alguns problemas de teste estudados).

39 39 Algoritmo AC-3d Comparação das complexidades típicas (# de checks) nos problemas aleatórios anteriores

40 40 Algoritmo AC-3d Comparação das complexidades típicas nos problemas aleatórios anteriores (tempo CPU equivalente num PC Pentium 200 MHz)

41 41 Algoritmo AC-3d Os resultados parecem ainda mais interessantes para problemas em que o AC-7 se mostrou bastante superior ao AC-6, quer em número de testes quer em tempo. O problema (RLFAP - Radio Link Frequency Assignment Problem) consiste em atribuir Radio Frequências de uma forma segura, sendo estudadas instâncias com 3, 5, 8 e 11 antenas. O seu código ( e de outros problemas de teste) pode ser obtido a partir de um arquivo de problemas de teste disponível pela Internet no URL

42 42 Algoritmo AC-3d Complexidades típicas (# de checks) nos problemas RFLAP

43 43 Algoritmo AC-3d Comparação das complexidades típicas nos problemas aleatórios anteriores (tempo CPU equivalente num PC Pentium 200 MHz)

44 44 Consistência de Caminho Para além da consistência de arco, podem definir-se outros tipos de consistência para redes de restrições binárias. Um tipo de consistência clássico, que é mais forte que a consistência de arco, é a consistência de caminho. A ideia é que para além de avaliar a existência de suportes nos arcos da rede entre as variáveis X i e X j, deverá ser ainda verificada a existência de suporte nas variáveis X k1, X k2... X km que constituam um caminho entre X i e X j, ou seja, que haja restrições R ik1, R k1, k2,..., R km-1, km e R km,j. Na realidade, prova-se que esta definição é equivalente a obter suporte em qualquer variável X k ligada quer a X i quer a X j.

45 45 Consistência de Caminho Definição (Consistência de Caminho): Um problema de restrições tem os caminhos consistentes se, 1.Tiver todos os arcos consistentes; e 2.Para todas as restrições R ij envolvendo as variáveis X i e X j, no caso de existirem restrições R ik e R jk dessas variáveis com uma terceira variável X k, para todas as etiquetas compostas {X i -v i, X j -v j } deve existir um valor v k tal que as etiquetas compostas {X i -v i,X k -v k } e {X j -v j,X k -v k } satisfazem as restrições R ik e R jk.

46 46 Consistência de Caminho A manutenção deste tipo de consistência tem naturalmente mais custos computacionais que a simples consistência de arco. Para a manter é conveniente manter uma representação por extensão das restrições binárias, na forma de uma matriz booleana. Assumindo que as variáveis X i e X j têm di e dj valores no seu domínio, a restrição R ij é mantida como uma matriz M ij de di*dj booleanos. O valor 1/0 do elemento M ij [k,l] indica se o par {X i -v k, X j -v l } satisfaz/não satisfaz a restrição.

47 47 Consistência de Caminho Exemplo: 4 rainhas Matriz Booleana, M 12, relativa à restrição entre as variáveis X 1 e X 2 (ou entre duas variáveis em linhas consecutivas) M 12 [1,3] = M 12 [3,1] = 1 Matriz Booleana, M 13, relativa à restrição entre as variáveis X 1 e X 3 (ou entre duas variáveis com uma linha de intervalo) M 12 [3,4] = M 12 [4,3] = 0 M 13 [1,2] = M 13 [2,1] = 1 M 13 [2,4] = M 13 [4,2] = 0

48 48 Consistência de Caminho Verificação da Consistência de Caminho Para eliminar da matriz M ij os valores que não satisfaçam a consistência de caminho através de uma terceira variável X k, pode recorrer-se a operações semelhantes à multiplicação e soma de matrizes. M IJ <- M IJ M IK M KJ Em que a operação corresponde à conjunção dos valores booleanos correspondentes, e a operação corresponde à multiplicação de matrizes em que as operações multiplicação/soma sobre reais são substituídas pelas operações conjunção/disjunção sobre booleanos. Considera-se ainda a matriz diagonal M kk para representar o domínio da variável X k.

49 49 Consistência de Caminho Exemplo (4 rainhas): Verificação da inconsistência de caminho da etiqueta composta {X 1 -1 e X 3 -4}, devido à variável X 2. M 13 [1,4] <- M 13 [1,4] M 12 [1,X] M 23 [X,4] Ora M 12 [1,X] M 23 [X,4] = 0 pois M 12 [1,1] M 23 [1,4] % o valor X não suporta {X 1 -1,X 3 -4} M 12 [1,2] M 23 [2,4] % o valor X 2 -2 não suporta {X 1 -1,X 3 -4} M 12 [1,3] M 23 [3,4] % o valor X 2 -3 não suporta {X 1 -1,X 3 -4} M 12 [1,4] M 23 [4,4] % o valor X 2 -4 não suporta {X 1 -1,X 3 -4}

50 50 Consistência de Caminho A consistência de caminho é mais forte que a consistência de arco, no sentido que a sua manutenção permite, em geral, eliminar mais valores redundantes dos domínios das variáveis do que a simples manutenção de consitência de arco. Em particular, no problema das 4 rainhas, a manutenção da consistência de caminho permite eliminar dos domínio das variáveis todos os valores que não pertencem a nenhuma solução, antes de se fazer qualquer atribuição de variáveis. Como consequência importante, consegue resolver-se o problema com uma enumeração livre de retrocesso!

51 51 Consistência de Caminho Consistência de Caminho no problema das 4 rainhas X 1 e X 3 via X 2 X 1 e X 4 via X 3

52 52 Consistência de Caminho X 1 e X 2 via X 4 X 1 e X 3 via X 2 X 1 e X 4 via X 2

53 53 Consistência de Caminho Obviamente, a contrapartida do maior poder de corte da manutenção de consistência de caminho é o seu maior custo computacional em relação à manutenção da consistência de arco. Os algoritmos para obter a consistência de arco, PC-x, são naturalmente mais pesados que os AC-y. A título de exemplo, estudamos o algoritmo PC-1 (muito elementar) e discutimos os mais sofisticados PC-2 e PC-4 que o optimizam no sentido de evitar repetições de testes e testes redundantes.

54 54 Algoritmo PC-1 procedimento PC-1(V,D,R); n <- #Z; M n <- R; repetir M 0 <- M n ; para k de 1 a n fazer para i de 1 a n fazer para j de 1 a n fazer M ij k <- M ij k-1 M ik k-1 M kk k-1 M kj k-1 fim para até M n = M 0 R <- M n fim procedimento

55 55 Algoritmo PC-1 Complexidade temporal do algoritmo PC-1 Cada operação M ij k <- M ij k-1 M ik k-1 M kk k-1 M kj k-1 envolve O(d 3 ) operações binárias, ja que por cada um dos d 2 elementos se executam d operações e d-1 operações binárias. Combinando estes factores obtemos uma complexidade temporal O(n 2 d 2 * n 3 * d 3 ), isto é O(n 5 d 5 ) muito superior à complexidade dos algoritmos AC-x. O AC-1 tem complexidade O(nad 3 ), o que para redes densas em que a n 2 corresponde a O(n 3 d 3 ).

56 56 Algoritmo PC-1 Complexidade espacial do algoritmo PC-1 A complexidade espacial do PC-1 corresponde a manter n 3 matrizes M ij k, correspondentes aos conjuntos de restrições R ij nas várias iterações atarvés do caminho passando por X k. cada matriz contem d 2 elementos. Assim a complexidade espacial do algoritmo PC-1 é de O(n 3 d 2 ) Naturalmente, esta complexidade é a resultante de representar por extensão e de uma forma matricial as restrições, não havendo mais nenhuma estrutura de dados mantida pelo PC-1.

57 57 Outros Algoritmos PC-X Algoritmo PC-2 O algoritmo PC-2 mantém uma lista dos caminhos que têm de ser reavaliados por via da remoção de valores das matrizes M ij, de forma a só reactivar os testes de consistência de caminho que podem ser alterados por essas remoções. Em contraste com a complexidade O(n 5 d 5 ) do PC-1, a complexidade temporal do PC-2 é O(n 3 d 5 ) A complexidade espacial é igualmente melhor que a do PC-1, O(n 3 d 2 ), sendo para o algoritmo PC-2 de O(n 3+ n 2 d 2 )

58 58 Outros Algoritmos PC-X Algoritmo PC-4 O algoritmo PC-4, por analogia com o AC-4, mantém um conjunto de contadores e de apontadores para melhorar o mecanismo de avaliação da influência de remoções nos caminhos a reavaliar. Em contraste com as complexidades O(n 5 d 5 ) do PC-1 e O(n 3 d 5 ), a complexidade temporal do PC-4 é O(n 3 d 3 ) A complexidade espacial é, como esperado, pior que a do PC-2, O(n 3+ n 2 d 2 ), sendo para o PC-4 idêntica à do PC-1 O(n 3 d 2 )

59 59 Algoritmo PC-1 Complexidade temporal do algoritmo PC-1 (cont) O procedimento realiza um ciclo repetir... até R n = R 0 Havendo n 2 restrições R ij e tendo a matriz de cada uma d 2 elementos, o pior caso ocorre quando em cada ciclo se elimina um só desses valores. O ciclo pode pois ser executado um máximo de n 2 d 2 vezes. Em cada ciclo repetir são efectuados n 3 ciclos para encadeados para K de 1 a n fazer para I de 1 a n fazer para J de 1 a n fazer

60 60 Consistência-k As consistências de nó, arco e caminho são casos particulares da consistência k. Informalmente, uma rede de restrições é consistente k, se para u grupo de variáveis X i1, X i2, X ik cada variável tiver valores consistentes com as outras variáveis considerando as restrições que as ligam de uma forma global. Os exemplo seguintes mostram a importância de se ter essa visão global das restrições. 0 0 Rede consistente nos nós mas não no arco

61 61 Consistência-k Rede consistente nos arcos mas não nos caminhos 0,1 0,1 Rede consistente nos caminhos mas não consistente

62 62 Consistência-k Definição (Consistência-k): Um problema de restrições é consistente-1 se todos os valores de todas as variáveis verificam as restrições unárias. Um problema é consistente-k, sse todas as etiquetas-k, (i.e. compostas com k-1 pares X-v) que satisfazem as restrições relevantes poderem ser estendidas por inclusão de qualquer variável adicional, formando uma etiqueta-k que satisfaz as restrições relevantes.

63 63 Consistência-k Definição (Consistência-k forte): Um problema de restrições é fortemente consistente-k forte, sse fôr consistente-i, para todo o i 1.. k. Por exemplo, a rede abaixo é consistente-3, mas não consistente-2, pelo que não é fortemente consistente-3. As etiquetas-2 que satisfazem as restrições de desigualdade ( ) relevantes são {A-0,B-1}, {A-0,C-0}, e {B-1, C-0} que podem ser estendidas para {A-0,B-1,C-0}. No entanto a etiqueta-1 {A-0} não pode ser estendida para {A-0,B-0} ! 0 0 0,1 B C A

64 64 Consistência-k Como se pode verificar, as consistências anteriormente estudadas (de nó, de arco e de caminho) são casos particulares da consistência-k forte. Assim A consistência de uma rede de restrições nos nós é equivalente à sua consistência-1 forte. A consistência de uma rede de restrições nos arcos é equivalente à sua consistência-2 forte. A consistência de uma rede de restrições nos caminhos é equivalente à sua consistência-3 forte.

65 65 Consistência - (i, j) A consistência-k pode ainda ser generalizada para a noção de consistência - (i, j). Um problema é consistente-(i, j) sse k, sse todas as etiquetas-i (i.e. composta por i pares X-v) que satisfazem as restrições relevantes poderem ser estendidas por inclusão de j variáveis adicionais, para formar uma etiqueta - k (k=i+j) que satisfaz as restrições relevantes. Naturalmente, a consistência-k de uma rede de restrições é equivalente à sua consistência-(k-1,1). Apesar de interessante teoricamente, o critérios de consistência-(i,j) (tal como o de consistência-k), não são impostos na prática (ver algoritmo KS-1 [Tsan93]).

66 66 Consistência de Arco Generalizada No caso de redes de restrições não binárias, podemos manter a noção e o algoritmo de consistência de nó, em que só são relevantes as restrições unárias. A generalização de consistência de arco para redes de restrições n-árias (n>2) é óbvia, considerando-se hiper- arcos (em vez de arcos) nessas restrições, e garantindo que cada valor de uma variável é suportado por valores das outras variáveis que participam na restrição. Apesar de não ser óbvia a generalização de consistência de caminho, (a noção de caminho não é clara), ela pode ser definida a partir da consistência-3 forte para essas redes. Na prática, só se mantém a consistência de arco generalizada, por adaptação dos AC-X !

67 67 GAC-3 Como ilustração, podemos considerar o algoritmo GAC-3, uma generalização do algoritmo AC-3. A cada restrição k- ária correspondem agora k hiper-arcos dirigidos que representam os suportes. procedimento GAC-3(V, D, R); NC-1(V,D,R); % impõe a consistência de nós Q = {ha i..j | R i..j R R j..i R }; enquanto Q fazer Q = Q \ {ha i..j } % remove um elemento de Q se rev_dom(ha i..j,V,D,R) então Q = Q {ha k1..kn | X k vars(R K1..Kn ) X k vars(R i..j ) k 1..k n i.. J } até não alterado fim procedimento

68 68 GAC-3 Complexidade temporal do algoritmo GAC-3 Por comparação com o algoritmo AC-3, o predicado rev_dom, verifica no máximo d k pares de valores para restrições k-árias. Quando um valor v i é eliminado do domínio de X i um número de hiper-arcos relacionado com a aridade das restrições é inserido na fila Q. Especificamente, k-1 hiper-arcos são inseridos por cada restrição k-ária envolvendo uma variável de que foi eliminado um valor. No total, cada um dos ka arcos pode ser inserido (e removido) (k-1)d vezes da fila Q. Tendo em conta todos estes, a complexidade temporal do algoritmo GAC-3, pior caso, é O(k(k-1)2ad * d k ), ou seja O(k 2 ad k+1 )

69 69 Consistências Dependentes das Restrições Os algoritmos e critérios de consistência estudados não têm em conta a semântica das restrições, tratando-as todas de uma forma uniforme. No entanto, esta abordagem não é muito interessante na prática, onde se poderão obter ganhos por utilização de critérios de consistência específicos. Por exemplo, independentemente de esquemas mais gerais, para restrições de desigualdade ( ) só faz sentido manter a consistência de nó. Com efeito, para X i X j, só se podem eliminar elementos do domínio de uma variável quando a outra ficar reduzida a um elemento!

70 70 Consistências Dependentes das Restrições Outras consistências mais específicas podem ser usadas. Por exemplo, no problema das rainhas, dada uma restrição não_ataca(X i, X j ) só faz sentido analisar o efeito de se eliminar um valor no domínio de uma variável se o domínio ficar reduzido a 3 ou menos valores. Com efeito, se X i mantiver 3 valores no domínio, todos os valores no domínio de X j terão pelo menos um valor no domínio de X i que os suporta, pois a relação é simétrica e um valor de X j só pode atacar 3 valores de X i. rainhas_fd_xc

71 71 Consistências de Limite Outra consistência específica e de grande importância é a consistência de limites (bound-consistency), usada de preferência com restrições de =< em domínios ordenados. Com efeito dada a restrição A + B =< C, as verificações que se podem impôr de uma forma independente da cardinalidade dos domínios (que pode ser bastante grande, por exemplo, d=1000 se A in , e inviabilizar consistência de arco com complexidade O(ad 3 )) são max dom(C) =< max dom(A) + max dom(B) min dom(C) >= min dom(A) + min dom(B) max dom(A) =< max dom(C) - max dom(B) min dom(A) >= min dom(C) - min dom(B) max dom(B) =< max dom(C) - max dom(A) min dom(B) >= min dom(C) - min dom(A)


Carregar ppt "1 Algoritmo AC-4 Ineficiência do algoritmo AC-3 Cada vez que um valor v i é removido do domínio de uma variável X i, pelo predicado rev_dom(a ij,V,D,R),"

Apresentações semelhantes


Anúncios Google