Acessibilidade / Reportar erro

Um algoritmo construtivo baseado em uma abordagem algébrica do problema quadrático de alocação

Resumos

O Problema Quadrático de Alocação, PQA, foi estudado utilizando uma abordagem algébrica através de uma relaxação linear, o Problema de Alocação Linear, PAL. A utilização dessa abordagem se deve ao fato de existir na literatura o Teorema das Inversões demonstrado por Rangel em [Ran00] que associa o custo de uma solução do PQA ao número de inversões de sua correspondente linear no PAL. Embora seja polinomial o reconhecimento de uma solução linear viável para o PQA, caracterizar no conjunto de todas as soluções do PAL quais são as que satisfazem o PQA é uma tarefa extremamente difícil. Neste trabalho construímos uma matriz que armazena informações de soluções lineares capazes de gerar soluções quadráticas. Combinando esse mapeamento com o Teorema das Inversões apresentamos um método construtivo que gera soluções iniciais de boa qualidade. A grande vantagem dessa matriz é que seu custo computacional e gasto de memória são baixos. Propomos também uma versão paralela deste algoritmo.

problema quadrático de alocação; problema de alocação linear; teorema das inversões


The Quadratic Assignment Problem, QAP, was studied using an algebraic approach through a linear relaxation, the Linear Assignment Problem, LAP. The reason for this approach is the Inversion Theorem demonstrated by Rangel [Ran00]. In this theorem, the QAP solution cost is associated to the number of inversions of the linear correspondent. Although recognizing if a linear solution correspond to a QAP solution is polynomial, there are much more LAP solutions than QAP solutions, and therefore to find them is a hard work. We construct a matrix that stores information about LAP solutions that are able to generate QAP solutions. The Inversion Theorem in conjuction with this matrix permitted us to present a constructive method that generates good initial solutions. The great advantage of this matrix is the low computational cost of time and memory. A parallel version of this algorithm is proposed and implemented in this work.

quadratic assignment problem; linear assignment problem; inversion theorem


Um algoritmo construtivo baseado em uma abordagem algébrica do problema quadrático de alocação

Leandro Colombi ResendoI, * * Corresponding author / autor para quem as correspondências devem ser encaminhadas ; Maria Cristina RangelII

IDepartamento de Engenharia Elétrica / CT Universidade Federal do Espírito Santo (UFES) Vitória – ES lresendo@yahoo.com.br

IIDepartamento de Informática / CT Universidade Federal do Espírito Santo (UFES) Vitória – ES crangel@inf.ufes.br

RESUMO

O Problema Quadrático de Alocação, PQA, foi estudado utilizando uma abordagem algébrica através de uma relaxação linear, o Problema de Alocação Linear, PAL. A utilização dessa abordagem se deve ao fato de existir na literatura o Teorema das Inversões demonstrado por Rangel em [Ran00] que associa o custo de uma solução do PQA ao número de inversões de sua correspondente linear no PAL. Embora seja polinomial o reconhecimento de uma solução linear viável para o PQA, caracterizar no conjunto de todas as soluções do PAL quais são as que satisfazem o PQA é uma tarefa extremamente difícil. Neste trabalho construímos uma matriz que armazena informações de soluções lineares capazes de gerar soluções quadráticas. Combinando esse mapeamento com o Teorema das Inversões apresentamos um método construtivo que gera soluções iniciais de boa qualidade. A grande vantagem dessa matriz é que seu custo computacional e gasto de memória são baixos. Propomos também uma versão paralela deste algoritmo.

Palavras-chave: problema quadrático de alocação; problema de alocação linear; teorema das inversões.

ABSTRACT

The Quadratic Assignment Problem, QAP, was studied using an algebraic approach through a linear relaxation, the Linear Assignment Problem, LAP. The reason for this approach is the Inversion Theorem demonstrated by Rangel [Ran00]. In this theorem, the QAP solution cost is associated to the number of inversions of the linear correspondent. Although recognizing if a linear solution correspond to a QAP solution is polynomial, there are much more LAP solutions than QAP solutions, and therefore to find them is a hard work. We construct a matrix that stores information about LAP solutions that are able to generate QAP solutions. The Inversion Theorem in conjuction with this matrix permitted us to present a constructive method that generates good initial solutions. The great advantage of this matrix is the low computational cost of time and memory. A parallel version of this algorithm is proposed and implemented in this work.

Keywords: quadratic assignment problem; linear assignment problem; inversion theorem.

1. Introdução

Inicialmente formulado em um contexto econômico por Koopmans & Beckmann [KB57], o Problema Quadrático de Alocação (PQA) foi apresentado como a alocação de n facilidades indissociáveis a n localidades com o objetivo de minimizar custos dessa alocação. O PQA é um dos problemas mais difíceis da classe dos problemas NP-hard, devido ao seu alto grau de combinatoriedade, a ponto de problemas de dimensão n > 30 já serem considerados de grande porte. Os estudos sobre métodos de resolução do PQA basicamente se dividem em dois grupos: algoritmos exatos ou ótimos, e algoritmos heurísticos ou sub-ótimos. Em ambas as estratégias de estudo citadas, está embutido o estudo de limites inferiores. Dentre os limites mais famosos podemos destacar o de Gilmore [Gi62], Lawler [La63] e, mais recentemente, o de Anstreicher & Brixius, que em 2001, [AB01] desenvolveram um limite inferior utilizado nos algoritmos exatos que trabalham com enumeração implícita [ABLG02]. Uma grande dificuldade encontrada pelos métodos exatos é a necessidade de plataformas poderosas e uma grande quantidade de memória para armazenamento. Por exemplo, Anstreicher & Brixius [ABGL02] apresentaram a solução ótima para o problema teste Kra30b com um tempo computacional de 182 dias, usando uma única estação de trabalho.

Justificadas pelas desvantagens apresentadas dos algoritmos exatos, uma grande quantidade de pesquisas voltadas aos algoritmos heurísticos está na literatura, podendo citar como exemplo: o GRASP, proposto por Li, Paradalos & Resende [LPR94], que usa a idéia de algoritmos construtivos associada à técnicas de melhoramento e Burkard & Stratman [BS78] que propuseram uma heurística usando o método de branch-and-bound. Não podemos deixar de citar as meta-heurísticas aplicadas ao PQA que utilizam como estratégia de melhoramento os fenômenos naturais, entre elas temos o Simulated Annealing desenvolvido por Burkard & Rendl [BR83], o Algoritmo Genético que teve sua aplicação ao PQA por vários pesquisadores, entre eles Tate & Smith [TS94], e o Sistema da Colônia de Formigas, estudo por Maniezzo et al. [MCD94] e Gambardella et al. [GTD97].

Um livro dedicado ao PQA é DIMACS [DIMACS94], resultado de uma coletânea de trabalhos apresentados em um workshop dedicado ao PQA, organizados por Panos M. Pardalos e Henry Wolkowicz. O de Eranda Çela [Ce98], fruto de sua tese de doutorado, apresenta um survey do problema detalhando algoritmos exatos e heurísticos. Além disso, é mostrado um estudo sobre algumas estruturas especiais de matrizes e o Problema Biquadrático de Alocação.

Um dos precursores do estudo do PQA através de uma abordagem algébrica foi Abreu [Ab84]. Seguindo na mesma linha, Querido [Que94] apresentou um Simulated Annealing cuja vizinhança proposta é baseada na teoria algébrica desenvolvida por Abreu; Rangel [Ra00] provou o Teorema das Inversões através de uma relaxação linear, o Problema de Alocação Linear que associa diretamente o custo de uma solução quadrática ao número de inversões de sua solução linear correspondente, considerando uma classe especial de soluções. Recentemente Resendo & Rangel [RR04] propõe uma construção de soluções quadráticas de boa qualidade baseada no Teorema das Inversões. Entre os trabalhos mais recentes encontrados na literatura, podemos citar: Abreu et al. [ABQG02], Hasegawa et al. [HIAI02] e Boaventura [Boa03].

O objetivo deste trabalho é apresentar um algoritmo construtivo de melhoramento utilizando soluções iniciais de boa qualidade. Para isso, o trabalho está organizado da seguinte forma: na seção 2 é apresentado o Problema Quadrático de Alocação e uma relaxação linear na forma do Problema de Alocação Linear, o estudo da viabilidade das soluções lineares com respeito ao PQA e ainda, é enunciado o Teorema das Inversões [Ran00]. Na seção 3 é proposta uma maneira de gerar soluções quadráticas de boa qualidade, usando a relaxação linear e o Teorema das Inversões. As seções 4 e 5 constam das descrições do algoritmo construtivo desenvolvido e a apresentação dos resultados, respectivamente. Ao final, seguem as conclusões.

2. Uma Relaxação Linear do Problema Quadrático de Alocação

Considerando que as soluções de um exemplar do Problema Quadrático de Alocação assumem a forma de permutações [KB57], descreve-se matematicamente a busca pela melhor solução da seguinte forma:

tal que 1 < i < j < n, Pn é conjunto de todas as permutações j de Wn = {1, ... , n}, e F = [fij] e D = [dkl] são matrizes de fluxo e distância respectivamente.

Exemplo 1: Considere duas cliques KF e KD , representadas por duas matrizes, onde uma solução j é dada por uma sobreposição de cliques representadas por uma permutação. O custo desta alocação é 130 dado pela expressão (1).

Utilizando as características das matrizes, tais como simetria e diagonal principal nula, pode-se armazenar suas informações na forma de vetores com dimensão N = Cn,2, pela ordem lexicográfica dos índices das matrizes. Para isso fazemos uso da bijeção y (i,j) = ((i – 1)n – i(i + 2)/2) + j que associa a cada par (i,j)Î nxn com i<j um natural z Î {1, ..., N} que representa uma aresta das cliques. Para as matrizes F e D mencionadas são escritos os vetores F = (2 9 1 2 4 5) e D = (3 4 10 5 1 12).

Considerando apenas as sobreposições de arestas, estabelecemos uma relaxação linear através do Problema de Alocação Linear, PAL, que pode ser definido como: , onde PN é conjunto de todas as permutações x de WN = {1, ... , N}. O PAL é considerado uma relaxação de um PQA no sentido de o conjunto de soluções lineares conter as soluções quadráticas. No entanto, o número de soluções do PAL é bem maior que o número de soluções quadráticas, conseqüentemente, nem sempre uma permutação de arestas pode representar uma permutação de vértices. Tais soluções são não-viáveis para o exemplar do PQA correspondente.

Considere as matrizes Q = FtD e Q* = (F–)t D+, onde F– e D+ são vetores com a ordenação não-crescente e não-decrescente de F e D respectivamente.

Encontrar a solução x ótima do PAL é uma tarefa bem simples sendo que tal solução coincide com o traço da matriz Q*, além disso este é um limite inferior para o PQA definido por F e D. Analogamente, obtemos um limite superior através da somatória dos elementos da diagonal secundária da matriz Q*. É fácil observar que os problemas PAL(Q) e PAL(Q*) são isomorfos pois para toda x Î PN (permutação das colunas da matriz Q) existirá uma r Î PN (permutação das colunas da matriz Q*) correspondente.

Porém, dada uma permutação r Î PN, que troca colunas em Q*, como saber se existe uma permutação de vértices da clique KF sobre os da clique KD a ela correspondente?

Para responder a questão colocada é estabelecida uma relação entre x e r. Para isso basta armazenar em permutações auxiliares fF e fD as trocas feitas nas posições dos vetores durante a ordenação dos vetores F e D. Para o exemplo apresentado na Figura 1 temos


Tendo as permutações auxiliares fF e fD obtemos a relação entre x e r através da bijeção

Admitindo uma r como sendo o traço da matriz, que é a permutação identidade , fazemos uso da bijeção para obtermos a x correspondente, ou seja,

Uma vez feito isso definimos uma solução linear como viável ao PQA, se dada uma r podemos construir j através do caminho inverso ao da relaxação, representado pela Figura 3.


Para r Î PN ser viável é necessário que exista uma j Î Pn que satisfaça a seguinte seqüência de igualdades:

tal que r = 1, ... , N; j(i) = k e j(j) = l; onde i,j,k,l = 1, ... , n . Caso contrário, a solução é não-viável.

A seguir apresentamos o algoritmo SolViável proposto por Rangel [Ran00] que verifica a viabilidade de r com respeito ao PQA.

O término do algoritmo se dá de forma trivial já que todos os loop´s são constantes de ordem no máximo N.

Primeiramente o algoritmo gera a permutação x através da r usando a bijeção da linha 2, e constrói as ListasIJ e ListaKL que são o domínio e imagem da permutação x, respectivamente. A linha 7 representa a função que percorrerá os (n – 1) primeiros elementos das ListaIJ e ListaKL testando as combinações possíveis para montar uma j(1), caso essa função obtenha uma resposta negativa o algoritmo termina retornando que a solução r é não-viável. No caso de uma resposta afirmativa, o loop da linha 9 tem como objetivo construir o restante da permutação j a partir da ListaKL. Após construir j , a linha 12 representa a função que verifica as N combinações compatíveis. No caso de encontrar alguma incompatibilidade, o algoritmo termina retornando que a permutação r é não-viável, caso contrário, r é viável.

Para simplificar a notação, no restante deste trabalho, representaremos as permutações apenas por sua imagem (como na r apresentada no Exemplo 2), omitindo assim seu domínio.

Exemplo 2: Admita a permutação r = (6 5 1 4 2 3)Î P6

O primeiro passo do algoritmo será encontrar a permutação x (que troca colunas de Q) correspondente a r (que troca colunas em Q*), para isso faremos uso de fF e fD pela bijeção já mencionada:

Na Tabela 2 apresentamos a aplicação da y-1 para construção das listas ListaIJ e ListaKL, bem como as possíveis combinações de vértices.

Note que nas (n – 1) linhas construímos j = (2 1 3 4), porém no restante das linhas da tabela são apresentadas algumas incompatibilidades, logo r é dita não-viável.

Dado n, considere N = Cn,2 e x Î PN uma permutação. Defina os (n – 1) primeiros elementos da x de cabeça e os N – (n – 1) elementos restantes de cauda da permutação de x.

Analisando as construções do algoritmo, observam-se dois tipos de permutações não-viáveis. Em um dos casos o algoritmo não consegue montar a permutação quadrática j (linha 7) e no outro, o algoritmo consegue montar a j, ilustrado no exemplo 2, com os elementos da cabeça da permutação. Porém é encontrada incompatibilidade com os elementos da cauda (linha 12). As permutações que obedecem ao segundo caso descrito serão definidas como pseudo-viáveis, assim, o conjunto das soluções viáveis de um exemplar está contido no conjunto das pseudo-viáveis, considerando a capacidade de construção de uma permutação de vértices. O objetivo da definição das soluções pseudo-viáveis é aumentar o espaço de busca de soluções lineares que geram soluções quadráticas.

Propriedade 1: O número de elementos do conjunto das soluções pseudo-viáveis é dado por n![N – (n – 1)]!.

Prova: O número de soluções viáveis é n! que é dado pelo número de soluções do PQA. Seja r Î PN uma solução viável para o PQA sendo assim, a cabeça da x correspondente é capaz de construir uma solução quadrática j Î Pn. Fixando a cabeça da x, isto é, as (n – 1) primeiras componentes, podemos permutar as N – (n – 1) componentes da cauda gerando desta forma [N – (n – 1)]! pseudo-viáveis. Pelo Princípio Fundamental da Contagem temos que o número de pseudo-viáveis é n![N – (n – 1)]! .

Veja a relação de proporção:

  • n=4 => N=6

  • N!=720 soluções lineares com n!=24 soluções viáveis.

  • N!=720 soluções lineares com n!(n-1)! =24x 6 = 144 soluções pseudo-viávies.

2.1 Teorema das Inversões e Permutações Livremente Comparáveis

Encontramos na literatura o Teorema das Inversões demonstrado por Rangel em [Ran00], [RA01] e [RA03], que associa o custo Z(r) de uma solução r do PAL(Q*) ao o seu número de inversões. Para um melhor entendimento do teorema, seguem algumas definições que lhes dão suporte. Essas definições também são encontradas nas referências citadas acima:

  • inversão: é dada pelo par

    (r(i), r(j)) tal que

    r(j) <

    r(i) com

    i <

    j e

    i,jÎWN. Considere Á(

    r) o conjunto com todos os pares de

    (

    r(i), r(j)) que possuem uma inversão.

  • número de inversões de r: é dada pela cardinalidade do conjunto Á(

    r). Exemplo: Assuma a permutação

    r = (4 1 2 3 6 5), temos que Á(

    r) = {(4,1), (4,2), (4,3), (6,5)} e #Á(

    r) = 4.

  • permutações livremente comparáveis: duas permutações

    r1 e

    r2 são ditas

    livremente comparáveis quando podemos afirmar que Z(

    r1)

    < Z(

    r2) ou Z(

    r2)

    < Z(

    r1) independentemente dos valores dos vetores

    F– e

    D+ .

O Teorema das Inversões pode ser compreendido da seguinte forma: "Os custos das permutações r Î PN que são livremente comparáveis crescem junto com os seus números de inversões".

Como existe uma correspondência entre as soluções quadráticas j Î Pn e as soluções lineares r Î PN podemos definir a partir do Teorema das Inversões um critério de pré-avaliação das soluções do PQA. Dada uma solução j do PQA, se a solução linear r Î PAL(Q*) correspondente a ela possuir um baixo número de inversões, conseqüentemente seu custo também o é. Vale lembrar que o teorema é válido para o conjunto de permutações livremente comparáveis que está contido no conjunto de todas as permutações r Î PN . Sabemos que uma j, permutação de vértices, pode possuir uma representante r que não pertence ao conjunto das permutações Livremente Comparáveis. Contudo, um estudo através de regressão linear feito por Rangel em [Ran00] mostra que essa relação se estende para o conjunto de todas as permutações r Î PN . Na próxima seção apresentaremos uma proposta para gerar soluções quadráticas de boa qualidade [Res04] que será parte integrante do algoritmo construtivo apresentado neste trabalho.

3. Mapeamento das Soluções Quadráticas no Universo das Soluções Lineares

Apesar da grande importância do Algoritmo 1, ele se tornará ineficiente se tivermos que enumerar todas as soluções lineares para reconhecer as viáveis. Como visto na seção 2, não são necessários os N elementos da permutação linear para que possamos gerar a permutação dos vértices correspondentes, caso exista. Para isso, bastam os (n – 1) elementos da cabeça. Recordando o Algoritmo 1, as linhas 7 e 8 são capazes de descobrir um valor de j(1), no caso da condição ser verdadeira. Uma pergunta natural é a seguinte: "E se no lugar de descobrirmos o valor de j(1), procurarmos quais elementos poderiam construir a cabeça de uma permutação que gere um valor da j(1) pré-fixado?".

Como j(1) pode assumir n configurações e o número de elementos necessários de uma solução linear x para gerar uma solução do PQA é (n – 1), foi desenvolvido um algoritmo que constrói uma matriz nx(n–1) que armazena, em cada i linha da matriz (i = 1, ... , n) a cabeça de uma permutação x pseudo-viável que responde ao questionamento anterior, isto é, j(1)= i, chamamos matriz HeadQ.

De posse disso, podemos gerar todas as pseudo-viáveis com o valor de j(1) que foi pré-fixado. A seguir apresentaremos um algoritmo chamado ConstroiHead que alcança os objetivos descritos acima.

Exemplo 2: Para ilustrar, considere n = 4. A matriz HeadQ assume a seguinte configuração:

Prova de Correção: A invariante que rege o Algoritmo 2 é: "No final de cada iteração a matriz recebe em duas posições ((i,j – 1) e (j,i)) o elemento t, tal que t é o elemento necessário para construir as j's, para as quais j(1) = i e j(1) = j".

Início: a matriz e a lista ListaIJ estão vazias, ambas são construídas a cada iteração do loop.

Manutenção: Ao final de cada iteração o algoritmo se aproveita da estrutura da ListaIJ para alocar o elemento t, o índice da ListaIJ, em posições que irão formar as cabeças das linhas tais que j(1) = i e j(1) = j.

Término: Note que N = n(n – 1)/2, como a matriz tem dimensões nx(n – 1), e a cada iteração são alocados 2 elementos, então ao final do loop o número de alocações na matriz é 2*n(n – 1)/2 que é exatamente o número de elementos da matriz. Como a alocação é dada pelos pares (i,j – 1) e (j,i) e observando que 1 < i < j < n, temos que não existem duas alocações em uma mesma posição, o que assegura que a matriz é toda preenchida.

Proposição 1: Permutando-se os (n – 1) elementos das n linhas existentes na HeadQ, gera-se as n! soluções do PQA.

Prova: Considere um PQA cujas matrizes F e D são de dimensão n ´ n. As colunas da matriz HeadQ são as imagens de x(1), x(2), ... , x(n – 1). Como a HeadQ tem ordem n ´ (n – 1), cada linha k = 1, ... , n gera (n – 1)! soluções quadráticas com j(1) = k. Sendo n linhas, geramos as n´(n – 1)! = n! soluções para o PQA.

De posse das permutações x Î PN, soluções do PAL(Q), podemos gerar r Î PN, soluções do PAL(Q*) que certamente serão capazes de gerar uma j Î Pn solução do PQA. É necessário trabalhar com as soluções do PAL(Q*) pois o Teorema das Inversões é aplicado quando os vetores que definem o problema são ordenados tais como F– e D+.

Para a construção de uma nova matriz, que chamaremos de HeadQ*, fazemos uso da bijeção r = fD ° x ° f -1F para efetuar a transformação entre essas matrizes. Como estamos trabalhando somente com as cabeças das permutações x Î PN, temos que assegurar que as imagens das aplicações f-1D serão 1, ... , n – 1. Aplicaremos fF, nos valores de x(i) com i = 1, ... , n – 1, indicando em que posição os elementos das linhas da matriz HeadQ* estão na permutação r Î PN.

Para melhor esclarecimento, usaremos as permutações fF = (2 6 1 3 4 5) e fD = (5 4 2 3 6 1) do Exemplo 1.

Para conhecer a imagem de cada elemento da matriz basta aplicar a função fD, pois como vimos a construção da matriz HeadQ está baseada na permutação identidade de x Î PN e a imagem da composição das permutações fD ° x ° f-1F é exatamente fD.

Exemplo 3: Para um exemplo qualquer com n = 4, a matriz HeadQ é apresentada na forma exibida no lado esquerdo da Tabela 4, aplicando a forma geral da HeadQ* no exemplo 1 (com fF = (2 6 1 3 4 5) e fD = (5 4 2 3 6 1)) obtemos a matriz exibida no lado direito da Tabela 4. Note que em negrito está a matriz HeadQ.

Uma vez produzido a matriz HeadQ* conseguimos gerar soluções do PAL(Q*) que certamente irão gerar uma x pseudo-viável. Como o método de pré-seleção das soluções é, pelo Teorema das Inversões, buscar soluções com baixo número de inversões, uma forma simples de alcançar este objetivo é a ordenação dos elementos de uma permutação. Nesse caso, ordenaremos os elementos da matriz HeadQ* fazendo as mesmas trocas na matriz HeadQ.

Exemplo 4: Para ilustrar usaremos a primeira linha da HeadQ no diagrama da Figura 5.


A permutação j = (1 2 3 4) que foi gerada pela linha da matriz antes da ordenação apresenta um custo de 126 e após a ordenação temos uma j com custo de 112 dada pela j = (1 4 3 2). Repetimos esse processo para todas as linhas da matriz, gerando n soluções j's de boa qualidade.

4. Algoritmo Proposto

Em linhas gerais, o algoritmo que chamamos de HeuristicHead, é basicamente um algoritmo híbrido que combina um método construtivo de soluções iniciais com uma técnica de melhoramento (busca local). Para o método de construção das soluções iniciais e um melhoramento prévio usamos a matriz HeadQ e HeadQ* e toda sua teoria envolvida, destacando o Teorema das Inversões e os resultados probabilísticos relacionados a ele. Para o melhoramento das soluções geradas é usado uma método de busca local em torno de uma vizinhança de cada solução. O funcionamento do algoritmo pode ser traduzido no seguinte pseudo-código:

A fase de construção das soluções iniciais, que é onde reside o foco desse trabalho, é composta por várias etapas que podem ser dispostas da seguinte forma:

  1. Leitura dos dados;

  2. Ordenação dos vetores de Fluxo e Distância;

  3. Construção da

    fF e

    fD;

  4. Construção da matriz

    HeadQ;

  5. Construção da matriz

    HeadQ*;

  6. Ordenação das linhas na matriz

    HeadQ*, com as respectivas trocas da matriz

    HeadQ.

Os itens 2 e 3 devem pertencer a todo algoritmo que trabalhe com uma correspondência entre o Problema de Alocação Linear e sua relaxação na forma do Problema de Alocação Linear, já que são os procedimentos justamente encarregados desta relaxação. A construção da matriz HeadQ é independente dos procedimento 1, 2 e 3. A construção da HeadQ e da HeadQ* é o que caracteriza nossa heurística. Uma vez de posse das permutações lineares efetuamos a ordenação de tais permutações com base no Teorema das Inversões, para critério de uma melhoria prévia das soluções iniciais. Essa melhoria faz com que a busca local se torne menos onerosa, por conseqüência aumentando o desempenho do algoritmo.

Note que para um exemplar de dimensão n nossa construção produz n soluções iniciais. Devido à alta combinatoriedade do PQA e à estrutura de vizinhança adotada nesse trabalho, consideramos que seria conveniente promover sistemáticas perturbações nas soluções iniciais com o objetivo de gerar novos elementos para a etapa da busca local. Tais perturbações são descritas da seguinte forma: dada uma linha da matriz HeadQ li = [li1, li2, ... , l i(n – 1) ]; i = 1, ... , n, geramos (n – 2) novas soluções da seguinte maneira:

onde l'i gerará uma nova solução inicial que sofreu um pequeno aumento no número de inversões, porém ainda é considerada boa.

O procedimento de busca local exige que se defina uma estrutura de vizinhança. Neste trabalho adotamos uma estratégia encontrada em [LPR94], conhecida como k-troca, para este trabalho consideramos k = 2.

Além do algoritmo serial, seguindo uma tendência para problemas de grande porte, foi implementada uma versão paralela do mesmo. A paralelização do algoritmo se justifica pelo baixo custo e por conseguir tempos computacionais relativamente satisfatórios para problemas de grande porte. Tal paralelização se resume na distribuição e balanceamento das tarefas, onde cada tarefa é a construção da permutação quadrática correspondente a uma linha da matriz HeadQ, mais as (n – 2) perturbações mencionadas e as buscas locais para cada uma dessas [1 + (n – 2)] soluções. A distribuição é feita através da divisão do número de linhas da matriz pelo número de processadores. Caso exista resto nesta divisão, as linhas restantes serão distribuídas aos processadores que primeiro desocuparem.

5. Resultados Computacionais

A implementação serial foi executada em um Pentium IV, 1,3 GHz com 256 de memória RAM. Nessa etapa dos testes foram executados exemplares de ordem menores ou iguais à 30, pois o objetivo inicial foi analisar o desempenho do algoritmo no sentido de observar a relação qualidade de solução x tempo.

Apesar do algoritmo HeuristicHead não garantir a otimalidade das soluções, o Teorema das Inversões assegura a boa qualidade das mesmas. Uma característica encorajadora é a relação qualidade de solução x tempo, mencionada anteriormente. Como exemplo podemos citar o nug20, que apesar de não ter atingido o ótimo conseguiu um erro de 1,01% gastando para isso 380 iterações em 8,2 segundos. A Tabela 5 apresenta o nome do exemplar, o melhor resultado disponível da QAPLIB, o resultado da heurística HeristicHead, tempo computacional e taxa de erro. Para uma comparação podemos citar o trabalho [LPR94] que apresenta uma implementação serial do GRASP. O algoritmo apresentado nesse trabalho obteve os mesmos resultados do GRASP em [LPR94] para os exemplos da Tabela 5, com exceção dos exemplos tai15a e tai30a que não são apresentados em [LPR94].

Seguindo uma tendência atual para problemas de grande porte [BMCP98] [JG05], o algoritmo foi implementado em uma versão paralela, tal algoritmo foi executado no cluster da Universidade Federal do Espírito Santo (UFES) montado no Laboratório de Computação de Alto Desempenho [LCAD], que tem como estrutura a seguinte configuração: 64 processadores ATHLON XP 1800, onde o Master possui 512MB de RAM e nós com 256MB de RAM. Os testes da versão paralela foram feitos em dois estágios. Primeiramente, executamos um mesmo exemplo várias vezes com números diferentes de processadores, mesmo sabendo que a solução encontrada seria a mesma, pois esse estágio o objetivo era analisar o progresso da relação número de processadores x tempo (em segundos).

Para o exemplo tai40a, o custo da melhor solução viável disponível na QAPLIB é igual a 3139370 e o algoritmo HeuristicHead obteve custo igual a 3212174 com erro de 2,3%. Na Tabela 6, o algoritmo mostra um comportamento regular na relação número de processadores x tempo. Note que o tempo computacional para 10 e 12 processadores, assim como para 15 e 19 e ainda 20 e 25, é bem próximo. Para explicar este fenômeno basta dividirmos a ordem da matriz do exemplo pelo número de processadores. Por exemplo, temos que 40 ¸ 10 = 4 e 40 ¸ 12 = 3,33..., assim para 10 processadores, cada um computa 4 linhas da matriz. Para 12 processadores teremos cada um computando 3 linhas, totalizando 36 linhas, restando 4 linhas que irão ser distribuídas a quatro processadores (uma linha para cada processador) que primeiro terminarem a tarefa inicial. Sendo assim, temos 4 processadores computando 4 linhas e 8 computando 3 linhas. Isso não é interessante, pois os processadores com a tarefa menor (computar 3 linhas da matriz) são obrigados a "esperar" o término dos demais processadores que estão computando uma linha a mais da matriz, para depois comparar os resultados. Essa "espera" é responsável pela proximidade nos tempos de processamento. O mesmo acontece para 15 e 19, e 20 e 25 processadores.

Uma vez apresentada a regularidade e desempenho do algoritmo e fazendo uso da conclusão anterior, nos próximos testes o número de processadores usados será sempre um divisor da ordem do exemplo referente. A Tabela 7 segue os mesmos moldes da Tabela 5, acrescida apenas do número de processadores.

Ainda sobre a questão do tempo computacional, a pergunta que surge observando a Tabela 7 é: "por que exemplos de mesma ordem e calculados com o mesmo número de processadores, com sko100a, sko100b, sko100c e sko100d, possuem tempo computacionais consideravelmente diferentes?". A resposta está no tempo computacional gasto na fase de busca local.

Pela Tabela 7 observamos que para exemplos considerados de grande porte, em nenhum caso o algoritmo proposto encontrou a melhor solução conhecida. Contudo, a relação qualidade de soluções x tempo nos dá resultados encorajadores. Como comparação podemos destacar o trabalho [JG05] onde foi apresentado um estudo do PQA usando, Busca Tabu e Colônia de Formigas. O algoritmo apresentado nesse trabalho obteve os mesmos resultados na maioria dos exemplos mostrados na Tabela 7, com exceção dos exemplos tai(40a, 50a, 60a, 80a e 100a) que apresentaram um resultado inferior aos de [JG05] (que para estes exemplos obteve um erro médio de 0,12%, enquanto o nosso algoritmo obteve 2,5% de erro médio).

6. Conclusão

A principal proposta implementada nesse estudo foi de gerar, de forma viável computacionalmente, soluções do PAL que fossem sempre viáveis para o PQA a ele correspondente, isto é, promover um mapeamento das soluções quadráticas no universo das soluções lineares. Vencido esta etapa, através da matriz HeadQ, produziu-se um algoritmo de complexidade polinomial para a construção da mesma. A união de toda a teoria envolvida culminou na heurística HeuristicHead, que utiliza as matrizes HeadQ e HeadQ* aliadas ao Teorema das Inversões para gerar soluções de boa qualidade que irão ser usadas como soluções iniciais para um processo de busca local. Através de teste, a HeuristicHead apresentou uma boa relação qualidade de soluções x tempo computacional. Na versão paralela com os testes de desempenho concluiu-se que para um melhor uso dos recursos o número de processadores deve ser um divisor da dimensão do exemplar para não se perder tempo com a espera de liberação de processadores. Na Tabela 6 pode-se notar que quando aumentamos o número de processadores, os tempos computacionais gastos com o exemplar tai40a possuem uma relação com o número de processadores, por exemplo, 1325.25 é aproximadamente 2 x 662.88, bem como 1325.25 é aproximadamente 20 x 65.85. Sendo assim, levando essa relação aos exemplares da Tabela 7, os tempos computacionais seriam muito altos se utilizássemos num número baixo de processadores. Para trabalhos futuros sugerimos uma implementação do algoritmo introduzindo um componente aleatório na fase de construção das soluções iniciais. Desta forma, haveria uma diversificação no espaço de busca, podendo melhorar o desempenho do algoritmo em relação à qualidade das soluções.

Recebido em 03/2005; aceito em 08/2005 após 1 revisão

Received March 2005; accepted August 2005 after one revision

  • [Ab84] Abreu, N.M.M. (1984). Um estudo algébrico e combinatório do problema quadrático de alocação segundo Koopmans e Beckmann. Tese de D.Sc., Programa de Engenharia de Produção COPPE/UFRJ, Brasil.
  • [ABQG02] Abreu, N.M.M.; Boaventura, P.O.; Querido, T.M. & Gouvêa, E.F. (2002). Classes of quadratic assignment problem instances: isomorphism and difficulty measure using a statistical approach. Discrete Applied Mathematics, 124, 103-116, Elsevier Science Inc.
  • [ABGL02] Anstreicher, K.M.; Brixius, N.W.; Goux, J.P. & Linderoth, L. (2002). Solving large quadratic assignment problem on computation grid. Mathematical Programming, Series B, 91, 563-588. Winner, SIAM Activity Group on Optimization (SIAG/OPT) Prize.
  • [AB01] Anstricher, K.M. & Brixius, N.W. (2001). A new bound for the quadratic assignment problem based on convex quadratic programming. Mathematical Programming, 89, 341-357.
  • [Boa03] Boaventura, P.O. (2003). Combinatorial instruments in the design of a heuristic for the quadratic assignment problem. Pesquisa Operacional, 23, 282-402.
  • [BR83] Burkard, R.E. & Rendl, F. (1983). A thermodynamically motivated simulation procedure for combinatorial optimization problems. European Journal of Operations Research, 17, 169-174.
  • [BMCP98] Bruengger, A.; Marzetta, A.; Clausen, J. & Perregaard, M. (1998). Solving Large-Scale QAP Problems in Parallel with the Search Library ZRAM. Journal of Parallel and Distributed Computing, 50, 157-169.
  • [BS78] Burkard, R.E. & Stratman, K.H. (1978). Numerical investigations on quadratic assigment problem. Naval Research Logistics Quartely, 148, 25-129.
  • [Ce98] Çela, E. (1998). The Quadratic Assignment Problem theory and algorithms Series in Combinatorial Optimization, vol. 1, Kluwer Academic Publishers.
  • [DIMACS94] Pardalos, P.M. & Wolkowicz, H. (1993). Quadratic Assignment and Related Problem. DIMACS Series in Discrete Mathematics and Theoretical Computer Science, 16
  • [GTD97] Gambardella, L.M.; Taillard, E.D. & Dorigo, M. (1997). Ant Colonies for the QAP. Technical Report IDSIA97-4, IDSIA, Laguno, Switzerland.
  • [Gi62] Gilmore, P.C. (1963). Optimal and suboptimal algorithms for the quadratic assignment problem. Siam Journal on Applied Mathematics, 10, 305-313.
  • [HIAI02] Hasegawa, M.; Ikeguchi, T.; Aihara, K. & Itoh, K. (2002). A novel chaotic search for quadratic assignment problem. European Journal of Operational Research, 139(3), 543-556.
  • [JG05] James, T. & Glover, F. (2005). Sequential and Parallel Path-Relinking Algorithms for the Quadratic Assignment Problem. IEEE Intelligent Systems, May.
  • [KB57] Koopmans, T.C. & Beckmann, M.J. (1957). Assignment problem and the location of economic activities. Econometrica, 25, 53-75.
  • [La63] Lawler, E. (1963). The quadratic assignment problem. Management Science, 9, 586-599.
  • [LCAD] Laboratório de Computação de Alto Desempenho. <http://www.inf.ufes.br/~lcad>. Última visita: 13/05/2004.
  • [LPR94] Li, Y.; Pardalos, P.M. & Resende, M.G.C. (1994). A greedy randomized adaptive search procedures for the quadratic assignment problem. DIMACS Series in Discrete Mathematics and Theoretical Computer Science, 16, 237-261.
  • [MCD94] Maniezzo, V.; Colorni, A. & Dorigo, M. (1994). The Ant System Applied to the quadratic assignment problem. Technical Report IRIDIA/94-28, Université Libre deBruxelles, Belgium.
  • [Que94] Querido, T.M. (1994). Simulated annealing no grafo das inversões do problema quadrático de alocação. Tese de D.Sc., Programa de Engenharia de Produção COPPE/UFRJ, Brasil.
  • [Ran00] Rangel, M.C. (2000). Contribuições Algébricas ao Problema Quadrático de Alocação. Tese de Doutorado, Programa de Engenharia de Produção COPPE/UFRJ.
  • [RA01] Rangel, M.C. & Abreu, N.M.M. (2001). Um parâmetro para avaliar a qualidade das soluções do problema quadrático de alocação. In: CD-Rom XXXIII SBPO, Sobrapo, ILTC, 1, 1277-1287.
  • [RA03] Rangel, M.C. & Abreu, N.M.M. (2003). Ordenações parciais nos conjuntos das soluções do problema de alocação linear e quadrático. Pesquisa Operacional, 23(2), 265-284, Sobrapo.
  • [RR04] Resendo, L.C. & Rangel, M.C. (2004). Uma Proposta Para Gerar Soluções de Boa Qualidade para o Problema Quadrático de Alocação. In: CD-Rom XXXVI SBPO, Sobrapo.
  • [TS94] Tate, D.E. & Smith, A.E. (1995). A genetic approach to the quadratic assignment problem. Computers and Operations Research, 22, 73-83.
  • *
    Corresponding author / autor para quem as correspondências devem ser encaminhadas
  • Datas de Publicação

    • Publicação nesta coleção
      01 Jun 2006
    • Data do Fascículo
      Abr 2006

    Histórico

    • Aceito
      Ago 2005
    • Recebido
      Mar 2005
    Sociedade Brasileira de Pesquisa Operacional Rua Mayrink Veiga, 32 - sala 601 - Centro, 20090-050 Rio de Janeiro RJ - Brasil, Tel.: +55 21 2263-0499, Fax: +55 21 2263-0501 - Rio de Janeiro - RJ - Brazil
    E-mail: sobrapo@sobrapo.org.br