Domínios Finitos
A eficiência das programas em domínios finitos (incluindo
booleanos) podem ainda ser melhoradas pelo uso de
•
Algoritmos de Propagação adequados
•
Heurísticas para escolha da variável e do valor
Antes de investigarmos estes aspectos, nomeadamente a
propagação de restrições, convém formalizar alguns
conceitos tais como
•
restrições e rede de restrições
•
soluções parciais e totais
•
satisfação e consistência
1
Domínios Finitos
Definição (Domínio de Variável):
O domínio de uma variável é o conjunto (finito) de
valores que podem ser atribuídos a uma variável.
Dada uma variável X, o seu domínio será normalmente
denotado por dom(X) ou simplesmente Dx.
Exemplo:
O Problema das n rainhas pode ser modelado através de n
variáveis X1 a Xn, todas com domínio de 1 a n.
Dom(Xi) = {1,2, ..., n}
ou
Xi :: 1..n.
2
Domínios Finitos
Definição (Etiqueta):
Uma etiqueta é um par Variável-Valor, sendo o valor um
dos elementos do domínio da variável.
Com a definição de etiqueta pretende-se formalizar a
atribuição do valor à variável.
Definição (Etiqueta Composta):
Uma etiqueta composta é um conjunto de etiquetas
referentes a variáveis distintas.
Com a definição de etiqueta pretende-se formalizar a
noção de solução (parcial), em que algumas (todas) variáveis
do problema têm valor atribuído.
3
Domínios Finitos
Definição (Restrição):
Dado um conjunto de variáveis, uma restrição é um
conjunto de etiquetas compostas definidas nessas
variáveis.
De facto, uma restrição pode ser vista como um
subconjunto do produto cartesiano dos domínios das
variáveis envolvidas na restrição.
Por exemplo, para qualquer restrição Rijk envolvendo as
variáveis Xi, Xj e Xk, teremos
Rijk  dom(Xi) x dom(Xj) x dom(Xk)
4
Domínios Finitos
Dada uma restrição R, o conjunto de variáveis da restrição
será denotado por Vars(R).
De uma forma simétrica, o conjunto de restrições em que
participa a variável X é denotado por cons(X).
De notar ainda que sendo a restrição uma relação (não um a
função) temos que Rij = Rji.
As restrições podem ser especificadas por
• Extensão: através da enumeração das etiquetas
permitidas; ou
• Intenção: através de um predicado (procedimento)
que determina as etiquetas permitidas
5
Domínios Finitos
Por exemplo, dadas as variáveis X1 e X3 do problema das 4
rainhas, existe uma restrição entre elas, R13, que pode ser
especificada
Por extensão:
R13 = {{X1-1, X3-2}, {X1-1, X3-4}, {X1-2, X3-1}, {X1-2, X3-3},
{X1-3, X3-2}, {X1-3, X3-4}, {X1-4, X3-1}, {X1-4, X3-3}}
ou, omitindo as variáveis
R13 = {<1,2>, <1,4>, <2,1>, <2,3>, <3,2>, <3,4>, <4,1>, <4,3>}
Por intenção:
R13 = (X1  X3)  (1+X1  3+X3)  (3+X1  1+X3)
6
Domínios Finitos
Definição (”Aridade” de uma Restrição):
A aridade de uma restrição R é o número de variáveis
sobre as quais a restrição é definida, ou seja a
cardinalidade do conjunto vars(R).
Apesar das restrições poderem ter uma aridade arbitrária,
um subconjunto muito importante de restrições é
constituído pelas restrições binárias.
A importância dessas restrições advém de que
1. Todas as restrições podem ser convertidas em
restrições binárias.
2. Existem conceitos e algoritmos apropriados para
essas restrições.
7
Domínios Finitos
Conversão para Restrições Binárias
Uma restrição n-ária, R, constituída por k etiquetas
compostas nas suas variáveis X1 a Xn, é equivalente a n
restrições binárias, Bi, através da adição de uma variável
adicional, Z, que tem como domínio os valores de 1 a k.
Com efeito, as k etiquetas
arbitrariamente ordenadas.
n-árias
podem
ser
Cada uma das n restrições binárias Bi relaciona uma das n
variáveis Xi com a nova variável Z.
A etiqueta composta {Xi-vi, Z-z} pertence à restrição Bi sse
Xi-vi pertencer à z-ésima etiqueta composta que define R.
8
Domínios Finitos
Exemplo: Dadas as variáveis X1 a X3, com domínios 1 a 3,
converter em restrições binárias a restrição R que impõe
valores diferentes para as três variáveis.
R(X1, X2, X3) = {<1,2,3>,<1,3,2>,<2,1,3>,<2,3,1> ,<3,1,2>,<3,2,1>}
Associemos a cada etiqueta composta um valor de 1 a 6
1 : <1,2,3>,
2 : <1,3,2>,
... 6: <3,2,1>
As restrições binárias equivalentes à restrição inicial são
B1(Z, X1) = {<1,1>, <2,1>, <3,2>, <4,2>, <5,3>, <6,3>}
B1(Z, X1) = {<1,2>, <2,3>, <3,1>, <4,3>, <5,1>, <6,2>}
B1(Z, X1) = {<1,3>, <2,2>, <3,3>, <4,1>, <5,2>, <6,1>}
9
Domínios Finitos
Definição (Satisfação de Restrição 1):
Uma etiqueta composta satisfaz um restrição se as suas
variáveis (da etiqueta e da restrição) forem as mesmas e
se a etiqueta for um elemento da restrição.
Na prática, é conveniente generalizar a satisfação a
situações em que as etiquetas compostas contêm
estritamente as variáveis da restrição.
Definição (Satisfação de Restrição 2 ):
Uma etiqueta composta satisfaz um restrição se as suas
variáveis incluirem as da restrição e se a sua (da
etiqueta) projecção para as variáveis da restrição fôr um
elemento da restrição.
10
Domínios Finitos
Definição (Problema de Satisfação de Restrições):
Um problema de satisfação de restrições é um triplo
<V,D,R> em que
• V é o conjunto das variáveis do problema
• D é o domínio das variáveis
• R é o conjunto das restrições do problema
Definição (Solução dum Problema):
Uma solução de um problema de satisfação de restrições
P = <V,D,R> é uma etiqueta composta sobre as variáveis V
do problema que satisfaz todas as restrições R.
11
Domínios Finitos
Em muitas situações é conveniente considerar as várias
restrições de um problema sob a forma de um grafo.
Definição (Grafo ou Rede de Restrições):
O grafo ou rede de restrições de um problema de
restrições binárias tem como nós as variáveis do
problema. Para cada restrição não-trivial do problema
envolvendo uma ou duas variáveis, o grafo contém um
arco ligando os nós correspondentes a essas variáveis
Quando os problemas contêm restrições com aridade
arbitrária, elas podem ser convertidas nas suas
equivalentes binárias.
12
Domínios Finitos
Quando por algum motivo não seja conveniente converter
as restrições n-árias em binárias, o problema pode ser
representado por um hiper-grafo.
Definição (Hiper-Grafo de Restrições):
Qualquer problema de restrições n-árias arbitrárias
pode ser representado através de um hiper-grafo, cujos
nós são as variáveis do problema. Para cada restrição do
problema, o grafo contém um hiper-arco ligando os nós
correspondentes às variáveis envolvidas na restrição.
Como é óbvio, se o problema só contém restrições binárias,
o hiper-grafo de restrições degenera num grafo.
13
Domínios Finitos
Exemplo: O problema das 4 rainhas pode ser definido pelo
seguinte grafo:
R12
X2 in 1..4
R24
X1 in 1..4
R23
R14
R13
{<1,2>, <1,4>, <2,1>, <2,3>,
<3,2>, <3,4>, <4,1>, <4,3>}
X3 in 1..4
R34
X4 in 1..4
14
Domínios Finitos
Definição (Grafo de Restrições Completo):
Um grafo de restrições é completo quando existem arcos
ligando qualquer par de nós (isto é, quando existe uma
restrição sobre qualquer par de variáveis).
O problema das 4 rainhas tem um grafo completo. No
entanto, esse não é sempre o caso, podendo os grafos ser
“esparsos” por não conterem alguns arcos potenciais. Nesse
caso importa definir a densidade de um grafo.
Definição (Densidade de um Grafo de Restrições):
A densidade de um grafo de restrições corresponde à
razão entre o número de arcos e o número de arcos de
um grafo completo com o mesmo número de nós.
15
Domínios Finitos
Em princípio, a “dificuldade” de um problema de restrições
está relacionada com a densidade do seu grafo.
Intuitivamente, quanto mais denso fôr o grafo, mais difícil
é o problema, já que há mais “oportunidades” de invalidar
uma etiqueta composta.
Não confundir a dificuldade de um problema com a
dificuldade de resolver um problema. Em particular, um
problema pode ser trivialmente verificado como impossível!
A “dificuldade” de um problema está também relacionada
com a dificuldade de cada restrição. Essa dificuldade pode
ser avaliada através do seu grau de aperto (“tightness”).
16
Domínios Finitos
Definição (Grau de Aperto de uma Restrição):
Dada uma restrição R sobre as variáveis X1 ... Xn, com
domínios D1 a Dn, o grau de aperto da restrição R é dado
pela razão entre o número de etiquetas que a definem e
a cardinalidade do produto cartesiano D1 x D2 x .. Dn.
Por exemplo, a restrição R13 no problemas das 4 rainhas,
definida sobre as variáveis X1 e X3 com domínios 1..4
R13 = {<1,2>, <1,4>, <2,1>, <2,3>, <3,2>, <3,4>, <4,1>, <4,3>}
tem um grau de aperto de 8/(4*4) = 1/2.
Este conceito pode ser generalizado para o problema como
um todo.
17
Domínios Finitos
Definição (Grau de Aperto de um Problema):
O grau de aperto de um problema definido nas variáveis
X1 ... Xn, é obtido pela razão entre o número das suas
soluções e a cardinalidade do produto cartesiano
D1 x D2 x .. Dn.
Por exemplo, o problema das 4 rainhas que admite as
soluções <2,4,1,3> e <3,1,4,2>
tem um grau de aperto de 2/4*4*4*4 = 1/128.
18
Domínios Finitos
A dificuldade de resolver um problema de restrições está
relacionada quer com a densidade do seu grafo, quer com o
seu grau de aperto.
Na realidade, para testar algoritmos de resolução de
problemas de restrições são criadas aleatoriamente
instâncias de problemas parametrizadas pelos valores
escolhidos para a densidade e grau de aperto das
restrições.
O estudo destes aspectos levou a concluir sobre a
existência de uma transição de fase, entre os problemas
trivialmente satisfazíveis e trivialmente insatisfazíveis,
que é necessário ter em conta quando se testam algoritmos
de resolução.
19
Domínios Finitos
Um outro aspecto a considerar na dificuldade de resolver
um problema de restrições está relacionada com a
existência de valores e etiquetas redundantes em
restrições.
Definição (Valor Redundante):
Um valor do domínio de uma variável é redundante, se
não aparece em nenhuma solução do problema.
Definição (Etiqueta Redundante):
Uma etiqueta composta de uma restrição é redundante
se ela não é a projecção para as variáveis da restrição de
qualquer solução do problema.
20
Domínios Finitos
Exemplo: O problema das 4 rainhas só admite as soluções
<2,4,1,3> e <3,1,4,2>.
Desta forma os valores 1 e 4 são redundantes no domínio
das variáveis X1 e X4, e os valores 2 e 3 são redundantes no
domínio das variáveis X2 e X3.
Por outro lado, as etiquetas <2,3> e <3,2> são redundantes
na restrição R13.
21
Domínios Finitos
Exemplo: O problema das 4 rainhas que só admite as
soluções <2,4,1,3> e <3,1,4,2> pode ser “simplificado” por
eliminação dos valores e etiquetas redundantes.
R12
X2 in 1,2,3,4
R24
X1 in 1,2,3,4
R23
R14
R13
{<1,2>, <1,4>, <2,1>, <2,3>,
<3,2>, <3,4>, <4,1>, <4,3>}
X3 in 1,2,3,4
R34
X4 in 1,2,3,4
22
Domínios Finitos
Os problemas inicial e “simplificado” são equivalentes.
Definição (Problemas Equivalentes):
Dois problemas P1 = <V1, D1, R1> e P2 = <V2, D2, R2> são
equivalentes sse têm as mesmas variáveis (i.e. V1 = V2) e
o mesmo conjunto de soluções.
A “simplificação” pode igualmente ser formalizada
Definição (Problema Reduzido):
Um problema P=<V,D,R> é reduzido para P’=<V’, D’, R’> se
a) P e P’ são equivalentes;
b) os domínios D’x estão incluídos em Dx; e
c) as restrições R’ são igualmente ou mais restritivas
que as restrições de R.
23
Resolução Construtiva em Domínios Finitos
Como se viu antes, e independentemente de se poder
reduzir o problema, um processo de geração e teste é
muito ineficiente.
Assim é preferível utilizar um processo de resolução
construtivo e incremental. Neste processo, uma etiqueta
composta vai sendo completada (aspecto construtivo),
variável a variável (aspecto incremental), até se atingir
uma solução.
No entanto há que garantir que em cada passo de
“completamento” da etiqueta composta, a etiqueta
resultante ainda tem potencial para “atingir” uma solução.
24
Resolução Construtiva em Domínios Finitos
Idealmente, uma etiqueta composta deverá ser a projecção
de uma solução do problema. Infelizmente, num processo
de resolução do problema, não se conhecem (geralmente) as
soluções!
Assim, pode recorrer-se a uma noção
nomeadamente a noção de solução parcial
mais
fraca,
Definição (Solução Parcial-k):
Uma solução parcial de um problema de satisfação de
restrições P = <D,V,R> é uma etiqueta composta sobre um
subconjunto de k das variáveis V do problema que
satisfaz todas as restrições de R definidas
completamente por essas variáveis.
25
Resolução Construtiva em Domínios Finitos
Este é o princípio de resolução dos problemas de restrições
de domínios finitos através do retrocesso. Este processo
pode ser visto como uma pesquisa em árvore, em que as
soluções parciais correspondem aos nós da árvore e as
soluções às suas folhas.
1
2
4
3
4
1
1
3
4
2
26
Resolução Construtiva em Domínios Finitos
Quanto mais reduzido fôr um problema mais fácil será, em
princípio resolvê-lo.
Com efeito, dado um problema P=<D,V,R> com n variáveis
(i.e. V = {X1,..,Xn}) o espaço de pesquisa potencial onde se
poderão encontrar soluções (ou seja as folhas da árvore de
pesquisa onde se encontram etiquetas compostas do tipo
{<X1-v1>, ..., <Xn-vn>}), tem uma cardinalidade
#S = #D1 * #D2 * ... * #Dn
Sendo a cardinalidade dos domínios idênticas (#Di = d) o
espaço de pesquisa
#S = d n
é exponencial na dimensão n do problema.
27
Resolução Construtiva em Domínios Finitos
Se em vez de cardinalidade d do problema inicial, se
trabalhar num problema reduzido em que a cardinalidade
dos domínios fôr d’ (<d) o espaço de pesquisa potencial
diminui exponencialmente!
S’/S = d’n / dn = (d’/d)n
Essa diminuiução exponencial pode ser muito significativa
para valores “razoavelmente” grandes de n. Por exemplo:
n
S/S'
7
6
5
4
3
d
6
5
4
3
2
d'
10
4.6716
6.1917
9.3132
17.758
57.665
20
30
21.824 101.95
38.338 237.38
86.736 807.79
315.34 5599.7
3325.3 191751
40
476.29
1469.8
7523.2
99437
1E+07
50
60
70
80
2225 10395 48560 226852
9100.4 56348 348889 2E+06
70065 652530 6E+06 6E+07
2E+06 3E+07 6E+08 1E+10
6E+08 4E+10 2E+12 1E+14
90
1E+06
1E+07
5E+08
2E+11
7E+15
100
5E+06
8E+07
5E+09
3E+12
4E+17
28
Resolução Construtiva em Domínios Finitos
Na prática, esta redução potencial do espaço de pesquisa
tem um custo, correspondente à computação dos valores (e
etiquetas) redundantes.
Uma análise detalhada do processo é extremamente
complexa de uma forma geral, pois o processo depende
muito da instância do problema em causa.
No entanto, em geral, podemos considerar que o esforço
computacional na redução de domínios não é proporcional à
redução obtida tornando-se cada vez menos “eficiente”.
Assim, a partir de um certo ponto a redução do espaço de
pesquisa já não compensa, pois acarreta um maior aumento
da computação para atingir essa redução!
29
Resolução Construtiva em Domínios Finitos
Qualitativamente, este processo pode ser apresentado
através do seguinte gráfico
R+P Custo
Combinado
R - Custo de Redução
P- Custo de Pesquisa
Esforço dispendido na redução do problema
30
Resolução Construtiva em Domínios Finitos
O esforço de redução de domínios deve ser entendida no
esquema de resolução de problema que alterna enumeração
com propagação.
Com efeito, na especificação de um programa (em
Programação em Lógica com Restrições) o lançamento das
restrições antecede a enumeração das variáveis.
Problema ( Vars):Declaração de Variáveis e Domínios,
Lançamento das Restrições,
Enumeração das Variáveis.
No entanto o esquema de execução alterna a enumeração
com a propagação (redução do problema) durante o
completar de uma solução parcial.
31
Resolução Construtiva em Domínios Finitos
Assim dado um problema com n variáveis X1 a Xn o esquema
de execução segue o seguinte padrão:
Declaração de Variáveis e Domínios,
Lançamento das Restrições,
indomain(X1),
% escolha com retrocesso
propagação
indomain(X2),
% escolha com retrocesso
propagação,
...
indomain(Xn-1)
% escolha com retrocesso
propagação
indomain(Xn)
% escolha com retrocesso
Há pois que balancear o esforço na redução com os
resultados obtidos na redução dos domínios.
32
Redução de Domínios
Apesar de se ter definido formalmente a redução de um
problema de restrições não foi apresentada nenhum
procedimento para o obter.
Pior, nem sequer foi definido um procedimento para
reconhecer se um problema é uma redução do problema
inicial.
Com efeito, a definição pressupõe que o problema reduzido
seja equivalente ao inicial, isto é que tenha as mesmas
soluções. No entanto, essas soluções não são, em geral,
conhecidas!
Assim, o que se pode estudar são critérios que permitam
garantir que no processo de redução não se “perdem”
soluções.
33
Redução de Domínios
Esses critérios de consistência permitem estabelecer
valores redundantes nos domínios das variáveis, de uma
forma indirecta, isto é, sem requerer o conhecimento dos
valores que pertencem a soluções do problema.
Mais exactamente, a manutenção destes critérios durante
a resolução do problema permite a eliminação destes
valores redundantes.
Em problemas de restrições binárias, os critérios mais
comuns são, com complexidade crescente, os seguintes
• Consistência dos Nó
• Consistência dos Arco
• Consistência dos Caminho
34
Redução de Domínios
Definição (Consistência de Nó):
Um problema de restrições tem os nós consistentes, se
nenhum valor no domínio das variáveis violar as
restrições unárias.
Este critério pode parecer óbvio e inútil. Ninguém vai
especificar domínios para as variáveis que não satisfaçam à
partida as restrições unárias!
No entanto, este critério deve ser entendido no contexto
do completar de uma solução parcial, tal como discutido
atrás.
35
Redução de Domínios
Exemplo: Após o lançamento das restrições, a rede de
restrições do problema das 4 rainhas é a seguinte:
R12
X1 in 1..4
R23
X2 in 1..4
R14
R13
X3 in 1..4
R34
R24
X4 in 1..4
Após a enumeração da variável X1, com a escolha de X1=1,
as restrições R12, R13 e R14 tornam-se unárias!
X2 
1,2
X2 in 1..4
R24
R23
X3 in 1..4
X3 
1,3
R34
X4 in 1..4
X4 
1,4
36
Redução de Domínios
A manutenção da consistência dos nós deverá retirar do
domínio das variáveis os valores apropriados.
X2 
1,2
R23
X2 in 3,4
X3 in 2,4
X3 
1,3
R34
R24
X4 in 2,3
X4 
1,4
Consegue-se assim uma redução de domínios semelhante à
que se conseguia no caso das restrições booleanas.
1
1
1
1
1
1
X2 
1,2
X3 
1,3
X4 
1,4
37
Redução de Domínios
Manutenção de Consistência de Nós
Dada a simplicidade do critério de consistência de nós, o
algoritmo para proceder à sua manutenção é bastante
simples e de baixa complexidade. Um possível algoritmo
para manter a consistência de nós é o algoritmo NC-1
procedimento
para X in
para v
se
NC-1(V, D, R);
V
in Dx fazer
não satisfaz(X-v, Cx) então
Dx <- Dx \ {v}
fim para
fim para
fim procedimento
38
Redução de Domínios
Complexidade espacial do algoritmo NC-1
Havendo n variáveis no problema, cada qual com d valores
no seu domínio, e assumindo-se uma representação por
extensão dos domínios das variáveis, é necessário um
espaço de nd para guardar os domínios das variáveis.
Por exemplo, o domínio inicial 1..4 das variáveis Xi do
problema das 4 rainhas, é representado pelos vectores
booleanos Xi = [1,1,1,1] ou 1111. Após a enumeração X1=1 e
a manutenção de coerência de nós, os domínios ficam
X1 = 1000, X2 = 0011, X3 = 0101 e X4 = 0110
O algoritmo NC-1 não requer espaço adicional, pelo que
tem uma complexidade espacial O(nd).
39
Redução de Domínios
Complexidade temporal do algoritmo NC-1
Havendo n variáveis no problema, cada qual com d valores
no seu domínio, e tendo em conta que cada valor é
avaliado uma vez, é fácil concluir que o algoritmo tem
uma complexidade O(nd).
Em geral, a baixa complexidade temporal e espacial permite
que o procedimento NC-1 seja
utilizado muito
eficientemente na propagação de restrições.
No entanto, a manutenção de consistência de nós, não
permite detectar todas as reduções possíveis dos domínios
das variáveis.
40
Redução de Domínios
Um critério mais exigente (e complexo) que a consistência
de nós é o de Consistência de Arcos
Definição (Consistência de Arco):
Um problema de restrições tem os arcos consistentes,
(está numa forma consistente de arcos) se,
1. Tiver todos os nós consistentes; e
2. Para qualquer etiqueta Xi-vi de qualquer variável Xi, e
para todas as restrições Rij, envolvendo as variáveis
Xi e Xj, deve existir um valor vj de suporte, isto é,
tal que a etiqueta composta {Xi-vi, Xj-vj} satisfaz a
restrição Rij.
41
Redução de Domínios
Exemplo: Após a enumeração da variável X1, com a escolha
de X1=1, a rede de restrições do problema das 4 rainhas, e
os domínios das suas variáveis são os seguintes:
X2 
1,2
X2 in 3,4
R24
R23
X3 in 2,4
R34
X4 in 2,3
X4 
1,4
X3 
1,3
1
1
1
1
1
1
X2 
1,2
X3 
1,3
X4 
1,4
No entanto a etiqueta X2-3 não tem suporte na variável X3,
já que nem a etiqueta composta {X2-3 , X3-2} nem a
etiqueta {X2-3 , X3-4} satisfazem a restrição R23.
Assim, o valor 3 pode ser removido do domínio de X2.
42
Redução de Domínios
Na realidade, nenhum dos valores de X3 tem suporte nas
variáveis X2 e X4! Com efeito,
1
1
1
1
1
1
X2 
1,2
X3 
1,3
X4 
1,4
• a etiqueta X3-4 não tem suporte na variável X2, já que
nenhuma das etiquetas {X2-3, X3-4} e {X2-4, X3-4}
satisfazem a restrição R23.
• a etiqueta X3-2 não tem suporte na variável X4, já que
nenhuma das etiquetas {X3-2, X4-2} e {X3-2, X4-3}
satisfazem a restrição R34.
43
Redução de Domínios
Como nenhum dos valores de X3 tem suporte nas variáveis
X2 e X4, a manutenção de arco deve tornar vazio o domínio
de X3!
1
1
1
1
1
1
X2 
1,2
X3 
1,3
X4 
1,4
Assim, a simples manutenção de consistência de arco não só
reduz o domínio das variáveis como também antecipa a
detecção de insatisfazibilidade.
Desta forma, o retrocesso de X1=1 pode ser iniciado, sem
se terem atribuído (e retrocedido) valores às restantes
variáveis, nomeadamente à variável X2.
44
Redução de Domínios
Manutenção de Consistência de Arcos
Um algoritmo muito simples para impôr a consistência de
arcos é o algoritmo AC-1, descrito abaixo
procedimento AC-1(V, D, R);
NC-1(V,D,R);
% impõe a consistência de nós
Q = {aij | Rij  R  Rji  R }; % ver nota
repetir
alterado <- falso;
para aij in Q fazer
alterado <- alterado ou rev_dom(aij,V,D,R)
fim para
até não alterado
fim procedimento
Nota: para Rij são considerados os arcos dirigidos aij e a ji
45
Redução de Domínios
Manutenção de Consistência de Arcos (cont.)
O predicado rev_dom(aij,V,D,R) sucede se eliminar valores
do domínio das variáveis (como um efeito lateral).
predicado rev_dom(aij,V,D,R): Booleano;
sucede <- falso;
para vi in dom(Xi) fazer
se não existir vj in dom(Xj)tal que
satisfaz({Xi-vi,Xj-vj},Rij) então
dom(Xi) <- dom(Xi) \ {vi};
sucede <- verdade;
fim se
rev_dom <- sucede;
fim predicado
46
Redução de Domínios
Complexidade temporal do algoritmo AC-1
Assumindo n variáveis no problema, cada com d valores
no seu domínio, e sendo os arcos em número de a, no pior
caso, o predicado rev_dom, verifica d2 pares de valores.
O número de arcos aij na fila Q é de 2a (para cada
restrição Rij são considerados arcos dirigidos aij e aji).
Por cada valor removido, rev_dom é chamado 2a vezes.
No pior caso, por cada ciclo é removido um valor de uma
só variável, pelo que o ciclo pode ser executado nd vezes.
Tendo em conta estes factores, a complexidade
temporal do AC-1 , no pior caso, é O( d2 * 2a * nd), i.e.
O(nad3)
47
Redução de Domínios
Complexidade espacial do algoritmo AC-1
O algoritmo AC-1 tem de manter uma fila Q, com
comprimento máximo de 2a. Assim a complexidade
espacial inerente do algoritmo AC-1 é O(a).
A este espaço há que acrescentar o espaço destinado à
representação dos domínios O(nd) e para representar as
restrições do problema. Existindo a restrições e d
valores no domínio de cada variável o espaço necessário é
de O(ad2), sendo o total de O(nd + ad2).
Para redes de restrições “densas”, a  n2/2. Pelo que
este termo domina a complexidade espacial total que é
O(ad2).
48
Redução de Domínios
Ineficiência do algoritmo AC-1
Cada vez que um valor vi é removido do domínio de uma
variável Xi, pelo predicado rev_dom(aij,V,D,R), todos os
arcos são reexaminados.
Na realidade, apenas os arcos aki (para k  i e k  j )
deveriam ser reexaminados.
Com efeito, a remoção de vi pode eliminar o suporte de
um valor vk de uma variável Xk para a qual existe uma
restrição Rki (ou Rik).
Essa ineficiência é eliminada no algoritmo AC-3.
49
Redução de Domínios
procedimento AC-3(V, D, R);
NC-1(V,D,R);
% impõe a consistência de nós
Q = {aij | Rij  R  Rji  R };
enquanto Q   fazer
Q = Q \ {aij}
% remove um elemento de Q
se rev_dom(aij,V,D,R) então
Q = Q  {aki | Rki  R  k  i  k  j}
até não alterado
fim procedimento
Como é intuitivo, e para além de uma melhor complexidade
típica, a complexidade para o pior caso do algoritmo AC-3 é
melhor que a do AC-1.
50
Redução de Domínios
Complexidade temporal do algoritmo AC-3
Cada arco aki só é inserido quando um valor vi é eliminado
do domínio de Xi.
No total, cada um dos 2a arcos pode ser inserido (e
removido) d vezes da fila Q.
Cada vez que é removido um arco, é chamado o predicado
rev_dom, que verifica no máximo d2 pares de valores.
Tendo em conta todos estes, e em contraste com o
algoritmo AC-1 de complexidade temporal O(nad3), a
complexidade temporal do algoritmo AC-3, pior caso, é
O(2ad * d2), ou seja
O(ad3)
51
Download

6 - SSDI