UMA ABORDAGEM HEURÍSTICA CONSTRUTIVA PARA O PROBLEMA DE MAXIMIZAÇÃO DO NÚMERO DE LEGENDAS. Vitor Ramos Braga

Tamanho: px
Começar a partir da página:

Download "UMA ABORDAGEM HEURÍSTICA CONSTRUTIVA PARA O PROBLEMA DE MAXIMIZAÇÃO DO NÚMERO DE LEGENDAS. Vitor Ramos Braga"

Transcrição

1 UNIVERSIDADE FEDERAL DO ESTADO DO RIO DE JANEIRO CENTRO DE CIÊNCIAS EXATAS E TECNOLOGIA PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA UMA ABORDAGEM HEURÍSTICA CONSTRUTIVA PARA O PROBLEMA DE MAXIMIZAÇÃO DO NÚMERO DE LEGENDAS Vitor Ramos Braga Orientadora Adriana Cesário de Faria Alvim RIO DE JANEIRO, RJ - BRASIL AGOSTO DE 2009

2 UMA ABORDAGEM HEURÍSTICA CONSTRUTIVA PARA O PROBLEMA DE MAXIMIZAÇÃO DO NÚMERO DE LEGENDAS Vitor Ramos Braga DISSERTAÇÃO APRESENTADA COMO REQUISITO PARCIAL PARA A OBTENÇÃO DO TÍTULO DE MESTRE PELO PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA DA UNIVERSIDADE FEDERAL DO ESTADO DO RIO DE JANEIRO (UNIRIO). APROVADA PELA COMISSÃO EXAMINADORA ABAIXO ASSINADA. Aprovada por: Prof. Adriana Cesário de Faria Alvim, D.Sc. - UNIRIO Prof. Angelo Ernani Maia Ciarlini, D.Sc. - UNIRIO Prof. Isabel Cristina Mello Rosseti, D.Sc. - UFF Prof. Eduardo Uchoa Barboza, D.Sc. - UFF RIO DE JANEIRO, RJ - BRASIL AGOSTO DE 2009

3 i

4 Agradecimentos Uma tese de mestrado definitivamente não é algo que se pode fazer sozinho. Muitas pessoas me ajudaram na construção dessa dissertação e é com imenso prazer que usarei esse espaço para agradecê-las. Primeiramente gostaria de agradecer aquelas sem as quais nem uma linha de texto ou código teria se tornado realidade: meus pais. Ernani e Flavia ofereceram todo o apoio que vocês podem imaginar para que eu pudesse trabalhar da melhor forma possível. Absorveram meus ataques de estresse de uma forma, que hoje, se perguntarem a eles se tive algum, responderão com a maior tranquilidade do mundo que nada aconteceu. Em segundo lugar, agradeço minha futura esposa, Silvia, por todo seu amor e compreensão nos momentos em que não foi possível lhe dar atenção. Podem ter certeza que, com muito prazer, pagarei tudo que fiquei devendo com juros e correção monetária. Agradeço meu amigo Luan por me arrumar o catálogo Hipparcos para construção dos mapas estelares, embora não os tenha aproveitado por falta de tempo para analisar as instâncias. Agradeço também meus colegas de mestrado Leonardo Gatti, pelas dicas importantíssimas na preparação da apresentação, e Layni Neves, pela ajuda na formatação da dissertação. Para terem uma idéia, sem a ajuda da Layni estaria formatando a dissertação até hoje. Para finalizar, agradeço meus orientadores por me colocarem no caminho certo, apesar de toda minha rebeldia, meus chefes por não me demitirem, apesar de nunca compensar as horas que deixei de trabalhar por causa do mestrado, e os colegas de trabalho que compreenderam meu esforço e jamais cobraram justificativas pelas minhas faltas e atrasos ii

5 inevitáveis. Há todos os outros que não foram explicitamente citados, mas que direta ou indiretamente me ajudaram de alguma forma na construção desse trabalho, deixo meu muito obrigado. iii

6 BRAGA, Vitor Ramos. Uma Abordagem Heurística Construtiva para o Problema de Maximização do Número de Legendas. UNIRIO, páginas. Dissertação de Mestrado. Departamento de Informática Aplicada, UNIRIO. RESUMO O Problema de Maximização do Número de Legendas (PMNL) consiste em definir posições de legendas para atributos de um mapa ou gráfico, de modo que não haja conflitos e o número de atributos legendados seja máximo. Cada atributo possui no máximo uma legenda, e um conflito é definido como uma sobreposição entre áreas de legendas ou entre legendas e atributos. Este trabalho propõe um novo algoritmo para resolução do PMNL, que se divide em duas partes: pré-processamento e heurística construtiva. O pré-processamento é independente da heurística construtiva e possui como principal vantagem, em relação a outras técnicas de redução para instâncias de problemas cartográficos em duas dimensões, a possibilidade de ser aplicado em sua totalidade a algoritmos baseados no Slider Model. Os resultados experimentais mostram que tanto o pré-processamento quanto a heurística construtiva, superam outros métodos apresentados na literatura em termos de qualidade e tempo de execução, principalmente na resolução de instâncias com maior nível de dificuldade. Palavras-chave: Rotulação Cartográfica de Pontos; Pré-processamento; Heurística Construtiva; Modelo Contínuo. iv

7 BRAGA, Vitor Ramos. Uma Abordagem Heurística Construtiva para o Problema de Maximização do Número de Legendas. UNIRIO, páginas. Dissertação de Mestrado. Departamento de Informática Aplicada, UNIRIO. ABSTRACT The Label Number Maximization Problem (LNM) consists in defining label positions for features of a map or graph, in a way to avoid conflicts and maximize the number of features labeled. Each feature has, at most, one label and a conflict is defined as an overlapping between labels or between labels and features. This thesis proposes a new LNM resolution algorithm made of two stages: pre-processing and constructive heuristic. The pre-processing stage is independent of the constructive heuristic and its main advantage over other two-dimension cartographic reduction technics is being able to be fully applied on Slider Model based algorithms. The experimental results shows that both the pre-processing and constructive heuristic overmatch other technics presented in literature in terms of quality and running time, mainly in the resolution of problem instances with a higher difficulty level. Keywords: Point-Feature Label Placement; Pre-processing; Constructive Heuristic; Slider Model. v

8 Sumário 1 Introdução 1 2 Revisão Bibliográfica Otimização Combinatória Heurísticas Histórico de Soluções Algoritmo de Wagner et al Algoritmo de Ebner et al Sistema Virtual de Forças Direcionadas Heurística Baseada em Simulated Annealing Definição dos Algoritmos Definições Básicas para o Algoritmo Rotina de Definição de Vizinhos Pré-Processamento de Instâncias Primeira Regra do PPROC Segunda Regra do PPROC Algoritmo PPROC Exemplo de Execução do PPROC Heurística Construtiva para o PMNL Cálculo das Pontuações Solução Inicial vi

9 3.4.3 Heurística Embutida Perturbação Critério de Aceitação Juntando Componentes da Heurística HC-PMNL Experimentos Computacionais Ambiente computacional Conjuntos de Instâncias Estudo experimental do algoritmo PPROC Desempenho de Redução Estudo experimental do efeito do PPROC no FDL Estudo experimental da HC-PMNL Desempenho da rotina GERA-SOL-INI Estudo dos parâmetros da HC-PMNL Importância da Estratégia de Construção Comparações Entre Algoritmos Conclusão 93 Referências Bibliográficas 96 Glossário 102 vii

10 Lista de Figuras 1.1 Modelos para posicionamento de legendas ao redor de um ponto. Figura retirada de [7] Espaço de soluções E de um determinado problema. Cada vértice do grafo representa uma solução e as arestas conectam soluções vizinhas. Os vértices em formato de quadrado formam a vizinhança da solução S e o caminho tracejado mostra a trajetória traçada por uma busca local, que leva a solução inicial S até o ótimo local S. A numeração acima das arestas tracejadas indica a ordem dos movimentos aplicados pela busca local Gráfico de custo do espaço de soluções E de um problema de minimização. As soluções em destaque são ótimos locais. O primeiro ótimo local da esquerda para direita é o ótimo global do problema As Figuras, obtidas em [9], ilustram o comportamento das regras de redução. A figura mais a esquerda representa a primeira regra, a do meio a segunda e a mais a direita a terceira Configuração de legendas que não pode ser resolvida pelo sistema de forças. Retirada de [3] Ilustração para visualização do deslocamento horizontal (dx i ) e vertical (dy i ) de um ponto. O círculo negro é o ponto i e o quadrado negro da destaque ao vértice superior direito da legenda de i viii

11 3.2 Regiões de legenda ao redor de um ponto. O ponto é o círculo negro no centro da figura. Os retângulos brancos são as posições de legenda do modelo Four-position, que delimitam a chamada Área de Legenda do ponto. Cada posição pertence a uma região delimitada pelos eixos que cortam o ponto verticalmente e horizontalmente Ilustração da definição de vizinhos de pontos no mapa Situação para análise do vizinho mais próximo em cada região. O ponto p, cuja Área de Legenda é o retângulo branco, possui quatro vizinhos (V1, V2, V3 e V4). Os retângulos hachurados representam as legendas de cada vizinho que estão mais próximas de p. V DC p é V1, V DB p é V4, V EC p é V2 e V EB p é V2 também Combinações de posições de legenda possíveis para dois pontos vizinhos que possuem a mesma abscissa. No total são dez. O ponto mais abaixo é sempre o B. O retângulo branco é a legenda do ponto A, enquanto o retângulo cinza é a legenda do ponto B Combinações de posições de legenda possíveis para dois pontos vizinhos que possuem a mesma ordenada. No total são dez. O ponto mais a direita é sempre o B. O retângulo branco é a legenda do ponto A, enquanto o retângulo cinza é a legenda do ponto B Combinações de posições de legenda possíveis para dois pontos vizinhos que não estão nem na mesma abscissa, nem na mesma ordenada. No total são sete, tanto para o caso em que A está acima de B (lado esquerdo), quanto para o caso oposto (lado direito). O ponto mais a direita é sempre o B. O retângulo branco é a legenda do ponto A, enquanto o retângulo cinza é a legenda do ponto B Estratégia de posicionamento de legendas para grupos de três pontos não solucionados na mesma abscissa. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B. A seta sobre a legenda do ponto B, indica que a legenda pode deslizar livremente para as direções apontadas sem risco de conflito Estratégia de posicionamento de legendas para grupos de três pontos não solucionados na mesma ordenada. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B. A seta sobre a legenda do ponto B, indica que a legenda pode deslizar livremente para as direções apontadas sem risco de conflito ix

12 3.10 Estratégia de posicionamento de legendas para grupos de três pontos não solucionados, sendo que o primeiro ponto da ordenação se encontra no mesmo nível ou abaixo dos demais pontos do grupo. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B Estratégia de posicionamento de legendas para grupos de três pontos não solucionados, sendo que o primeiro ponto da ordenação se encontra no mesmo nível ou acima dos demais pontos do grupo. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B Estratégia de posicionamento de legendas para grupos de três pontos não solucionados, sendo que o primeiro ponto da ordenação se encontra entre os demais pontos do grupo. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B Resultado obtido pelo algoritmo PPROC depois de executado no conjunto de pontos apresentado. Os pontos fazem parte de uma instância real, contendo a localização de 250 poços de água subterrânea em Munique. As legendas possuem tamanho fixo, com largura e altura iguais a unidades. Os pontos com legenda foram solucionados pelo algoritmo Pontuação da posição na região DC é igual a 5, na região EC é igual a 14, na região DB é igual a 5 e na região EB é igual a Percentuais de redução médios por tamanho para as instâncias selecionadas de Christensen et al Percentuais de redução médios por tamanho para as instâncias selecionadas de Munique Diferença percentual média por tamanho entre os tempos de execução dos algoritmos FDL e PPROC+FDL para as instâncias de Christensen et al. Os percentuais indicam, na média, quão mais rápido as instâncias foram resolvidas com a utilização do préprocessamento. Por exemplo, as instâncias de tamanho 750 foram resolvidas em tempos 55,65% mais rápidos na média com a utilização do pré-processamento x

13 4.4 Diferença percentual média por tamanho entre os tempos de execução dos algoritmos FDL e PPROC+FDL para as instâncias de Munique. Os percentuais indicam, na média, quão mais rápido as instâncias foram resolvidas com a utilização do pré-processamento. Por exemplo, as instâncias de tamanho 250 foram resolvidas em tempos 33,5% mais rápidos na média com a utilização do pré-processamento Média percentual de qualidade (em número de pontos solucionados) por tamanho dos algoritmos GERA-SOL-INI, PPROC+GERA e ALEATÓRIO para as instâncias de Christensen et al Média percentual de qualidade (em número de pontos solucionados) por tamanho dos algoritmos HC-PMNL e HC-PMNL* para as instâncias de Christensen et al Média percentual de qualidade (em número de pontos solucionados) por tamanho dos algoritmos HC-PMNL e HC-PMNL* para as instâncias de Christensen et al xi

14 Lista de Tabelas 4.1 Resultados de redução obtidos com PPROC para instâncias do Christensen et al. A coluna P indica o tamanho da instância, I o número de identificação da instância, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado. São apresentados os melhores resultados e as médias obtidas por bateria de teste Resultados de redução obtidos com PPROC para instâncias de Munique. A coluna P indica o tamanho da instância, I o número de identificação da instância, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado. São apresentados os melhores resultados e as médias obtidas por bateria de teste Resultados de redução obtidos com PPROC para instância da Suíça. A coluna L indica o tamanho de legenda utilizado, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado. São apresentados os melhores resultados e as médias obtidas por bateria de teste Médias do número de pontos solucionados e tempo de execução dos algoritmos FDL e PPROC+FDL com as instâncias selecionadas de Christensen et al. A coluna P indica o número de pontos da instância, I o número identificador da instância, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado em segundos. Em destaque a instância para qual foi registrada a maior diferença percentual entre os tempos de execução xii

15 4.5 Médias do número de pontos solucionados e tempo de execução dos algoritmos FDL e PPROC+FDL com as instâncias selecionadas de Munique. A coluna P indica o número de pontos da instância, I o número identificador da instância, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado em segundos. Em destaque a instância para qual foi registrada a maior diferença percentual entre os tempos de execução Médias do número de pontos solucionados e tempo de execução em segundos do algoritmo PPROC+HC para as instâncias selecionadas de Christensen et al. com diferentes valores do parâmetro INC. A coluna I informa o valor de INC, Q o número de pontos solucionados, T o tempo de execução e C a classificação de acordo com os melhores resultados (maior número de pontos solucionados por unidade de tempo). Em destaque o valor escolhido para o algoritmo em definitivo Médias do número de pontos solucionados e tempo de execução em segundos do algoritmo PPROC+HC para as instâncias selecionadas de Christensen et al. com diferentes valores do parâmetro NS. A coluna NS informa o valor do parâmetro, Q o número de pontos solucionados, T o tempo de execução e C a classificação de acordo com os melhores resultados (maior número de pontos solucionados por unidade de tempo). Em destaque o valor escolhido para o algoritmo em definitivo Médias do número de pontos solucionados e tempo de execução em segundos do algoritmo PPROC+HC para as instâncias selecionadas de Christensen et al. com diferentes valores do parâmetro NCE. A coluna NCE informa o valor do parâmetro, Q o número de pontos solucionados, T o tempo de execução e C a classificação de acordo com os melhores resultados (maior número de pontos solucionados por unidade de tempo). Em destaque o valor escolhido para o algoritmo em definitivo Percentuais médios de número de pontos solucionados por tamanho dos algoritmos estudados para as instâncias de Christensen et al Médias dos tempos de execução em segundos dos algoritmos estudados por tamanho para as instâncias de Christensen et al. Para rotina de geração da solução inicial os tempos não foram apresentados, pois foram desprezíveis xiii

16 4.11 Percentuais médios de número de pontos solucionados por tamanho dos algoritmos estudados para as instâncias de Munique Médias dos tempos de execução em segundos dos algoritmos estudados por tamanho para as instâncias de Munique. Para rotina de geração da solução inicial os tempos não foram apresentados, pois foram desprezíveis xiv

17 Lista de Algoritmos 1 Pseudocódigo do algoritmo de Wagner et al. para resolução do PMNL. F é o conjunto de atributos, C f o conjunto de posições candidatas de cada atributo f F e G o grafo de conflitos Pseudocódigo do procedimento POS-DOIS-P, utilizado para tentar encontrar posições de legenda livres de conflito para duplas de pontos não solucionados em L Pseudocódigo do procedimento POS-TRES-P, utilizado para tentar encontrar posições de legenda livres de conflito para triplas de pontos não legendados Pseudocódigo da rotina REGRA-2, que representa a segunda regra de redução do algoritmo PPROC Algoritmo PPROC, responsável pela redução do tamanho de uma instância para o PRCP Pseudocódigo da rotina GERA-SOL-INI, responsável pela construção da solução inicial do algoritmo. O parâmetro P representa o conjunto de pontos da instância, Vizinhos o conjunto de listas de vizinhos e Pontuacoes e Posicoes os conjuntos gerados pela rotina CALC-PONT. A solução L, retornada pela rotina, contém os deslocamentos que representam a solução inicial do algoritmo HC-PMNL Implementação em pseudocódigo da heurística HC. O parâmetro candidatos representa a lista de candidatos associada à solução L. Outros parâmetros do algoritmo são INC, NS e os conjuntos Vizinhos, Pontuacoes e Posicoes. Como saída, a rotina retorna a solução L e a lista candidatos atualizada. A variável l aux é utilizada para representar um deslocamento que não pertence a nenhuma solução xv

18 8 Função posinislider responsável por posicionar a legenda de um ponto no local que servirá de origem para o deslizamento da mesma Pseudocódigo da rotina PERTURBACAO. A rotina recebe como entrada a lista candidatos associada à solução corrente L, o conjunto Vizinhos e o parâmetro NCE. Ela retorna como saída a solução corrente e a lista de candidatos alterada pela remoção da legenda de alguns pontos da instância Rotina responsável pelo critério de aceitação do algoritmo Heurística construtiva HC-PMNL para o PMNL em alto nível de abstração xvi

19 1 Introdução A rotulação de objetos gráficos, como mapas e diagramas, por exemplo, é uma atividade de fundamental importância para permitir o entendimento e melhorar legibilidade desses objetos. No estudo da cartografia, sabe-se que para executar essa atividade manualmente é preciso muita paciência e dedicação [1], e normalmente os resultados são muito distantes dos ideais. O estudo científico da qualidade de rotulações cartográficas, que teve origem na década de 60 com IMHOF [2], iniciou o processo de automatização dessa atividade. Neste estudo, foram definidos alguns critérios para identificar o que seria considerado uma boa rotulação: A localização de uma legenda não deve ser ambígua, ou seja, deve ser claro para o leitor do mapa qual a legenda de cada atributo; A informação dentro das legendas deve ser legível; Nenhuma ou somente poucas legendas devem se sobrepor; Hoje, devido ao surgimento de diversas aplicações cartográficas, sistemas de informações geográficas e sistema de navegação online, entre outros, existem diversos trabalhos científicos voltados para o problema de rotulação cartográfica de atributos. Atributos em um mapa podem ser pontuais, como cidades e picos de montanha, lineares, como rios e estradas, ou de área, como países e oceanos. O subproblema que ganhou mais destaque, e que será abordado nesse trabalho, foi a rotulação de atributos pontuais, que ficou conhecido como o Problema de Rotulação Cartográfica de Pontos (PRCP). 1

20 O PRCP é um problema que, de um modo geral, consiste em determinar posições de legendas para pontos de um mapa de modo que sua legibilidade seja maximizada. Na literatura existem diversas variantes do PRCP. Determinar se todos os pontos devem ser rotulados, se conflitos são permitidos, se o tamanho das legendas de cada ponto é variável e se as legendas devem estar coladas em seus respectivos pontos são exemplos de características que determinam que tipo de variante do problema o pesquisador está tratando. Três variantes combinatórias do PRCP ganharam destaque na literatura. São elas: Problema de Maximização do Número de Legendas (PMNL) [3], Problema de Maximização do Tamanho de Legendas (PMTL) [4] e Problema de Minimização do Número de Conflitos (PMNC) [5, 6]. A seguir serão apresentados os principais objetivos e características de cada uma dessas variantes. O PMNL tem como objetivo determinar o maior número de pontos que podem ser rotulados mantendo o tamanho das legendas fixo, de maneira que no final não haja conflitos. Desse modo, é sabido que existe a possibilidade de nem todos os pontos estarem rotulados no final, pois nem todas as instâncias são 100% resolvíveis sem a permissão de conflitos. Já o PTML procura determinar o tamanho máximo das legendas de cada ponto, de maneira que todos os pontos possam ser rotulados. Assim como o PTML, a variante PMNC também tem como característica rotular todos os pontos com o objetivo de minimizar o número total de conflitos. Independente de qual variante do problema está sendo tratada, é preciso definir o modelo de posicionamento de legendas que será utilizado. Existem modelos discretos e contínuos. Os modelos discretos ou de posições fixas determinam exatamente quais são as posições de legenda que podem ser anexadas aos pontos. Já nos modelos contínuos as legendas podem ser posicionadas em qualquer ponto da extensão definida pela setas mostradas na Figura 1.1 [7]. Nessa figura são apresentados os modelos mais utilizados na literatura. É importante ressaltar que os modelos baseados em posições fixas não são limitados em quatro posições. Alguns trabalhos fazem uso de modelos discretos com mais de quatro posições fixas [5, 3]. 2

21 Figura 1.1: Modelos para posicionamento de legendas ao redor de um ponto. Figura retirada de [7]. Por ser um problema NP-difícil até em suas variantes mais simples [8], é recomendável a utilização de métodos heurísticos para resolução do PRCP em aplicações cujo tempo é um requisito importante. Neste trabalho é proposto um novo algoritmo dividido em duas partes: pré-processamento e heurística construtiva. O pré-processamento reduz o tamanho do problema, sem afetar sua solução ótima, com o objetivo de obter uma diminuição do tempo total de execução. Ele foi inspirado no trabalho de WAGNER et al. [9], que definiram um algoritmo de redução amplamente utilizado na literatura [5, 10]. A heurística construtiva é uma nova proposta para o PMNL, que, a partir de uma solução inicial, procura por meio de uma sequência de perturbações e construções melhorar os resultados existentes, principalmente para instâncias com maior nível de dificuldade. O novo algoritmo foi desenvolvido para tratar instâncias com legenda retangulares de tamanho fixo e constante para todos os pontos. A parte de pré-processamento utiliza o modelo de quatro posições fixas (Four-position) e o Two-slider, e a heurística construtiva utiliza o Four-slider. Como o algoritmo é voltado para resolução do PMNL, conflitos não são permitidos e não é obrigatório que todos os pontos sejam rotulados. A seguir, descreve-se o modo como o presente trabalho foi estruturado. No Capítulo 2, será feita uma revisão bibliográfica sobre os temas abordados neste trabalho. Primeiramente será feita uma revisão sobre conceitos relacionados a heurísticas. Em seguida será realizado um levantamento histórico sobre o PRCP, onde será mostrado, desde o início de seu estudo científico, os principais trabalhos e abordagens utilizadas na literatura. Finalmente, terminando esse capítulo, serão apresentados com mais detalhes os trabalhos de WAGNER et al. [9] e EBNER et al. [3], que foram os trabalhos que serviram de base para construção do novo algoritmo proposto e da presente dissertação de mestrado. No 3

22 Capítulo 3, o algoritmo será definido a nível conceitual: primeiro o pré-processamento e depois a heurística construtiva. No Capítulo 4, serão apresentados os resultados computacionais. São abordados os conjuntos de instâncias, os valores dos parâmetros utilizados pelo algoritmo e os experimentos realizados para análise do desempenho e comportamento do mesmo. No Capítulo 5, é apresentada a conclusão do trabalho. 4

23 2 Revisão Bibliográfica O objetivo desse capítulo é fazer uma revisão bibliográfica sobre os temas contidos no presente trabalho de dissertação. A idéia é apresentar os conceitos básicos relacionados aos algoritmos heurísticos e um histórico das abordagens propostas para resolução do problema. Dado que todas as variantes do PRCP são problemas de otimização combinatória, na Seção 2.1 apresentam-se as características desse tipo de problema. Na Seção 2.2 são apresentados os conceitos relacionados às técnicas heurísticas, necessários para o entendimento do algoritmo proposto neste trabalho. Em seguida, na Seção 2.3, é apresentado um histórico das principais soluções propostas para o PRCP e como o problema de rotulação evoluiu com o passar do tempo. Finalmente, nas Seções 2.4 e 2.5, são apresentados com mais detalhes os trabalhos de WAGNER et al. [9] e EBNER et al. [3], que serviram de base para preparação do presente trabalho. 2.1 Otimização Combinatória Entende-se por otimizar encontrar o valor ótimo para uma função objetivo definida dentro de um determinado domínio. A Otimização Combinatória é um ramo da matemática e da ciência da computação que trata situações em que esse domínio é finito e os problemas envolvidos são limitados por uma série de restrições, como custo, espaço e tempo, por exemplo. Elementos do domínio que respeitam o conjunto de restrições do problema são chamados de soluções viáveis do problema. Portanto, em resumo, um problema de otimização combinatória procura pela melhor solução dentre um conjunto finito Γ de soluções viáveis em respeito a uma função objetivo f : Γ R, isto é, um ele- 5

24 mento I Γ com f (I ) = max{ f (I) I Γ}, se o problema for de maximização, ou com f (I ) = min{ f (I) I Γ}, se o problema for de minimização [7]. O estudo da otimização combinatória é importante pela sua grande aplicação prática. Uma série de problemas reais, como alocação de passageiros em linhas aéreas, carregamento de caminhões de entrega, roteamento de veículos com restrições e planejamento de redes de transporte de energia podem ser modelados como problemas famosos de otimização combinatória, como o Caixeiro Viajante, Empacotamento, Árvore Geradora Mínima e Conjunto Independente Máximo, por exemplo, para os quais já existe uma série de soluções propostas [11]. O próprio Problema de Maximização do Número de Legendas (PMNL), se modelado por meio do grafo de conflitos, que será apresentado na Seção 2.3, pode ser interpretado como o Problema do Conjunto Independente Máximo de Vértices [12]. Existem várias maneiras de se resolver um problema de otimização combinatória. A forma mais simples é listar todas as soluções do domínio e depois escolher a melhor. No entanto, mesmo utilizando computadores de grande capacidade, essa solução torna-se impraticável até mesmo para domínios de tamanho moderado. Muitas vezes, quando a função objetivo é pouco explorada, as restrições são complicadas ou é grande o tamanho do problema, é praticamente impossível encontrar sua solução ótima. De fato, essa situação é tão frequente que foram desenvolvidas teorias na matemática e na ciência da computação para tornar mais precisa a estimativa da dificuldade de certos problemas, de maneira que não se perdesse muito tempo na tentativa de encontrar a solução ótima de problemas para os quais ela não pode ser obtida em tempo polinomial. A principal delas chama-se Teoria da NP-Completude [13]. Desse modo, ao tentar resolver um problema de otimização combinatória, é preciso fazer uso de métodos mais eficientes para se alcançar o objetivo desejado. Uma das formas de fazer isso é por meio de algoritmos heurísticos que, embora não sejam comprovadamente ótimos em sua maioria, são capazes de obter soluções de qualidade aceitável com pouco esforço computacional para problemas de otimização com alto nível de complexidade. 6

25 2.2 Heurísticas Heurísticas são métodos aproximativos projetados com base nas propriedades estruturais ou nas características das soluções dos problemas. Uma solução faz parte de um espaço de soluções, que contém todas as soluções possíveis de um determinado problema e os relacionamentos entre elas. Ao contrário de algoritmos exatos, que podem comprovadamente chegar à solução ótima, heurísticas procuram soluções com qualidade próxima à solução ótima percorrendo uma parte reduzida do espaço de soluções. Por esse motivo, heurísticas normalmente conseguem encontrar soluções razoáveis com pouco esforço computacional e são uma boa alternativa para resolução de problemas de otimização combinatória. Em termos pedagógicos, as heurísticas podem ser divididas em três grupos: construtivas, de melhoramento e metaheurísticas. As heurísticas construtivas são aquelas que utilizam técnicas de adição na construção da solução do problema. A cada iteração vão sendo agregados novos elementos à solução até sua completude, configurando um processo de construção contínuo e gradativo [14]. Heurísticas de melhoramento procuram encontrar uma solução de qualidade, realizando uma busca no espaço de soluções a partir de uma solução inicial qualquer. A idéia é tentar melhorar a solução inicial, executando uma sequência de pequenas alterações, até que um determinado critério de parada seja atingido. Para entender os passos realizados por uma heurística de melhoramento é preciso introduzir alguns conceitos. A Figura 2.1 mostra, entre outras coisas, o espaço de soluções E de um problema P. Cada vértice do grafo é uma solução diferente. Define-se busca local como a sequência de alterações sistemáticas realizadas em uma solução até o alcance de um critério de parada. Diz-se que cada alteração é um passo da busca local ou movimento. Um dos critérios de parada mais utilizados é aquele que interrompe a busca quando a heurística não consegue obter uma solução melhor do que a solução corrente, de acordo com alguma função de custo f : E R. Nesse momento, diz-se que foi encontrado um ótimo local. Um ótimo local, portanto, é a melhor solução S que pode ser obtida por 7

26 meio de uma busca local executada a partir de uma solução S qualquer. Um ótimo local pode ou não ser um ótimo global, que representa a melhor solução do espaço de soluções. No caso de um problema de minimização, por exemplo, S seria um ótimo global se f (S ) f (S) S E. A Figura 2.1 apresenta uma busca local com dez movimentos executados a partir da solução S, que termina no ótimo local S. Figura 2.1: Espaço de soluções E de um determinado problema. Cada vértice do grafo representa uma solução e as arestas conectam soluções vizinhas. Os vértices em formato de quadrado formam a vizinhança da solução S e o caminho tracejado mostra a trajetória traçada por uma busca local, que leva a solução inicial S até o ótimo local S. A numeração acima das arestas tracejadas indica a ordem dos movimentos aplicados pela busca local. No exemplo da Figura 2.1 soluções conectadas por uma aresta são chamadas de soluções vizinhas. As soluções em formato de quadrado, ao redor de S, formam a chamada vizinhança de S. A vizinhança de uma solução S é um conjunto N(S) E, que contém todas as soluções que podem ser obtidas a partir de um movimento realizado em S. A maioria das heurísticas de melhoramento propostas para problemas de otimização geram vizinhanças com características em comum, como simetria e regularidade, por exemplo. Tais características são refletidas no grafo que representa o espaço de soluções do problema. O grafo é simétrico quando é possível voltar para a solução anterior a um movimento executando o movimento inverso, e regular quando todas as soluções (no grafo, vértices) possuem o mesmo número de vizinhos (no grafo, arestas). O grau de cada vértice representa o número de soluções vizinhas a uma solução. Um passo de uma heurística construtiva ou de melhoramento é executado com base em uma avaliação local da situação, ou seja, levando em consideração somente o que é 8

27 melhor para a solução corrente em relação a suas vizinhas. Depois de alcançarem um ótimo local, esses tipos de heurísticas terminam, retornando então a solução encontrada. A Figura 2.2 ilustra um exemplo de gráfico de custo do espaço de soluções de um determinado problema. Normalmente, com a utilização de uma heurística de melhoramento, as soluções próximas a um ótimo local são atraídas para ele, formando a chamada base de atração de um ótimo local. Figura 2.2: Gráfico de custo do espaço de soluções E de um problema de minimização. As soluções em destaque são ótimos locais. O primeiro ótimo local da esquerda para direita é o ótimo global do problema. As metaheurísticas funcionam como guias para outras heurísticas, buscando formas de escapar de ótimos locais experimentando outras regiões do espaço de soluções. Muitas vezes, metaheurísticas permitem a realização de movimentos que pioram a qualidade da solução corrente como forma de escaparem de um ótimo local e, com isso, se aproximarem ainda mais de um ótimo global. 2.3 Histórico de Soluções O objetivo dessa seção é apresentar um histórico cronológico das principais soluções propostas para o PRCP e todas as suas variantes. O estudo científico do problema de rotulação começou com o cartógrafo IMHOF [2] em Imhof descreveu em seu trabalho uma série de regras que definiam características de rotulações boas e ruins. Esse trabalho foi complementado mais tarde por YOELI [15] em 1972, que definiu novas regras e publicou o primeiro algoritmo para resolver o problema de rotulação de forma 9

28 automática. Yoeli implementou um algoritmo guloso determinístico, cuja função objetivo considerava, entre outras coisas: A quantidade de conflitos entre legendas e entre legendas e atributos; Preferências cartográficas para determinadas posições de legendas; O número de atributos não legendados; IMHOF [16] ainda chegou a publicar mais um artigo sobre o assunto em Em 1982, HIRSCH [17] desenvolveu o primeiro algoritmo utilizando o modelo contínuo de posicionamento de legendas (Slider Model). Ele introduziu um modelo similar ao Fourslider e propôs um método de rotulação que pode ser interpretado como uma abordagem de forças direcionadas. Esse método serviu de base para a construção de uma série de algoritmos em trabalhos posteriores, inclusive o de EBNER et al [3]. O algoritmo de Hirsch utiliza o somatório das forças calculadas para decidir heuristicamente como mover as legendas de uma determinada solução, tentando melhorá-la. Sua abordagem pode ser classificada como uma heurística gradient-driven. Uma série de trabalhos foram publicados na década de oitenta. Destaque para o ano de 1986, quando LANGRAN et al. [18] desenvolveram um algoritmo guloso para o PRCP utilizando point selection, a técnica que permite a remoção de pontos da solução, liberando o espaço de suas legendas e seus próprios espaços para outras rotulações. CROM- LEY [19], neste mesmo ano, e ZORASTER [20], em 1990, formularam o PMNL no modelo de posicionamento discreto (p-position) utilizando programação linear inteira 0-1, e o resolveram de forma aproximada usando Relaxação Lagrangeana, técnicas de otimização subgradiente e algumas heurísticas específicas para o problema. Ambos estão entre os primeiros algoritmos exatos para o PMNL no modelo p-position. No entanto, suas abordagens não foram capazes de obter soluções comprovadamente ótimas para instâncias de relevância prática [7]. KATO et al. [21] foram os primeiros a publicar um trabalho provando a NP-completude do PRCP no modelo p-position para p 4, em De forma independente, em 1991, FORMANN et al. [22] e MARKS et al. [8] provaram a NP-completude do mesmo pro- 10

29 blema. Formann et al. apresentaram outros resultados interessantes. Eles provaram que é possível resolver o PRCP em tempo O(nlogn) no modelo Two-position, por meio de uma formulação 2-satisfability. Além disso, apresentaram um algoritmo 1 2-aproximativo que executa em tempo O(nlogn) para o PMTL no modelo Four-position, caso as legendas possuam tamanho único para todos os pontos, e ainda provaram que é impossível obter um fator melhor a menos que P = NP [7]. Muitos outros trabalhos importantes foram publicados na década de noventa. Em 1993, KU V CERA et al. [23] apresentaram um algoritmo para o PMTL que resolve instâncias com até 100 legendas de forma ótima em tempo O(4 n ). Os autores publicaram uma observação informando que somente O(log n) fatores de escala diferentes são candidatos a solução ótima em modelos discretos. Isso significa que é suficiente resolver O(log n) problemas de decisão e um problema de rotulação para resolver uma instância do PMTL utilizando modelos discretos de posicionamento [7]. O problema de decisão consiste em determinar se existe, para uma determinada instância, uma rotulação de todos os pontos sem conflitos e o problema de rotulação consiste em determinar qual é essa rotulação, caso exista. Em 1995, CHRISTENSEN et al. [24] propuseram uma heurística baseada na metaheurística Simulated Annealing [25] para o PMNL utilizando o modelo Four-position. O trabalho incluiu uma boa revisão de métodos heurísticos propostos para o PRCP e um extenso estudo computacional. Seus resultados superaram os resultados de todas as heurísticas estudadas no conjunto de instâncias testado. O procedimento proposto pelos autores para criar instâncias se tornou um gerador de benchmark amplamente utilizado na literatura [7, 3, 26]. Em 1997, ITURRIAGA et al. [27] publicaram um estudo comprovando a NP-completude do problema de decisão associado ao PRCP no modelo Two-slider. Neste mesmo ano, os autores propuseram uma nova variante do problema de rotulação no modelo p-position, que foi chamado Problema de Rotulação Elástica [28]. Na nova formulação, os retângulos que representam as legendas são definidos apenas por suas áreas, o que permite a alteração dos aspectos de proporção individual de cada retângulo [7]. Ainda em 1997, DODDI et 11

30 al. [29] também consideraram novas variantes do PRCP. Entre outras abordagens, eles desenvolveram um algoritmo de fator constante em tempo polinomial para legendar atributos pontuais com legendas retangulares, de modo que um atributo pode permanecer em qualquer lugar na borda de sua legenda e os retângulos que representam as legendas podem ser posicionados com qualquer orientação. Os resultados dessa variante são generalizados para o caso de legendas elípticas. Usando como motivação o problema de rotulação, em 1998, AGARWAL et al. [30] desenvolveram um algoritmo 2 1 -aproximativo que executa em tempo O(nlogn) para encontrar o maior subconjunto de retângulos não conflitantes em um plano, caso os retângulos possuam altura única. O algoritmo, baseado na técnica Dividir e Conquistar, divide o problema em subproblemas de uma dimensão, para os quais são calculados os conjuntos independentes máximos utilizando uma estratégia gulosa. Os autores também sugeriram um esquema mais geral de aproximação polinomial no modelo p-position. Estendendo os resultados, eles provaram que o algoritmo proposto encontra soluções de tamanho até Λp /(1 + 1 k ) para k 1 em tempo O(nlogn + n 2k 1 ), onde Λ p é a solução ótima [7]. No ano de 1999, VERWEIJ et al. [26] também utilizaram a formulação do conjunto independente máximo de vértices para propor um algoritmo para o PMNL com a utilização de modelos discretos de posicionamento. O algoritmo branch-and-cut proposto seria o único até o momento a conseguir soluções comprovadamente ótimas para instâncias de relevância prática. De acordo com os testes realizados pelos autores, o algoritmo foi capaz de resolver instâncias do benchmark de CHRISTENSEN et al. [24] com 800 pontos em vinte minutos e com 950 pontos em duas horas. Finalizando a década de noventa, destaca-se o trabalho de KREVELD et al. [31], que apresentaram um algoritmo 1 2-aproximativo capaz de encontrar soluções para o PMNL usando qualquer modelo contínuo com altura de legenda única para todos os pontos. O algoritmo guloso do tipo sweep line possui complexidade O(n log n). Para os mesmos modelos os autores definiram um esquema aproximativo em tempo polinomial. O respectivo algoritmo rotula até (1 ε) vezes o número ótimo de pontos em tempo O(n 4 ε 2 ). STRIJK et al. [32] chegaram a estender esse trabalho para legendas com altura variável, 12

31 mantendo o fator 1 2-aproximativo. Para r diferentes alturas de legenda na instância, o tempo de execução do algoritmo é O(r nlogn) [7]. WOEGINGER [33], em 2000, contribuiu para o PRCP provando que, diferente do PMTL, o PMNL é NP-difícil nos modelos One-Position e Two-position. A prova foi feita por meio de uma redução para o problema do conjunto independente máximo em grafos planos cúbicos, que é um conhecido problema NP-difícil [34]. Woeginger ainda mostrou que o PRCP pode ser resolvido em tempo O(nlogn) no modelo One-slider e que a variante PMNL no mesmo modelo é NP-difícil. STRIJK et al. [12] propuseram um algoritmo branch-and-cut no modelo Four-position e algumas heurísticas para o problema do conjunto independente máximo de vértices aplicado sobre um grafo de conflitos, visando encontrar soluções para o PMNL. O grafo de conflitos é um grafo cujos vértices representam as posições de legenda da instância e as arestas representam ligações entre legendas que estão em conflito. As técnicas heurísticas aplicadas pelos autores foram Simulated Annealing, Busca em Vizinhança Diversificada, k-opt e Busca Tabu. A última apresentou os melhores resultados para suas instâncias [10]. Ainda no ano 2000, KLAU et al. [35] propuseram uma formulação para o PMNL independente de modelos de posicionamento. O algoritmo definido é baseado em um par dos chamados grafos com restrição, em inglês constraint graphs, que codificam as relações de posicionamento vertical e horizontal. A idéia chave é unir esses dois grafos sobre um conjunto de restrições adicionais, caracterizando assim todas as soluções possíveis para o problema. Essa descrição combinatória permite uma formulação baseada em programação linear inteira 0-1, cuja solução leva a rotulação ótima. Tal algoritmo foi o primeiro a obter soluções comprovadamente ótimas para o PMNL usando o modelo Four-slider. Em 2001, WAGNER et al. [9] propuseram três regras com o intuito de reduzir o tamanho do grafo de conflitos sem afetar o tamanho da solução ótima do problema de rotulação. Os autores combinaram as regras com uma heurística e obtiveram um algoritmo simples, rápido e efetivo. Suas regras foram utilizadas em uma série de trabalhos publicados na literatura [5, 36, 10]. Por ser um dos trabalhos que serviu de base para 13

32 essa dissertação de mestrado, o trabalho de Wagner et al. será visto com mais detalhes na Seção 2.4. Em 2002, YAMAMOTO et al. [37] propuseram uma Busca Tabu que obteve bons resultados comparados com resultados da literatura até o momento para o PRCP. A função objetivo procura minimizar o número de legendas sem conflito em uma rotulação de todos os pontos, tratando-se de um algoritmo para o PMNC. O algoritmo, desenvolvido no modelo Four-position, pré-processa todos os conflitos entre posições de legenda, armazenando para cada legenda l uma lista com todos os pontos e legendas que estão em conflito com l. Depois de gerar uma solução inicial, o algoritmo entra em um laço que termina quando encontra uma solução sem conflitos ou depois de um determinado número de iterações. Em cada iteração, o algoritmo executa o melhor movimento levando em consideração a função de custo, a lista tabu, o critério de aspiração e uma lista de candidatos, contendo um subconjunto de pontos pré-selecionados. Uma série de novos trabalhos baseados em técnicas heurísticas foram propostos a partir do ano de ALVIM et al. [5] propuseram uma nova heurística para o PMNC baseada na aplicação da técnica POPMUSIC [38]. Os experimentos realizados mostraram que o algoritmo obteve um bom desempenho em relação a outras metaheurísticas desenvolvidas até então. A idéia básica do POPMUSIC é, dada uma solução inicial, otimizar localmente partes dessa solução. Essas otimizações locais, executadas por meio de uma implementação da Busca Tabu proposta por YAMAMOTO et al. [37], são repetidas até que nenhuma melhora seja encontrada. YAMAMOTO et al. [39] propôs um algoritmo chamado Fast Algorithm for Label Placement (FALP), que utiliza o modelo Four-position com objetivo de maximizar o número de legendas sem conflito. Em um primeiro passo, o algoritmo legenda todos os atributos para os quais todas as posições de legenda estão livres de conflito. Depois, para cada atributo restante, o algoritmo escolhe a posição que cria o menor número de conflitos adicionais. Finalmente, visando melhorar a qualidade da solução obtida nos dois passos iniciais, o algoritmo processa novamente todos os pontos, trocando posições de legenda que podem reduzir o número de conflitos entre os respectivos pontos e seus vizinhos mais 14

33 adiante. EBNER et al. [3] propuseram um algoritmo híbrido para o PMNL utilizando o modelo Four-slider, chamado FDL. O algoritmo mescla um sistema virtual de forças direcionadas com uma heurística baseada na metaheurística Simulated Annealing. Os resultados apresentados por Ebner et al. foram superiores a todos os algoritmos propostos para o PMNL até o momento nas instâncias do benchmarck de CHRISTENSEN et al. [24]. O FDL é reconhecido como boa referência de rotulação 2D na literatura [48, 40] e por isso será investigado com mais detalhes na Seção 2.5. Em 2006, CRAVO et al. [36] sugeriram uma heurística gulosa para o PMNC, utilizando o modelo Four-position, e obtiveram em seus resultados soluções com qualidade próxima às melhores já obtidas, em tempos muito inferiores para o conjunto de instâncias testado. A heurística é baseada no algoritmo RSF de YAMAMOTO [41] e utiliza a técnica de redução de WAGNER et al. [9]. O algoritmo inicia escolhendo o vértice de grau mínimo do grafo de conflitos para colocar na solução do problema. Ao escolher um vértice o algoritmo desativa todos os seus vizinhos, de modo que o grau dos vizinhos ativos dos vértices desativados precisam ser recalculados. O algoritmo segue escolhendo o vértice de menor grau até que não existam mais vértices ativos. Nesse mesmo ano, RIBEIRO et al. [6] desenvolveram duas novas formulações matemáticas para o PMNC e uma heurística Lagrangeana, que é aplicada ao grafo de conflitos da instância depois de sua decomposição em subproblemas, chamados pelos autores de clusters. O novo algoritmo obteve os melhores resultados reportados para o PMNC na literatura até então para o conjunto de instâncias testado. Finalizando o histórico de soluções, CRAVO et al. [10], em 2007, propuseram uma heurística baseada na metaheurística GRASP [42] aplicada ao grafo de conflitos, visando testar o desempenho da metaheurística e melhorar os resultados obtidos para o PMNC no conjunto de instâncias selecionados pelos autores. Os autores utilizaram o algoritmo de redução de WAGNER et al. [9] e, de acordo com os dados apresentados, do ponto de vista combinatório conseguiram melhorar ainda mais os resultados existentes na literatura. 15

34 2.4 Algoritmo de Wagner et al. WAGNER et al. [9] propuseram uma heurística para o PMNL utilizando o modelo Four-position. O algoritmo proposto é independente do formato das legendas e pode ser aplicado tanto para atributos de ponto, quanto para atributos lineares ou de área. A entrada do algoritmo é o grafo de conflitos da instância, abstraindo uma parte da dificuldade do problema. O algoritmo foi dividido em duas fases: na primeira é aplicado um conjunto de regras ao grafo, que possuem o objetivo de reduzir o tamanho do problema, eliminando legendas de modo que o valor da solução ótima não seja afetada. Na segunda, é executada uma heurística simples, que reduz o número de candidatos de cada atributo para no máximo um. As regras de redução de Wagner et al. serviram de inspiração para o algoritmo de pré-processamento proposto no presente trabalho, que será apresentado na Seção 3.3. A seguir serão apresentadas as regras de redução de Wagner et al. Considere p um atributo a ser rotulado e p i a i-ésima legenda candidata do atributo p. Na primeira fase do algoritmo, as três regras são aplicadas exaustivamente a cada atributo da instância, ou seja, toda vez que uma posição candidata p i é eliminada, o algoritmo verifica recursivamente se as regras podem ser aplicadas na vizinhança de p i, formada pelo atributo p e os atributos em conflito com p i. Os autores provam que cada uma das regras não reduz o valor da solução ótima. São elas: Se p tem um candidato p i sem nenhum conflito, declare p i como parte da solução, e elimine todos os outros candidatos de p; Se p tem um candidato p i que só está em conflito com algum q k, e q tem um candidato q j ( j k) que é somente sobreposto por p l (l i), então adicionar p i e q j à solução e eliminar todos os outros candidatos de p e q; Se p tem somente um candidato p i sobrando, e as legendas que sobrepõem p i formam uma clique, então declarar p i como parte da solução e eliminar todos os rótulos que sobrepõem p i. 16

35 A Figura 2.3 ilustra situações em que as regras são aplicadas. O retângulo azul representa a legenda que foi definida como parte da solução e os retângulos com a borda pontilhada representam legendas que foram eliminadas. É importante ressaltar que se o objetivo for utilizar somente a primeira fase do algoritmo Wagner et al., com intuito de reduzir o tamanho do problema antes do início do algoritmo principal, não é necessário implementar a terceira regra. Um pré-requisito básico para que a terceira regra seja aplicada é a existência de um ponto não resolvido pelo algoritmo com apenas uma legenda candidata sobrando. Esse pré-requisito não pode ser obtido somente com as duas primeiras regras. Revisando a definição da primeira e da segunda regra, pode-se observar que as legendas eliminadas por elas pertencem a pontos que são dados como resolvidos depois das respectivas aplicações. Desse modo, conclui-se que só faz sentido implementar a terceira regra caso ela venha a ser utilizada durante outra fase do algoritmo, em que legendas candidatas são eliminadas por uma lógica diferente. Esse fato obriga que o algoritmo seja baseado em um modelo discreto de posicionamento de legendas. Figura 2.3: As Figuras, obtidas em [9], ilustram o comportamento das regras de redução. A figura mais a esquerda representa a primeira regra, a do meio a segunda e a mais a direita a terceira. A segunda fase do algoritmo é representada por uma heurística, que somente é executada caso tenha sobrado algum ponto não solucionado depois da primeira fase. A heurística percorre cada atributo não solucionado p e elimina a posição candidata com maior número de conflitos entre as posições candidatas de p. A heurística começa percorrendo os atributos com maior número de posições candidatas e repete o processo de eliminação até que cada atributo possua no máximo uma legenda sobrando e não existam mais conflitos. Toda vez que uma posição candidata p i é eliminada, o algoritmo aplica as regras de redução na vizinhança de p i. Segue o pseudocódigo do algoritmo de Wagner et al. em 1, retirado de [9]. 17

36 entrada: F, C f, G begin //Fase 1 aplicar as regras exaustivamente para todos os atributos //Fase 2 while existem posições candidatas em conflito do f atributo com o maior número de posições candidatas em F remover a posição candidata c C f com maior número de conflitos aplicar as regras exaustivamente, iniciando com os atributos na vizinhança de c end end Algoritmo 1: Pseudocódigo do algoritmo de Wagner et al. para resolução do PMNL. F é o conjunto de atributos, C f o conjunto de posições candidatas de cada atributo f F e G o grafo de conflitos. 2.5 Algoritmo de Ebner et al. Para realização de um estudo comparativo no presente trabalho, implementou-se o algoritmo FDL de EBNER et al. [3]. Nesta seção será apresentado um resumo do FDL, um algoritmo composto por um sistema de forças direcionadas somado a uma heurística baseada na metaheurística Simulated Annealing. O algoritmo foi desenvolvido para resolução do PMNL no modelo Four-slider. A seguir a definição do problema segundo Ebner et al. Pode-se observar que ela deriva da formulação matemática de KLAU [7]. Definição 1: Dado um conjunto Λ = {λ 1,...,λ k } de legendas, duas funções w,h : Λ R, as larguras e alturas das legendas, e a função a : Λ R 2, que mapeia as legendas a um ponto do plano, encontre o subconjunto Λ Λ de cardinalidade máxima e a função ρ : Λ R, onde R é o conjunto de retângulos no plano, tal que as seguintes condições sejam verdadeiras: o retângulo ρ(λ) tem largura w(λ) e altura h(λ) para todo λ Λ ; o ponto a(λ) fica nos limites de ρ(λ) para todo λ Λ ; a interseção aberta ρ(λ) ρ(µ) é vazia para todo λ,µ Λ e λ µ; As contribuições do trabalho de Ebner et al. são: (1) o algoritmo FDL, e (2) um 18

37 extenso estudo computacional comparativo com os melhores métodos de rotulação publicados até o momento para o PMNL, utilizando o benchmark de CHRISTENSEN et al. [24] e outro conjunto de instâncias baseadas em dados reais. Para os autores, uma das principais características de uma boa rolutação é que o posicionamento de uma legenda deve ser o menos ambíguo possível. O leitor deve identificar sem dificuldades a que ponto cada legenda está associada, a informação contida em cada legenda deve ser legível e o número de conflitos e legendas omitidas no mapa deve ser mínimo. O método proposto por Ebner et al., de modo geral, define, para uma dada configuração de legendas, um conjunto finito de configurações vizinhas, e escolhe uma delas aleatoriamente. Considere energia do sistema um valor que reflete a qualidade de uma rotulação. Configurações que reduzem a energia do sistema são aceitas automaticamente, enquanto as que aumentam podem ser acatadas com uma probabilidade que vai se reduzindo com o tempo. O algoritmo pode ser considerado híbrido, pois é baseado em uma técnica determinística, que constrói um sistema virtual de forças direcionadas entre os rótulos, e ao mesmo tempo utiliza uma técnica heurística para direcionar a movimentação no espaço de soluções. A seguir serão apresentados os fundamentos básicos de cada uma dessas técnicas Sistema Virtual de Forças Direcionadas Sabe-se que o objetivo final do algoritmo é posicionar o maior número possível de legendas, de modo que não haja conflitos. No entanto, do ponto de vista do sistema de forças, esse objetivo se traduz em reduzir ao máximo a energia total (E) do sistema. Essa energia é composta pela soma da intensidade de todas as forças existentes no sistema. Na prática, quanto menor a energia total, melhor será o posicionamento das legendas. As forças são computadas por vizinhança, ou seja, para cada legenda o algoritmo computa as forças relativas a cada um de seus vizinhos. Um vizinho de uma legenda é outra legenda que possui a possibilidade de interceptar a primeira. A seguir a formalização matemática do sistema de forças. Definição 2: A vizinhança de um rótulo λ Λ, com largura w(λ), altura h(λ) e 19

38 associado ao ponto a(λ) = (x λ,y λ ) é: N(λ) = { µ Λ w(λ) + w(µ) x λ x µ h(λ) + h(µ) y λ y µ } Definição 3: Para cada duas legendas λ,µ Λ, define-se d min : Λ Λ R como 0 se λ e µ se sobrepõem d min (λ,µ) = { p,q p λ,q µ } caso contrário A função p,q : R 2 R 2 R denota a distância euclidiana entre os pontos p e q no plano cartesiano. Define-se também i x (λ,µ) : Λ Λ R e i y (λ,µ) : Λ Λ R como a largura e altura da área de interseção entre λ e µ, respectivamente. Pode-se então definir a função de força f = ( f x, f y ) para cada legenda da seguinte maneira: Definição 4: Para cada legenda l Λ com ponto central c l = (x l,y l ), a componente x função de força f x : Λ R é definida como f x (l) = ( f i (l,r) + f a (l,r) + f d (l,r))(x l x r ) c r N(l) l,c r As funções f i : Λ Λ R, f a : Λ Λ R, f d : Λ Λ R são definidas a seguir: f i (l,r) = δ 1 i x (l,r)i y (l,r); δ 2 se λ e µ se sobrepõem f a (l,r) = 0 caso contrário; f d (l,r) = δ 3 max(ε,d min (l,r)) 2 A componente y é definida de forma análoga. As constantes δ 1,δ 2,δ 3,ε R controlam a influência de cada termo na função de força f e são parâmetros do algoritmo. A constante ε limita o valor de f d em δ 2 /ε 2. Finalmente, a energia total do sistema é dada 20

39 por: E = f (l) l Λ Analisando a fórmula f i, pode-se observar que, quando duas legendas se sobrepõem, a área de interseção entre elas é o fator determinante para indicar a intensidade da força que uma aplica na outra, junto com a penalidade definida pela fórmula f a. Quando não existe sobreposição, a fórmula f d determina a intensidade das forças com base na distância mínima entre as legendas. O objetivo da força é indicar a direção para qual uma legenda deve se mover para escapar de uma sobreposição, ou simplesmente se afastar de outra legenda muito próxima, melhorando a legibilidade geral do mapa. Portanto, ao aplicar uma força em uma legenda, o algoritmo automaticamente aplica na outra a mesma força no sentido oposto. A direção de uma força é definida a partir dos pontos centrais de cada legenda. A força final de uma determinada legenda é a resultante da força que cada um de seus vizinhos aplica sobre ela. Essa técnica funciona bem na maioria das vezes, porém, a Figura 2.4 mostra um exemplo de configuração para qual ela é ineficaz. Figura 2.4: Configuração de legendas que não pode ser resolvida pelo sistema de forças. Retirada de [3]. Na situação apresentada na Figura 2.4, os vetores que representam as forças apontam na direção das setas a partir do ponto central das legendas. Sabendo que os quadrados pretos representam os pontos, não há mais como mover as legendas no sentido apontado pelas forças, portanto, o conflito não seria resolvido se essa fosse uma situação real. Avaliando as consequências desse problema, conclui-se que o principal inconveniente de um método baseado somente no sistema de forças explicado é a incapacidade de escapar de ótimos locais, principalmente quando não há muito espaço para manobrar as legendas. É preciso que o algoritmo aceite, em algumas ocasiões, configurações de legendas que aumentam a energia total do sistema, para depois alcançar resultados melhores. É nesse ponto que entra a heurística baseada na metaheurística Simulated Annealing. 21

40 2.5.2 Heurística Baseada em Simulated Annealing O Simulated Annealing é um método flexível, aplicável a diversos problemas de otimização [43]. A idéia do método é aplicar uma série de movimentos seqüenciais, enquanto a temperatura do sistema diminui. Um movimento que leva a um estado atual com energia E1, E2 E1 para um estado com energia E2 é aceito com uma probabilidade e ( kt ), onde k > 0 e t é a temperatura do sistema. Isso significa que a probabilidade do sistema aceitar um estado que aumenta sua energia é reduzida conforme diminuição da temperatura. Baseado na idéia do Simulated Annealing o algoritmo executa uma série de estágios de temperatura. O primeiro estágio executa exatamente m movimentos, onde m é trinta vezes o número de legendas existentes no mapa. No final de cada estágio, esse número é atualizado com o máximo entre o número de legendas, e o mínimo entre cinquenta vezes o número de elementos do Conjunto de Legendas Obstruídas e dez vezes o número de legendas. O Conjunto de Legendas Obstruídas (CLO) é um conjunto gerado a partir da solução inicial, que contém todas as legendas que possuem pelo menos um conflito ou que podem ser movidas na direção de sua força resultante. Conforme movimentos são realizados, legendas são adicionadas ao CLO, na medida que passam a sobrepor outras legendas ou que passam a poder se movimentar na direção de sua força resultante. Ao mesmo tempo, legendas são removidas, na medida que não estão mais sobrepostas e não podem mais se movimentar na direção de suas forças resultantes. O algoritmo começa obtendo uma solução inicial aleatória, utilizando o modelo discreto de oito posições. Com base na solução inicial, é criado o CLO, são calculadas as forças entre as legendas e a força resultante de cada legenda. Em seguida, o algoritmo inicializa a temperatura inicial e a taxa de resfriamento. A temperatura foi escolhida de modo que, no primeiro estágio, o algoritmo aceite movimentos que gerem um acréscimo na energia total com uma probabilidade de 30%. A taxa de resfriamento foi escolhida, de modo que a temperatura fique menor que um depois de quinze estágios. O movimento da heurística e baseado no modelo Four-slider e é executado da seguinte forma: o algoritmo escolhe aleatoriamente uma legenda candidata do CLO e verifica se ela pode ser movida no sentido de sua força resultante, tanto na vertical quanto na hori- 22

41 zontal. Caso ela possa ser movida nas duas direções, o algoritmo escolhe heuristicamente para que direção irá mover. A direção correspondente a componente da força resultante que possui maior intensidade tem mais chance de ser escolhida. Caso a legenda só possa ser movida em uma direção, a direção em questão é escolhida. Determinada a direção, o algoritmo utiliza como unidade de deslocamento 20% do espaço restante para realização do movimento. Depois de deslocar a legenda, o algoritmo atualiza as forças na sua vizinhança e verifica a componente de sua nova força resultante na direção escolhida. Se ela mudar de sentido, a unidade de deslocamento é dividida pela metade e um novo movimento é realizado no sentido oposto. Esse procedimento continua até que o módulo da componente da força resultante na direção escolhida seja menor que 0,5 ou até a vigésima iteração. Se depois de terminar o procedimento o módulo da componente da força resultante na direção escolhida for maior que 0,5 e a legenda ainda puder ser movimentada no sentido da componente, o algoritmo move a legenda para uma posição aleatória do modelo discreto de oito posições. Caso o movimento seja aceito, de acordo com as regras baseadas na diferença entre a energia total do sistema, antes e depois do movimento, e os parâmetros de controle de temperatura, o algoritmo atualiza o CLO e recomeça, escolhendo uma nova legenda candidata. Caso contrário, a legenda é recolocada em sua antiga posição e as forças são restauradas para o estado anterior ao movimento aplicado. Um movimento insignificante é um movimento aceito cuja diferença entre a energia total do sistema antes e depois de executá-lo não ultrapassa o valor de 0,5, que é um parâmetro do algoritmo. No fim de um estágio, para acelerar a convergência para solução, o algoritmo identifica a legenda com maior número de sobreposições e a remove do problema caso todos os movimentos aceitos durante o estágio tenham sido insignificantes. Esse processo, normalmente, reduz de forma abrupta o número de elementos do CLO depois de alguns movimentos, pois todos os vizinhos da legenda removida passam a ter mais espaço para manobrar e, conseqüentemente, encontrar posições que não os deixam sobrepostos. Os resultados do trabalho de Ebner et al. foram obtidos a partir de testes com o 23

42 benchmark de Christensen et al., e com instâncias derivadas de dados do mundo real, representando as posições de poços de água em Munique. O primeiro conjunto possui 750 instâncias que variam de 50 a 1500 pontos, enquanto o segundo conjunto possui instâncias que variam de 250 a 3000 pontos, totalizando 360 instâncias. De acordo com os autores, os testes mostraram que o FDL obteve os melhores resultados conhecidos na literatura até então em termos de qualidade, especialmente para instâncias maiores. Maiores detalhes sobre o algoritmo de Ebner et al. e sobre os resultados obtidos podem ser consultados em seu trabalho [3]. 24

43 3 Definição dos Algoritmos O objetivo deste capítulo é explicar o algoritmo desenvolvido para resolver de forma heurística o Problema de Maximização do Número de Legendas (PMNL). A abordagem proposta possui duas etapas: pré-processamento e heurística construtiva. A etapa de préprocessamento é inspirada no trabalho de WAGNER et al. [9] e tem como objetivo reduzir o tamanho do problema, sem afetar sua solução ótima. A heurística construtiva procura, a partir de uma solução inicial, construir uma nova solução por meio do uso de perturbação. Neste capítulo apresentam-se as descrições detalhadas de cada uma das etapas que compõem o algoritmo. 3.1 Definições Básicas para o Algoritmo O objetivo dessa seção é apresentar as definições básicas necessárias para o entendimento do algoritmo proposto para o PMNL. Uma instância é um conjunto P = {1,2,...,n} de pontos em um plano cartesiano. Cada ponto i P é representado pelas coordenadas (x i,y i ). Considere as constantes LL e AL que representam, respectivamente, a largura e a altura de todas as legendas da instância. Define-se dx i [0,LL] { 1} como o deslocamento horizontal e dy i [0,AL] { 1} como o deslocamento vertical de uma legenda associada ao ponto i P. O deslocamento horizontal informa a distância que o vértice superior direito da legenda está do ponto, em relação ao eixo das abscissas, e o deslocamento vertical a distância do mesmo vértice ao ponto, em relação ao eixo das ordenadas, como mostrado na Figura 3.1. Uma solução é um conjunto L = {l 1,l 2,...,l n } de deslocamentos, tal que i P, l i = (dx i,dy i ), 25

44 respeitando as restrições definidas abaixo: i P dx i = 1 dy i = 1 i P 0 < dx i < LL dy i = 0 dy i = AL i P 0 < dy i < AL dx i = 0 dx i = LL i, j P i j dx i 1 dx j 1 ( xi + dx i x j dx j LL) ( y i + dy i y j dy j AL) Figura 3.1: Ilustração para visualização do deslocamento horizontal (dx i ) e vertical (dy i ) de um ponto. O círculo negro é o ponto i e o quadrado negro da destaque ao vértice superior direito da legenda de i. A primeira restrição informa que se o deslocamento horizontal é igual a 1, o vertical também será e vice-versa. Um deslocamento l i = ( 1, 1) indica que o ponto i não possui uma legenda, portanto, não está solucionado em L. As duas restrições seguintes informam que a borda da legenda de um ponto deve estar sobre ele e a quarta restrição determina que não pode haver sobreposição entre legendas. Considere a função solucionado : L {0,1}, que recebe um deslocamento l i e retorna 0, caso dx i = 1, ou retorna 1 no caso contrário. O objetivo do problema é determinar uma solução L, tal que o resultado da função definida na Equação 3.1 seja máximo. ob j(l) = n i=1 solucionado(l i ) (3.1) Para todo ponto i P estão associadas quatro regiões: Direita Cima (DC), Esquerda Cima (EC), Esquerda Baixo (EB) e Direita Baixo (DB), conforme mostrado na Figura 3.2. O retângulo formado pelos quatro retângulos brancos numerados, sem considerar as 26

45 bordas, representa a chamada Área de Legenda do ponto. Um vizinho é um ponto cuja Área de Legenda tem a possibilidade de sobrepor a Área de Legenda de outro ponto. Portanto, sobreposições entre bordas não são consideradas conflito. Matematicamente, dois pontos i e j são vizinhos se: xi x j < 2LL yi y j < 2AL (3.2) Um vizinho de área de um ponto i é um vizinho que se encontra dentro da Área de Legenda de i, ou seja, i e j são vizinhos de área se: xi x j < LL yi y j < AL (3.3) Um vizinho horizontal de um ponto i é um ponto j vizinho de i considerando apenas o eixo das abscissas, ou seja, i e j são vizinhos horizontais se: xi x j < 2LL (3.4) Seja Vizinhos o conjunto que contém as listas de vizinhos de cada ponto i P. Diz-se, portanto, que vizinhos i é a lista com a relação dos pontos em P que são vizinhos de i. A largura e a altura das legendas são fixas para todos os pontos da instância. No entanto, teoricamente, seria possível considerar altura e largura como atributos de cada ponto, sem prejuízo aos resultados obtidos neste trabalho. Figura 3.2: Regiões de legenda ao redor de um ponto. O ponto é o círculo negro no centro da figura. Os retângulos brancos são as posições de legenda do modelo Four-position, que delimitam a chamada Área de Legenda do ponto. Cada posição pertence a uma região delimitada pelos eixos que cortam o ponto verticalmente e horizontalmente. 27

46 3.2 Rotina de Definição de Vizinhos O objetivo dessa seção é explicar a rotina, chamada DEF-VIZINHOS, responsável por criar o conjunto Vizinhos = {vizinhos 1,vizinhos 2,...,vizinhos n } que contém as listas de vizinhos associadas a cada ponto pertencente a P. A DEF-VIZINHOS é uma rotina utilizada nas duas fases do algoritmo: pré-processamento e heurística construtiva. Ordenam-se os pontos em ordem crescente da abscissa x. Depois, para cada ponto i, verifica-se a partir do elemento i + 1 quem são seus vizinhos, usando a Equação 3.2, até encontrar um elemento j, tal que a distância de j para i seja maior ou igual a 2LL. Quando um ponto v é identificado como vizinho de i, adiciona-se v na lista de vizinhos de i e i na lista de vizinhos de v. Dessa forma, ao determinar os vizinhos de um ponto p qualquer, o algoritmo não precisa verificar os pontos que são anteriores a p na ordenação. Do modo como os vizinhos são adicionados, a lista de vizinhos de cada ponto permanece ordenada em ordem crescente de x ao final da primeira fase. Figura 3.3: Ilustração da definição de vizinhos de pontos no mapa. A Figura 3.3 ilustra uma situação real de processamento da DEF-VIZINHOS. Os pontos em formato de triângulo são vizinhos horizontais do ponto em formato de círculo e o retângulo cinza é um exemplo de legenda desse mesmo ponto. Supondo que o algoritmo começasse a análise pelo ponto em formato de círculo, ele passaria a analisar o próximo ponto da ordenação assim que chegasse ao primeiro ponto em formato de quadrado, que é também o primeiro ponto do mapa que não é vizinho horizontal do ponto em formato de círculo. 28

47 Em relação à complexidade, a rotina executa para cada ponto i, na média k i /2 iterações, sendo k i o número de vizinhos horizontais de i. Como o cálculo para identificação de vizinhos possui complexidade O(1) e a ordenação dos pontos é executada em O(nlogn), temos que, no caso médio, a complexidade do algoritmo é O(nk/2 + nlogn), sendo n o número total de pontos e k o número médio de vizinhos horizontais por ponto. O pior caso acontece quando todos os pontos estão dentro de uma mesma faixa de largura de comprimento 2LL. Nessa situação, cada ponto tem que verificar todos os outros a sua frente, o que resulta em n(n 1)/2 iterações e uma complexidade θ(n 2 ). Sabendo que Mc é a largura do mapa que contém os pontos a serem rotulados, o melhor caso acontece quando os pontos estão uniformemente distribuídos em todo mapa, o que resulta em uma complexidade na ordem de θ(nk ), sendo k = 2nLL/Mc a densidade média de pontos por faixa de largura de legenda. A complexidade do melhor caso continua sendo quadrática caso k possua um valor próximo a n, porém essa situação dificilmente ocorre na prática, pois as faixas de largura de legendas normalmente são muito menores que a largura do mapa. 3.3 Pré-Processamento de Instâncias O algoritmo de pré-processamento, chamado PPROC, tem como objetivo reduzir o tamanho do problema. Ele foi inspirado nas regras definidas por WAGNER et al. [9], que foram desenvolvidas com base nos modelos de posições fixas para legendas. O PPROC é um algoritmo não determinístico que contém duas regras de redução desenvolvidas com base no Slider Model. A idéia nesta seção é apresentar as regras criadas e o algoritmo de redução. O princípio básico seguido pelo PPROC é que a redução não pode, em hipótese alguma, comprometer a obtenção do valor da solução ótima do problema Primeira Regra do PPROC A primeira regra informa que o algoritmo deve procurar, dentre as posições de legenda possíveis, uma posição livre de conflito para cada ponto da instância. Todo ponto para o qual essa posição é encontrada deve ter seu deslocamento atualizado na solução retornada pelo algoritmo. A rotina definida para primeira regra, chamada REGRA-1, é baseada no 29

48 Two-slider. Dado um ponto p P, o conjunto Vizinhos e uma solução L, a rotina calcula o espaço livre de conflitos acima e abaixo de p e depois tenta posicionar sua legenda nesses espaços. Ela retorna a solução L atualizada, caso p tenha sido solucionado pela rotina. Essa regra não se aplica a pontos que possuem vizinhos dentro de sua Área de Legenda, pois, nesse caso, não existe posição de legenda livre de conflito. Considere V DC p, V EC p, V DB p e V EB p os vizinhos mais próximos de cada região (DC, EC, DB e EB) ao redor de um ponto p. O vizinho mais próximo de p na região DC (V DC p ) é o vizinho não solucionado que está mais próximo de p em relação ao eixo das abscissas, dentre todos os vizinhos à direita de p, cujas Áreas de Legenda sobrepõem uma parte da Área de Legenda de p na região DC. A definição dos vizinhos mais próximos nas outras regiões é análoga. A Figura 3.4 apresenta uma situação para facilitar o entendimento. O retângulo branco ao redor do ponto p representa sua Área de Legenda dividida nas quatro regiões existentes a seu redor. Os retângulos hachurados representam as legendas dos vizinhos não solucionados que estão mais próximas de p. Claramente, V DC p é o vizinho V1, pois ele é o único vizinho cuja Área de Legenda sobrepõem a Área de Legenda de p na região DC. O mesmo não acontece na região EB. O V EB p é o vizinho V2, pois ele é o vizinho mais próximo de p à esquerda, em relação ao eixo das abscissas, cuja Área de Legenda sobrepõe a Área de Legenda de p na região EB. O vizinho V2 também é o V EC p. Figura 3.4: Situação para análise do vizinho mais próximo em cada região. O ponto p, cuja Área de Legenda é o retângulo branco, possui quatro vizinhos (V1, V2, V3 e V4). Os retângulos hachurados representam as legendas de cada vizinho que estão mais próximas de p. V DC p é V1, V DB p é V4, V EC p é V2 e V EB p é V2 também. Logo após determinar os vizinhos mais próximos em cada região, o algoritmo tenta posicionar a legenda do ponto analisado primeiro acima, depois abaixo dele. O modo de verificação do espaço livre de conflito acima e abaixo do ponto é o mesmo, portanto 30

49 será explicado apenas como é feita a verificação acima do ponto. Para que seja possível posicionar uma legenda acima de um ponto p são necessárias as seguintes validações: 1. Caso exista V EC p e V DC p, supondo que se chamem V1 e V2, respectivamente, a coordenada x V 1 +LL deve possuir um valor menor que x V 2 LL e a diferença entre elas deve ser maior ou igual a LL. Desse modo, a legenda de p pode ser colocada entre V1 e V2. 2. Caso exista somente V EC p ou V DC p, a distância do vizinho existente para p, em relação às abscissas, deve ser maior ou igual a LL. Desse modo, é possível colocar a legenda de p na região que não possui vizinho mais próximo. 3. Caso não existam vizinhos mais próximo acima de p, sua legenda pode ser colocada em qualquer posição acima dele. A complexidade da rotina REGRA-1 é O(k), sendo k o número médio de vizinhos por ponto. A rotina precisa percorrer a lista de vizinhos associada ao ponto para registrar o vizinho mais próximo de cada região e depois tentar posicionar sua legenda, tarefa que é executada em tempo constante. Na prática, o algoritmo é bem rápido, pois nem sempre é necessário percorrer toda lista de vizinhos para descobrir os mais próximos em cada região. Como a lista de vizinhos de um ponto está ordenada em ordem crescente em relação às abscissas, o algoritmo pode parar de percorrê-la logo após encontrar V DC e V DB, pois os próximos elementos da lista estarão na mesma posição ou mais à direita dos vizinhos já analisados. O pior caso ocorre quando o algoritmo precisa percorrer a lista de vizinhos do ponto até o final, o que não altera a complexidade já apresentada Segunda Regra do PPROC A segunda regra tenta resolver situações que não puderam ser solucionadas pela primeira. Ela consegue definir posições de legenda para pontos que estão mais próximos do que LL em relação ao eixo das abscissas e mais próximos do que AL em relação ao eixo das ordenadas, ou seja, para pontos que são considerados vizinhos de área. A rotina definida para segunda regra é denotada por REGRA-2 e complementada pelas funções 31

50 POS-DOIS-P e POS-TRES-P, que também serão apresentadas nessa seção. Ela recebe como entrada um ponto p P, o conjunto Vizinhos e uma solução L. Como saída, a rotina retorna a solução L atualizada, caso p tenha sido solucionado. Função POS-DOIS-P A POS-DOIS-P é a função responsável por tentar todas as combinações possíveis entre as legendas de dois pontos recebidos como parâmetro, usando o modelo Four-position, até encontrar uma configuração que respeite o princípio das regras de redução, apresentado na introdução da Seção 3.3. Para posicionar as legendas, o algoritmo precisa saber qual ponto está à direita e qual está acima. As Figuras 3.5, 3.6 e 3.7 mostram as combinações possíveis para cada caso em particular. Figura 3.5: Combinações de posições de legenda possíveis para dois pontos vizinhos que possuem a mesma abscissa. No total são dez. O ponto mais abaixo é sempre o B. O retângulo branco é a legenda do ponto A, enquanto o retângulo cinza é a legenda do ponto B. Figura 3.6: Combinações de posições de legenda possíveis para dois pontos vizinhos que possuem a mesma ordenada. No total são dez. O ponto mais a direita é sempre o B. O retângulo branco é a legenda do ponto A, enquanto o retângulo cinza é a legenda do ponto B. Durante a etapa de pré-processamento, se um ponto p possui somente um vizinho v não solucionado e a função POS-DOIS-P está sendo executada, significa que v é um 32

51 vizinho de área, pois caso contrário a primeira regra seria capaz de encontrar uma posição livre de conflito para p. Desse modo, considerando os pontos A e B da Figura 3.6, por exemplo, o algoritmo não pode tentar posicionar suas legendas na região DC ao mesmo tempo, pois nesse caso elas estariam em conflito. A POS-DOIS-P recebe como entrada dois pontos vizinhos não solucionados, o conjunto Vizinhos e uma solução L. Ela retorna a solução L atualizada, caso p tenha sido solucionado. Ela faz uso das funções e procedimentos listados abaixo e seu pseudocódigo é apresentado no Algoritmo 2. Sua complexidade no caso médio é O(k), sendo k o número médio de vizinhos por ponto. No pior caso, que ocorre quando os dois pontos estão ou na mesma abscissa ou na mesma ordenada e nenhuma das combinações testadas respeita o princípio de redução, a complexidade é O(20k), pois a lista de vizinhos dos dois pontos será percorrida exatamente dez vezes. O cálculo realizado para verificar se existe conflito entre dois pontos quaisquer é executado em tempo constante. Figura 3.7: Combinações de posições de legenda possíveis para dois pontos vizinhos que não estão nem na mesma abscissa, nem na mesma ordenada. No total são sete, tanto para o caso em que A está acima de B (lado esquerdo), quanto para o caso oposto (lado direito). O ponto mais a direita é sempre o B. O retângulo branco é a legenda do ponto A, enquanto o retângulo cinza é a legenda do ponto B. Segue a lista de funções utilizadas no Algoritmo 2: pdpmx(p P,v P,tentativa {1,2,...,10}): função responsável por posicionar as legendas dos pontos p e v, tal que x p = x v, de modo que elas não conflitem entre si. A função ordena os pontos em relação ao eixo das ordenadas e depois posiciona suas legendas utilizando a configuração associada ao número da tentativa passada por parâmetro. O mapeamento entre a configuração e o número da tentativa pode ser observado na Figura 3.5. Ela retorna uma lista com deslocamentos associados 33

52 aos pontos p e v. A complexidade da função é O(1), pois trata-se apenas de uma atribuição de valores de acordo com o número da tentativa e uma ordenação entre dois pontos (p e v). pdpmy(p P,v P,tentativa {1,2,...,10}): função responsável por posicionar as legendas dos pontos p e v, tal que y p = y v, de modo que elas não conflitem entre si. A função ordena os pontos em relação ao eixo das abscissas e depois posiciona suas legendas utilizando a configuração associada ao número da tentativa passada por parâmetro. O mapeamento entre a configuração e o número da tentativa pode ser observado na Figura 3.6. Ela retorna uma lista com deslocamentos associados aos pontos p e v. A complexidade da função é O(1), pois trata-se apenas de uma atribuição de valores de acordo com o número da tentativa e uma ordenação entre dois pontos (p e v). pdp(p P, v P,tentativa {1, 2,..., 7}): função responsável por posicionar as legendas dos pontos p e v, tal que x p x v y p y v, de modo que elas não conflitem entre si. A função verifica a posição relativa dos pontos e depois posiciona suas legendas utilizando a configuração associada ao número da tentativa passada por parâmetro. O mapeamento entre a configuração e o número da tentativa pode ser observado na Figura 3.7. Ela retorna uma lista com deslocamentos associados aos pontos p e v. A complexidade da função é O(1), pois trata-se apenas de uma atribuição de valores de acordo com o número da tentativa e uma ordenação entre dois pontos (p e v). vpl(listapontos P,listaLegendas = { } l 1,...,l listapontos,vizinhos): função responsável por verificar se os deslocamentos definidos para cada ponto i listapontos, estão livres de conflito. A complexidade da função é O(mk), sendo m o número de elementos em listapontos e k o número médio de vizinhos entre os pontos da lista. O algoritmo percorre a lista de vizinhos de cada ponto de listapontos, procurando um conflito entre suas legendas. A verificação do conflito é realizada em tempo constante. 34

53 entrada: p P, v P, Vizinhos, L saída : L begin listapontos {p, v}; if x p = x v then for tentativa 1 to 10 do listalegendas pdpmx(p, v, tentativa); if vpl(listapontos, listalegendas, Vizinhos) then atualiza deslocamentos de listalegendas em L; end end else if y p = y v then for tentativa 1 to 10 do listalegendas pdpmy(p, v, tentativa); if vpl(listapontos, listalegendas, Vizinhos) then atualiza deslocamentos de listalegendas em L; end end else for tentativa 1 to 7 do listalegendas pdp(p, v, tentativa); if vpl(listapontos, listalegendas, Vizinhos) then atualiza deslocamentos de listalegendas em L; end end end return L; end Algoritmo 2: Pseudocódigo do procedimento POS-DOIS-P, utilizado para tentar encontrar posições de legenda livres de conflito para duplas de pontos não solucionados em L. Função POS-TRES-P A POS-TRES-P recebe como entrada três pontos vizinhos não solucionados, o conjunto Vizinhos e uma solução L. Ela retorna a solução L atualizada, caso p tenha sido solucionado. O objetivo da função é tentar encontrar posições de legendas livres de conflito para os três pontos recebidos como parâmetro. Primeiramente, ela determina se os pontos estão na mesma abscissa, se estão na mesma ordenada ou se não estão alinhados. Cada situação dessa é tratada de uma forma específica. Diferente da POS-DOIS-P, a POS-TRES-P efetua apenas uma tentativa de posicionamento antes de retornar. Quando os três pontos estão na mesma abscissa a estratégia adotada para posicionamento das legendas é apresentada na Figura 3.8. A legenda do ponto mais alto, que 35

54 fica sempre acima do ponto, é posicionada no mesmo lado da legenda do ponto mais baixo, que fica sempre abaixo do ponto. Dessa forma, a legenda central fica livre para ser colocada em qualquer posição do lado oposto. Utilizando essas configurações, não há como ocorrer um conflito independente da distância entre os pontos em relação ao eixo das ordenadas. O procedimento seleciona aleatoriamente uma das duas configurações apresentadas na Figura 3.8 e uma posição para legenda do ponto central. Figura 3.8: Estratégia de posicionamento de legendas para grupos de três pontos não solucionados na mesma abscissa. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B. A seta sobre a legenda do ponto B, indica que a legenda pode deslizar livremente para as direções apontadas sem risco de conflito. Figura 3.9: Estratégia de posicionamento de legendas para grupos de três pontos não solucionados na mesma ordenada. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B. A seta sobre a legenda do ponto B, indica que a legenda pode deslizar livremente para as direções apontadas sem risco de conflito. Quando os três pontos estão na mesma ordenada a estratégia de posicionamento é análoga a utilizada quando os três pontos estão na mesma abscissa, como mostra a Figura 3.9. A legenda do ponto mais à esquerda A sempre fica à esquerda do ponto, enquanto a legenda do ponto mais à direita C sempre fica à direita do ponto. A legenda de C sempre acompanha a legenda de A, ficando acima ou abaixo dos respectivos pontos e deixando o lado oposto livre para legenda do ponto central B. O procedimento seleciona aleatoriamente uma das duas configurações apresentadas na Figura 3.9 e uma posição para legenda de B. Quando os três pontos do grupo não estão alinhados, o tratamento é subdividido em 36

55 três situações: 1. O ponto mais a esquerda está no mesmo nível ou abaixo dos demais; 2. O ponto mais a esquerda está no mesmo nível ou acima dos demais; 3. O ponto mais a esquerda está entre os demais pontos, em relação ao eixo das ordenadas. Figura 3.10: Estratégia de posicionamento de legendas para grupos de três pontos não solucionados, sendo que o primeiro ponto da ordenação se encontra no mesmo nível ou abaixo dos demais pontos do grupo. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B. Figura 3.11: Estratégia de posicionamento de legendas para grupos de três pontos não solucionados, sendo que o primeiro ponto da ordenação se encontra no mesmo nível ou acima dos demais pontos do grupo. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B. Figura 3.12: Estratégia de posicionamento de legendas para grupos de três pontos não solucionados, sendo que o primeiro ponto da ordenação se encontra entre os demais pontos do grupo. Os retângulos brancos são as legendas dos pontos A e C, e o retângulo cinza é a legenda do ponto B. A Figura 3.10 apresenta as configurações utilizadas para o grupo 1. A primeira coluna contém a configuração utilizada quando o ponto central B está no mesmo nível ou acima do ponto mais à direita C. As outras duas colunas apresentam as configurações utilizadas quando B está abaixo de C. A diferença é que, na coluna central, B está na mesma abscissa de A. A Figura 3.11 apresenta as configurações utilizadas para o grupo 2. O raciocínio para escolha das configurações é análogo ao explicado para o grupo 1. 37

56 A configuração escolhida para três pontos que se encaixem no perfil do grupo 3 depende de que ponto está acima do ponto mais a esquerda A. As configurações apresentadas na primeira linha da Figura 3.12 são utilizadas no caso do ponto central B estar acima de A. Na segunda linha, são apresentadas as configurações utilizadas no caso de B estar abaixo de A. O procedimento escolhe aleatoriamente uma entre as três configurações apresentadas, de acordo com a situação. Não houve critério para escolha das configurações. O Algoritmo 3 apresenta o pseudocódigo da função POS-TRES-P. Segue abaixo a lista de funções ainda não definidas utilizadas pela POS-TRES-P. A complexidade da POS-TRES-P é O(3k), sendo k o número médio de vizinhos por ponto. Toda tentativa de rotulação dos três pontos recebidos como entrada, obriga o procedimento a percorrer suas listas de vizinhos para verificar se as legendas posicionadas estão livres de conflito. 1. ptpmx(p P,v1 P,v2 P): função responsável por posicionar as legendas de três pontos p, v1 e v2, tal que x p = x v1 x p = x v2, de modo que elas não conflitem entre si. A função ordena os pontos em relação ao eixo das ordenadas, seleciona aleatoriamente um dos dois modelos apresentados na Figura 3.8 e, depois, seleciona aleatoriamente uma posição de legenda para o ponto central. Ela retorna uma lista com deslocamentos associados aos pontos p, v1 e v2. A complexidade da função é O(1), porque a ordenação de três pontos é realizada em tempo constante e a definição das legendas, com base na localização dos pontos, é uma simples atribuição de valores. 2. ptpmy(p P,v1 P,v2 P): função responsável por posicionar as legendas de três pontos p, v1 e v2, tal que y p = y v1 y p = y v2, de modo que elas não conflitem entre si. A função ordena os pontos em relação ao eixo das abscissas, seleciona aleatoriamente um dos dois modelos apresentados na Figura 3.9 e, depois, seleciona aleatoriamente uma posição de legenda para o ponto central. Ela retorna uma lista com deslocamentos associados aos pontos p, v1 e v2. A complexidade da função é O(1), porque a ordenação de três pontos é realizada em tempo constante e a definição das legendas, com base na localização dos pontos, é uma simples atribuição de valores. 38

57 3. ptp(p P, v1 P, v2 P): função responsável por posicionar as legendas de três pontos p, v1 e v2, tal que ((y p < y v1 y p > y v2 ) (y p > y v1 y p < y v2 )) (x p x v1 x p x v2 ), de modo que elas não conflitem entre si. A função ordena os pontos em relação ao eixo das abscissas e depois posiciona suas legendas, seguindo a regra de posicionamento para três pontos não alinhados explicada nessa seção. Ela retorna uma lista com deslocamentos associados aos pontos p, v1 e v2. A complexidade da função é O(1), pois a ordenação dos pontos e os testes necessários para definir a posição das legendas são executados em tempo constante entrada: p P, v1 P, v2 P, Vizinhos, L saída : L begin listapontos {p, v1, v2}; if x p = x v1 x p = x v2 then listalegendas ptpmx(p, v1, v2); if vpl(listapontos, listalegendas, Vizinhos) then atualiza deslocamentos de listalegendas em L; end else if y p = y v1 y p = y v2 then listalegendas ptpmy(p, v1, v2); if vpl(listapontos, listalegendas, Vizinhos) then atualiza deslocamentos de listalegendas em L; end else listalegendas ptp(p, v1, v2); if vpl(listapontos, listalegendas, Vizinhos) then atualiza deslocamentos de listalegendas em L; end end return L; end Algoritmo 3: Pseudocódigo do procedimento POS-TRES-P, utilizado para tentar encontrar posições de legenda livres de conflito para triplas de pontos não legendados. Rotina REGRA-2 A seguir, descreve-se a rotina REGRA-2 cujo pseudocódigo é apresentado no Algoritmo 4. Como entrada, a rotina recebe um ponto não solucionado p, o conjunto Vizinhos e uma solução L. Ela retorna a solução L atualizada, caso p tenha sido solucionado. Primeiramente, a REGRA-2 contabiliza o número a de vizinhos não solucionados de p. Se 39

58 a for igual a um ou dois, a rotina busca esses vizinhos, fecha um grupo de dois (duplas) ou três (triplas) pontos e tenta posicionar suas legendas utilizando POS-DOIS-P ou POS-TRES-P, de acordo com o número de elementos do grupo. A cada tentativa de posicionamento, a rotina percorre a lista de vizinhos de cada ponto do grupo, procurando conflitos entre as legendas recém colocadas e as Áreas de Legenda de seus vizinhos não solucionados. Se forem encontradas posições livres de conflito, então a solução é atualizada e a rotina termina. Caso contrário, a REGRA-2 contabiliza o número b de vizinhos de área não solucionados de p. Se b for igual a um ou dois e a for maior que b, então o algoritmo fecha um novo grupo de pontos e utiliza novamente POS-DOIS-P ou POS-TRES-P, de acordo com o número de elementos do novo grupo. As funções de posicionamento só são executadas uma segunda vez se a for maior do que b, porque no caso contrário o algoritmo estaria tentando posicionar as legendas dos mesmos pontos novamente. A REGRA-2 faz uso das seguintes funções: nvnr(p P, L, Vizinhos): função responsável por retornar o número de vizinhos não solucionados do ponto p, em relação a L. A complexidade dessa função é O(k), sendo k o número de vizinhos de p. nvnrarea(p P, L, Vizinhos): função responsável por retornar o número de vizinhos de área não solucionados do ponto p, em relação a L. A complexidade dessa função é O(k), sendo k o número de vizinhos de p. recuperavnr(p P, L, Vizinhos): função responsável por retornar um vizinho não solucionado de p, em relação a L. A complexidade dessa função, no pior caso, é O(k), sendo k o número de vizinhos de p. recuperalvnr(p P, L, Vizinhos): função responsável por retornar lista com dois vizinhos não solucionados de p, em relação a L. A complexidade dessa função, no pior caso, é O(k), sendo k o número de vizinhos de p. recuperavanr(p P, L, Vizinhos): função responsável por retornar um vizinho de área não solucionado de p, em relação a L. A complexidade dessa função, no 40

59 pior caso, é O(k), sendo k o número de vizinhos de p. recuperalvanr(p P, L, Vizinhos): função responsável por retornar lista com dois vizinhos de área não solucionados de p, em relação a L. A complexidade dessa função, no pior caso, é O(k), sendo k o número de vizinhos de p entrada: p P, Vizinhos, L saída : L begin a nvnr(p, L, Vizinhos); if a = 1 then v recuperavnr(p, L, Vizinhos); L POS-DOIS-P(p, v, Vizinhos, L); else if a = 2 then lista recuperalvnr(p, L, Vizinhos); v1 lista [1]; v2 lista [2]; L POS-TRES-P(p, v1, v2, Vizinhos, L); end if solucionado(l p ) then return L; end b nvnrarea(p, L, Vizinhos); if a > 1 b = 1 then v recuperavanr(p, L, Vizinhos); L POS-DOIS-P(p, v, Vizinhos, L); else if a > 2 b = 2 then lista recuperalvanr(p, L, Vizinhos); v1 lista [1]; v2 lista [2]; L POS-TRES-P(p, v1, v2, Vizinhos, L); end return L; end Algoritmo 4: Pseudocódigo da rotina REGRA-2, que representa a segunda regra de redução do algoritmo PPROC. A seguir, analisa-se a complexidade da rotina REGRA-2. O pior caso ocorre quando a rotina não consegue encontrar posições de legenda livres de conflito para um ponto p, que possui dois vizinhos não solucionados, sendo que apenas um deles é um vizinho de área e está na mesma abscissa ou ordenada de p. Nesse caso, a rotina passa pelo pior caso das funções POS-DOIS-P e POS-TRES-P, além de executar duas buscas na lista de vizinhos de p, primeiro para recuperar os dois vizinhos não solucionados, depois para recuperar o 41

60 vizinho não solucionado de área. A complexidade de todo processo é O(25k), sendo k o número médio de vizinhos por ponto Algoritmo PPROC Na Seção 3.3 foram apresentados todos os elementos do algoritmo PPROC, proposto nesse trabalho. O objetivo desta seção é mostrar como esses elementos foram integrados, com intuito de reduzir o tamanho de uma instância para o PRCP. O Algoritmo 5 apresenta o pseudocódigo do pré-processamento. Ele recebe como entrada uma instância, representada pelo conjunto de pontos P, e retorna dois itens: um conjunto de pontos P P, contendo os pontos de P não solucionados por PPROC, e uma solução L. Primeiramente, o algoritmo chama o procedimento DEF-VIZINHOS, responsável por preencher a lista de vizinhos associada a cada ponto p P. Em seguida, para cada ponto não solucionado da instância, as regras de redução são executadas enquanto o processo apresenta melhora, ou seja, enquanto elas conseguem solucionar pontos. Ao finalizar o processo de redução, todos os pontos não solucionados são separados em um novo conjunto P, que é retornado pelo algoritmo junto com a solução construída. A complexidade de uma iteração do laço entre as linhas 6 e 21 do Algoritmo 5, no caso médio, é da ordem de O(nk), sendo n o número de pontos da instância e k o número médio de vizinhos por ponto. Pode-se considerar a complexidade na ordem apresentada, posto que no pior caso, as rotinas REGRA-1 e REGRA-2 possuem complexidades fixas na ordem de k. Além disso, cada rodada de aplicação das regras é mais rápida que a rodada anterior, pois o número de pontos não solucionados diminui. Esse fato torna a execução do algoritmo bem rápida na prática. Desse modo, considerando todas as etapas do Algoritmo 5, que são: chamada à rotina DEF-VIZINHOS na linha 2 (complexidade O(nk /2 + nlogn)); laço de inicialização da solução entre as linhas 3 e 5 (complexidade O(n)); laço de aplicação das regras de redução entre as linhas 6 e 21 (complexidade O(nk)); construção do conjunto P entre as linhas 22 e 26 (complexidade O(n)); 42

61 define-se a complexidade do algoritmo PPROC como O(nk /2 + n(log(n) + k + 2)), sendo n o número de pontos da instância, k o número médio de vizinhos por ponto e k o número médio de vizinhos horizontais por ponto entrada: P saída : P P, L begin Vizinhos DEF-VIZINHOS(P); //inicializando soluç~ao L for l L do l ( 1, 1); end repeat tevemelhora FALSE; for p P do if solucionado(l p ) then L REGRA-1(p, Vizinhos, L); if solucionado(l p ) then tevemelhora TRUE; else L REGRA-2(p, Vizinhos, L); if solucionado(l p ) then tevemelhora TRUE; end end end end until tevemelhora ; for p P do if solucionado(l p ) then P P {p}; end end return P, L; end Algoritmo 5: Algoritmo PPROC, responsável pela redução do tamanho de uma instância para o PRCP Exemplo de Execução do PPROC Nesta seção será apresentado um exemplo de execução do PPROC em um conjunto de pontos retirado de uma instância real, contendo a localização de 250 poços de água subterrânea em Munique na Alemanha. As legendas possuem tamanho fixo, com largura e altura iguais a unidades. A Figura 3.13 ilustra o trecho que será analisado. Da 43

62 esquerda para direita, os nomes, as localizações e a lista de vizinhos de cada ponto da figura está listado abaixo. Na lista de vizinhos, os pontos com asterisco são vizinhos de área. A - ( , ) - (B*, C, D); B - ( , ) - (A*, C*, D*, E); C - ( , ) - (A, B*, D*, E); D - ( , ) - (A, B*, C*, E*); E - ( , ) - (B, C, D*, F); F - ( , ) - (E, G); G - ( , ) - (F, H*, I); H - ( , ) - (G*, I*); I - ( , ) - (G, H*); Figura 3.13: Resultado obtido pelo algoritmo PPROC depois de executado no conjunto de pontos apresentado. Os pontos fazem parte de uma instância real, contendo a localização de 250 poços de água subterrânea em Munique. As legendas possuem tamanho fixo, com largura e altura iguais a unidades. Os pontos com legenda foram solucionados pelo algoritmo. O algoritmo tenta solucionar a lista de pontos na ordem listada acima, ou seja, em ordem crescente em relação ao eixo das abscissas. A análise do comportamento do algoritmo pode ser simplificada, observando que o único ponto apto a ser solucionado pela primeira regra é o F, pois é o único que não possui vizinho de área. Na primeira passagem pelo ponto A, o algoritmo tenta solucioná-lo usando a segunda regra, pois, nesse momento, A possui apenas um vizinho de área não solucionado (B), em um total de três 44

63 vizinhos não solucionados. No entanto, o algoritmo não consegue solucionar A e B nesse momento, pois B possui outros vizinhos de área não solucionados, como C, por exemplo. O vizinho C não permite que nenhuma das sete configurações testadas pelo algoritmo para A e B esteja livre de conflitos. São testadas apenas sete configurações, porque A e B não estão nem na mesma abscissa, nem na mesma ordenada. Como A está acima de B, o algoritmo testa as configurações à esquerda da Figura 3.7. Terminadas as tentativas com o ponto A, o algoritmo passa a analisar a situação do ponto B. Nenhuma das duas regras pode ser aplicada ao ponto B, pois ele possui quatro vizinhos não solucionados, sendo três deles vizinhos de área. C é o próximo ponto da lista. O ponto C possui somente dois vizinhos de área não solucionados, em um total de quatro vizinhos não solucionados, portanto, o PPROC tenta solucionar C, B e D com a segunda regra. Porém, ele não consegue solucionar os pontos pelo mesmo motivo que não conseguiu solucionar A e B anteriormente: no caso atual, B possui outro vizinho de área que não permite que a configuração testada para os três pontos esteja livre de conflitos. Como o vizinho mais próximo (C) do ponto mais a esquerda (B) está acima e o outro (D) está abaixo, o algoritmo escolhe aleatoriamente uma das três posições da primeira linha da Figura 3.12 na tentativa infrutífera de solucionar os pontos. O algoritmo não tenta solucionar D exatamente pelo mesmo motivo de B e E não será solucionado pela segunda regra pelo mesmo motivo de A: D possui outros vizinhos de área não solucionados. Observe que os cinco pontos analisados até o momento (A, B, C, D e E) jamais podem ser solucionados pelo pré-processamento. Nas próximas passagens do algoritmo por esses pontos, eles não poderão ser solucionados pelos mesmos motivos da primeira passagem. Como o ponto F não possui vizinhos de área, o PPROC tenta solucioná-lo com a primeira regra. O primeiro passo é identificar o vizinho mais próximo a cada região ao redor de F. V DC F e V DB F são representados pelo ponto G, enquanto V EC F e V EB F são representados por E. Com os vizinhos mais próximos identificados, o algoritmo tenta posicionar a legenda de F primeiro acima do ponto. Como as posições do modelo Fourposition não estão livres de conflito, o algoritmo verifica se há espaço livre de conflito 45

64 entre E e G para posicionar a legenda. De fato, existe espaço para isso. O espaço livre de conflito entre E e G é obtido através da diferença entre a posição x de G menos LL (x1) e a posição x de E mais LL (x2). Se x1 < x2 e a diferença for maior ou igual a LL, significa que há espaço livre de conflito entre os vizinhos mais próximos, portanto, a legenda de F pode ser colocada ali. A legenda de F é posicionada logo após o término da Área de Legenda de E. O cálculo efetuado para o teste é apresentado abaixo: ( ) ( ) = F pode ser legendado O próximo ponto da lista é o G. Como G só possui dois vizinhos não solucionados (H e I), o algoritmo tenta solucioná-los com a segunda regra. Os dois vizinhos do ponto mais a esquerda (G) estão abaixo dele, sendo que o mais próximo (H) está acima do mais distante (I). Nessa situação o algoritmo aplica a terceira configuração (da esquerda para direita) da Figura Ao executar a validação, o PPROC verifica que as posições de legenda atribuídas respeitam o princípio de redução do problema, portanto, os pontos são confirmados como solucionados. 3.4 Heurística Construtiva para o PMNL O objetivo dessa seção é apresentar a heurística construtiva, chamada HC-PMNL, desenvolvida para gerar soluções de boa qualidade para o PMNL. Inicialmente, serão apresentados cada um de seus componentes para, em seguida, apresentar a heurística completa ilustrada, em alto nível, no Algoritmo 11. Os componentes da heurística são: A rotina CALC-PONT: responsável por calcular pontuações, que possuem como objetivo indicar, para cada ponto, que posições do modelo Four-position estão menos ocupadas por outros pontos. Tais pontuações são armazenadas para serem utilizadas na rotina responsável pela construção da solução inicial (GERA-SOL-INI) e na heurística embutida (HC), citadas abaixo. A rotina GERA-SOL-INI: responsável pela construção da solução inicial com base nas pontuações calculadas pela CALC-PONT. Depois da construção da solução ini- 46

65 cial, o algoritmo cria a chamada lista de candidatos com todos os pontos que não foram solucionados. Essa lista é constantemente atualizada pelo algoritmo, ou seja, toda vez que um ponto é solucionado ele é retirado da lista e toda vez que um ponto tem sua legenda removida ele é adicionado a lista. A heurística HC: heurística embutida responsável por construir novas soluções, tentando legendar os pontos não solucionados na ordem em que se encontram na lista de candidatos. HC utiliza primeiro o modelo Four-position e depois o modelo Fourslider para tentar legendar os pontos. A rotina PERTUBACAO: seleciona na lista de candidatos um determinado número de pontos para remover as legendas de todos os seus vizinhos solucionados. Depois que todas as legendas são removidas, PERTUBACAO embaralha a lista de candidatos, com intuito de viabilizar a construção de uma nova solução com mais pontos solucionados do que a melhor solução encontrada. A rotina ACEITA-SOL: determina se a nova solução encontrada será ou não aceita como melhor solução, de acordo com o número de pontos solucionados e o número de iterações que o algoritmo passou sem encontrar uma solução melhor. ACEITA-SOL também é responsável por remover pontos da instância depois de um determinado tempo de estagnação Cálculo das Pontuações A seguir, descreve-se a rotina CALC-PONT. A rotina recebe como entrada o conjunto de pontos da instância P, o conjunto Vizinhos e o parâmetro INC, que será explicado mais à frente nessa seção. No HC-PMNL, cada posição do modelo Four-position associada a um ponto é chamada de posição candidata e recebe uma pontuação, que indica quão interessante ela é para uma tentativa de rotulação. O objetivo da rotina CALC-PONT é calcular e armazenar essas pontuações para posterior uso dentro do algoritmo. Para cada ponto p P é definida a lista pontuacoes p, que armazena as pontuações das posições candidatas de p em ordem crescente. Os deslocamentos das posições candidatas de p são armazenados na lista posicoes p, seguindo a ordenação da lista pontuacoes p. Isso 47

66 significa que o deslocamento da posição candidata com menor pontuação é colocado na primeira posição da lista posicoes p, o deslocamento da posição candidata com a segunda menor pontuação é colocado na segunda posição da lista e assim por diante. Como saída, a rotina retorna os conjuntos Pontuacoes e Posicoes, que contêm, respectivamente, as listas pontuacoes p e posicoes p para todo p P. O cálculo da pontuação é definido de maneira que posições de legenda próximas a um número maior de vizinhos recebem pontuações maiores. Essa pontuação pode ser interpretada como uma punição, pois quanto maior a pontuação menor a chance da posição ser escolhida pelo algoritmo para uma tentativa de rotulação. Cada posição candidata recebe como punição um valor relativo à quantidade de vizinhos que estejam localizados em sua região. A legenda que está à direita e acima do ponto se encontra na região DC, então todos os vizinhos que estiverem na região DC irão acrescentar valores a pontuação final dessa posição. Vizinhos apenas à direita ou apenas acima do ponto também adicionam valores a pontuação final da posição DC. Considere as seguintes funções: nve(p P,Vizinhos), nvd(p P,Vizinhos), nvb(p P,Vizinhos) e nvc(p P,Vizinhos), que retornam, respectivamente, o número de vizinhos à esquerda, à direita, abaixo e acima do ponto p. Cada uma dessas funções possui complexidade O(k), sendo k o número de vizinhos de p. nvec(p P,Vizinhos), nvdc(p P,Vizinhos), nveb(p P,Vizinhos) e nvdb(p P,Vizinhos), que retornam, respectivamente, o número de vizinhos que se encontram fora da Área de Legenda nas regiões EC, DC, EB e DB do ponto p. Cada uma dessas funções possui complexidade O(k), sendo k o número de vizinhos de p. nvecarea(p P,Vizinhos), nvdcarea(p P,Vizinhos), nvebarea(p P,Vizinhos) e nvdbarea(p P,Vizinhos), que retornam, respectivamente, o número de vizinhos de área que se encontram nas regiões EC, DC, EB e DB do ponto p. Cada uma dessas funções possui complexidade O(k), sendo k o número de vizinhos de p. A rotina CALC-PONT executa para cada ponto p P os seguintes passos: (1) contabilização 48

67 dos vizinhos por região, (2) cálculo da pontuação final de cada região e (3) ordenação das listas pontuacoes p e posicoes p. Sendo PDC a pontuação final de uma legenda localizada na região DC, PEC a pontuação final de uma legenda localizada na região EC etc, a pontuação final de cada posição de legenda de um ponto p P, considerando V = Vizinhos, é: PDC p = nvd(p,v ) + nvc(p,v ) + nvdc(p,v ) + (nvdcarea(p,v ) INC) PEC p = nve(p,v ) + nvc(p,v ) + nvec(p,v ) + (nvecarea(p,v ) INC) PEB p = nve(p,v ) + nvb(p,v ) + nveb(p,v ) + (nvebarea(p,v ) INC) PDB p = nvd(p,v ) + nvb(p,v ) + nvdb(p,v ) + (nvdbarea(p,v ) INC) O parâmetro INC foi criado para punir de forma mais eficiente posições candidatas que contêm vizinhos de área. Essa punição aumenta a pontuação final dessas posições, reduzindo a probabilidade de elas serem escolhidas para rotulação em outros componentes do HC-PMNL. O modo como a constante afeta a probabilidade do algoritmo selecionar uma posição de legenda será apresentado na Seção e os resultados dos testes executados com diferentes valores de INC serão apresentados na Seção A Figura 3.14, mostra um exemplo real de contagem da pontuação, supondo INC igual a 10. Os retângulos brancos são as posições candidatas do ponto central e os demais pontos são seus vizinhos. A pontuação da posição na região DC é igual a 5, pois o ponto possui dois vizinhos a direita, dois vizinhos acima e um vizinho na região DC fora da área de legenda. A pontuação da posição na região EB é igual a 14, pois o ponto possui dois vizinhos a esquerda, dois vizinhos abaixo e um vizinho na região EB dentro da área de legenda. A complexidade da rotina é O(nk), sendo n o número de pontos da instância e k o número médio de vizinhos por ponto. Para cada ponto p P, o algoritmo efetua a contagem de vizinhos por região percorrendo a lista de vizinhos p e comparando as coordenadas cartesianas dos pontos envolvidos. Depois de passar por todos os vizinhos de um ponto p, o algoritmo calcula a pontuação final de cada posição candidata e ordena as listas 49

68 pontuacoes p e posicoes p. Qualquer método de ordenação pode ser utilizado, posto que as duas listas possuem tamanho quatro. O cálculo das pontuações finais e a ordenação das duas listas são realizados em tempo constante. Figura 3.14: Pontuação da posição na região DC é igual a 5, na região EC é igual a 14, na região DB é igual a 5 e na região EB é igual a Solução Inicial A seguir, descreve-se a rotina usada para gerar uma solução inicial, apresentada no Algoritmo 6. A rotina GERA-SOL-INI recebe como entrada o conjunto de pontos da instância P, o conjunto Vizinhos e os conjuntos Pontuacoes e Posicoes gerados pela rotina CALC-PONT. Como saída, ela retorna a solução inicial L. A idéia da GERA-SOL-INI é posicionar a legenda de cada ponto na posição do modelo Four-position com menor pontuação. Para garantir que não haja preferência por posições, quando há empate na pontuação de mais de uma posição em primeiro lugar, o algoritmo seleciona uma das posições empatadas aleatoriamente. Depois de posicionar a legenda de todos os pontos, a rotina executa uma verificação para remover aquelas que estão em conflito. A complexidade no pior caso é O(nk), a mesma do procedimento CALC-PONT, pois para verificar se o deslocamento de um determinado ponto é válido é preciso percorrer sua lista de vizinhos até encontrar um conflito. O pior caso ocorre quando o conflito é detectado sempre no último vizinho para todos os pontos. A constatação de conflito entre dois pontos solucionados é realizada em tempo constante: basta pegar o mesmo ponto de referência em suas legendas, como o canto superior direito, por exemplo, e verificar se eles estão mais próximos que LL na horizontal, e mais próximos que AL na vertical. Caso o vizinho não esteja solucionado, é preciso verificar se ele está dentro da Área de Legenda do ponto. 50

69 Na prática, a rotina GERA-SOL-INI é bem rápida, pois as verificações são executadas somente em pontos que possuem legendas na solução que está sendo construída. Quando o algoritmo detecta um conflito entre dois pontos (p1 e p2) ambos têm suas legendas removidas. Isso ocorre durante a análise de p1, portanto, quando a rotina chega em p2 nenhuma verificação é realizada entrada: P, Vizinhos, Pontuacoes, Posicoes saída : L for p P do pont 1 pontuacoes p [1]; pont 2 pontuacoes p [2]; pont 3 pontuacoes p [3]; pont 4 pontuacoes p [4]; if pont 1 < pont 2 then indice 1; else if pont 1 < pont 3 then indice escolha aleatória em {1, 2}; else if pont 1 < pont 4 then indice escolha aleatória em {1,2,3}; else indice escolha aleatória em {1,2,3,4}; end l p posicoes p [indice]; end for p P do if solucionado(l p ) then for v vizinhos p do if existe conflito entre p e v then l p ( 1, 1); l v ( 1, 1); interrompe laço da linha 19; end end end end return L; Algoritmo 6: Pseudocódigo da rotina GERA-SOL-INI, responsável pela construção da solução inicial do algoritmo. O parâmetro P representa o conjunto de pontos da instância, Vizinhos o conjunto de listas de vizinhos e Pontuacoes e Posicoes os conjuntos gerados pela rotina CALC-PONT. A solução L, retornada pela rotina, contém os deslocamentos que representam a solução inicial do algoritmo HC-PMNL. 51

70 3.4.3 Heurística Embutida A heurística embutida, chamada HC e apresentada no Algoritmo 7, constrói uma nova solução a partir de uma solução pré-existente L. Considere a lista candidatos como uma lista de tamanho m n, sendo n o número de pontos da instância, composta pelos pontos não solucionados de P de acordo com uma determinada solução L. A HC recebe como entrada a lista candidatos associada a uma solução L, os conjuntos Vizinhos, Pontuacoes e Posicoes, e os parâmetros INC e NS, que terão seus papéis explicados mais à frente nesta seção. A rotina retorna uma nova solução L, construída a partir de L, e a lista candidatos atualizada de acordo com L. A HC percorre a lista de candidatos do início ao fim tentando encontrar uma posição de legenda sem conflito para cada ponto, primeiro usando o modelo Four-position, depois o Four-slider. No Algoritmo 7 são utilizadas duas novas funções definidas da seguinte forma: posicaolegendaok(p P, l aux {[0,LL], [0,AL]}, L, Vizinhos): função responsável por verificar se a legenda representada pelo deslocamento l aux, temporariamente definido para p, não está em conflito com as legendas de seus vizinhos solucionados em L e com seus próprios vizinhos não solucionados em L. Retorna verdadeiro caso a legenda esteja sem conflito e falso no caso contrário. A complexidade da função, no pior caso, é O(k) sendo k o número de vizinhos de p, pois a constatação de conflito entre duas legendas ou entre uma legenda e um ponto é realizada em tempo constante. posicionaslider(p P, candidatos, L, Vizinhos, Pontuacoes, Posicoes, NS): função responsável por fazer a legenda de p deslizar na horizontal e na vertical na busca por uma posição sem conflito. Ao encontrar uma posição de legenda sem conflito para p, a função atualiza o deslocamento de p em L e remove p da lista de candidatos. O parâmetro NS indica o número de tentativas de posicionamento da legenda de p entre duas posições do modelo Four-position, representando assim o deslizamento da legenda entre essas posições. A função posicionaslider faz uso da posicaolegendaok para verificar a existência de conflitos e retorna a solução 52

71 L e a lista candidatos, que podem ter sido atualizadas no processo. A complexidade da função, no pior caso, é O(2NSk), sendo k o número de vizinhos de p. Se o algoritmo não encontrar posições de legenda sem conflito, então são realizadas NS tentativas de posicionamento da legenda de p na horizontal e mais NS tentativas na vertical. Para cada tentativa de posicionamento é preciso percorrer a lista de vizinhos de p para verificar se a legenda está sem conflito. A atualização do deslocamento de p em L e a remoção de p da lista de candidatos são tarefas executadas em tempo constante entrada: candidatos, L, Vizinhos, Pontuacoes, Posicoes, INC, NS saída : candidatos, L repeat pontosolucionado FALSE; for c candidatos do for i 1 to 4 do if pontuacoes c [i] < INC then l aux posicoes c [i]; if posicaolegendaok(c, l aux, L, Vizinhos) then pontosolucionado TRUE; l c l aux ; candidatos candidatos {c}; interrompe laço da linha 4; end end end if pontosolucionado = FALSE then candidatos, L posicionaslider(c, candidatos, L, Vizinhos, Pontuacoes, Posicoes, NS); if solucionado(l c ) then pontosolucionado TRUE; end end end until pontosolucionado = TRUE ; return candidatos, L; Algoritmo 7: Implementação em pseudocódigo da heurística HC. O parâmetro candidatos representa a lista de candidatos associada à solução L. Outros parâmetros do algoritmo são INC, NS e os conjuntos Vizinhos, Pontuacoes e Posicoes. Como saída, a rotina retorna a solução L e a lista candidatos atualizada. A variável l aux é utilizada para representar um deslocamento que não pertence a nenhuma solução. Na linha 5 do Algoritmo 7 é executado um teste que verifica se a pontuação da posição de legenda que será testada na iteração possui valor menor que o parâmetro INC. Esse 53

72 teste garante que o algoritmo não perderá tempo tentando posicionar legendas em áreas povoadas por vizinhos de área. As tentativas de rotulação de um ponto p com o modelo Four-position são realizadas na ordem definida pela lista posicoes p. Desse modo, é dada prioridade para as posições menos povoadas por vizinhos. Se não for possível posicionar a legenda do ponto com o modelo Four-position, então o algoritmo fará uso do Four-slider para tentar solucioná-lo, como mostrado na linha 16 do Algoritmo 7. A função posicionaslider posiciona a legenda do ponto em uma posição do modelo Four-position e a desliza horizontalmente até a posição que se encontra na direção oposta. Se mesmo assim a rotina não conseguir solucionar o ponto, ela volta a legenda para a posição do modelo Four-position escolhida anteriormente e a desliza verticalmente até a posição que se encontra na direção oposta. O deslizamento, na realidade, é representado por um determinado número de saltos de tamanho fixo igual a NS. Cada salto é uma tentativa de rotulação executada pela rotina. Por exemplo, se a largura das legendas for igual a 30 e NS igual a 10, então, ao realizar um deslizamento horizontal, a rotina irá efetuar 10 tentativas de rotulação: uma a cada 3 unidades. Nesse caso, se o deslizamento for da esquerda para direita, então as tentativas de rotulação seriam com os deslocamentos horizontais 3,6,9,...,30. A lógica é a mesma para o deslizamento vertical. A posição do modelo Four-position que serve de origem para o deslizamento é obtida por meio de uma rotina probabilística que, mesmo com boa variabilidade, privilegia posições de legenda com pontuações menores. As probabilidades das posições de legenda são definidas, de modo que o somatório de seus valores seja igual a um. Considere a probabilidade da posição com menor pontuação prob1 e as seguintes prob2, prob3 e prob4, respectivamente. Considere também a função randp(), que gera um número aleatório entre zero e um excluindo as extremidades. O Algoritmo 8 apresenta o pseudocódigo da função posinislider, utilizada pela função posicionaslider, que retorna o deslocamento da posição escolhida para iniciar o deslizamento. 54

73 entrada: p P, Pontuacoes, Posicoes saída : l aux {[0,LL],[0,AL]} pt pontuacoes p [1] + pontuacoes p [2] + pontuacoes p [3] + pontuacoes p [4]; prob1 1 (pontuacoes p [1]/pt); prob2 1 (pontuacoes p [2]/pt); prob3 1 (pontuacoes p [3]/pt); prob4 1 (pontuacoes p [4]/pt); probtot prob1 + prob2 + prob3 + prob4; prob1 prob1/ probtot; prob2 prob2/ probtot; prob3 prob3/ probtot; prob4 prob4/ probtot; x randp; if x < prob1 then l aux posicoes p [1]; else if x < (prob1 + prob2) then l aux posicoes p [2]; else if x < (prob1 + prob2 + prob3) then l aux posicoes p [3]; else l aux posicoes p [4]; end return l aux ; Algoritmo 8: Função posinislider responsável por posicionar a legenda de um ponto no local que servirá de origem para o deslizamento da mesma. A função posinislider recebe como entrada um ponto p P e os conjuntos Posicoes e Pontuacoes. Ela retorna um deslocamento de legenda para p equivalente a uma posição do modelo Four-position. Na linha um a função calcula a soma das pontuações de cada posição e armazena na variável pt. A probabilidade inicial de uma posição k é igual a um menos a razão da pontuação de k sobre pt. Isso é feito para que a probabilidade de escolha de posições com pontuações menores seja maior, em compensação, torna a soma das probabilidades igual ao número de posições candidatas menos um, que no caso é igual a três. Dividindo a probabilidade inicial de cada posição pela soma das probabilidades iniciais, chega-se as probabilidades finais, cuja soma é igual a um. Desse modo, a probabilidade de escolha de cada posição é respeitada, pois uma posição somente será escolhida se o número sorteado x estiver no intervalo entre a soma das probabilidades das posições anteriores (SPPA) e SPPA mais a própria probabilidade da posição em questão. Por exem- 55

74 plo, se a soma das probabilidades das três primeiras posições for igual a 0.8, significa que a quarta posição somente será escolhida se x estiver no intervalo [ 0.8,1[, o que dá uma probabilidade de 20%. O valor do parâmetro INC influencia diretamente no cálculo dessas probabilidades, pois quanto maior o incremento, maior a diferença entre posições com e sem vizinhos dentro de suas áreas. Incrementos com valores altos tornam a probabilidade de escolha de posições sem vizinhos dentro de suas áreas maior, mas a variação não é muito significativa. Considere a situação apresentada na Figura Se o valor do incremento fosse igual a um, a pontuação final de cada posição seria igual a 5 e, consequentemente, a probabilidade de cada posição ser escolhida seria 25%. Seja PDC a pontuação de uma legenda na região DC. Considere a função apresentada na Equação 3.5, que calcula a probabilidade de escolha de uma legenda na região DC em função da pontuação total (pt), de acordo com o Algoritmo 8: f (pt) = (1 PDC/pt)/3 = 1/3 PDC/3pt (3.5) Suponha que o valor de INC tenda ao infinito. No contexto da Figura 3.14, PDC pode ser considerada uma constante, pois a posição de legenda não é afetada pelo incremento. Entretanto, o valor de pt tende ao infinito, pois as legendas das regiões EC e EB possuem vizinhos dentro de suas áreas. Calculando o limite quando pt tende ao infinito da função apresentada na Equação 3.5, obtem-se: lim (1/3 PDC/3pt) = lim 1/3 lim PDC/3pt = lim 1/3 = pt pt pt pt O resultado mostra que a probabilidade de uma posição do modelo Four-position ser escolhida para o deslizamento na função posicionaslider é de no máximo 33,33%. Pela variação das probabilidades não ser significativa, é mais importante escolher um valor de INC que não faça HC ignorar posições do modelo Four-position ao tentar legendar os pontos antes de aplicar o deslizamento (teste executado na linha 5 do Algoritmo 7). Observe que se uma posição candidata possuir muitos vizinhos nas redondezas, mas ne- 56

75 nhum dentro de sua área, um valor de INC baixo pode fazer com que o algoritmo não tente legendar o ponto com essa posição. Com isso, o algoritmo pode perder uma boa oportunidade de solucionar o ponto em questão. A complexidade da heurística HC no pior caso é O(nk(2NS + 4)), sendo n o número de pontos na lista de candidatos e k o número médio de vizinhos por ponto presente na lista de candidatos. O pior caso ocorre quando a heurística não consegue solucionar nenhum ponto da lista de candidatos. Chega-se a complexidade final por meio da soma das complexidades de cada parte de HC. Para cada ponto, primeiramente a heurística tenta posicionar sua legenda usando o modelo Four-position, com uma complexidade O(4nk), depois usando o modelo Four-slider, com uma complexidade O(2nk, NS) Perturbação A perturbação tem como objetivo alterar a solução corrente para pior, viabilizando a construção de novas soluções com mais pontos solucionados do que a melhor solução encontrada até o momento. A perturbação definida para esse algoritmo, representada pela rotina PERTUBACAO, recebe como entrada a lista candidatos relativa à solução corrente, a própria solução corrente L, o conjunto Vizinhos e o parâmetro NCE, que será explicado mais à frente nessa seção. Como saída a rotina retorna a solução L perturbada e a lista de candidatos atualizada de acordo com as alterações que foram feitas em L. A rotina remove de L as legendas de todos os vizinhos de um determinado número de pontos não solucionados, e depois embaralha a lista de candidatos, de maneira que HC tente solucionar os pontos em uma nova ordem. A heurística HC é construtiva, pois, uma vez que soluciona um ponto, não mexe mais em sua legenda até o final de sua execução. Como os pontos são analisados na ordem em que se encontram na lista de candidatos, a tendência é que os pontos no início da lista possuam mais espaço para rotulação do que os pontos que estão no final, pois cada ponto solucionado reduz o espaço total disponível. Desta forma, o embaralhamento da lista de candidatos, somado a boa variedade de deslizamentos tentados pela heurística HC, permite que o algoritmo gere uma solução diferente a cada iteração em que tenta melhorar a solução corrente. Em muitas situações a estratégia é bem sucedida, como será mostrado na Seção

76 A escolha dos pontos cujos vizinhos terão as legendas removidas é feita aleatoriamente. O método desenvolvido garante que todos os pontos não solucionados possuem chance de serem escolhidos, nunca duas vezes na mesma perturbação, com uma complexidade O(1). Entretanto, a técnica não oferece probabilidade uniforme de escolha para todos os candidatos. Supondo uma lista de candidatos de tamanho m e que o algoritmo escolha NCE candidatos para perturbação, o primeiro ponto escolhido pc é selecionado aleatoriamente entre o primeiro elemento e o elemento de número m (NCE 1) da lista de candidatos, como mostrado na linha 5 do Algoritmo 9. Os demais são selecionados da seguinte forma: o número de elementos restantes na lista a partir do primeiro candidato (m pc) é dividido pelo número de candidatos que ainda precisam ser escolhidos (NCE 1) e truncado, resultando no valor x, que é maior ou igual a um. Depois disso o algoritmo sorteia aleatoriamente um número inteiro entre 1 e x, que será progressivamente somado a pc para obtenção dos índices dos candidatos restantes. Os candidatos selecionados para perturbação são armazenados na lista candidatosescolhidos. Todo esse processo ocorre entre as linhas 6 e 15. Por exemplo, considere que o procedimento PERTUBACAO seleciona três candidatos em uma lista com 1500 pontos não legendados, numerados de 1 a Nesse caso o primeiro candidato deve estar entre os elementos 1 e Se o primeiro candidato selecionado for o elemento 1495, sobram os seguintes elementos para serem escolhidos: {1496, 1497, 1498, 1499, 1500}. Ainda faltam escolher dois candidatos em uma lista com cinco elementos, portanto, x é inicialmente igual a 2. Se depois do sorteio x for definido como 2 (ele poderia ser igual a 1 também), então os pontos selecionados seriam os elementos 1495, 1497 e 1499 da lista de candidatos. Quando a lista de candidatos possui tamanho menor ou igual a NCE, todos os candidatos são imediatamente escolhidos como mostrado na linha 3. Depois de remover as legendas dos vizinhos dos candidatos escolhidos, entre as linhas 17 e 24, o algoritmo embaralha a lista de candidatos caso haja necessidade, entre as linhas 25 e 32. O embaralhamento é aleatório, de maneira que existe a possibilidade dos elementos não mudarem 58

77 de ordem no final do processo. Considerando que a lista de candidatos possui tamanho m, a rotina troca a posição de dois elementos aleatórios da lista m/2 vezes. Considere a função getrand(x Z +,y Z + ), que retorna um número inteiro positivo aleatório entre x e y inclusive entrada: candidatos, L, Vizinhos, NCE saída : candidatos, L m candidatos ; if m NCE then candidatosescolhidos candidatos; else pc getrand(1, m (NCE 1)); x 0; if NCE > 1 then x (m pc)/(nce 1) ; x getrand(1,x); end soma 0; for i 1 to NCE do candidatosescolhidos candidatos [pc + soma]; soma soma + x; end end for c candidatosescolhidos do for v vizinhos c do if solucionado(l v ) then l v ( 1, 1); adiciona v na lista candidatos ; end end end m candidatos ; if m > 1 then for i 1 to (m/2) do p1 getrand(1, m); p2 getrand(1, m); troca pontos nos índices p1 e p2 de posição em candidatos ; end end return candidatos, L; Algoritmo 9: Pseudocódigo da rotina PERTURBACAO. A rotina recebe como entrada a lista candidatos associada à solução corrente L, o conjunto Vizinhos e o parâmetro NCE. Ela retorna como saída a solução corrente e a lista de candidatos alterada pela remoção da legenda de alguns pontos da instância. A complexidade da rotina PERTURBACAO é O(NCE k +m/2), sendo k o número médio 59

78 de vizinhos por ponto escolhido e m o número de elementos da lista de candidatos. Para cada candidato escolhido em tempo O(1), o algoritmo remove a legenda de todos os seus vizinhos solucionados em tempo O(k). Depois disso, a lista de candidatos é embaralhada em tempo O(m/2) Critério de Aceitação A rotina ACEITA-SOL, ilustrada no Algoritmo 10, recebe como entrada a melhor solução armazenada até o momento ML, a solução corrente L, suas respectivas listas de candidatos candidatos e candidatos e os parâmetros NRI, NRE e NE. Como saída, a rotina retorna um valor indicando se a solução corrente foi aceita ou não, ML e candidatos, que podem ter sido atualizadas caso L tenha sido aceita ou algum ponto tenha sido removido da instância. O critério de aceitação definido para o algoritmo sempre aceita L quando ob j(l) > ob j(ml) (Equação 3.1). Ao verificar que L foi aceita, a rotina atualiza ML com os dados de L e candidatos com os dados de candidatos, preparando a heurística para a próxima iteração. A HC-PMNL sempre trabalha em cima da melhor solução encontrada, removendo as legendas de alguns pontos por meio da perturbação e tentando encontrar configurações melhores com HC na sequência. Depois de um determinado número de rodadas consecutivas sem melhora, chamado Número de Rodadas de Intensificação (NRI), a heurística passa um determinado número de rodadas, chamado Número de Rodadas de Exploração (NRE), aceitando soluções correntes quando ob j(l) ob j(ml). Considere um estágio composto por NRI + NRE rodadas em sequência sem melhora. Depois de um determinado número de estágios NE, a rotina remove um ponto da instância, visando liberar espaço para novas rotulações. Pontos removidos são excluídos da lista de candidatos da melhor solução (candidatos) e marcados de modo que passam a ser desconsiderados por todos os componentes da heurística HC-PMNL. Todo espaço ao redor de pontos removidos é liberado para outras legendas, inclusive suas próprias posições, de maneira que eles não podem mais ser solucionados. Pontos não removidos serão chamados de pontos ativos. O ponto escolhido para ser removido é sempre o ponto ativo, não solucionado em 60

79 relação a ML, que possui o maior número de vizinhos. Para encontrar esse ponto, a rotina simplesmente percorre a lista candidatos até o final, separando o elemento com o maior número de vizinhos. O número de vizinhos de um ponto é uma informação que não se altera durante a execução da HC-PMNL. Uma vez contabilizada e armazenada pela rotina DEF-VIZINHOS, apresentada na Seção 3.2, essa informação pode ser facilmente consultada em todo algoritmo. O pseudocódigo da rotina ACEITA-SOL se encontra no Algoritmo 10. Considere a função nvp(p P), que retorna o número de vizinhos de um ponto, e a função removerponto(candidatos), que faz uso de nvp para encontrar o ponto da lista de candidatos com maior número de vizinhos e removê-lo da instância. Considere também as variáveis globais contadornri, contadornre e contadorne, inicializadas com valor zero, que armazenam o número de rodadas em modo de intensificação, exploração e o número de estágios antes de uma remoção de ponto, respectivamente. 61

80 entrada: candidatos, L, candidatos, ML, NRI, NRE, NE saída : TRUE ou FALSE, candidatos, ML //teste para verificar se o critério de parada foi alcançado if candidatos = 0 then ML L; candidatos candidatos ; return TRUE, candidatos, ML; end m candidatos ; n candidatos ; if m n then if contadornre > 0 then contadornre contadornre 1; if m = n then ML L; candidatos candidatos ; return TRUE, candidatos, ML; end end contadornri contadornri + 1; if contadornri = NRI then contadornri 0; contadorne contadorne + 1; if contadorne = NE then contadorne 0; candidatos removerponto(candidatos); else contadornre NRE; end end else contadornri 0; contadornre 0; contadorne 0; ML L; candidatos candidatos ; return TRUE, candidatos, ML; end return FALSE, candidatos, ML; Algoritmo 10: Rotina responsável pelo critério de aceitação do algoritmo. A estratégia utilizada para escapar de uma possível estagnação e tentar melhorar a melhor solução até o momento se baseia na remoção do ponto não solucionado com maior número de vizinhos. Desse modo, pelo preço de perder um ponto que não reduz a qualidade da solução no momento, o algoritmo ganha rapidamente um bom espaço para novas 62

81 rotulações. Pode-se dizer que a qualidade da solução não é reduzida com a remoção, porque ela é medida pelo número de pontos solucionados. Portanto, a remoção de um ponto não solucionado não afeta a qualidade da melhor solução obtida até o momento. O critério para remoção de um ponto privilegia a eficiência. O número de vizinhos de um ponto é uma informação obtida em tempo O(1), pois é mantida pelo algoritmo. Alternativamente, o número de vizinhos não solucionados é uma informação que precisaria ser calculada para cada ponto candidato a remoção, o que elevaria o custo do procedimento de O(n) para O(nk), sendo n o número de pontos não solucionados e k o número médio de vizinhos por ponto. Dessa forma, optou-se por selecionar o ponto não solucionado com maior número de vizinhos Juntando Componentes da Heurística HC-PMNL A heurística HC-PMNL, ilustrada pelo Algoritmo 11, recebe como entrada um conjunto de pontos P de tamanho n e os parâmetros INC, NS, NCE, NRI, NRE e NE. Ela retorna um conjunto de deslocamentos, que representa a melhor solução encontrada. Nas linhas 1 e 2 do Algoritmo 11, para cada p P, a HC-PMNL gera a lista de vizinhos, por meio da rotina DEF-VIZINHOS, e gera os conjuntos Pontuacoes e Posicoes, a partir da rotina CALC-PONT. Em seguida, nas linha 3 e 4, a heurística constrói uma solução inicial com base nas pontuações calculadas, utilizando a rotina GERA-SOL-INI, e prepara a lista de candidatos baseada na solução inicial L. Com a lista de candidatos preparada, a heurística embutida HC é utilizada pela primeira vez, na linha 5, para gerar, a partir de L, o que será considerada a melhor solução no momento ML. A cada iteração do laço compreendido entre as linhas 7-15, a heurística seleciona um determinado número de pontos não solucionados, retira a legenda de todos os seus vizinhos e tenta reposicioná-las de uma forma diferente, de modo que a nova configuração possua mais pontos solucionados que a configuração anterior. Todo ponto que tem sua legenda removida pela rotina PERTURBACAO é adicionado a lista de candidatos e todo ponto legendado pela heurística HC é retirado dela. No final do laço, a rotina ACEITA-SOL é responsável por verificar se a solução corrente será aceita, por controlar as fases de intensificação e exploração e por remover pontos da instância quando necessário. 63

82 A complexidade de uma iteração do algoritmo HC-PMNL é O(nk(13/2+2NS)+n log n+ NCE, k + m/2), sendo n o número de pontos da instância, k o número médio de vizinhos por ponto e m o número de elementos na lista de candidatos. Essa complexidade é resultado da soma das complexidades de cada componente do algoritmo entrada: P, INC, NS, NCE, NRI, NRE, NE saída : melhor solução encontrada (ML) Vizinhos DEF-VIZINHOS(P); Pontuacoes, Posicoes CALC-PONT(P, Vizinhos, INC); L GERA-SOL-INI(P, Vizinhos, Pontuacoes, Posicoes); criação da lista candidatos ; ML, candidatos HC(candidatos, L, Vizinhos, Pontuacoes, Posicoes, INC, NS); aceitou FALSE; repeat if aceitou = FALSE then L ML; candidatos candidatos; end L, candidatos PERTURBACAO(candidatos, L, Vizinhos, NCE); L, candidatos HC(candidatos, L, Vizinhos, Pontuacoes, Posicoes, INC, NS); aceitou, ML, candidatos ACEITA-SOL(candidatos, L, candidatos, ML, Vizinhos, NRI, NRE, NE); until candidatos > 0 ; return ML; Algoritmo 11: Heurística construtiva HC-PMNL para o PMNL em alto nível de abstração. 64

83 4 Experimentos Computacionais Neste capítulo serão apresentados os experimentos computacionais realizados com os algoritmos PPROC e HC-PMNL. Ele está dividido da seguinte maneira: nas Seções 4.1 e 4.2 serão apresentados, respectivamente, o ambiente computacional onde os testes foram realizados e os conjuntos de instâncias utilizados com suas principais características. Em seguida, são apresentados os experimentos realizados com o algoritmo PPROC, com intuito de mostrar seu potencial de redução e como ele pode ser útil para outros algoritmos propostos para o PRCP. Finalmente, na Seção 4.4 são apresentados detalhes da implementação e experimentos relacionados ao HC-PMNL. É mostrado o desempenho da rotina GERA-SOL-INI, responsável pela construção da solução inicial, os valores dos parâmetros utilizados no HC-PMNL, experimentos com três desses parâmetros (INC, NS e NCE) e os resultados das comparações do HC-PMNL com os algoritmos GERA-SOL-INI, PPROC+HC, FDL e PPROC+FDL. 4.1 Ambiente computacional Os algoritmos PPROC e HC-PMNL foram implementados na linguagem C++, juntamente com uma versão chamada PPROC+HC que integra o pré-processamento à heurística construtiva. A versão original do algoritmo FDL de EBNER et al. [3], disponível no endereço [44], foi implementada na linguagem Java. Para efetuar uma comparação justa foram implementados também na linguagem C++ os algoritmos FDL e PPROC+FDL, uma versão do algoritmo de Ebner et al. integrada ao pré-processamento. O gerador de números aleatórios utilizado é uma implementação em C++ do algoritmo 65

84 de SCHRAGE [45]. Todos os testes foram realizados em uma máquina com processador Intel Pentium Dual-Core com 1,73 GHz e 1 GB de memória RAM, executando o Windows XP Service Pack 3. Os algoritmos foram compilados com o Mingw do gcc, compilador nativo da IDE Dev-C++ da Bloodshed Softwares [46], que opera sob a licença de software livre. 4.2 Conjuntos de Instâncias Para realização dos experimentos detalhados nesse capítulo foram utilizados três grupos de instâncias. O primeiro grupo é composto pelas instâncias de CHRISTENSEN et al. [24]. As instâncias foram criadas por meio de um gerador que distribui aleatoriamente n pontos com tamanho fixo de legenda (30 por 7 unidades) em uma área de 792 por 612 unidades. De acordo com os autores, o tamanho da área do mapa foi definido subjetivamente no esforço de identificar a escala de mapas típicos para páginas de 11 por 8.5 polegadas. O grupo é formado por instâncias de tamanho n = 50,100,...,1450,1500, com 25 configurações diferentes por tamanho, totalizando 750 instâncias. Como elas foram geradas dentro de uma mesma área, a tendência é que quanto maior o número de pontos, mais densa e, consequentemente, mais difícil é a instância. Esse grupo é amplamente utilizado na literatura [31, 37, 12]. O algoritmo FDL de EBNER et al. [3] também foi submetido a essas instâncias na realização de seus experimentos computacionais. O segundo grupo, proposto em [47], é formado por instâncias baseadas em dados reais de tamanho n = 250,500,...,2750,3000, extraídas de um repositório com a localização de poços de água subterrânea em Munique na Alemanha. Cada tamanho possui 30 configurações diferentes, totalizando 360 instâncias. O tamanho das legendas de cada instância possui tamanho fixo, porém esse tamanho varia de configuração para configuração. A principal característica dessas instâncias é que elas foram geradas de modo que todos os pontos pudessem ser solucionados. EBNER et al. [3] também utilizaram esse grupo em seus testes e obtiveram 100% de pontos solucionados para todas as instâncias disponíveis. O terceiro grupo é formado por mais uma instância baseada em dados reais. A 66

85 instância contém pontos, que representam nós da rede rodoviária da Suíça. Diferente das instâncias já apresentadas nesta seção, ela não foi gerada com base em um tamanho fixo de legenda. Essa instância foi submetida ao algoritmo de redução de WAG- NER et al. [9] em [5]. Por esse motivo ela é útil ao presente trabalho de mestrado, uma vez que permite uma comparação entre as técnicas de redução. Além disso, por ser uma instância consideravelmente grande, ela também permite uma análise do comportamento dos algoritmos implementados diante dessa característica. 4.3 Estudo experimental do algoritmo PPROC Esta seção tem como objetivo apresentar os experimentos realizados com o algoritmo de pré-processamento PPROC. Será apresentado o experimento utilizado para análise do potencial de redução do algoritmo, na resolução de instâncias com diferentes características, e o experimento que demonstrou empiricamente a utilidade do pré-processamento na diminuição do tempo de execução de algoritmos já desenvolvidos para o PRCP. Para recolhimento dos dados que serviram de base para realização desses experimentos foram utilizadas as seguintes instâncias: Dentro do grupo de instâncias de Christensen et al., foram escolhidas seis configurações de cada tamanho entre as instâncias de 750 e 1500 pontos, totalizando 96 instâncias. Como são 25 configurações por tamanho, elas são numeradas de 1 a 25. Foram escolhidas as três primeiras e as três últimas, ou seja, aquelas de número 1, 2, 3, 23, 24 e 25; Dentro do grupo de instâncias de Munique, foram escolhidas também seis configurações de cada tamanho disponível, totalizando 72 instâncias. Como são 30 configurações por tamanho, elas são numeradas de 1 a 30. Seguindo o padrão utilizado para o primeiro grupo, foram escolhidas as três primeiras e as três últimas, ou seja, aquelas de número 1, 2, 3, 28, 29, 30; A instância da Suiça. 67

86 Este conjunto com 169 instâncias será denominado, daqui em diante, de conjunto de instâncias teste Desempenho de Redução O objetivo desse experimento é verificar o potencial de redução do algoritmo de préprocessamento. Define-se bateria como uma sequência de vinte execuções de uma mesma instância, variando a semente de aleatoriedade de um a vinte. Como o PPROC possui componentes aleatórios, foi executada uma bateria de teste para cada instância do conjunto de instâncias teste. Para cada bateria foram consolidados totais, médias, os melhores e os piores resultados, em relação à qualidade da solução (número de pontos solucionados) e tempo de execução (segundos). As Tabelas 4.1 e 4.2 apresentam os melhores resultados e as médias obtidas com as instâncias de Christensen et al. e de Munique, respectivamente. A coluna P indica o tamanho da instância, I o número de identificação da instância, Q o número de pontos solucionados e T o tempo de execução em segundos para obtenção do resultado. O percentual do número de pontos solucionados sobre o número de pontos da instância indica o chamado percentual de redução. As Figuras 4.1 e 4.2 apresentam os percentuais médios de redução por tamanho obtidos com o algoritmo de pré-processamento. Os dados no gráfico da Figura 4.1, por exemplo, representam os percentuais de redução das médias aritméticas dos resultados apresentados na coluna MÉDIA-Q da Tabela 4.1 por tamanho de instância. Figura 4.1: Percentuais de redução médios por tamanho para as instâncias selecionadas de Christensen et al. 68

87 MELHOR MÉDIA MELHOR MÉDIA P I Q T Q T P I Q T Q T , ,00 0, , ,00 0, , ,50 0, , ,00 0, , ,70 0, , ,00 0, , ,00 0, , ,00 0, , ,25 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,50 0, , ,00 0, , ,00 0, , ,00 0, , ,85 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,60 0, , ,00 0, , ,65 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,25 0, , ,00 0, , ,00 0, , ,50 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, ,000 99,00 0, , ,00 0, ,000 73,00 0, , ,00 0, ,015 89,95 0, , ,00 0, , ,85 0, , ,00 0, ,015 86,00 0, , ,00 0, , ,00 0, , ,00 0, , ,60 0, , ,00 0, ,015 91,00 0, , ,00 0, ,015 84,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, ,016 90,00 0, , ,85 0, , ,00 0, , ,35 0, ,000 60,00 0, , ,00 0, ,015 86,00 0, , ,70 0, ,000 81,00 0, , ,00 0, ,015 86,00 0, , ,00 0, ,016 66,00 0, , ,00 0, ,015 84,00 0, , ,75 0, ,015 98,10 0, , ,00 0, ,015 64,00 0, , ,00 0, ,015 86,00 0,016 Tabela 4.1: Resultados de redução obtidos com PPROC para instâncias do Christensen et al. A coluna P indica o tamanho da instância, I o número de identificação da instância, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado. São apresentados os melhores resultados e as médias obtidas por bateria de teste. 69

88 MELHOR MÉDIA MELHOR MÉDIA P I Q T Q T P I Q T Q T , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,70 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,40 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,85 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0, , ,00 0,008 Tabela 4.2: Resultados de redução obtidos com PPROC para instâncias de Munique. A coluna P indica o tamanho da instância, I o número de identificação da instância, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado. São apresentados os melhores resultados e as médias obtidas por bateria de teste. 70

89 Figura 4.2: Percentuais de redução médios por tamanho para as instâncias selecionadas de Munique. Pode-se observar pelos dados apresentados nas tabelas, que as médias são sempre muito próximas dos melhores resultados obtidos. Isso ocorre porque a aleatoriedade é pouco utilizada no PPROC e, por isso, não tem muita influência no resultado do algoritmo. Somente na aplicação da segunda regra, quando o algoritmo encontra um conjunto três pontos que estão na mesma abscissa, na mesma ordenada ou com um ponto acima e outro abaixo do ponto mais a esquerda do conjunto, é que elementos aleatórios são utilizados. A aleatoriedade é utilizada para determinar qual configuração de legendas utilizar na tentativa de rotulação. São duas as configurações possíveis para três pontos na mesma abscissa ou ordenada e três configurações possíveis para a situação restante. Os percentuais mostram que a densidade da instância é um fator determinante para a redução. No caso das instâncias de Christensen et al., apresentado na Figura 4.1, podese observar que quanto maior o número de pontos menor o percentual de redução. Isso ocorre, porque quanto maior o número de pontos mais densas são as instâncias, dado que as instâncias de Christensen et al. são geradas dentro de uma mesma área, independente do número de pontos. O mesmo não acontece com as instâncias de Munique, pois o aumento no número de pontos não se reflete em aumento de densidade. Como o nível de dificuldade das instâncias de Munique é menor, os percentuais médios de redução se mantiveram acima de 90% para todos os tamanhos. A instância da Suíça foi testada de modo que os resultados pudessem ser comparados com a redução obtida pelas regras de WAGNER et al. [9] em [5]. Dentre os tamanhos 71

90 de legenda testados em [5], foram escolhidos, usando o padrão (largura altura), os tamanhos 12 4, 8 8 e 14 6 utilizando o modelo Four-position. De acordo com os resultados apresentados em [5], dos pontos da instância, as regras de Wagner et al. solucionaram 5267 pontos com tamanho de legenda 12 4, 3267 pontos com tamanho 8 8 e 2187 pontos com tamanho Os resultados do PPROC são apresentados na Tabela 4.3. Entretanto, não é possível concluir que o potencial de redução do PPROC é superior ao apresentado pelas regras de Wagner et al. para esta instância pois, no trabalho acima citado, os autores executam uma única vez as regras de Wagner. MELHOR MÉDIA L Q T Q T , ,55 0, , ,15 0, , ,00 0,220 Tabela 4.3: Resultados de redução obtidos com PPROC para instância da Suíça. A coluna L indica o tamanho de legenda utilizado, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado. São apresentados os melhores resultados e as médias obtidas por bateria de teste Estudo experimental do efeito do PPROC no FDL O objetivo desse experimento é verificar se o pré-processamento pode ser útil a algoritmos já desenvolvidos para o PRCP, uma vez que seu propósito é reduzir o tempo total de execução, solucionando antecipadamente diversos pontos de uma instância de forma mais rápida que o algoritmo principal. Esse experimento foi realizado com a versão em C++ do algoritmo FDL, implementada neste trabalho, utilizando as instâncias selecionadas de Christensen et al. e de Munique. A implementação em C++ do FDL teve seus resultados comparados com aqueles obtidos pela versão em Java disponibilizada pelos autores, visando, assim, obter a igualdade de resultados. Uma vez que o FDL e o FDL somado ao PPROC foram implementados na mesma linguagem e executados na mesma máquina, foi possível realizar uma comparação justa entre os tempos de execução obtidos pelos dois algoritmos. O experimento foi elaborado da seguinte forma: executou-se uma bateria de testes para cada instância selecionada de Christensen et al. e de Munique com o algoritmo FDL. 72

91 Depois foram executadas baterias de testes para as mesmas instâncias com o algoritmo PPROC+FDL, que representa o pré-processamento somado ao FDL. Em seguida foram consolidados totais, médias, piores e melhores desempenhos, em relação à qualidade (em número de pontos solucionados) e tempo de execução (em segundos). Finalmente, foram calculadas as diferenças percentuais em termos de qualidade e tempo entre as duas abordagens. As Tabelas 4.4 e 4.5 apresentam as médias aritméticas do número de pontos solucionados e do tempo de execução dos algoritmos FDL e PPROC+FDL, obtidos por meio de baterias de teste com as instâncias selecionadas de Christensen et al. e de Munique, respectivamente. Pode-se observar que as diferenças de qualidade são mínimas, enquanto as diferenças no tempo de execução são significativas em termos percentuais. Somente duas instâncias tiveram aumento no tempo de execução ao utilizarem o algoritmo de préprocessamento: a instância de número 2 e tamanho 1050 do grupo de Christensen et al. e a instância de número 25 e tamanho 250 do grupo de Munique. Na Tabela 4.4 a maior melhora de tempo de execução com o algoritmo PPROC+FDL, em termos percentuais, foi registrada para instância de número 25 com tamanho 750: 78,84%. Esse resultado era previsível, dado que as instâncias com tamanho 750 foram as que obtiveram maiores percentuais de redução com o pré-processamento. Na Tabela 4.5 a maior melhora foi obtida para instância de número 1 com tamanho 3000: 98,53%. Como todas as instâncias de Munique possuem aproximadamente o mesmo grau de dificuldade, a tendência é que quanto maior o número de pontos, maior o ganho do algoritmo com o pré-processamento. Os resultados mostram que o pré-processamento não traz nenhum ganho em termos de qualidade. Na realidade, a média das diferenças percentuais de qualidade apontam para uma piora geral de 0,34% para as instâncias de Christensen et al. No entanto, diversas instâncias apresentaram pequenas melhoras de qualidade e mesmo as pioras registradas podem ser relevadas quando comparadas com os ganhos no tempo de execução do FDL. As instâncias de Munique não apresentaram diferenças em termos de qualidade, posto que todas foram plenamente resolvidas com e sem a utilização do pré-processamento. 73

92 FDL PPROC+FDL FDL PPROC+FDL P I Q T Q T P I Q T Q T ,05 2, ,05 1, ,95 104, ,05 95, ,00 0, ,00 0, ,20 67, ,40 61, ,90 1, ,55 0, ,40 91, ,30 85, ,00 0, ,00 0, ,80 102, ,75 88, ,00 0, ,00 0, ,00 63, ,20 60, ,95 1, ,70 0, ,95 62, ,00 59, ,45 3, ,65 2, ,60 96, ,70 87, ,95 4, ,95 3, ,35 89, ,75 85, ,90 2, ,50 1, ,45 102, ,10 93, ,55 5, ,00 4, ,95 128, ,65 117, ,60 3, ,65 2, ,20 128, ,50 110, ,35 4, ,65 3, ,35 120, ,15 111, ,40 3, ,55 2, ,65 159, ,80 138, ,80 3, ,65 2, ,75 174, ,90 155, ,75 6, ,90 5, ,05 171, ,05 154, ,75 3, ,05 3, ,65 186, ,00 163, ,90 4, ,70 3, ,00 140, ,85 125, ,35 5, ,00 3, ,15 140, ,90 131, ,55 8, ,50 7, ,95 251, ,60 216, ,40 7, ,90 6, ,15 224, ,20 201, ,15 4, ,35 4, ,15 199, ,05 183, ,80 8, ,00 7, ,90 197, ,60 180, ,55 7, ,10 6, ,90 234, ,00 209, ,55 6, ,90 5, ,15 212, ,80 191, ,55 16, ,75 15, ,10 328, ,55 303, ,45 11, ,00 11, ,50 296, ,15 261, ,30 7, ,60 6, ,90 314, ,10 294, ,35 5, ,05 5, ,90 239, ,05 225, ,05 22, ,80 20, ,75 276, ,80 260, ,50 5, ,65 4, ,85 311, ,45 282, ,05 31, ,85 29, ,35 383, ,50 355, ,65 15, ,25 12, ,15 376, ,15 332, ,70 27, ,60 26, ,00 377, ,75 340, ,45 9, ,85 8, ,75 360, ,95 330, ,25 26, ,90 24, ,80 329, ,40 317, ,75 21, ,90 20, ,65 376, ,35 334, ,70 37, ,35 34, ,50 437, ,75 394, ,05 34, ,55 35, ,20 452, ,35 409, ,35 42, ,85 39, ,30 455, ,00 415, ,30 34, ,65 32, ,50 428, ,50 406, ,35 38, ,10 37, ,45 460, ,40 430, ,65 46, ,85 40, ,20 463, ,35 434, ,25 47, ,75 46, ,05 579, ,10 534, ,05 71, ,20 66, ,15 525, ,00 503, ,50 42, ,40 40, ,85 493, ,40 456, ,05 59, ,05 57, ,75 524, ,25 493, ,75 63, ,60 60, ,95 550, ,40 527, ,90 61, ,65 58, ,25 529, ,35 491,578 Tabela 4.4: Médias do número de pontos solucionados e tempo de execução dos algoritmos FDL e PPROC+FDL com as instâncias selecionadas de Christensen et al. A coluna P indica o número de pontos da instância, I o número identificador da instância, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado em segundos. Em destaque a instância para qual foi registrada a maior diferença percentual entre os tempos de execução. 74

93 FDL PPROC+FDL FDL PPROC+FDL P I Q T Q T P I Q T Q T , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,021 Tabela 4.5: Médias do número de pontos solucionados e tempo de execução dos algoritmos FDL e PPROC+FDL com as instâncias selecionadas de Munique. A coluna P indica o número de pontos da instância, I o número identificador da instância, Q o número de pontos solucionados e T o tempo de execução para obtenção do resultado em segundos. Em destaque a instância para qual foi registrada a maior diferença percentual entre os tempos de execução. 75

94 As Figuras 4.3 e 4.4 apresentam as diferenças percentuais médias por tamanho entre os tempos de execução dos algoritmos FDL e PPROC+FDL para as instâncias de Christensen et al. e de Munique, respectivamente. Pode-se observar que os gráficos são similares aos apresentados nas Figuras 4.1 e 4.2, mostrando que a redução de tamanho com o pré-processamento possui papel fundamental na diminuição do tempo de execução do algoritmo. As oscilações ocorrem porque outros fatores como o nível de dificuldade da instância, por exemplo, também influenciam no tempo de execução. Figura 4.3: Diferença percentual média por tamanho entre os tempos de execução dos algoritmos FDL e PPROC+FDL para as instâncias de Christensen et al. Os percentuais indicam, na média, quão mais rápido as instâncias foram resolvidas com a utilização do pré-processamento. Por exemplo, as instâncias de tamanho 750 foram resolvidas em tempos 55,65% mais rápidos na média com a utilização do pré-processamento. Figura 4.4: Diferença percentual média por tamanho entre os tempos de execução dos algoritmos FDL e PPROC+FDL para as instâncias de Munique. Os percentuais indicam, na média, quão mais rápido as instâncias foram resolvidas com a utilização do pré-processamento. Por exemplo, as instâncias de tamanho 250 foram resolvidas em tempos 33,5% mais rápidos na média com a utilização do pré-processamento. 76

95 4.4 Estudo experimental da HC-PMNL Nesta seção será apresentado o estudo experimental da heurística HC-PMNL. Para coleta dos dados, serão utilizadas as instâncias de Christensen et al. e de Munique do conjunto de instâncias de teste. Na Seção será mostrado o desempenho do procedimento responsável pela construção da solução inicial, chamado GERA-SOL-INI, e na Seção será mostrado quanto a estratégia de construção, representada pela execução iterativa das rotinas PERTURBACAO, HC e ACEITA-SOL, é importante para a qualidade das soluções obtidas pelo algoritmo. Na Seção 4.4.2, serão apresentados os valores dos parâmetros usados na versão final do HC-PMNL e os experimentos realizados com os parâmetros INC, NS e NCE. Finalmente, na Seção 4.4.4, será apresentado o experimento de comparação do HC-PMNL com outros algoritmos estudados nesse trabalho Desempenho da rotina GERA-SOL-INI A rotina GERA-SOL-INI foi desenvolvida com o intuito de construir soluções iniciais de qualidade razoável e com baixo custo computacional. Para avaliar a qualidade das soluções geradas pela GERA-SOL-INI, as soluções serão comparadas com soluções geradas de forma aleatória. No experimento foram utilizadas as instâncias de Christensen et al. do conjunto de instâncias de teste. Cada instância passou por uma bateria de testes com as rotinas GERA-SOL-INI, PPROC+GERA, a mesma versão da rotina somada ao préprocessamento, e ALEATÓRIO, uma rotina que constrói uma solução inicial posicionando as legendas de cada ponto aleatoriamente. Para cada instância foram consolidados totais, médias, desempenho máximo e mínimo. A Figura 4.5 apresenta as médias de qualidade (em número de pontos solucionados) por tamanho obtidas para as instâncias de Christensen et al. Pode-se observar que o desempenho do procedimento GERA-SOL-INI é bem superior ao apresentado pelo procedimento ALEATÓRIO, portanto, o objetivo buscado no desenvolvimento do GERA-SOL-INI foi alcançado. Ao acrescentar o pré-processamento, o desempenho melhorou ainda mais, mostrando que o PPROC tem potencial para melhorar o desempenho de algoritmos que obtêm soluções muito distantes da solução ótima. 77

96 Como era previsto, de acordo com a principal característica das instâncias de Christensen et al., os melhores resultados do experimento foram registrados para instâncias com 750 pontos, enquanto os piores foram registrados para instâncias com 1500 pontos. A melhor média para o procedimento PPROC+GERA foi 90,35% de pontos solucionados para instância de número 24 com tamanho 750 e a pior média foi 32% para instância de número 1 com tamanho A melhor média do GERA-SOL-INI foi 79,55% para instância de número 2 com tamanho 750 e a pior 30,4% para instância de número 1 com tamanho Finalmente, a melhor média do ALEATÓRIO foi 45,55% para instância de número 24 com tamanho 750 e a pior 16,5% para instância de número 2 com tamanho Figura 4.5: Média percentual de qualidade (em número de pontos solucionados) por tamanho dos algoritmos GERA-SOL-INI, PPROC+GERA e ALEATÓRIO para as instâncias de Christensen et al Estudo dos parâmetros da HC-PMNL Nesta seção serão apresentados os estudos experimentais realizados com três parâmetros da heurística HC-PMNL: INC, NS e NCE. Para realização de todos os experimentos apresentados nessa seção foram utilizadas as instâncias de número 1 e 25 com tamanhos 800, 1150 e 1500 do grupo de Christensen et al. Essas instâncias foram escolhidas para que o comportamento dos parâmetros testados fossem observados em diferentes níveis de dificuldade. Como as instâncias de Christensen et al. são geradas dentro de uma mesma área, na maioria das vezes, quanto maior o número de pontos, mais difícil é a instância. Foram executadas baterias de testes para cada instância com diversos valores de parâmetros. Para 78

97 cada bateria foram consolidados totais, médias, desempenho máximo e mínimo, o melhor e o pior resultado, em termos de qualidade (em número de pontos solucionados) e tempo de execução (em segundos). Os estudos experimentais foram conduzidos da seguinte forma: enquanto o parâmetro que estava sendo testado variava, os demais permaneciam constantes com valores iguais aos utilizados na versão final do algoritmo. Os parâmetros e valores utilizados na versão final estão relacionados a seguir: INC: no procedimento CALC-PONT, onde é calculada a pontuação de cada legenda do modelo Four-position, esse parâmetro determina o valor da punição que é dada a posições de legenda que contêm vizinhos de área. Quanto maior a pontuação de uma posição de legenda, menor a possibilidade do algoritmo escolher essa posição na construção da solução inicial e nas tentativas de posicionamento da heurística construtiva embutida HC. O valor definido para esse parâmetro foi 11. NS: esse parâmetro, utilizado na heurística HC, controla o número de tentativas de posicionamento com o Four-slider. Por exemplo, se as legendas possuem tamanho 30 7 e NS é igual a 10, então, na tentativa de encontrar uma posição sem conflito deslizando a legenda horizontalmente, uma nova verificação seria realizada a cada 3 unidades. No caso do deslizamento vertical, uma nova verificação seria realizada a cada 0,7 unidades. O valor definido para esse parâmetro foi 14. NCE: esse parâmetro define o número de candidatos escolhidos no procedimento PERTURBACAO para terem todos os seus vizinhos marcados como não solucionados. O valor definido para esse parâmetro foi 1. NRI: define-se como uma rodada uma sequência de perturbação mais heurística construtiva. O parâmetro NRI determina o número de rodadas de intensificação, ou seja, o número de rodadas que o algoritmo passa sem obter soluções melhores que a melhor solução até o momento antes de mudar sua estratégia de construção. O NRI é um parâmetro utilizado no procedimento ACEITA-SOL e o valor definido para ele foi 5. 79

98 NRE: normalmente o algoritmo somente aceita soluções melhores que a melhor solução, ou seja, soluções com um número maior de pontos solucionados. Durante a fase de exploração, o algoritmo passa a aceitar também soluções com o mesmo número de pontos solucionados da solução corrente. O NRE define o número de rodadas que o algoritmo aceita soluções com o mesmo número de pontos solucionados e seu valor é igual a 1. NE: define-se como um estágio NRI + NRE rodadas. O parâmetro NE define o número de estágios que o algoritmo espera antes de remover um ponto da instância. O valor definido para esse parâmetro foi 3. Estudo do parâmetro INC Na Seção foi apresentado o modelo matemático utilizado para calcular a probabilidade de escolha de uma posição do modelo Four-position, visando iniciar o processo de deslizamento na heurística HC. Essa probabilidade depende do valor de INC. Considerando INC um elemento do conjunto R +, a faixa de probabilidade de escolha de uma posição varia somente de 25% a 33,33%. Nesta seção será estudado o comportamento do algoritmo PPROC+HC variando-se o valor do parâmetro INC. A Tabela 4.6 apresenta as médias de qualidade (em número de pontos solucionados) e tempo (em segundos) de cada valor testado. A tabela também apresenta o somatório das médias e a classificação dos resultados, de acordo com a eficiência, ou seja, número de pontos solucionados por unidade de tempo. Os valores testados foram escolhidos de acordo com a lógica de pontuação utilizada e de como essa pontuação afeta o algoritmo. É importante lembrar que, além de determinar a variação de probabilidade lembrada no parágrafo acima, o valor de INC é utilizado como parâmetro para definir se uma posição do modelo Four-position deve ou não ser testada antes da utilização do Four-slider no procedimento HC. Esse controle é apresentado na linha 5 do Algoritmo 7. Valores muito baixos devem ser evitados, uma vez que o algoritmo pode acabar ignorando posições de legenda que não contêm vizinhos de área e, por esse motivo, podem ser úteis. Por exemplo, suponha valor de INC igual a três. Nesse caso, basta existirem três vizinhos que não sejam de área na região DC, para o algoritmo não teste a 80

99 posição de legenda dessa região. Valores muito altos não possuem muita diferença entre si. Em primeiro lugar, em razão da pequena variação probabilística e, em segundo lugar, pela densidade das instâncias utilizadas. A partir de valores como quinze ou vinte para INC, fica muito difícil uma posição de legenda conseguir acumular essa pontuação sem a participação de vizinhos de área. Portanto, conforme cresce o valor de INC, o número de posições de legenda ignoradas erradamente vai tendendo cada vez mais rápido a zero. Dentre os valores testados para o parâmetro INC, aquele que apresentou melhor desempenho foi o valor onze. Este valor será utilizado na versão final do algoritmo PPROC+HC. 81

100 800 (1) 800 (25) 1150 (1) 1150 (25) 1500 (1) 1500 (25) TOTAL I Q T Q T Q T Q T Q T Q T Q T C 5 788,65 0,07 789,45 0, ,70 2, ,80 1, ,30 25, ,50 22, ,40 50, ,50 0,06 790,10 0, ,75 1, ,05 1, ,60 25, ,05 21, ,05 49, ,55 0,07 789,85 0, ,70 1, ,05 1, ,75 24, ,00 21, ,90 49, ,30 0,07 790,15 0, ,10 1, ,05 1, ,70 24, ,60 21, ,90 48, ,40 0,07 790,35 0, ,65 2, ,65 1, ,55 23, ,40 21, ,00 47, ,40 0,07 790,45 0, ,65 1, ,10 1, ,20 23, ,10 20, ,90 47, ,25 0,06 790,00 0, ,80 1, ,45 0, ,95 23, ,55 21, ,00 47, ,05 0,07 790,00 0, ,75 1, ,75 1, ,00 23, ,15 23, ,70 49, ,60 0,07 790,25 0, ,35 2, ,40 1, ,80 24, ,40 22, ,80 49, ,00 0,06 789,50 0, ,50 2, ,40 1, ,30 24, ,15 22, ,85 49, ,15 0,07 789,85 0, ,60 1, ,10 1, ,65 24, ,70 22, ,05 50, ,80 0,07 789,10 0, ,40 2, ,30 1, ,00 27, ,05 24, ,65 55, ,70 0,07 789,30 0, ,55 2, ,35 1, ,60 26, ,40 24, ,90 54,79 12 Tabela 4.6: Médias do número de pontos solucionados e tempo de execução em segundos do algoritmo PPROC+HC para as instâncias selecionadas de Christensen et al. com diferentes valores do parâmetro INC. A coluna I informa o valor de INC, Q o número de pontos solucionados, T o tempo de execução e C a classificação de acordo com os melhores resultados (maior número de pontos solucionados por unidade de tempo). Em destaque o valor escolhido para o algoritmo em definitivo. 82

101 Estudo do parâmetro NS O parâmetro NS determina o número de tentativas de rotulação que são efetuadas pelo algoritmo durante o deslizamento vertical e horizontal efetuado pela heurística embutida HC. Cada tentativa de rotulação obriga o algoritmo a percorrer toda lista de vizinhos do ponto, validando a posição de legenda recém colocada. Desse modo, o valor escolhido para o parâmetro deve prezar o equilíbrio entre o número de pontos solucionados pela estratégia e o esforço necessário para alcançar o objetivo. Nesta seção será estudado o comportamento da heurística HC, sendo executada dentro do algoritmo PPROC+HC, variando-se o valor do parâmetro NS. É desejável que o valor do parâmetro NS conduza o PPROC+HC a obter bons resultados em termos de qualidade. A Tabela 4.7 mostra os resultados dos testes realizados nesse experimento. Os testes começaram com NS igual a cinco e continuaram até dezoito, pois a partir do valor quinze o algoritmo entrou em uma queda contínua de eficiência. Valores mais baixos de NS apresentaram melhores resultados em termos de eficiência (maior número de pontos solucionados por unidade de tempo). O valor que apresentou melhor desempenho em termos de qualidade de solução foi o valor quatorze. Resultados obtidos para NS = 7 indicam que esse valor pode ser útil, principalmente para aplicações práticas do algoritmo. Entretanto, para a versão final da heurística HC decidiu-se privilegiar a qualidade e escolher o valor NS = 14, uma vez que os tempos de execução registrados para esse valor foram satisfatórios. 83

102 800 (1) 800 (25) 1150 (1) 1150 (25) 1500 (1) 1500 (25) TOTAL NS Q T Q T Q T Q T Q T Q T Q T C 5 782,85 0,05 787,55 0, ,55 1, ,60 0, ,85 15, ,65 13, ,05 31, ,25 0,05 787,75 0, ,70 1, ,15 0, ,30 16, ,05 14, ,20 33, ,95 0,05 788,70 0, ,15 1, ,00 0, ,95 14, ,30 12, ,05 29, ,50 0,05 787,80 0, ,00 1, ,15 0, ,80 19, ,45 17, ,70 39, ,80 0,06 788,10 0, ,50 1, ,45 1, ,60 21, ,55 19, ,00 43, ,10 0,06 787,85 0, ,20 1, ,55 1, ,00 21, ,50 19, ,20 44, ,70 0,07 787,95 0, ,00 2, ,70 1, ,95 24, ,60 23, ,90 51, ,05 0,06 788,15 0, ,55 2, ,30 1, ,75 25, ,60 23, ,40 51, ,95 0,08 787,10 0, ,85 2, ,80 1, ,45 27, ,90 25, ,05 56, ,25 0,06 790,00 0, ,80 1, ,45 0, ,95 23, ,55 21, ,00 47, ,85 0,08 789,05 0, ,70 2, ,75 1, ,30 28, ,45 25, ,10 58, ,55 0,08 787,90 0, ,45 2, ,95 1, ,20 31, ,95 29, ,00 65, ,80 0,09 787,40 0, ,60 2, ,75 1, ,45 33, ,45 31, ,45 69, ,20 0,10 788,00 0, ,65 3, ,70 1, ,05 34, ,45 31, ,05 71,42 14 Tabela 4.7: Médias do número de pontos solucionados e tempo de execução em segundos do algoritmo PPROC+HC para as instâncias selecionadas de Christensen et al. com diferentes valores do parâmetro NS. A coluna NS informa o valor do parâmetro, Q o número de pontos solucionados, T o tempo de execução e C a classificação de acordo com os melhores resultados (maior número de pontos solucionados por unidade de tempo). Em destaque o valor escolhido para o algoritmo em definitivo. 84

103 Estudo do parâmetro NCE O parâmetro NCE indica o número de candidatos que serão selecionados para terem todos os vizinhos marcados como não solucionados na rotina PERTURBACAO. Isso significa que quanto maior o número de candidatos, maior será a diferença entre a solução corrente e a melhor solução depois da execução do procedimento. Nesta seção será estudado o comportamento do algoritmo PPROC+HC variando-se o valor do parâmetro NCE. A Tabela 4.8 mostra que quanto maior o número de candidatos, pior o desempenho do algoritmo. A tabela apresenta as médias de baterias de teste executadas com as instâncias selecionadas de Christensen et al. O resultado indica que o algoritmo possui uma dificuldade de se recuperar de perturbações maiores e que, em compensação, grandes perturbações não são necessárias para que boas rotulações sejam obtidas. Desse modo, seguindo critério da eficiência, escolheu-se NCE = 1 para a versão final da rotina PERTURBACAO. 85

104 800 (1) 800 (25) 1150 (1) 1150 (25) 1500 (1) 1500 (25) TOTAL NCE Q T Q T Q T Q T Q T Q T Q T C 1 788,25 0,06 790,00 0, ,80 1, ,45 1, ,95 23, ,55 21, ,00 47, ,10 0,06 790,05 0, ,15 1, ,75 1, ,50 26, ,35 23, ,90 53, ,75 0,07 790,15 0, ,20 2, ,20 1, ,30 29, ,60 27, ,20 59, ,55 0,07 790,35 0, ,40 2, ,75 1, ,25 33, ,40 29, ,70 67, ,60 0,07 790,50 0, ,90 2, ,70 1, ,00 36, ,45 32, ,15 72, ,55 0,07 789,75 0, ,30 2, ,25 1, ,15 40, ,70 35, ,70 80,12 6 Tabela 4.8: Médias do número de pontos solucionados e tempo de execução em segundos do algoritmo PPROC+HC para as instâncias selecionadas de Christensen et al. com diferentes valores do parâmetro NCE. A coluna NCE informa o valor do parâmetro, Q o número de pontos solucionados, T o tempo de execução e C a classificação de acordo com os melhores resultados (maior número de pontos solucionados por unidade de tempo). Em destaque o valor escolhido para o algoritmo em definitivo. 86

105 4.4.3 Importância da Estratégia de Construção O objetivo desse experimento é quantificar a importância, em termos de qualidade, da estratégia de construção utilizada no HC-PMNL para as soluções encontradas pelo algoritmo. A estratégia de construção é representada pela execução iterativa das rotinas PERTURBACAO, HC e ACEITA-SOL. Trata-se basicamente da remoção de legendas de alguns pontos e embaralhamento da lista de candidatos, seguida pela execução da heurística embutida HC e pelo critério de aceitação definido na rotina ACEITA-SOL. Considere HC-PMNL*, como sendo o Algoritmo 11 terminando na linha 5, ou seja, com somente uma execução da heurística embutida. A idéia do experimento e visualizar a diferença percentual média de qualidade, em número de pontos solucionados, entre os algoritmos HC-PMNL e HC-PMNL*, observando assim a importância da estratégia de construção. Figura 4.6: Média percentual de qualidade (em número de pontos solucionados) por tamanho dos algoritmos HC-PMNL e HC-PMNL* para as instâncias de Christensen et al. Figura 4.7: Média percentual de qualidade (em número de pontos solucionados) por tamanho dos algoritmos HC-PMNL e HC-PMNL* para as instâncias de Christensen et al. Cada percentual apresentado nas Figuras 4.6 e 4.7 representa a média geral do número 87

HEURÍSTICA GULOSA PARA O PROBLEMA DA ROTULAÇÃO CARTOGRÁFICA DE PONTOS

HEURÍSTICA GULOSA PARA O PROBLEMA DA ROTULAÇÃO CARTOGRÁFICA DE PONTOS HEURÍSTICA GULOSA PARA O PROBLEMA DA ROTULAÇÃO CARTOGRÁFICA DE PONTOS Gildásio Lecchi Cravo, 1 Glaydston Mattos Ribeiro 1,2 e Luiz Antonio Nogueira Lorena 2 Faculdade de Aracruz Uniaracruaz 1 Departamento

Leia mais

3. Resolução de problemas por meio de busca

3. Resolução de problemas por meio de busca Inteligência Artificial - IBM1024 3. Resolução de problemas por meio de busca Prof. Renato Tinós Local: Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Resolução de problemas por

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais harison@pucpcaldas.br 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter

Leia mais

BCC204 - Teoria dos Grafos

BCC204 - Teoria dos Grafos BCC204 - Teoria dos Grafos Marco Antonio M. Carvalho (baseado nas notas de aula do prof. Haroldo Gambini Santos) Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal

Leia mais

Paradigmas de Projetos de Algoritmos

Paradigmas de Projetos de Algoritmos Paradigmas de Projetos de Algoritmos Luciana Assis 9 de junho de 2016 Luciana Assis (UFVJM) 9 de junho de 2016 1 / 36 1 Introdução 2 Força Bruta 3 Abordagem Incremental ou Construtiva 4 Recursão 5 Divisão

Leia mais

MODELO DE PROGRAMAÇÃO LINEAR INTEIRA MISTA PARA MINIMIZAÇÃO DOS ADIANTAMENTOS E ATRASOS EM FLOW SHOP COM SETUP DEPENDENDE DA SEQUÊNCIA

MODELO DE PROGRAMAÇÃO LINEAR INTEIRA MISTA PARA MINIMIZAÇÃO DOS ADIANTAMENTOS E ATRASOS EM FLOW SHOP COM SETUP DEPENDENDE DA SEQUÊNCIA MODELO DE PROGRAMAÇÃO LINEAR INTEIRA MISTA PARA MINIMIZAÇÃO DOS ADIANTAMENTOS E ATRASOS EM FLOW SHOP COM SETUP DEPENDENDE DA SEQUÊNCIA Cristiano Marinho Vaz, cmv02@hotmail.com Vinícius Ferreira da Silva

Leia mais

Otimização. Otimização em Redes. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia 2016/2

Otimização. Otimização em Redes. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia 2016/2 Otimização Otimização em Redes Paulo Henrique Ribeiro Gabriel phrg@ufu.br Faculdade de Computação Universidade Federal de Uberlândia 2016/2 Paulo H. R. Gabriel (FACOM/UFU) GSI027 2016/2 1 / 51 Conteúdo

Leia mais

META-HEURÍSTICA CLUSTERING SEARCH APLICADA AO PROBLEMA DE ROTULAÇÃO CARTOGRÁFICA DE PONTOS

META-HEURÍSTICA CLUSTERING SEARCH APLICADA AO PROBLEMA DE ROTULAÇÃO CARTOGRÁFICA DE PONTOS META-HEURÍSTICA CLUSTERING SEARCH APLICADA AO PROBLEMA DE ROTULAÇÃO CARTOGRÁFICA DE PONTOS Rômulo Louzada Rabello Universidade Federal do Espírito Santo UFES romulolouzada@gmail.com Geraldo Regis Mauri

Leia mais

Buscas Informadas ou Heurísticas - Parte III

Buscas Informadas ou Heurísticas - Parte III Buscas Informadas ou Heurísticas - Parte III Prof. Cedric Luiz de Carvalho Instituto de Informática - UFG Mestrado em Ciência da Computação / 2006 BUSCA SMA* (Simplified Memory-Bounded A*) BUSCA SMA* (Simplified

Leia mais

Buscas Informadas ou Heurísticas - Parte II

Buscas Informadas ou Heurísticas - Parte II Buscas Informadas ou Heurísticas - Parte II Prof. Cedric Luiz de Carvalho Instituto de Informática - UFG Graduação em Ciência da Computação / 2006 FUNÇÕES HEURÍSTICAS - 1/7 FUNÇÕES HEURÍSTICAS - 2/7 Solução

Leia mais

INVESTIGANDO O PROBLEMA DA MOCHILA IRRESTRITA EM SUA VERSÃO BIDIMENSIONAL

INVESTIGANDO O PROBLEMA DA MOCHILA IRRESTRITA EM SUA VERSÃO BIDIMENSIONAL INVESTIGANDO O PROBLEMA DA MOCHILA IRRESTRITA EM SUA VERSÃO BIDIMENSIONAL Mirella Augusta Sousa Moura, mirella.asm14@hotmail.com Thiago Alves de Queiroz, th.al.qz@catalão.ufg.br Resumo: Empacotamento consiste

Leia mais

Computação Evolucionária: Conceitos Básicos de Otimização

Computação Evolucionária: Conceitos Básicos de Otimização Computação Evolucionária: Conceitos Básicos de Otimização Prof. Dr. Rafael Stubs Parpinelli E-mail: rafael.parpinelli@udesc.br Otimização Min ou Max Sujeito a Otimização Função objetivo A qual se quer

Leia mais

3 Extração de Regras Simbólicas a partir de Máquinas de Vetores Suporte 3.1 Introdução

3 Extração de Regras Simbólicas a partir de Máquinas de Vetores Suporte 3.1 Introdução 3 Extração de Regras Simbólicas a partir de Máquinas de Vetores Suporte 3.1 Introdução Como já mencionado na seção 1.1, as SVMs geram, da mesma forma que redes neurais (RN), um "modelo caixa preta" de

Leia mais

Técnicas de Projeto de Algoritmos

Técnicas de Projeto de Algoritmos UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação Técnicas de Projeto de Algoritmos Material disponível para download em: www.profvaniacristina.com Profa. Vânia Cristina de Souza Pereira 03 _ Material

Leia mais

Aula 10: Tratabilidade

Aula 10: Tratabilidade Teoria da Computação DAINF-UTFPR Aula 10: Tratabilidade Prof. Ricardo Dutra da Silva Na aula anterior discutimos problemas que podem e que não podem ser computados. Nesta aula vamos considerar apenas problemas

Leia mais

4 Métodos Existentes. 4.1 Algoritmo Genético

4 Métodos Existentes. 4.1 Algoritmo Genético 61 4 Métodos Existentes A hibridização de diferentes métodos é em geral utilizada para resolver problemas de escalonamento, por fornecer empiricamente maior eficiência na busca de soluções. Ela pode ser

Leia mais

ROTULAÇÃO CARTOGRÁFICA DE PONTOS: NOVAS SOLUÇÕES COM UM ALGORITMO GULOSO E UM GRASP

ROTULAÇÃO CARTOGRÁFICA DE PONTOS: NOVAS SOLUÇÕES COM UM ALGORITMO GULOSO E UM GRASP ROTULAÇÃO CARTOGRÁFICA DE PONTOS: NOVAS SOLUÇÕES COM UM ALGORITMO GULOSO E UM GRASP Gildásio Lecchi Cravo 1 Glaydston Mattos Ribeiro 1,2 (Orientador) Luiz Antonio Nogueira Lorena 2 (Orientador) 1 Faculdade

Leia mais

Algoritmos Combinatórios: Introdução

Algoritmos Combinatórios: Introdução lucia@site.uottawa.ca UFSC, Fevereiro, 2010 Estruturas e Problemas Combinatórios Introdução a Algoritmos Combinatórios O que são: Estruturas Combinatórias? Algoritmos Combinatórios? Problemas Combinatórios?

Leia mais

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA ÁRVORES E ÁRVORE BINÁRIA DE BUSCA Prof. André Backes Definição 2 Diversas aplicações necessitam que se represente um conjunto de objetos e as suas relações hierárquicas Uma árvore é uma abstração matemática

Leia mais

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Lista de Exercícios Programação Inteira. x 2 0 e inteiros. Lista de Exercícios Programação Inteira ) Resolva os problemas a seguir usando o método B&B a) Max z = 5 x + 2 y s.a x + y 2 x + y 5 x, y 0, x e y inteiros b) Max z = 2 x + y s.a x + 2y 0 x + y 25 x, y

Leia mais

Seleção de Atributos 1

Seleção de Atributos 1 Seleção de Atributos 1 Tópicos Por que atributos irrelevantes são um problema Quais tipos de algoritmos de aprendizado são afetados Seleção de atributos antes do aprendizado Benefícios Abordagens automáticas

Leia mais

7 ALOCAÇÃO PELO MÉTODO DO NUCLEOLUS

7 ALOCAÇÃO PELO MÉTODO DO NUCLEOLUS ALOCAÇÃO PELO MÉTODO NUCLEOLUS 76 7 ALOCAÇÃO PELO MÉTODO DO NUCLEOLUS O quarto método abordado nesta monografia é o método do nucleolus [44]. Este método, diferentemente da alocação por Última Adição,

Leia mais

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão Projeto e Análise de Algoritmos NP Completude Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Universidade Federal de Alfenas versão da aula: 0.4 Introdução Problemas intratáveis ou difíceis são comuns

Leia mais

étodos uméricos AJUSTE DE FUNÇÕES Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

étodos uméricos AJUSTE DE FUNÇÕES Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA étodos uméricos AJUSTE DE FUNÇÕES Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA UNIVERSIDADE DE JOÃO DEL-REI PRÓ-REITORIA DE PESQUISA CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA

Leia mais

Ciclos hamiltonianos e o problema do caixeiro viajante

Ciclos hamiltonianos e o problema do caixeiro viajante Ciclos hamiltonianos e o problema do caixeiro viajante Algoritmos em Grafos Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional.

Leia mais

Sist. de equações não-lineares e problemas de empacotamento

Sist. de equações não-lineares e problemas de empacotamento Sistemas de equações não-lineares e problemas de empacotamento Jan Marcel Paiva Gentil Orientador: Ernesto G. Birgin Instituto de Matemática e Estatística Universidade de São Paulo Fomento: FAPESP (proc.

Leia mais

3 Aprendizado por reforço

3 Aprendizado por reforço 3 Aprendizado por reforço Aprendizado por reforço é um ramo estudado em estatística, psicologia, neurociência e ciência da computação. Atraiu o interesse de pesquisadores ligados a aprendizado de máquina

Leia mais

Linguagens Regulares. Prof. Daniel Oliveira

Linguagens Regulares. Prof. Daniel Oliveira Linguagens Regulares Prof. Daniel Oliveira Linguagens Regulares Linguagens Regulares ou Tipo 3 Hierarquia de Chomsky Linguagens Regulares Aborda-se os seguintes formalismos: Autômatos Finitos Expressões

Leia mais

Estudo e implementação de heurísticas para determinação do caminho de menor custo para atender a rotas pré estabelecidas. Por: Charles Pereira

Estudo e implementação de heurísticas para determinação do caminho de menor custo para atender a rotas pré estabelecidas. Por: Charles Pereira Estudo e implementação de heurísticas para determinação do caminho de menor custo para atender a rotas pré estabelecidas Por: Charles Pereira Objetivos Principal: - Criar, implementar e avaliar heurísticas

Leia mais

Otimização de horários Seminário. Clarisse Resende 25/01/2013

Otimização de horários Seminário. Clarisse Resende 25/01/2013 Otimização de horários Seminário Clarisse Resende 25/01/2013 O problema dos horários consiste numa sequência de atividades de programação, satisfazendo um conjunto de restrições de recursos. Pretende-se

Leia mais

Pesquisa Operacional aplicada ao Planejamento e Controle da Produção e de Materiais Programação Linear

Pesquisa Operacional aplicada ao Planejamento e Controle da Produção e de Materiais Programação Linear Pesquisa Operacional aplicada ao Planejamento e Controle da Produção e de Materiais Programação Linear Introdução à Pesquisa Operacional Origens militares Segunda guerra mundial Aplicada na alocação de

Leia mais

COMPARAÇÃO ENTRE FROTA HOMOGÊNEA E HETEROGÊNEA EM PROBLEMAS DE ROTEAMENTO DE VEÍCULOS CAPACITADOS

COMPARAÇÃO ENTRE FROTA HOMOGÊNEA E HETEROGÊNEA EM PROBLEMAS DE ROTEAMENTO DE VEÍCULOS CAPACITADOS COMPARAÇÃO ENTRE FROTA HOMOGÊNEA E HETEROGÊNEA EM PROBLEMAS DE ROTEAMENTO DE VEÍCULOS CAPACITADOS Rosiana da Silva Lopes Danilo César Rodrigues Azevedo rosianalopes16@gmail.com danilo.azevedo@ufpi.edu.br.com

Leia mais

Inteligência Computacional

Inteligência Computacional Rafael D. Ribeiro, M.Sc. rafaeldiasribeiro@gmail.com http://www.rafaeldiasribeiro.com.br Agente: É um elemento qualquer capaz de perceber seu ambiente por meio de sensorese de agir sobre este ambiente

Leia mais

Utilização de Algoritmos Genéticos para Otimização de Altura de Coluna da Matriz de Rigidez em Perfil no Método dos Elementos Finitos

Utilização de Algoritmos Genéticos para Otimização de Altura de Coluna da Matriz de Rigidez em Perfil no Método dos Elementos Finitos Utilização de Algoritmos Genéticos para Otimização de Altura de Coluna da Matriz de Rigidez em Perfil no Método dos Elementos Finitos André Luiz Ferreira Pinto Pontifícia Universidade Católica do Rio de

Leia mais

Conceitos Básicos de Programação

Conceitos Básicos de Programação BCC 201 - Introdução à Programação Conceitos Básicos de Programação Guillermo Cámara-Chávez UFOP 1/53 Conceitos básicos I Variável 2/53 Conceitos básicos II Posição de memoria, identificada através de

Leia mais

CLUSTERING SEARCH APLICADO AO PROBLEMA DE ROTULAÇÃO CARTOGRÁFICA COM DISPERSÃO DE RÓTULOS

CLUSTERING SEARCH APLICADO AO PROBLEMA DE ROTULAÇÃO CARTOGRÁFICA COM DISPERSÃO DE RÓTULOS CLUSTERING SEARCH APLICADO AO PROBLEMA DE ROTULAÇÃO CARTOGRÁFICA COM DISPERSÃO DE RÓTULOS Eliseu Junio Araújo Universidade Federal de São Paulo UNIFESP, Instituto de Ciência e Tecnologia Rua Talin, 330,

Leia mais

Alocação de Unidades via Relaxação Lagrangeana

Alocação de Unidades via Relaxação Lagrangeana Alocação de Unidades via Relaxação Lagrangeana Prof. Antonio Simões Costa Grupo de Sistemas de Potência EEL - UFSC Relaxação Lagrangeana: Conceitos Iniciais 2 1 Alocação de Unidades via Relaxação Lagrangeana

Leia mais

Pedro Tiago Barbosa do Couto. Resolução de problemas de transporte rodoviário de cargas utilizando programação inteira DISSERTAÇÃO DE MESTRADO

Pedro Tiago Barbosa do Couto. Resolução de problemas de transporte rodoviário de cargas utilizando programação inteira DISSERTAÇÃO DE MESTRADO Pedro Tiago Barbosa do Couto Resolução de problemas de transporte rodoviário de cargas utilizando programação inteira DISSERTAÇÃO DE MESTRADO DEPARTAMENTO DE ENGENHARIA ELÉTRICA Programa de Pós graduação

Leia mais

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Medida do Tempo de Execução de um Programa David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então

Leia mais

Quinta-feira, 11 de abril

Quinta-feira, 11 de abril 15.053 Quinta-feira, 11 de abril Mais alguns exemplos de programação inteira Técnicas de planos de corte para obter melhores limitações Entregar: Observações de Aula 1 Exemplo: Localização do corpo de

Leia mais

Grafos Hamiltonianos e o Problema do Caixeiro Viajante. Prof. Ademir Constantino Departamento de Informática Universidade Estadual de Maringá

Grafos Hamiltonianos e o Problema do Caixeiro Viajante. Prof. Ademir Constantino Departamento de Informática Universidade Estadual de Maringá Grafos Hamiltonianos e o Problema do Caixeiro Viajante Prof. Ademir Constantino Departamento de Informática Universidade Estadual de Maringá Grafo Hamiltoniano Definição: Um circuito hamiltoniano em um

Leia mais

Nuno Miguel Duarte Sequeira André VARIABLE NEIGHBOURHOOD SEARCH

Nuno Miguel Duarte Sequeira André VARIABLE NEIGHBOURHOOD SEARCH Nuno Miguel Duarte Sequeira André VARIABLE NEIGHBOURHOOD SEARCH Optimization and decision support techniques PDEEC 2007 Introdução A meta-heurística VNS (Variable Neighbourhood Search) é bastante recente

Leia mais

Análise da Performance de um Modelo de Escalonamento Baseado em Pesquisa Tabu Aplicado em um Sistema de Manufatura Flexível

Análise da Performance de um Modelo de Escalonamento Baseado em Pesquisa Tabu Aplicado em um Sistema de Manufatura Flexível Análise da Performance de um Modelo de Escalonamento Baseado em Pesquisa Tabu Aplicado em um Sistema de Manufatura Flexível Antonio G. RODRIGUES, Leandro T. HOFFMANN e Arthur T. GÓMEZ Universidade do Vale

Leia mais

Estruturas de Dados II. Caixeiro Viajante

Estruturas de Dados II. Caixeiro Viajante Estruturas de Dados II Prof. a Mariella Berger Caixeiro Viajante 1. Objetivo O objetivo deste trabalho é implementar diferentes soluções para o problema clássico do Caixeiro Viajante. 2. Introdução O Problema

Leia mais

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca ÁRVORES SUMÁRIO Fundamentos Árvores Binárias Árvores Binárias de Busca 2 ÁRVORES Utilizadas em muitas aplicações Modelam uma hierarquia entre elementos árvore genealógica Diagrama hierárquico de uma organização

Leia mais

Inteligência Artificial. Conceitos Gerais

Inteligência Artificial. Conceitos Gerais Inteligência Artificial Conceitos Gerais Inteligência Artificial - IA IA é um campo de estudo multidisciplinar e interdisciplinar, que se apóia no conhecimento e evolução de outras áreas do conhecimento.

Leia mais

Um Algoritmo Genético para o Problema de Roteamento de Veículos com Janelas de Tempo

Um Algoritmo Genético para o Problema de Roteamento de Veículos com Janelas de Tempo Um Algoritmo Genético para o Problema de Roteamento de Veículos com Janelas de Tempo Francisco Henrique de Freitas Viana Pontifícia Universidade Católica do Rio de Janeiro PUC-Rio Departamento de Informática

Leia mais

Pesquisa Operacional

Pesquisa Operacional Faculdade de Engenharia - Campus de Guaratinguetá Pesquisa Operacional Livro: Introdução à Pesquisa Operacional Capítulo 3 - Teoria dos Grafos Fernando Marins fmarins@feg.unesp.br Departamento de Produção

Leia mais

meio de busca Seções 3.1, 3.2 e 3.3

meio de busca Seções 3.1, 3.2 e 3.3 Resolução de problemas por meio de busca Capítulo 3 Russell & Norvig Seções 3.1, 3.2 e 3.3 Agentes de resolução de problemas Agentes reativos não funcionam em ambientes para quais o número de regras condição

Leia mais

INTRODUÇÃO À INTELIGÊNCIA COMPUTACIONAL. Aula 04 Prof. Vitor Hugo Ferreira

INTRODUÇÃO À INTELIGÊNCIA COMPUTACIONAL. Aula 04 Prof. Vitor Hugo Ferreira Universidade Federal Fluminense Escola de Engenharia Departamento de Engenharia Elétrica INTRODUÇÃO À INTELIGÊNCIA COMPUTACIONAL Aula 04 Prof. Vitor Hugo Ferreira Busca em espaço de estados Estratégias

Leia mais

Experimentos e Resultados

Experimentos e Resultados 6 Experimentos e Resultados Neste capítulo apresentamos os experimentos realizados e os resultados obtidos pelas heurísticas apresentadas. A primeira parte do capítulo aborda os experimentos e resultados

Leia mais

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Lista de Exercícios Programação Inteira. x 2 0 e inteiros. Lista de Exercícios Programação Inteira ) Resolva os problemas a seguir usando o método B&B a) Max z = 5 x + y s.a x + y x + y 5 b) Max z = x + y s.a x + y 0 x + y 5 c) Max z = x + y s.a x + 9y 6 8 x +

Leia mais

Aprimorando o Corte Peças com Forma Irregular em Chapas Retangulares

Aprimorando o Corte Peças com Forma Irregular em Chapas Retangulares Aprimorando o Corte Peças com Forma Irregular em Chapas Retangulares Leandro Resende Mundim, leandroresendemundim@gmail.com Thiago Alves de Queiroz, th.al.qz@catalao.ufg.br Resumo: Esta pesquisa lida com

Leia mais

Pesquisa Operacional

Pesquisa Operacional Faculdade de Engenharia - Campus de Guaratinguetá Pesquisa Operacional Livro: Introdução à Pesquisa Operacional Capítulo 5 Modelo da Designação Fernando Marins fmarins@feg.unesp.br Departamento de Produção

Leia mais

Resolução de Problemas. Universidade Católica de Pelotas Engenharia da Computação Disciplina: Inteligência Artificial

Resolução de Problemas. Universidade Católica de Pelotas Engenharia da Computação Disciplina: Inteligência Artificial Resolução de Problemas Universidade Católica de Pelotas Engenharia da Computação Disciplina: Inteligência Artificial 2 Resolução de Problemas Introdução Componentes Solução Busca de soluções 3 Resolução

Leia mais

Seminário de Robótica Bruno de Abreu Silva

Seminário de Robótica Bruno de Abreu Silva Seminário de Robótica Bruno de Abreu Silva 1 Introdução Conceitos gerais Métodos de planejamento de rotas 2 Dadas as configurações inicial e final de um robô, descobrir uma sequência de movimentos a ser

Leia mais

Backtracking. Túlio Toffolo Marco Antônio Carvalho BCC402 Aula 10 Algoritmos e Programação Avançada

Backtracking. Túlio Toffolo  Marco Antônio Carvalho BCC402 Aula 10 Algoritmos e Programação Avançada Backtracking Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com BCC402 Aula 10 Algoritmos e Programação Avançada Backtracking Backtracking é um refinamento do algoritmo de busca

Leia mais

Resolução de problemas por meio de busca. Capítulo 3 Inteligência Artificial Sistemas de Informação

Resolução de problemas por meio de busca. Capítulo 3 Inteligência Artificial Sistemas de Informação Resolução de problemas por meio de busca Capítulo 3 Inteligência Artificial Sistemas de Informação Conteúdo Um exemplo Resolução de problemas por meio de busca Exemplos de problemas Em busca de soluções

Leia mais

Planejamento para fundições: uma aplicação do método das K-melhores mochilas. 1 Introdução

Planejamento para fundições: uma aplicação do método das K-melhores mochilas. 1 Introdução Planejamento para fundições: uma aplicação do método das K-melhores mochilas Murilo S. Pinheiro, Franklina M.B. Toledo, Instituto de Ciências Matemáticas e de Computação, Universidade de São Paulo, Av.

Leia mais

Noções da Teoria dos Grafos. André Arbex Hallack

Noções da Teoria dos Grafos. André Arbex Hallack Noções da Teoria dos Grafos André Arbex Hallack Junho/2015 Índice 1 Introdução e definições básicas. Passeios eulerianos 1 1.1 Introdução histórica..................................... 1 1.2 Passeios

Leia mais

Resolução de Problemas

Resolução de Problemas Resolução de Problemas 1 Agente de Resolução de Problemas (1/2) 2 O agente reativo Escolhe suas ações com base apenas nas percepções atuais não pode pensar no futuro, não sabe aonde vai 4 5 8 1 6 7 2 3?

Leia mais

Professor: Anselmo Montenegro Conteúdo (aula 6): - Fecho Convexo 2D. Instituto de Computação - UFF

Professor: Anselmo Montenegro  Conteúdo (aula 6): - Fecho Convexo 2D. Instituto de Computação - UFF Geometria Computacional Professor: Anselmo Montenegro www.ic.uff.br/~anselmo Conteúdo (aula 6): - Fecho Convexo 2D 1 Roteiro Introdução Noções de convexidade Algoritmo Incremental Algoritmo Embrulho para

Leia mais

4 Testes e experimentos realizados 4.1. Implementação e banco de dados

4 Testes e experimentos realizados 4.1. Implementação e banco de dados 32 4 Testes e experimentos realizados 4.1. Implementação e banco de dados Devido à própria natureza dos sites de redes sociais, é normal que a maior parte deles possua uma grande quantidade de usuários

Leia mais

Resolução de Problemas. Hugo Barros

Resolução de Problemas. Hugo Barros Resolução de Problemas Hugo Barros Resolução de Problemas Tópicos Conceitos Básicos Espaço de Estados Resolução de Problemas Dedica-se ao estudo e elaboração de algoritmos, capazes de resolver, por exemplo,

Leia mais

Formulação de Programação Linear Inteira para o Problema de Particionamento em Conjuntos Convexos

Formulação de Programação Linear Inteira para o Problema de Particionamento em Conjuntos Convexos Formulação de Programação Linear Inteira para o Problema de Particionamento em Conjuntos Convexos Teobaldo L. Bulhões Júnior a a Instituto de Computação, Universidade Federal Fluminense, Niterói, RJ, Brazil

Leia mais

método de solução aproximada

método de solução aproximada método de solução aproximada Definir - Representação - Objectivo - Função de avaliação 73 Representação do problema - Definição das variáveis de decisão do modelo escolhido para o problema real. Importante

Leia mais

PCC173 - Otimização em Redes

PCC173 - Otimização em Redes PCC173 - Otimização em Redes Marco Antonio M. Carvalho Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal de Ouro Preto 31 de maio de 2017 Marco Antonio M. Carvalho

Leia mais

a complexidade no desempenho de algoritmos

a complexidade no desempenho de algoritmos capítulo 1 introdução Os algoritmos são o cerne da computação. Este capítulo introdutório procura ressaltar a importância da complexidade e dos métodos de projeto e análise de algoritmos. Partindo da ideia

Leia mais

APLICAÇÕES DE BUSCA EM GRAFOS

APLICAÇÕES DE BUSCA EM GRAFOS APLICAÇÕES DE BUSCA EM GRAFOS David Krenkel Rodrigues de Melo david.melo1992@gmail.com Prof. Leonardo Sommariva, Estrutura de Dados RESUMO: São inúmeras as aplicaçõe de grafos, bem como os problemas clássicos

Leia mais

Resolução de problemas difíceis de programação linear através da relaxação Lagrangeana

Resolução de problemas difíceis de programação linear através da relaxação Lagrangeana problemas difíceis de programação linear através da relaxação Lagrangeana Ana Maria A.C. Rocha Departamento de Produção e Sistemas Escola de Engenharia Universidade do Minho arocha@dps.uminho.pt http://www.norg.uminho.pt/arocha

Leia mais

1 - A capacidade de fluxo que corresponde a capacidade máxima que pode passar pelo arco.

1 - A capacidade de fluxo que corresponde a capacidade máxima que pode passar pelo arco. CONCEITOS DE REDE Uma rede é formada por um conjunto de nós, um conjunto de arcos e de parâmetros associados aos arcos. Nós Arcos Fluxo Interseções Rodovias Veículos Rodoviários Aeroportos Aerovia Aviões

Leia mais

Inteligência Artificial. Prof. Tiago A. E. Ferreira Aula 5 Resolvendo Problemas

Inteligência Artificial. Prof. Tiago A. E. Ferreira Aula 5 Resolvendo Problemas Inteligência Artificial Prof. Tiago A. E. Ferreira Aula 5 Resolvendo Problemas 1 Agente solucionador de problemas (guiado por objetivo) O agente reativo Escolhe suas ações com base apenas nas percepções

Leia mais

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 1.1 - Algoritmo 1.2 - Estrutura de Dados 1.2.1 - Revisão de Programas em C++ envolvendo Vetores, Matrizes, Ponteiros, Registros

Leia mais

Cap. 2 Conceitos Básicos em Teoria dos Grafos

Cap. 2 Conceitos Básicos em Teoria dos Grafos Teoria dos Grafos e Aplicações 8 Cap. 2 Conceitos Básicos em Teoria dos Grafos 2.1 Grafo É uma noção simples, abstrata e intuitiva, usada para representar a idéia de alguma espécie de relação entre os

Leia mais

PERCURSOS. André Falcão, Carlos Augusto, Rafael Broédel e Lucas Dipré

PERCURSOS. André Falcão, Carlos Augusto, Rafael Broédel e Lucas Dipré PERCURSOS André Falcão, Carlos Augusto, Rafael Broédel e Lucas Dipré Serra 2011 Índice 1...O que é caminho e circuito 1.1...Caminho 1.2...Circuito 1.3...Classificação 2...Caminhos Eulerianos 2.1...Definição

Leia mais

3 Algoritmo de Busca Local

3 Algoritmo de Busca Local 3 Algoritmo de Busca Local Um algoritmo de busca local define, para cada solução, uma vizinhança composta por um conjunto de soluções com características muito próximas. Dada uma solução corrente, uma

Leia mais

Problema do Caminho Hamiltoniano

Problema do Caminho Hamiltoniano Universidade de São Paulo Escola de Artes, Ciências e Humanidades Bacharelado em Sistemas de Informação Introdução à Ciência da Computação II Professores Luciano Digiampietri e Fábio Nakano Data de entrega:

Leia mais

O Problema da 3- Coloração de Grafos

O Problema da 3- Coloração de Grafos Otimização Combinatória O Problema da - Coloração de Grafos Guilherme Zanardo Borduchi Hugo Armando Gualdron Colmenares Tiago Moreira Trocoli da Cunha Prof.ª Marina Andretta Introdução ao Problema Problema

Leia mais

Resolução de problemas por meio de busca. Inteligência Artificial

Resolução de problemas por meio de busca. Inteligência Artificial 1 Resolução de problemas por meio de busca (Capítulo 3 - Russell) Inteligência Artificial Professor: Rosalvo Ferreira de Oliveira Neto 2 Estrutura 1. Agente de resolução de problema 2. Tipos de problema

Leia mais

Universidade Federal de Santa Maria Centro de Ciências Naturais e Exatas Departamento de Física Laboratório de Teoria da Matéria Condensada

Universidade Federal de Santa Maria Centro de Ciências Naturais e Exatas Departamento de Física Laboratório de Teoria da Matéria Condensada Universidade Federal de Santa Maria Centro de Ciências Naturais e Exatas Departamento de Física Laboratório de Teoria da Matéria Condensada Introdução à teoria de otimização Tiago de Souza Farias 23 de

Leia mais

4 Extração direta das PELs

4 Extração direta das PELs 4 Extração direta das PELs A detecção de arestas em imagens está relacionada à extração de feições, sendo uma ferramenta fundamental em processamento de imagens e visão computacional. Essa detecção visa

Leia mais

Inteligência Artificial

Inteligência Artificial Inteligência Artificial Prof. Rafael Stubs Parpinelli DCC / UDESC-Joinville parpinelli@joinville.udesc.br www.joinville.udesc.br/portal/professores/parpinelli www2.joinville.udesc.br/~coca/ Agentes solucionadores

Leia mais

Aprendizado de Máquina

Aprendizado de Máquina Aprendizado de Máquina André C. P. L. F. de Carvalho Posdoutorando: Isvani Frias-Blanco ICMC-USP Agrupamento de dados Tópicos Agrupamento de dados Dificuldades em agrupamento Algoritmos de agrupamento

Leia mais

5COP096 TeoriadaComputação

5COP096 TeoriadaComputação Sylvio 1 Barbon Jr barbon@uel.br 5COP096 TeoriadaComputação Aula 13 Prof. Dr. Sylvio Barbon Junior Sumário - Problemas NP-Completo Algoritmos Não-deterministas; Classes NP-Completo e NP-Dificil; Teorema

Leia mais

Inteligência Artificial

Inteligência Artificial Contextualizando Inteligência Artificial Buscas Onde podemos usar a IA Problemas que não possuem soluções algortimicas Problemas que possuem soluções algoritimicas, mas são impraticáveis (Complexidade,

Leia mais

Computação Gráfica - 09

Computação Gráfica - 09 Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 9 jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav Objetos

Leia mais

Teoria da Complexidade Computacional

Teoria da Complexidade Computacional Teoria da Complexidade Computacional 25 de novembro de 2011 Enquanto a teoria de análise de algoritmos estuda a análise de complexidade de algoritmos, a teoria da complexidade estuda a classificação de

Leia mais

Otimização por Colônia de Formigas (Ant Colony Optimization - ACO)

Otimização por Colônia de Formigas (Ant Colony Optimization - ACO) Otimização por Colônia de Formigas (Ant Colony Optimization - ACO) Eros Moreira de Carvalho Gabriel Silva Ramos CI209 - Inteligência Artificial BCC - Bacharelado em Ciência da Computação DInf - Departamento

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes O limite superior de complexidade de um problema refere-se ao melhor algoritmo que o resolve. nlog 2 n é um limite superior para o problema de classificação. O limite inferior de um problema

Leia mais

UM ALGORITMO HEURÍSTICO PARA O PROBLEMA DE GERENCIAMENTO DE ESCALA OPERACIONAL DE CONTROLADORES DE TRÁFEGO AÉREO

UM ALGORITMO HEURÍSTICO PARA O PROBLEMA DE GERENCIAMENTO DE ESCALA OPERACIONAL DE CONTROLADORES DE TRÁFEGO AÉREO UM ALGORITMO HEURÍSTICO PARA O PROBLEMA DE GERENCIAMENTO DE ESCALA OPERACIONAL DE CONTROLADORES DE TRÁFEGO AÉREO Bruno Mota Avelar Almeida, Túlio Ângelo Machado Toffolo, Marcone Jamilson Freitas Souza

Leia mais

Ex. 1) Considere que a árvore seguinte corresponde a uma parte do espaço de estados de um jogo de dois agentes: f=7 f=7 f=1 f=2

Ex. 1) Considere que a árvore seguinte corresponde a uma parte do espaço de estados de um jogo de dois agentes: f=7 f=7 f=1 f=2 LERCI/LEIC Tagus 2005/06 Inteligência Artificial Exercícios sobre Minimax: Ex. 1) Considere que a árvore seguinte corresponde a uma parte do espaço de estados de um jogo de dois agentes: Max Min f=4 f=7

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 02 Técnicas de Projeto de Algoritmos (Força Bruta) Edirlei Soares de Lima Tipos Importantes de Problemas Problemas de Ordenação: Reorganizar

Leia mais

04 Grafos: caminhos e coloração SCC0503 Algoritmos e Estruturas de Dados II

04 Grafos: caminhos e coloração SCC0503 Algoritmos e Estruturas de Dados II 04 Grafos: caminhos e coloração SCC0503 Algoritmos e Estruturas de Dados II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2011/1 Moacir Ponti Jr.

Leia mais

Otimização da Paleta de Cores

Otimização da Paleta de Cores Otimização da Paleta de Cores Resumo O objetivo deste artigo é apresentar a técnica de otimização da paleta de cores utilizada no MSX Viewer 5 para encontrar a melhor paleta de cores do MSX 2 e do v9990,

Leia mais

Algoritmos 3/17/ Algoritmos como área de estudo e investigação

Algoritmos 3/17/ Algoritmos como área de estudo e investigação Algoritmos e Complexidade Ana Teresa Freitas INESC-ID/IST ID/IST 3/17/2005 1 O que é um algoritmo? Algoritmos: Sequência de instruções necessárias para a resolução de um problema bem formulado [passíveis

Leia mais

Mercados de Emparelhamento

Mercados de Emparelhamento Mercados de Emparelhamento Redes Sociais e Econômicas Prof. André Vignatti Mercados de Emparelhamento Mercados - interação econômica entre pessoas numa rede estruturada Mercados de Emparelhamento modelam:

Leia mais

Método de restrições ativas para minimização em caixas

Método de restrições ativas para minimização em caixas Método de restrições ativas para minimização em caixas Marina Andretta ICMC-USP 20 de outubro de 2014 Marina Andretta (ICMC-USP) sme5720 - Otimização não-linear 20 de outubro de 2014 1 / 25 Problema com

Leia mais

Circuitos Lógicos Combinacionais (parte 2) CPCX UFMS Slides: Prof. Renato F. dos Santos Adaptação: Prof. Fernando Maia da Mota

Circuitos Lógicos Combinacionais (parte 2) CPCX UFMS Slides: Prof. Renato F. dos Santos Adaptação: Prof. Fernando Maia da Mota Circuitos Lógicos Combinacionais (parte 2) CPCX UFMS Slides: Prof. Renato F. dos Santos Adaptação: Prof. Fernando Maia da Mota 4.5 Método do Mapa de Karnaugh Método gráfico usado para simplificar uma equação

Leia mais

IMPLEMENTAÇÃO E RESOLUÇÃO DE MODELOS MATEMÁTICOS UTILIZANDO A PLANILHA EXCEL

IMPLEMENTAÇÃO E RESOLUÇÃO DE MODELOS MATEMÁTICOS UTILIZANDO A PLANILHA EXCEL IMPLEMENTAÇÃO E RESOLUÇÃO DE MODELOS MATEMÁTICOS UTILIZANDO A PLANILHA EXCEL 1. INTRODUÇÃO Este tutorial apresenta, passo-a-passo, o processo de implementação e resolução de modelos matemáticos na planilha

Leia mais

Universidade Federal de São Carlos - UFSCar Departamento de Computação - DC Programa de Pós-Graduação em Ciência da Computação - PPGCC

Universidade Federal de São Carlos - UFSCar Departamento de Computação - DC Programa de Pós-Graduação em Ciência da Computação - PPGCC Universidade Federal de São Carlos - UFSCar Departamento de Computação - DC Programa de Pós-Graduação em Ciência da Computação - PPGCC Revisão da R*-tree Aluno:Marcos Henrique de Paula Prof: Dr. Ricardo

Leia mais