X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
ALGORITMOS DISTRIBUÍDOS DE
EMPARELHAMENTO MÁXIMO EM GRAFOS UMA AVALIAÇÃO EXPERIMENTAL
Anna Dolejsi Santos, Ariel A. Fonseca, Gabriel Argolo M. R., Lúcia M. A. Drummond,
Melba L. Gorza, Rafael M. Savelli
{annads, afonseca, grocha, lucia, mgorza, rsavelli}@ic.uff.br
Instituto de Computação
Universidade Federal Fluminense
Resumo
Neste trabalho foram implementados e avaliados experimentalmente dois algoritmos distribuídos aproximados que solucionam o problema de emparelhamento de peso máximo. Eles foram
propostos e analisados teoricamente por Wattenhofer et al. e Hoepman. O primeiro emprega um
modelo síncrono e o segundo um modelo assíncrono. Como utilizamos um ambiente assíncrono
real com MPI para troca de mensagens, o primeiro algoritmo precisou ser modificado para executar
em tal ambiente. Para as instâncias utilizadas nos experimentos, observamos que os algoritmos distribuídos apresentaram, na prática, resultados bem melhores do que os determinados teoricamente.
Além disso, através da comparação com as soluções exatas, obtidas do algoritmo seqüencial proposto por Gabow, verificamos que esses mostraram-se como uma boa alternativa.
Palavras-chave:
Problema de Emparelhamento, Algoritmo Distribuído, Algoritmo Aproximado
Abstract
In this work we implemented and experimentally evaluated two distributed approximation algorithms for solving the maximum weighted matching problem. They were proposed and theoretically
analyzed by Wattenhofer et al. and Hoepman, the former adopts a synchronous model while the
second an asynchronous one. As we used an asynchronous real environment employing MPI for
message passing, the first one had to be changed to be executed in such environment. Regarding the
instances used in the experiments, we observed that distributed algorithms show in practice better
results than the theoretical ones. Furthermore, through comparison with the exact solutions, yielded
by the Gabow´s sequential algorithm, we verified they represent a promising alternative.
Keywords:
Matching Problem, Distributed Algorithm, Approximation Algorithm
XXXIX SBPO
[1771]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
1
Introdução
Um emparelhamento M (G) de um grafo G = (V, E), onde V representa o conjunto de vértices
e E representa o conjunto de arestas, é dado por um subconjunto de arestas E(G) que não possuem
extremidades em comum. Um grafo cujas arestas possuem um peso associado é denominado grafo
com peso. Assim, o peso de um emparelhamento é dado pela soma dos pesos de suas arestas.
Um emparelhamento M (G) de G possui peso máximo quando seu peso é o maior dentre todos os
emparelhamentos obtidos a partir do grafo G.
A técnica de emparelhamento é utilizada em aplicações de diferentes áreas do conhecimento.
Suas aplicações mais comuns são nos problemas de atribuições pessoais (tarefas e competências) e
de escalonamento. Ela é usada também em redes ópticas como em [NPZ03], onde o autor soluciona
o problema de maximização do número de pedidos atendidos utilizando emparelhamento. Esta técnica também é aplicada na estratégia para consultas em datawarehouse [MGR02], e para solucionar
o mapeamento de seqüências em uma estrutura protéica [Tay02].
Existem, na literatura, diversas soluções para o problema de emparelhamento de peso máximo
que apresentam algoritmos seqüenciais, tais como [Edm65a], [Edm65b], [Gab90], [GT91], [Gab76]
e [GMG86]. Poucos estudos foram propostos utilizando uma abordagem distribuída. Alguns algoritmos distribuídos trabalham com grafos que não associam pesos às arestas, como em [KS00],
[CHS02] e [II86]. Em [KS00], Karaata e Saleh apresentam um algoritmo para emparelhamento máximo em árvores com complexidade de tempo O(|V |4 ). Um algoritmo distribuído determinístico
para grafos bipartidos e gerais é apresentado em [CHS02]. O algoritmo para grafos bipartidos executa em tempo linear e o algoritmo para grafos gerais apresenta complexidade de tempo O(|V |2 ).
Um algoritmo randômico foi proposto em [II86], com complexidade de tempo O(log|V |).
Considerando grafos com peso, Uehara e Chen [UC00] apresentaram um algoritmo distribuído com complexidade de tempo O(∆), onde ∆ é o grau máximo do grafo. Wattenhofer et al.
[WW04] propôs um algoritmo distribuído 5-aproximado com complexidade de tempo O(log 2 |V |).
Em [Hoe04], Hoepman apresentou uma variação do algoritmo seqüencial guloso de [Pre99], 2aproximado e com complexidade de tempo O(|E|).
Verificamos que os algoritmos distribuídos existentes para grafos com peso apresentam soluções
aproximadas e, além disso, os resultados descritos são apenas teóricos. A complexidade de tempo
determinada em [WW04] e [Hoe04] não implica que os algoritmos consomem esse tempo todo,
apenas quer indicar que não consomem mais do que esse tempo. Na verdade, na prática, o tempo
de execução possivelmente é muito menor. Do nosso conhecimento, esses algoritmos são os que
resolvem o problema de emparelhamento de peso máximo de forma distribuída com as menores
complexidades.
Implementamos os algoritmos descritos em [WW04] e [Hoe04] em um ambiente distribuído
real usando MPI [BDV94] para a troca de mensagens. O primeiro emprega um modelo síncrono
e o segundo um modelo assíncrono. Como utilizamos um ambiente assíncrono real, o primeiro
algoritmo precisou ser modificado para executar em tal ambiente. Utilizamos, nos nossos experimentos, as instâncias de grafos da biblioteca TSPLIB [TSP95] e comparamos a qualidade das
soluções desses algoritmos com as do algoritmo seqüencial exato proposto por Gabow [Gab73].
Também avaliamos o tempo de execução e o número de mensagens trocadas, comparando-os com
as correspondentes complexidades de tempo e mensagens.
O restante do artigo está organizado da seguinte forma: na Seção 2 temos as descrições dos
algoritmos distribuídos propostos em [WW04] e [Hoe04] e do algoritmo seqüencial exato introduzido por Gabow [Gab73]. Na Seção 3 são apresentados os resultados experimentais, o ambiente de
testes e os grafos utilizados nos experimentos. Finalmente, a Seção 4 conclui este trabalho.
XXXIX SBPO
[1772]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
Procedimento Emparelhamento-Grafo (G) : M
G(1) := G, MG := 0;
para (i de 1 até log n passo 1) faça
(1)
Hi := Validação (G(i) );
(i)
G(i+1) := G(1) ;
Hi
j := 1;
enquanto (dH (j) (u) > 0) faça
(j+1)
(j)
(j)
(Hi
, MH ) := Emparelhamento-Uniforme(Hi );
(j)
MG := MG U MH ;
j := j + 1;
fim-enquanto;
remove todas as arestas adjacentes a MG de G(i+1)
fim-para;
retorne MG
Figura 1: Procedimento Principal do Algoritmo de Wattenhofer
2
2.1
Algoritmos para emparelhamento de peso máximo em grafos gerais
Algoritmo distribuído randômico de Wattenhofer et al.
O algoritmo randômico de Wattenhofer et al. é síncrono, 5-aproximado, possui complexidade de
tempo O(log2 |V |) e de mensagem O(|V |2 log2 |V |). Um algoritmo síncrono é aquele que possui
uma base de tempo global, ou seja, no intervalo de tempo (denominado pulso) p = 0, o vértice envia mensagens a seus vizinhos e no pulso p ≥ 1 todas as mensagens enviadas no pulso anterior são
recebidas e os vértices podem processá-las e enviar novas mensagens. Desta forma, a comunicação
é realizada em pulsos e os atrasos durante a transmissão e as perdas das mensagens são desprezados.
Isto torna o desenvolvimento dos algoritmos mais simples, porém esse modelo é menos realístico.
Para ser utilizado em nossos testes, este algoritmo teve que ser adaptado para um ambiente assíncrono real, o que introduziu novas mensagens. Desta forma, sempre que um vértice precisa enviar
uma informação para um conjunto limitado de vizinhos, os vizinhos que não pertencem ao conjunto
devem receber uma mensagem de controle (nova mensagem criada para ambiente assíncrono).
O algoritmo é composto por duas fases principais, denominadas validação e emparelhamento
maximal, que são executadas log n vezes. Sua entrada é composta por um grafo G = (V, E) e a
cada iteração são executadas as duas fases citadas anteriormente, gerando um novo subgrafo que
será utilizado na próxima iteração. Após a execução das log n iterações têm-se o emparelhamento
M (G) do grafo G. O procedimento principal do algoritmo, na sua versão síncrona, é apresentado
na Figura 1.
A fase de validação funciona da seguinte maneira: na fase i do algoritmo é gerado um subgrafo Hi de G(i) , onde G(i) = G quando i = 1, ou seja, na primeira fase, que é composto por
todas as arestas candidatas válidas de G(i) . Uma aresta e = (u, v) é uma candidata se seu peso,
w(e), for maior ou igual à metade do peso da aresta mais pesada incidente ao vértice u, ou seja,
w(e) ≥ 21 .wmax (u)E . Uma aresta e será uma candidata válida apenas se ela for candidata para
ambos vértices u e v. A fase de validação é descrita na Figura 2. Note que no modelo síncrono,
apresentado em [WW04], a mensagem “you are a candidate” será enviada para um vértice selecionado como candidato. Na versão assíncrona proposta neste trabalho, mesmo quando o vértice não
é um candidato, este deve receber uma mensagem com a indicação “you are not a candidate”. Esta
adaptação torna possível a execução dos experimentos em um ambiente real. O subgrafo Hi gerado
na primeira fase do algoritmo será a entrada para a segunda fase que é denominada emparelhamento
XXXIX SBPO
[1773]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
Procedimento Validação (G(i) ) : H
(i)
VH := VG ; EH := {};
S := {v | e = {u, v} ² G(i) , w(e) ≥ 12 .wmax (u)E (i) }
G
para todo vértice v ² S faça
envie mensagem “you are a candidate” para o vértice v;
fim-para;
receba mensagem de todos os vizinhos de v em G(i) ;
se (recebeu mensagem “you are a candidate” do vértice v ² S) então
EH := EH U {u, v}
fim-se;
retorne H
Figura 2: Fase de Validação
(j)
Procedimento Seleção (H (j) ) : HS
(j)
(j)
(j)
VHS := VH ; EHS := {}
(j)
escolha aleatoriamente uma aresta e = {u, v}, e ² EH , chame a aresta e por chosen;
(j)
(j)
EHS := EHS U {e};
envie mensagem “you are chosen” para o vértice v;
receba mensagem de todos os vizinhos w em H (j) ;
se (recebeu mensagem do vértice w) então
(j)
(j)
EHS := EHS U {u, v}; chame a aresta {u, w} por imposed;
fim-se;
(j)
retorne HS
Figura 3: Subfase de Seleção
maximal. Esta fase é composta pelas seguintes subfases: seleção, eliminação, emparelhamento e
limpeza.
Na subfase de seleção, cada vértice u escolhe aleatoriamente uma aresta e = (u, v) do conjunto
Hi (gerado a partir da fase anterior) denominando-a chosen. Após esta seleção, o vértice u envia
uma mensagem para o vértice v informando que ele foi escolhido, e recebe todas as mensagens dos
vértices w que o escolheram, marcando então as arestas e = (u, w) como imposed. As arestas chosen e imposed são adicionadas ao conjunto das arestas selecionadas HS . Nesta subfase também foi
inserida uma nova mensagem para a versão assíncrona do algoritmo: “not chosen”. A mensagem
“chosen” é enviada para um vértice escolhido aleatoriamente e a “not chosen” é enviada para os
demais vértices. A Figura 3 mostra o procedimento de seleção.
Na subfase de eliminação, uma aresta imposed é escolhida aleatoriamente do conjunto HS
e incluída no novo conjunto HP . Após isso, são adicionadas ao conjunto HP todas as arestas
e = (u, w) cujo vizinho w em HS enviou uma mensagem para o vértice u. A aresta chosen existente
em HS também é inserida no conjunto HP . A subfase de eliminação é descrita na Figura 4. A nova
mensagem “not imposed”, inserida na versão assíncrona do algoritmo, é enviada para todos os
vértices cujas arestas não foram selecionadas.
Na subfase de emparelhamento, uma aresta e = (u, v) é escolhida aleatoriamente em HP e
uma mensagem é enviada ao vértice v informando que ele foi escolhido como parceiro de emparelhamento. Caso o vértice u receba a mesma mensagem do vértice v, então o vértice u também
foi escolhido pelo vértice v para o emparelhamento, e assim, a aresta e = (u, v) será colocada no
conjunto das arestas emparelhadas M (G). A subfase de emparelhamento é apresentada na Figura
XXXIX SBPO
[1774]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
(j)
Procedimento Eliminação (HS ) : P (j)
(j)
(j)
(j)
VP := VHS ; EP := {};
escolha aleatoriamente uma aresta imposed e = {u, v};
envie mensagem “this edge is in P (j) ” para o vértice v;
(j)
(j)
EP := EP U {e};
(j)
receba mensagem de todos os vizinhos w em HS ;
se (recebeu mensagem do vértice w) então
(j)
(j)
EP := EP U {u, w};
fim-se;
retorne P (j)
Figura 4: Subfase de Eliminação
(j)
Procedimento Emparelhamento (P (j) ) : MG
(j)
MG := {};
escolha aleatoriamente uma aresta incidente e = {u, v} em P (j) ;
envie mensagem “you are my matching partner” para o vértice v;
receba mensagem de todos os vizinhos w em P (j) ;
se (recebeu mensagem do vértice v) então
(j)
(j)
MG := MG U {e};
fim-se;
(j)
retorne MG
Figura 5: Subfase de Emparelhamento
Procedimento Limpeza (H (j) ) : H (j+1)
H (j+1) := H (j)
(j)
(j)
remova todas as arestas e ² MH de H (j+1) , EH (j+1) := EH \EM (j)
(j)
H
remova todas as arestas adjacentes a uma aresta em MH de H (j+1) ;
(j)
EH (j+1) := EH (j+1) \{e | e é adjacente em MH };
Retorne H (j+1)
Figura 6: Subfase de Limpeza
5. Observamos que no modelo síncrono, descrito em [WW04], a mensagem “you are my matching
partner” nem sempre é enviada. Na versão assíncrona, mesmo quando o vértice não é um candidato a emparellhamento, este deve receber uma mensagem com uma indicação “you are not my
matching partner”.
A última etapa é a execução da subfase de limpeza, onde todas as arestas existentes no emparelhamento M (G) e todas as arestas adjacentes a uma aresta em M (G) são removidas do conjunto
Hi . O procedimento de limpeza é descrito na Figura 6. Foram inseridas as mensagens “matching”
e “not matching”, na versão assíncrona do algoritmo. A mensagem “matching” é enviada por um
vértice a todos os outros quando este encontra-se emparelhado, caso contrário ele envia a mensagem
“not matching”.
O novo subgrafo gerado após a execução das duas fases de validação e emparelhamento maximal é usado como entrada para as mesmas. Este procedimento é repetido log n vezes.
XXXIX SBPO
[1775]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
R := {}
N := T (v )
c := candidato(v, N )
se c # {} então envie mensagem “req” para o vértice c
enquanto N # {} faça
receba mensagem m de u
se m = “req” então R := R U {u}
se m = “drop” então N := N \{u}
se u = c então c :=candidato(v, N )
se c # {} então envie mensagem “req” para c
se c # {} ∧ c ² R então para todo w ² N \{c} envie mensagem “drop” para w
N := {}
{se c # {} então (v, c) ² M }
Figura 7: Algoritmo Distribuído Guloso
2.2
Algoritmo distribuído guloso de Hoepman
Este algoritmo é uma derivação do algoritmo seqüencial proposto em [Pre99]. Ele é 2-aproximado e possui complexidades de tempo O(|E|) e de mensagens O(|V |).
O algoritmo funciona da seguinte maneira: inicialmente todos os vértices constroem um conjunto que incluem todos os seus vizinhos. Cada vértice seleciona a aresta incidente de maior peso
e envia uma mensagem “req” ao vizinho. Quando um vértice recebe uma mensagem “req” do
vizinho para o qual já tinha enviado a mesma mensagem, a aresta é marcada como pertencente ao
emparelhamento e ele envia a mensagem “drop” para todas as outras arestas incidentes. Ao receber
uma mensagem “drop” de um vizinho para o qual tinha enviado “req”, o vértice seleciona outro
vizinho cuja aresta incidente possui o maior peso, e repete os passos anteriores. O algoritmo termina a execução em cada vértice quando este já emparelhou ou não tem mais vizinhos para tentar
emparelhar. A Figura 7 apresenta o algoritmo.
2.3
Algoritmo seqüencial exato de Gabow
O algoritmo proposto em [Gab73] é uma implementação eficiente do algoritmo de Edmonds
[Edm65b], que é baseado no algoritmo de emparelhamento de cardinalidade máxima descrito em
[Edm65a]. O primeiro possui complexidade de tempo O(|V |3 ), enquanto o algoritmo apresentado
em [Edm65b] possui complexidade O(|V |4 ). O algoritmo constrói um emparelhamento inicial
aplicando o método guloso. Os vértices desemparelhados são chamados livres. Para cada vértice
livre é construída uma árvore de caminhos alternantes, ou seja, caminho composto por uma aresta
desemparelhada seguido por outra emparelhada. O emparelhamento do grafo é aumentado quando
um caminho aumentante é encontrado, ou seja, quando a árvore construída alcança um novo vértice
livre. Quando não existirem vértices livres no grafo modificado então o algoritmo é finalizado.
Para detectar caminhos alternantes de peso máximo, o algoritmo realiza transformações no peso
dos vértices durante a busca de caminhos aumentantes. Devido ao limite do número de páginas,
nós apresentamos somente uma breve descrição do algoritmo. Maiores detalhes são encontrados
em [Gab73].
3
Resultados Experimentais
Nesta seção são apresentados os resultados dos experimentos realizados em um ambiente real
utilizando os algoritmos descritos na seção anterior. Os grafos utilizados nos testes foram obtidos
XXXIX SBPO
[1776]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
Host
Máquina 1
Máquina 2
Máquina 3
Máquina 4
Máquina 5
Processador
Pentium 4 2.8Ghz
Pentium 4 2.8Ghz
Pentium 4 2.8Ghz
AMD Athlon 1.4Ghz
AMD Athlon 1.4Ghz
Memória
512MB
512MB
512MB
256MB
256MB
Kernel
Fedora Core 2 kernel 2.6.8-1
Fedora Core 2 kernel 2.6.8-1
Fedora Core 2 kernel 2.6.8-1
Fedora Core 4 kernel 2.6.9-1
Fedora Core 4 kernel 2.6.15-1
Mpilam
7.0.4
7.0.4
7.0.4
7.0.6
7.0.6
Tabela 1: Configuração das Máquinas
Figura 8: Competitividade x Tamanho do Grafo
da biblioteca TSPLIB [TSP95].
O ambiente de testes utilizado é composto por cinco máquinas heterogêneas não dedicadas,
com sistema operacional Linux, utilizando o middleware MPILAM [BDV94] para troca de mensagens. A configuração das máquinas é mostrada na Tabela 1. Os grafos utilizados possuem entre
14 e 318 vértices. Para cada vértice foi criado um processo no ambiente MPI. Três critérios foram
utilizados para avaliação dos algoritmos: a qualidade da solução, ou seja, o peso máximo obtido no
emparelhamento, o tamanho da maior cadeia causal de mensagens enviadas e o número de mensagens trocadas. A definição de cadeia causal de mensagens pode ser entendida como uma seqüência
de mensagens do tipo “recebi uma mensagem e enviei outra em conseqüência”. Essa medida foi
utilizada para analisarmos o tempo global dos algoritmos distribuídos assíncronos desenvolvidos.
Foram realizadas três execuções para cada grafo. Como o tempo de execução considerado é o
tamanho da cadeia causal, não faz diferença o sistema estar dedicado.
Como o algoritmo em [Gab73] é seqüencial, apenas o primeiro critério pôde ser contabilizado.
Apesar do algoritmo [WW04] não garantir o término de sua execução, todos os casos testados
apresentaram uma solução.
Na Tabela 2, a primeira coluna descreve o nome da instância TSPLIB utilizada com o número
de vértices de cada grafo, nas colunas seguintes são apresentados o custo do emparelhamento, o número de mensagens e o tamanho da maior cadeia causal. O custo do emparelhamento é apresentado
para os três algoritmos. Utilizamos o resultado do algoritmo ótimo seqüencial como referência para
análise da qualidade das soluções dos algoritmos distribuídos. O número de mensagens e tamanho
da maior cadeia causal só fazem sentido para os algoritmos distribuídos.
Observamos que os algoritmos distribuídos apresentaram, para as instâncias testadas, um bom
desempenho quando comparados com o algoritmo seqüencial ótimo de Gabow [Gab73]. O algo-
XXXIX SBPO
[1777]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
Figura 9: Tamanho da Cadeia Causal x Tamanho do Grafo
ritmo de Hoepman [Hoe04] alcançou, em média, 98, 77% do emparelhamento obtido pelo algoritmo ótimo. Já o algoritmo de Wattenhofer [WW04] obteve, em média, 91, 07% do emparelhamento ótimo. Note que o algoritmo de Hoepman é 2-aproximado e o algoritmo de Wattenhofer
é 5-aproximado. Utilizamos a “competitividade”, a razão entre o custo da solução obtida com o
algoritmo distribuído e o custo da solução ótima obtida pelo algoritmo seqüencial, para comparar
a qualidade das soluções dos dois algoritmos distribuídos. A Figura 8 apresenta a competitividade
em relação ao tamanho do grafo.
A Figura 9 mostra o tamanho da maior cadeia causal dos algoritmos distribuídos em relação ao
número de vértices dos grafos. Durante a realização dos testes não observamos variações na cadeia
causal superiores a 5%. Verificamos que o algoritmo proposto por Hoepman possui tamanho da
maior cadeia causal ascendente de acordo com o aumento do número de vértices do grafo.
O tempo de execução do algoritmo foi proporcional a |V | e a complexidade de tempo é O(|E|).
Como as instâncias utilizadas nos testes são grafos completos, é possível concluir que o tempo de
execução é bem menor do que a complexidade correspondente. Nos experimentos realizados com
o algoritmo de Wattenhofer, o tempo de execução obtido foi praticamente constante enquanto a
complexidade é O(log2 |V |).
A complexidade de tempo do algoritmo de Hoepman é pior do que a do algoritmo de Wattenhofer devido à quantidade de candidatos selecionados a emparelhar a cada iteração. No algoritmo de
Wattenhofer, um vértice seleciona os candidatos baseado no peso das arestas, ou seja, uma aresta
e = (u, v) é candidata se seu peso é maior ou igual à metade do peso da aresta mais pesada incidente ao vértice u. Assim, a cada iteração, pode-se ter mais de uma aresta candidata a emparelhar.
Já no algoritmo de Hoepman, apenas um vértice é escolhido, a cada iteração, como candidato a
emparelhar. A Figura 10 mostra o número de mensagens enviadas durante a execução em relação
ao tamanho do grafo.
Percebemos que, ao contrário do comportamento visto em relação à cadeia causal, o número
de mensagens enviadas pelo algoritmo de Wattenhofer cresce consideravelmente à medida que o
número de vértices do grafo aumenta. Isso acontece devido ao processo de seleção das arestas
candidatas, ao refinamento da solução final de emparelhamento e também pela inserção de novas
mensagens para a execução em um ambiente assíncrono real. Porém, no caso do algoritmo de
Hoepman cada vértice envia apenas uma mensagem a cada iteração do algoritmo, que é enviada
para o vértice vizinho conectado pela aresta de maior peso. Nos experimentos realizados, o número
de mensagens trocadas nas execuções dos algoritmos distribuídos foi proporcional a |V |2 , enquanto
XXXIX SBPO
[1778]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
Grafo
burma14.tsp
ulysses16.tsp
ulysses22.tsp
Bayg29.tsp
swiss42.tsp
att48.tsp
eil51.tsp
berlin52.tsp
brazil58.tsp
st70.tsp
eil76.tsp
pr76.tsp
gr96.tsp
Rat99.tsp
kroA100.tsp
kroB100.tsp
kroC100.tsp
kroD100.tsp
kroE100.tsp
rd100.tsp
eil101.tsp
Lin105.tsp
pr107.tsp
pr124.tsp
bier127.tsp
ch130.tsp
pr136.tsp
gr137.tsp
pr144.tsp
ch150.tsp
kroA150.tsp
kroB150.tsp
pr152.tsp
U159.tsp
Rat195.tsp
D198.tsp
kroA200.tsp
kroB200.tsp
gr202.tsp
ts225.tsp
Tsp225.tsp
pr226.tsp
gr229.tsp
pr264.tsp
A280.tsp
pr299.tsp
lin318.tsp
linhp318.tsp
Gabow
4616
8255
11048
3311
3342
35190
1167
19856
96245
2660
1789
408076
270994
6136
126668
123566
127368
118732
128225
40984
2467
89421
462834
517712
420323
33713
623442
470823
600950
39255
191015
192662
747931
333213
16693
129823
254443
245530
182690
1163762
29680
1280811
1006093
909952
25291
565536
430187
430187
Emparelhamento
Hoepman Wattenhofer
4488
4366
8092
8071
10837
9898
3244
3091
3273
3044
34239
32342
1162
1053
19079
17836
89661
84411
2634
2372
1775
1607
402127
380221
266890
251286
6110
5791
124874
119275
122162
112182
125611
119128
117275
112111
126903
118562
40138
36572
2438
2257
88716
84388
462431
421297
498818
467284
411681
390341
33127
30954
617764
555630
465803
451618
590380
517346
39029
34750
189272
178200
190413
182230
739398
673527
328994
300557
16671
15808
127525
122843
252709
237089
243701
227994
178698
171483
1163758
1048022
29469
27448
1261340
1137336
988532
904838
906478
821930
25178
23473
560857
544669
426505
387488
426505
396514
Mensagem
Hoepman Wattenhofer
215
740
299
1079
552
2636
924
4322
1970
8612
2545
11410
2780
10248
3009
12250
3734
15219
5239
25962
6228
26838
6289
24437
9830
42820
10759
40568
10896
46928
10887
45827
10853
44156
10853
51922
10862
49244
10575
48189
10933
48522
12225
51570
12299
57838
16721
76835
17828
78662
18109
74942
19718
89072
20679
84490
22383
106071
23847
104547
24284
103306
24287
105836
25280
107741
26995
116802
41138
172472
44138
219736
42811
187260
42793
182732
44032
230884
53686
247296
54414
216888
55178
257352
56175
253110
74350
363560
83297
391845
96771
396634
107207
466996
107161
477682
Cadeia Causal
Hoepman Wattenhofer
16
17
17
22
23
27
32
22
53
36
56
36
55
23
58
37
62
41
73
27
80
35
80
38
112
35
102
32
106
36
109
36
124
32
110
40
114
32
108
36
108
29
121
47
121
33
162
35
156
41
141
33
139
29
154
43
161
33
160
33
178
33
185
29
173
36
183
39
235
30
243
47
219
40
237
34
225
50
270
38
277
37
279
36
252
44
295
39
311
41
362
48
345
53
356
48
Tabela 2: Resultados dos Algoritmos Distribuídos e do Algoritmo Seqüencial
XXXIX SBPO
[1779]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
Figura 10: Número de Mensagens x Tamanho do Grafo
Figura 11: Comparação por Tipo de Mensagem do Algoritmo de Hoepman
que os resultados teóricos apresentam complexidades de mensagem O(|V |2 ) e O(|V |2 log2 |V |)
para os algoritmos de Hoepman e Wattenhofer, respectivamente. Ou seja, mesmo com a introdução
de novas mensagens no algoritmo de Wattenhofer, o número de mensagens trocadas foi menor do
que a complexidade descrita. Apresentamos nas Figuras 11 e 12 o percentual dos diferentes tipos
de mensagens enviadas por cada um dos algoritmos distribuídos.
O algoritmo de Hoepman possui dois tipos de mensagens, “req” e “drop”. Foram utilizadas três
instâncias da TSPLIB, que contém respectivamente 48, 150 e 318 vértices. Elas foram utilizadas por
possuírem um número pequeno, médio e grande de vértices. Nota-se que o número de mensagens
do tipo “drop” é muito maior que as do tipo “req”. Isto ocorre, pois cada vértice envia apenas uma
mensagem “req” a cada iteração, ou seja, o número de mensagens “req” que cada vértice envia
pode ser no máximo, o número de vizinhos do mesmo. Por outro lado, ao emparelhar, o vértice
envia uma mensagem “drop” para cada um de seus vizinhos. Para melhorar a complexidade de
mensagens deste algoritmo deve-se diminuir o número de mensagens “drop” enviadas.
A Figura 12 mostra a comparação entre os tipos de mensagens trafegadas no algoritmo de
Wattenhofer. Foram usadas as mesmas três instâncias descritas na Figura 11. Verificamos que as
mensagens “matching” e “not_matching” são predominantes, sendo que elas não existem no algoritmo síncrono original e foram introduzidas nos experimentos para execução em um ambiente
assíncrono real. A predominância dessas mensagens deve-se ao fato do algoritmo utilizar um refinamento do grafo para realizar o emparelhamento, que é feito durante a subfase de limpeza. Nesta
subfase cada vértice envia mensagens aos vizinhos informando se ele emparelhou ou não. O vértice
que não emparelhou deve participar do refinamento da próxima iteração. O algoritmo [WW04] foi
executado três vezes para cada instância de grafo resultando em uma variação em torno de 6% entre
os emparelhamentos obtidos.
XXXIX SBPO
[1780]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
Figura 12: Comparação por Tipo de Mensagem do Algoritmo de Wattenhofer
4
Conclusões
Neste trabalho, observamos que os algoritmos distribuídos apresentaram na prática resultados
bem melhores do que os determinados teoricamente. O algoritmo proposto por Hoepman apresentou melhores resultados do que o algoritmo distribuído randômico de Wattenhofer. Considerando a
qualidade da solução, o algoritmo de Hoepman alcançou, em média, 98, 77% do emparelhamento
obtido pelo algoritmo ótimo. Já o algoritmo de Wattenhofer obteve, em média, 91, 07% do emparelhamento ótimo. O tempo de execução do algoritmo de Hoepman verificado experimentalmente
foi proporcional a |V |, enquanto a complexidade é O(|E|). Nos experimentos realizados com o
algoritmo de Wattenhofer obtivemos tempo de execução praticamente constante enquanto a complexidade é O(log2 |V |). Ao analisarmos a quantidade de mensagens trocadas pelo algoritmo de
Hoepman, verificamos que os resultados obtidos experimentalmente corresponderam à medida teórica O(|V |2 ). No algoritmo de Wattenhofer, tivemos que introduzir novas mensagens para adaptar
o algoritmo síncrono ao ambiente assíncrono real. Mesmo com esta adaptação, o número de mensagens trocadas nas execuções foi proporcional a |V |2 enquanto a complexidade é O(|V |2 log2 |V |).
Os algoritmos distribuídos para o problema de emparelhamento de peso máximo na prática se
mostraram uma boa alternativa, nas instâncias testadas, em relação ao método seqüencial, considerando que produziram soluções de boa qualidade em tempos razoáveis. Como continuação desse
trabalho, estamos desenvolvendo um algoritmo distribuído para fornecer a solução exata para este
problema.
Referências
[CHS02] Chattopadhyay, Subhendu; Higham, Lisa; Seyffarth, Karen (2002). Dynamic and selfstabilizing distributed matching. In Proceedings of the Annual ACM Symposium on Principles
of Distributed Computing (PODC), 290-297.
XXXIX SBPO
[1781]
X X X I X SBPO
28 a 31/08/07 Fortaleza, CE
A Pesquisa Operacional e o Desenvolvimento Sustentável
[Edm65a] Edmonds, Jack (1965). Paths, trees and flowers. Canadian Journal of Mathematics, 17,
449-467.
[Edm65b] Edmonds, Jack (1965). Maximum matching and a polyhedron with 0,1 - vertices. Journal of Research of the National Bureau of Standards, 69B, 125-130.
[Gab73] Gabow, Harold (1973). Implementation of algorithms for maximum matching on nonbipartite graphs. Tese de Doutorado Comput. Sci. Dep., Stanford University.
[Gab76] Gabow, Harold (1976). An efficient implementation of Edmonds’ algorithm for maximum
matching on graphs. J. Assoc. Comput. Mach., 23(2), 221-234.
[Gab90] Gabow, Harold (1990). Data structures for weighted matching and nearest common ancestors with linking. In Proceedings of First Annual ACM-SIAM Symposium on Discrete Algorithms, SODA, 434-443.
[GT91] Gabow, Harold; Tarjan, Robert E. (1991). Faster scaling algorithms for general graph matching problems. Journal of the ACM, 38(4), 815-853.
[GMG86] Galil, Zvi; Micali, Silvio; Gabow, Harold (1986). An O(EVlog V ) algorithm for finding
a maximal weighted matching in general graphs. SIAM J. Comput., 15(1), 120-130.
[Hoe04] Hoepman, Jaap-Henk (2004). Simple distributed weighted matchings. eprint
cs.DC/0410047.
[II86] Israeli, Amos; Itai, Alon (1986). A fast and simple randomized parallel algorithm for maximal matching. Information Processing Letters, 22, 77-80.
[KS00] Karaata, Mehmet; Saleh, K. (2000). A distributed self-stabilizing algorithm for finding
maximal matching. Computer Systems Science end Engineering, 3, 175-180.
[MGR02] Melnik, Sergey; Garcia-Molina, Hector; Rahm, Erhard (2002). Similarity flooding: a
versatile graph matching algorithm and its application to schema matching. In Proceedings of
the IEEE CS International Conference on Data Engineering, 117-140.
[NPZ03] Nomikos, Christos; Pagourtzis, Aris; Zachos, Stathis (2003). Satisfying a maximum number of pré-routed requests in all-optical ring. Computer Networks, 42, 55-63.
[Pre99] Preis. Robert (1999). Linear time 21 approximation algorithm for maximum weighted matching in general graphs. Symposium on Theoretical Aspects of Computer Science. STACS 99,
LNCC 1563, Springer, 259-269.
[Tay02] Taylor, William (2002). Protein structure comparison using bipartite graph matching and
its application to protein structure classification. Molecular & Cellular Proteomics 1(4), 334339.
[TSP95] Reinelt, Gerhard (1995). http://elib.zib.de/pub/mp-testdata/tsp/tsplib/tsplib.html
[UC00] Uehara, Ryuhei; Chen, Zhi-Zhong (2000). Parallel approximation algorithms for maximum weighted matching in general graphs. Information Processing Letters, 76, 13-17.
[WW04] Wattenhofer, Mirjam; Wattenhofer, Roger (2004). Distributed weighted matching. In:
18th DISC, LNCS 3274, Springer, 335-348
XXXIX SBPO
[1782]
Download

algoritmos distribuídos de emparelhamento máximo em grafos