• Nenhum resultado encontrado

Um problema de distritamento aplicado à antecipação do faturamento em redes de serviço  

N/A
N/A
Protected

Academic year: 2021

Share "Um problema de distritamento aplicado à antecipação do faturamento em redes de serviço  "

Copied!
91
0
0

Texto

(1)

INSTITUTO DE COMPUTAÇÃO

Luis Henrique Pauleti Mendes

Um problema de distritamento aplicado à antecipação

do faturamento em redes de serviço

CAMPINAS

2019

(2)

faturamento em redes de serviço

Dissertação apresentada ao Instituto de Computação da Universidade Estadual de Campinas como parte dos requisitos para a obtenção do título de Mestre em Ciência da Computação.

Orientador: Prof. Dr. Fábio Luiz Usberti Coorientador: Prof. Dr. Celso Cavellucci

Este exemplar corresponde à versão final da Dissertação defendida por Luis Henrique Pauleti Mendes e orientada pelo Prof. Dr. Fábio Luiz Usberti.

CAMPINAS

2019

(3)

Biblioteca do Instituto de Matemática, Estatística e Computação Científica Ana Regina Machado - CRB 8/5467

Mendes, Luis Henrique Pauleti,

M522p MenUm problema de distritamento aplicado à antecipação do faturamento em redes de serviço / Luis Henrique Pauleti Mendes. – Campinas, SP : [s.n.], 2019.

MenOrientador: Fábio Luiz Usberti. MenCoorientador: Celso Cavellucci.

MenDissertação (mestrado) – Universidade Estadual de Campinas, Instituto de Computação.

Men1. Otimização combinatória. 2. Programação linear inteira. 3. Meta-heurística. I. Usberti, Fábio Luiz, 1982-. II. Cavellucci, Celso, 1951-. III. Universidade Estadual de Campinas. Instituto de Computação. IV. Título. Informações para Biblioteca Digital

Título em outro idioma: A districting problem applied to billing anticipation in utilities

networks

Palavras-chave em inglês:

Combinatorial optimization Integer linear programming Metaheuristic

Área de concentração: Ciência da Computação Titulação: Mestre em Ciência da Computação Banca examinadora:

Fábio Luiz Usberti [Orientador] Pedro Henrique Del Bianco Hokama Cid Carvalho de Souza

Data de defesa: 09-09-2019

Programa de Pós-Graduação: Ciência da Computação

Identificação e informações acadêmicas do(a) aluno(a)

- ORCID do autor: https://orcid.org/0000-0001-9748-1186 - Currículo Lattes do autor: http://lattes.cnpq.br/4530600301213679

(4)

Um problema de distritamento aplicado à antecipação do

faturamento em redes de serviço

Banca Examinadora:

• Prof. Dr. Fábio Luiz Usberti

Instituto de Computação - UNICAMP

• Prof. Dr. Pedro Henrique Del Bianco Hokama Instituto de Matemática e Computação - UNIFEI • Dr. Dr. Cid Carvalho de Souza

Instituto de Computação - UNICAMP

A ata da defesa, assinada pelos membros da Comissão Examinadora, consta no SIGA/Sistema de Fluxo de Dissertação/Tese e na Secretaria do Programa da Unidade.

(5)

Gostaria de expressar minha gratidão a todos que, direta ou indiretamente, contribuíram para a concretização deste projeto. Meus sinceros agradecimentos:

• à minha família, em especial aos meu pais, Iluir e José, por apoiarem a minha decisão de seguir a carreira acadêmica;

• aos meus professores, em especial aos meus orientadores, Prof. Fábio e Prof. Celso, por todo o conhecimento que me foi passado e por acreditarem no meu potencial; • ao Conselho Nacional de Desenvolvimento Científico e Tecnológico (CNPq), por

(6)

ção prática do CEDP para empresas que administram redes de distribuição de serviços; em particular, no processo de definição dos distritos para a leitura do consumo de seus clientes.

São apresentadas duas formulações matemáticas para o CEDP e são propostas meto-dologias para resolvê-lo. As metometo-dologias exatas são baseadas nos paradigmas Branch-and-Bound (B&B) e Branch-and-Cut (B&C). Dada a complexidade do problema, também são propostas metodologias heurísticas baseadas no GRASP e na relaxação Lagrangiana. Com o intuito de avaliar as metodologias propostas, foram realizados experimentos computacionais em um benchmark de instâncias do CEDP. Analisando os resultados, pode-se notar que a metodologia GRASP obteve um bom desempenho, enquanto que a heurística Lagrangiana, que não convergiu, obteve um desempenho ruim.

(7)

In this research project the Capacitated and Economic Districting Problem (CEDP) is investigated, which aims to find in a undirected connected graph subsets of edges defining connected and balanced districts that respect a maximum capacity and maximize the profit. The motivation of this work consists in the practical application of CEDP for utilities; particularly, in their process of defining the districts for meter reading.

We present two mathematical formulations for the CEDP and propose methodologies to solve it. The exact methodologies are based on the Branch-and-Bound (B&B) and Branch-and-Cut (B&C) paradigms. Given the problem’s complexity, we also propose heuristics methodologies based on GRASP and on Lagrangian relaxation.

In order to evaluate the proposed methodologies, computational experiments were performed on a benchmark. Analyzing the results, it can be noted that the GRASP methodology performed well, while the Lagrangian heuristic, which did not converge, performed poorly.

(8)

instância S = {2, 3, 5} do PP. . . 22

5.1 Exemplo de um distritamento em G0. . . 29

7.1 Performance Profiles dos Limitantes. . . 62

7.2 Performance Profiles dos Limitantes para cada topologia. . . 63

7.3 Performance Profiles dos Limitantes para cada valor de m. . . 64

7.4 Performance Profiles dos Limitantes para cada valor de B. . . 65

7.5 Performance Profiles dos Limitantes para cada capacidade. . . 66

7.6 Performance Profiles dos Limitantes para cada valor de |V |. . . 67

7.7 Performance Profiles dos Limitantes para cada densidade. . . 68

7.8 Soluções encontradas para a instância grid-m5V25E40B05D05. . . 69

(9)

7.1 Soluções Factíveis e Ótimas encontradas por cada Metodologia. . . 59

7.2 Soluções Factíveis e Ótimas encontradas para cada topologia. . . 60

7.3 Soluções Factíveis e Ótimas encontradas para cada valor de m. . . 60

7.4 Soluções Factíveis e Ótimas encontradas para cada valor de B. . . 61

7.5 Soluções Factíveis e Ótimas encontradas para cada valor de D. . . 61

7.6 Soluções Factíveis e Ótimas encontradas para cada valor de |V |. . . 62

7.7 Soluções Factíveis e Ótimas encontradas para cada valor de |E|. . . 62

A.1 Benchmark de Instâncias. . . 74

B.1 Limitantes Duais. . . 79

B.2 Limitantes Primais. . . 83

(10)

• CDP - Problema de Distritamento Capacitado, do inglês Capacitated Districting Problem;

• CEDP - Problema de Distritamento Econômico e Capacitado, do inglês Capacitated and Economic Districting Problem;

• CPP - Problema do Carteiro Chinês, do inglês Chinese Postman Problem; • DP - Problema de Distritamento, do inglês Districting Problem;

• GRASP - Procedimento de Busca Adaptativo Aleatório Guloso, do inglês Greedy Randomized Adaptive Search Procedure;

• ILP - Programa Linear Inteiro, do inglês Integer Linear Program; • KP - Problema da Mochila, do inglês Knapsack Problem;

• LP - Programa Linear, do inglês Linear Program;

• MCRP - Problema de Redistritamento Capacitado Multicritério, do inglês Multi-criteria Capacitated Redistricting Problem;

• MKP - Problema das Múltiplas Mochilas, do inglês Multiple Knapsack Problem; • PP - Problema da Partição, do inglês Partition Problem.

(11)

1 Introdução 12 2 O Problema de Distritamento Econômico e Capacitado 14

3 Objetivos 17

3.1 Objetivos Gerais . . . 17

3.2 Objetivos Específicos . . . 17

4 Análise de Complexidade 18 5 Formulações em Programação Linear Inteira 24 5.1 Formulação por cortes de arestas . . . 24

5.2 Formulação por fluxo em redes no grafo linha . . . 26

6 Metodologias de Resolução 30 6.1 Metodologias Heurísticas . . . 30

6.1.1 Heurística Construtiva . . . 30

6.1.2 Método de Factibilização . . . 32

6.1.3 Heurística de Busca Local . . . 41

6.2 Metodologias Exatas . . . 44 6.2.1 Branch-and-Bound . . . 44 6.2.2 Branch-and-Cut . . . 45 6.3 Meta-heurísticas . . . 47 6.3.1 Heurística Lagrangiana . . . 48 6.3.2 GRASP . . . 55 7 Experimentos Computacionais 57 7.1 Geração de Instâncias . . . 57

7.2 Análise dos Resultados . . . 58

8 Considerações Finais 71

Referências Bibliográficas 72

A Benchmark de Instâncias 74

(12)

Capítulo 1

Introdução

Em otimização combinatória, particularmente no que se refere a problemas de roteamento e de particionamento, existem dois problemas representativos na literatura: o Problema do Carteiro Chinês, do inglês Chinese Postman Problem (CPP) e o Problema de Distri-tamento, do inglês Districting Problem (DP).

O CPP consiste em encontrar o menor circuito que percorre cada aresta de um grafo ao menos uma vez. Este problema está relacionado a um dos problemas mais antigos em teoria dos grafos: encontrar um ciclo euleriano em um grafo conexo, isto é, encontrar uma maneira de percorrer toda aresta exatamente uma vez, retornando ao ponto de origem (EDMONDS; JOHNSON, 1973).

O CPP modela o problema do mundo real enfrentado por um carteiro que deve entre-gar correspondências em cada rua de uma certa região e retornar ao seu ponto de origem. O CPP também pode ser aplicado em outros contextos, como o dos leituristas das com-panhias provedoras de água e energia, que devem medir o consumo de todos os clientes de suas redes de distribuição.

O DP consiste em particionar um território, ou seja, agrupar pequenas áreas geográfi-cas, chamadas unidades básigeográfi-cas, em aglomerados geográficos maiores, chamados distritos, de forma que estes estejam de acordo com critérios de planejamento pré-estabelecidos. Exemplos típicos de unidades básicas são clientes, ruas ou códigos postais. Dois critérios de planejamento importantes são balanceamento e conexidade. Balanceamento refere-se ao objetivo de estabelecer distritos que tenham tamanhos iguais. Um distrito é conexo se for possível transitar entre suas unidades básicas sem ter de sair dele (KALCSICS, 2015). O DP é um modelo simples para vários problemas do mundo real. Kalcsics (2015) ilus-tra várias aplicações interessantes do DP, incluindo distritamento político e planejamento de território de vendas. Distritamento político consiste no problema de dividir uma área governamental em distritos eleitorais a partir dos quais candidatos políticos são eleitos. Já o planejamento de território de vendas é uma tarefa comum a todas as companhias que operam com uma equipe de vendas e consiste em subdividir o mercado em regiões

(13)

que são atendidas por um ou mais representantes de vendas.

Uma variante do DP é o Problema de Distritamento Capacitado, do inglês Capacitated Districting Problem (CDP), onde cada distrito possui uma capacidade máxima que pode estar relacionada, por exemplo, ao número máximo de unidades agrupadas por distrito, ou ainda a um limite de atendimento de demanda por distrito. Uma das aplicações práticas do CDP consiste em definir as regiões a serem percorridas pelos leituristas das companhias de redes de serviço. Assis, Franca e Usberti (2014) estudaram um problema similar: o Problema de Redistritamento Capacitado Multicritério, do inglês Multicriteria Capacitated Redistricting Problem (MCRP). No MCRP um conjunto de distritos originais já existe e o critério de balanceamento é incorporado na função objetivo, enquanto que na variante do CDP estudada neste projeto o desbalanceamento é incorporado nas restrições e a função objetivo tem um viés econômico.

Neste projeto será estudado o Problema de Distritamento Econômico e Capacitado, do inglês Capacitated and Economic Districting Problem (CEDP), um problema novo na literatura que consiste em uma variante do CDP onde os distritos, além de possuírem uma capacidade máxima, são formados a partir de um critério econômico, visando, por exemplo, a redução de custos ou o aumento do faturamento. Assim como o CDP, uma aplicação prática consiste em definir regiões a serem percorridas pelos leituristas das companhias de redes de serviço, porém também leva-se em consideração a antecipação de faturamento quando se aloca consumidores com maiores consumos em distritos que são faturados previamente.

Este documento está organizado da seguinte maneira. No Capítulo 2 o CEDP é formal-mente descrito. No Capítulo 3 os objetivos deste projeto são apresentados. No Capítulo 4 é feita uma análise da complexidade do CEDP utilizando a teoria de NP-completude. No Capítulo 5 são apresentados dois modelos matemáticos para o CEDP. O Capítulo 6 des-creve as metodologias propostas neste projeto para a solução do problema. O Capítulo 7 apresenta os experimentos computacionais executados e a análise dos resultados obtidos. Finalmente, o Capítulo 8 traz os comentários finais sobre este projeto.

(14)

Capítulo 2

O Problema de Distritamento

Econômico e Capacitado

Uma definição formal do CEDP é apresentada a seguir. Seja m ∈ Z∗+ o número de

distritos desejados; D ∈ Z∗+ a capacidade de cada distrito; B ∈ [0, 1] o desbalanceamento

máximo permitido para cada distrito; G = (V, E) um grafo conexo não-orientado, onde V representa o conjunto de vértices e E representa o conjunto de arestas, sendo que cada aresta consiste em um conjunto de exatamente dois vértices. Associada a cada aresta e ∈ E há uma demanda de∈ Z+. Associado a cada aresta e ∈ E e a cada j ∈ {1, . . . , m}

há um lucro ce,j ∈ Z+ obtido ao se alocar a aresta e no j-ésimo distrito. O objetivo do

CEDP consiste em dividir E em uma coleção E = {E1, . . . , Em} de m distritos conexos,

maximizando o lucro total e respeitando a capacidade e o desbalanceamento máximo. O lucro de um distrito Ej ∈ E é dado por cEj =

X

e∈Ej

ce,j. Enquanto que o lucro total

de um distritamento E é dado por cE =

X Ej∈E cEj = X Ej∈E X e∈Ej ce,j.

A demanda dEj de um distrito Ej ∈ E pode ser calculada como o tamanho de um ciclo

de carteiro chinês mínimo no subgrafo induzido G[Ej]. Porém, resolver um CPP para

cada subgrafo induzido G[Ej] pode ser computacionalmente custoso. Uma outra forma

de sobre-estimar a demanda dEj é somar duas vezes a demanda de cada aresta em Ej:

dEj = 2 X e∈Ej de. Note que dEj = 2 X e∈Ej

de é uma 2-aproximação do CPP em G[Ej], que

pode ser obtida através de um circuito euleriano que percorre cada aresta duas vezes. Um distrito Ej ∈ E é conexo se o subgrafo induzido G[Ej] for conexo. Distritos

perfei-tamente balanceados geralmente não são possíveis devido à natureza discreta do problema. Porém, existem diversas abordagens na literatura para quantificar o desbalanceamento e incorporar esse critério no processo de distritamento (KALCSICS, 2015).

A medida local de desbalanceamento de um distrito Ej ∈ E adotada neste trabalho é

(15)

distritos, dada por ¯dE = 1 m X Ej∈E dEj: balEj = dEj− ¯dE ¯ dE .

Um distrito Ej ∈ E está perfeitamente balanceado se balEj = 0.

A medida global de desbalanceamento de um distritamento E é calculada como o desbalanceamento máximo de um distrito:

balmaxE = max

Ej∈E

{balEj}.

Note que se balmax

E = 1, pode existir algum Ej ∈ E tal que Ej = ∅. Neste caso, o

distritamento E não consiste em uma partição do conjunto de arestas E.

A Figura 2.1 mostra um exemplo de distritamento em um grafo onde todas as arestas possuem a mesma demanda. Neste exemplo, as arestas foram divididas em três subcon-juntos: as vermelhas pontilhadas, as verdes contínuas e as azuis tracejadas. Note que os distritos definidos pelos subconjuntos de arestas são conexos, pois o subgrafo induzido por cada subconjunto de arestas é conexo. Note também que, como todas as arestas possuem demandas iguais, os distritos são perfeitamente balanceados, pois cada subconjunto de arestas possui exatamente quatro arestas.

Figura 2.1: Exemplo de um distritamento.

Uma aplicação do CEDP consiste em um problema enfrentado por companhias prove-doras de redes de serviço como água e energia: definir em que dia útil do mês será realizada a leitura de cada um de seus clientes. Esta decisão deve considerar vários critérios logís-ticos, como a carga horária dos leituristas, o consumo médio, a localização geográfica e,

(16)

um fundo de investimento de alta liquidez por mais tempo, aumentando o valor rendido. Por outro lado, a fim de respeitar a carga horária dos leituristas, as companhias devem dar preferência por realizar no mesmo dia a leitura do consumo de clientes que estão localizados próximos uns aos outros, pois desta forma os leituristas despenderão menos tempo se locomovendo entre os clientes.

É possível modelar este problema como um CEDP onde o número de distritos m corresponde ao número de dias úteis do mês disponíveis para a companhia realizar a leitura do consumo de seus clientes; D corresponde à força de trabalho (em homens-hora) disponível por distrito; B corresponde à tolerância de desbalanceamento permitida pela companhia; e o grafo G = (V, E) corresponde à topologia da rede, sendo que cada vértice v ∈ V corresponde a um cruzamento de ruas e cada aresta e ∈ E corresponde a um segmento de rua conectando dois cruzamentos. A demanda de, associada ao segmento

de rua e, corresponde ao tempo necessário para os leituristas percorrerem e, realizando a leitura do consumo dos clientes nele localizados. Já o custo ce,j associado ao segmento de

rua e e ao j-ésimo distrito corresponde ao ganho de capital da companhia ao realizar a leitura do consumo de todos os clientes localizados no segmento de rua e no dia útil j.

Os valores de e ce,j são parâmetros de entrada. Seja se o comprimento do segmento de

rua e e v a velocidade média dos leituristas, tem-se que de =

se

v. Seja Ce o conjunto de clientes localizados no segmento de rua e, pi o faturamento médio do cliente i, r a taxa de

juros diária do fundo de investimento e ji o dia útil do mês em que atualmente é realizada

a leitura do consumo do cliente i, tem-se que ce,j =

X

i∈Ce

pi(1 + r)(ji−j).

Neste projeto será estudado exclusivamente o problema de definir os distritos que serão atendidos pelos leituristas. O problema de definir os caminhos dos leituristas dentro de cada distrito já foi investigado por Maziero, Usberti e Cavellucci (2015) e Mendes e Usberti (2017).

(17)

Capítulo 3

Objetivos

Neste capítulo são apresentados os objetivos gerais e os objetivos específicos deste projeto de pesquisa de mestrado:

3.1

Objetivos Gerais

• Investigar formalmente o CEDP, analisando sua complexidade e propondo formula-ções matemáticas e metodologias de solução exata e heurística.

• Conduzir experimentos computacionais das metodologias propostas visando uma análise comparativa das mesmas.

3.2

Objetivos Específicos

• Propôr e implementar metodologias de solução exatas, fundamentadas em Progra-mação Linear Inteira, Branch-and-Bound e Branch-and-Cut.

• Propôr e implementar meta-heurísticas visando a solução de instâncias de porte real.

• Elaborar um conjunto representativo de instâncias artificiais para avaliar computa-cionalmente as metodologias propostas.

• Avaliar o desempenho das metodologias propostas com base em métodos analíticos de avaliação comparativa de desempenho.

(18)

Capítulo 4

Análise de Complexidade

Neste capítulo é apresentada uma análise de complexidade do CEDP utilizando a teoria de NP-completude, a qual já foi amplamente estudada na literatura (CORMEN et al., 2009; MANBER, 1989; GAREY; JOHNSON, 1979; SZWARCFITER, 1986).

A teoria de NP-completude restringe-se a problemas de decisão, isto é, a problemas cuja resposta é “sim” ou “não”. Os problemas de otimização podem ser facilmente con-vertidos em problemas de decisão impondo-se um limite no valor a ser otimizado. Por exemplo, ao invés de procurar por um distritamento de lucro máximo no CEDP, pode-se perguntar se existe um distritamento de lucro maior ou igual a K. Se for possível resolver o problema de decisão, pode-se estender a solução para o problema de otimização corres-pondente, por exemplo, por busca binária. No restante deste capítulo, será considerada apenas a versão de decisão do CEDP.

Uma importante técnica utilizada pela teoria da NP-completude é a redução polino-mial entre problemas. Reduzir um problema A em um problema B consiste em resolver o problema A utilizando uma “caixa preta” que resolve o problema B. Formalmente, uma redução de um problema A em um problema B consiste em um procedimento que transforma qualquer instância α de A em uma instância β de B e um procedimento que transforma uma solução para β em uma solução para α. Se a transformação de α em β e a transformação de uma solução para β em uma solução para α puderem ser realizadas em tempo polinomial no tamanho de α, então diz-se que existe uma redução polinomial de A em B. Reduções polinomiais podem alcançar dois objetivos distintos, dependendo da direção na qual são feitas. Uma redução polinomial de A em B implica na existência de um algoritmo polinomial para A caso se conheça um algoritmo polinomial para B. Por outro lado, se A é conhecido por ser difícil, por exemplo, se sabe-se que não existe nenhum algoritmo polinomial para A, então o mesmo resultado se aplica a B, isto é, também não existe nenhum algoritmo polinomial para B. A Figura 4.1 ilustra uma redução polinomial de A em B.

(19)

Figura 4.1: Redução polinomial de um problema A em um problema B.

complexidades nas classes P, NP, NP-difícil e NP-completo. A classe P compreende todos os problemas de decisão que podem ser resolvidos por algoritmos polinomiais. A classe NP compreende todos os problemas de decisão que podem ser “verificados” em tempo polinomial, isto é, se for dado um “certificado” de uma solução, então pode-se verificar que o certificado é correto em tempo polinomial no tamanho da instância do problema. Note que qualquer problema em P também está em NP, uma vez que se um problema está em P então pode-se resolvê-lo em tempo polinomial sem sequer possuir um certificado.

No Teorema 4.1 mostra-se que o CEDP pertence à classe NP, exibindo-se um certificado da resposta “sim” e elaborando-se um algoritmo para verificar se o certificado está correto. Teorema 4.1. CEDP ∈ NP.

Demonstração. Seja (m, D, B, G = (V, E), d, c, K) uma instância do CEDP, conforme descrita no Capítulo 2, onde K é um limite inferior no lucro a ser maximizado, e E = {E1, . . . , Em} um certificado para a resposta “sim” desta instância, que consiste em m

distritos, isto é, m subconjuntos de arestas.

Para verificar se o certificado está correto, é necessário verificar se:

• o distritamento E consiste em um divisão de E. Para tanto, é necessário verificar se Ei∩ Ej = ∅ para todo i, j ∈ {1, . . . , m} com i 6= j e se

m

S

j=1

Ej = E:

– Para verificar se Ei ∩ Ej = ∅ para todo i, j ∈ {1, . . . , m} com i 6= j, basta

verificar se para cada e ∈ Ei, e /∈ Ej;

– Para verificar se m S j=1 Ej = E é necessário verificar se m S j=1 Ej ⊆ E e se E ⊆ m S j=1 Ej. ∗ Para verificar se Sm j=1

Ej ⊆ E, basta, para cada Ej ∈ E e para cada e ∈ Ej,

verificar se e ∈ E;

∗ Para verificar se E ⊆ Sm

j=1

Ej, basta, para cada e ∈ E, verificar se existe

algum Ej ∈ E tal que e ∈ Ej;

• cada distrito Ej ∈ E é conexo, ou seja, se cada subgrafo induzido G[Ej] é conexo, o

que pode ser feito em tempo linear por meio de uma Busca em Largura, do inglês Breadth-First Search (BFS), ou de uma Busca em Profundidade, do inglês Depth-First Search (DFS) (CORMEN et al., 2009; MANBER, 1989);

(20)

mente computa-se a demanda média dos distritos ¯dE =

m

e∈E

de e, então, verifica-se

se (1 − B) ¯dE ≤ dEj ≤ (1 + B) ¯dE para todo Ej ∈ E;

• o lucro do distritamento E é de pelo menos K. Para tanto, basta verificar se cE =

P

Ej∈E

P

e∈Ejce,j ≥ K.

Como todas estas verificações podem ser realizadas em tempo polinomial no tamanho da instância, conclui-se que o CEDP pertence à classe NP.

A classe NP-difícil compreende todos os problemas de decisão que são pelo menos tão difíceis quanto os problemas mais difíceis em NP. Um problema A está em NP-difícil se e somente se todo problema B em NP pode ser reduzido polinomialmente em A. Como consequência, um algoritmo polinomial para qualquer problema em NP-difícil implica na existência de algoritmos polinomiais para todos os problemas em NP. A classe NP-completo compreende todos os problemas de decisão que podem ser verificados em tempo polinomial e que são pelo menos tão difíceis quanto os problemas mais difíceis em NP, isto é, NP-completo = NP ∩ NP-difícil. Ainda não foi descoberto nenhum algoritmo polinomial para qualquer problema em NP-difícil e conjectura-se não existir tal algoritmo, ou seja, conjectura-se que P 6= NP (Figura 4.2).

No Teorema 4.3 mostra-se que o CEDP pertence à classe NP-difícil. Para tanto, reduz-se um problema de decisão em NP-difícil para o CEDP. O problema de decisão escolhido para a demonstração é o Problema da Partição, do inglês Partition Problem (PP). Uma instância do PP consiste em um conjunto S ⊆ Z+e a questão a ser respondida é se existe

um subconjunto S0 ⊆ S tal que X

s∈S0 s = X s∈S\S0 s = 1 2 X s∈S s. O resultado de que o PP pertence à classe NP-completo e, consequentemente, à classe NP-difícil, é utilizado como o Lema 4.2.

Lema 4.2. PP ∈ NP-completo (GAREY; JOHNSON, 1979) Teorema 4.3. CEDP ∈ NP-difícil.

Demonstração. Seja S = {s1, . . . , sn} uma instância genérica do PP, isto é, S é um

con-junto qualquer de n números inteiros não-negativos. Transforma-se S em uma instância específica (m, D, B, G = (V, E), d, c, K) do CEDP da seguinte maneira:

(21)

Figura 4.2: Conjectura P 6= NP. • D =X

s∈S

s; • B = 0;

• V = {v0, v1, . . . , vn}, ou seja, G possui n + 1 vértices distintos;

• E = {{v0, v1}, . . . , {v0, vn}}, ou seja, G possui n arestas distintas ligando o vértice

v0 a cada um dos demais vértices;

• a cada aresta ei = {v0, vi} ∈ E são associados a demanda dei = si e os lucros

cei,1= cei,2 = 0;

• K = 0.

Note que a instância específica do CEDP pode ser construída em tempo polinomial a partir da instância genérica do PP. A Figura 4.3 ilustra uma instância específica do CEDP obtida a partir da instância S = {2, 3, 5} do PP.

Se a resposta para a instância genérica do PP for “sim”, então existe um subcon-junto S0 ⊆ S tal que X

s∈S0 s = X s∈S\S0 s = 1 2 X s∈S s. Sejam S0 = {s1, . . . , sn0} e S \ S0 =

{sn0+1, . . . , sn}. Pela construção da instância específica do CEDP, existe uma coleção

E = {E1, E2} de distritos, isto é, existe uma coleção E = {E1, E2} de subconjuntos de E,

onde E1 = {{v0, v1}, . . . , {v0, vn0}} e E2 = {{v0, vn0+1}, . . . , {v0, vn}}, tal que:

(22)

Figura 4.3: Exemplo de uma instância específica do CEDP obtida transformando-se a instância S = {2, 3, 5} do PP.

• os distritos E1 e E2 são conexos, pois todas as arestas dos subgrafos induzidos G[E1]

e G[E2] possuem o vértice v0 em comum;

• os distritos E1e E2respeitam a capacidade máxima D =

X

s∈S

s, pois as demandas dos distritos E1 e E2 são, respectivamente, dE1 = 2

X e∈E1 de = 2(d{v0,v1}+ . . . + d{v0,vn0}) = 2(s1+ . . . + sn0) = 2 X s∈S0 s =X s∈S s e dE2 = 2 X e∈E2 de = 2(d{v0,vn0+1}+ . . . + d{v0,vn}) = 2(sn0+1+ . . . + sn) = 2 X s∈S\S0 s =X s∈S s;

• os distritos E1 e E2 respeitam o desbalanceamento máximo B = 0, pois a demanda

média dos distritos é ¯dE =

2 m X e∈E de = 2 2(d{v0,v1}+. . .+d{v0,vn}) = s0+. . .+sn= X s∈S s e dE1 = dE2 = ¯dE = X s∈S s;

• o lucro do distritamento E é de pelo menos K = 0, pois os lucros dos distritos E1 e

E2 são, respectivamente, cE1 = X e∈E1 ce,1 = X e∈E1 0 = 0 e cE2 = X e∈E2 ce,2= X e∈E2 0 = 0 e cE = cE1 + cE2 = 0 = K.

(23)

distritos conexos que respeitam a capacidade máxima D = X

s∈S

s, o desbalanceamento máximo B = 0 e tem lucro pelo menos K = 0. Portanto, a resposta para a instância específica do CEDP também é “sim”.

Se a resposta para a instância específica do CEDP for “sim”, então as arestas em E podem ser divididas em uma coleção E = {E1, E2} de dois distritos conexos que respeitam

a capacidade máxima D = X

s∈S

s e o desbalanceamento máximo B = 0 e de lucro pelo menos K = 0. Sejam E1 = {{v0, v1}, . . . , {v0, vn0}} e E2 = {{v0, vn0+1}, . . . , {v0, vn}} e seja ¯dE = 2 m X e∈E de = X e∈E

de a demanda média dos distritos. Pela construção da instância

específica do CEDP, tem-se que d{v0,vi} = sipara cada aresta {v0, vi} ∈ E, logo ¯dE =

X

s∈S

s. Como os distritos respeitam o desbalanceamento máximo B = 0, tem-se dE1 = 2

X e∈E1 de= ¯ dE = X s∈S s e dE2 = 2 X e∈E2 de = ¯dE = X s∈S

s. Então, pela construção da instância específica do CEDP, o conjunto S pode ser particionado nos subconjuntos S0 = {s1, . . . , sn0} e

S \ S0 = {sn0, . . . , sn} de tal forma que

X s∈S0 s = X s∈S\S0 s = 1 2 X s∈S s. Portanto, a resposta para a instância genérica do PP também é “sim”.

Logo, a resposta para instância genérica do PP é “sim” se e somente se a resposta para a instância específica do CEDP for “sim”. Portanto, o PP é polinomialmente redutível ao CEDP. Como, pelo Lema 4.2, o PP pertence à classe NP-completo e, consequentemente, à classe NP-difícil, conclui-se que o CEDP também pertence à classe NP-difícil.

Por fim, o resultado de que o CEDP pertence à classe NP-completo segue dos resul-tados dos Teoremas 4.1 e 4.3.

Corolário 4.4. CEDP ∈ NP-completo

Demonstração. Pelo Teorema 4.1, CEDP ∈ NP, e, pelo Teorema 4.3, CEDP ∈ NP-difícil. Como NP-completo = NP ∩ NP-difícil, conclui-se que CEDP ∈ NP-completo.

(24)

Capítulo 5

Formulações em Programação Linear

Inteira

Um Programa Linear, do inglês Linear Program (LP), consiste no problema de minimizar ou maximizar uma função objetivo linear na presença de restrições lineares (desigualdades e/ou igualdades) (BAZARAA; JARVIS, 1977).

Considere o seguinte LP genérico:

max{cx : Ax ≤ b, x ∈ Rn+}

onde A é uma matriz de dimensões m × n com os coeficientes das restrições, c é um vetor linha de dimensão n com os coeficientes da função objetivo, b é um vetor coluna de dimensão m com os coeficientes do lado direito das desigualdades (ou igualdades) e x é um vetor coluna de dimensão n com as variáveis de decisão do problema. Um Programa Linear Inteiro, do inglês Integer Linear Program (ILP), consiste em um LP onde algumas (ou todas) variáveis de decisão devem assumir valores inteiros (WOLSEY, 1998).

Muitas vezes são utilizadas formulações em ILP para modelar problemas de otimização combinatória, uma vez que as variáveis discretas podem ser representadas por números inteiros. Em Wolsey (1998) são apresentadas formulações de vários problemas de oti-mização combinatória, incluindo problemas clássicos da literatura, como o Problema da Mochila, do inglês Knapsack Problem (KP), e o Problema do Caixeiro Viajante, do inglês Traveling Salesman Problem (TSP).

Duas formulações em ILP para o CEDP são apresentadas a seguir.

5.1

Formulação por cortes de arestas

(25)

xe,j =

  

1, se a aresta e ∈ E for alocada a Ej,

0, caso contrário. Função objetivo: max ( m X j=1 X e∈E ce,jxe,j ) (5.1) Restrições: m X j=1 xe,j = 1, ∀e ∈ E (5.2) 2X e∈E dexe,j ≤ min ( D,2(1 + B) m X e∈E de ) , ∀j ∈ {1, . . . , m} (5.3) 2X e∈E dexe,j ≥ 2(1 − B) m X e∈E de, ∀j ∈ {1, . . . , m} (5.4) xe,j+ xf,j− X g∈δG(V0) xg,j ≤ 1, ∀e, f ∈ E, V0 ⊂ V \ f, V0 ⊃ e, j ∈ {1, . . . , m} (5.5) xe,j ∈ {0, 1}, ∀e ∈ E, j ∈ {1, . . . , m} (5.6)

A função objetivo (5.1) busca por uma solução de lucro máximo, onde o lucro de uma solução é dado pelo somatório dos lucros associados a colocar cada aresta em cada distrito. As restrições (5.2) garantem que cada aresta e ∈ E será alocada a exatamente um distrito. As restrições (5.3) garantem que a capacidade de cada distrito será respeitada. As restrições (5.3) e as restrições (5.4) garantem que o desbalanceamento máximo será respeitado. As restrições (5.5) garantem que se duas arestas e, f ∈ E são alocadas a um mesmo distrito Ej (xe,j = xf,j = 1), então ao menos uma aresta de cada corte de

arestas δG(V0)1 que separa e de f também será alocada a esse distrito (

X

g∈δG(V0)

xg,j ≥ 1),

ou seja, essas restrições garantem que os distritos serão conexos. Por fim, as restrições (5.6) garantem a integralidade das variáveis.

Nesta formulação a demanda de um distrito Ej ∈ E é dada por dEj = 2

X

e∈E

dexe,j.

Como cada distrito Ej ∈ E deve respeitar a capacidade máxima, chega-se ao primeiro

termo da função de mínimo das restrições (5.3). A demanda média dos distritos é 1Dado um grafo G = (V, E) e um subconjunto de vértices V0 ⊂ V , δ

G(V0) denota o subconjunto de

(26)

Logo, o desbalanceamento de cada distrito Ej ∈ E é dado por balEj = d¯E = 2X e∈E dexe,j 2 m X e∈E de − 1

. Como balmaxE ≤ B ⇒ max

Ej∈E

{balEj} ≤ B, tem-se que, para todo

dis-trito Ej ∈ E, balEj ≤ B ⇒ 2X e∈E dexe,j 2 m X e∈E de − 1 ≤ B ⇒ −B ≤ 2X e∈E dexe,j 2 m X e∈E de − 1 ≤ B ⇒ 2(1 − B) m X e∈E de≤ 2 X e∈E dexe,j ≤ 2(1 + B) m X e∈E

de. Com isso, deduz-se o segundo termo da

função de mínimo das restrições (5.3), assim como a corretude das restrições (5.4).

5.2

Formulação por fluxo em redes no grafo linha

O grafo linha L(G) de G = (V, E) é definido como aquele que tem as arestas de G como seus vértices, com dois vértices sendo adjacentes se e somente se as arestas correspondentes são adjacentes em G (DIESTEL, 2010; BEINEKE, 1970). Formalmente, L(G) = (U, A) onde U = E e A = {{e, f } : e, f ∈ U, |e ∩ f | = 1}. Note que |U | = |E| e |A| = 1

2 X

v∈V

(|δG(v)|2) − |E| (HARARY, 1969).

No grafo linha L(G), o objetivo do CEDP consiste em dividir U em uma coleção U = {U1, . . . , Um} de m distritos conexos, maximizando o lucro total e respeitando a

capacidade e o desbalanceamento máximo.

O lucro de um distrito Uj ∈ U é dado por cUj =

X

e∈Uj

ce,j. Enquanto que o lucro total

de um distritamento U é dado por cU =

X Uj∈U cUj = X Uj∈U X e∈Uj ce,j.

A demanda de um distrito Uj ∈ U é dada por dUj = 2

X

e∈Uj

de. Enquanto que a demanda

média de um distritamento U é dada por ¯dU =

1 m X Uj∈U dUj = 2 m X e∈U de.

Um distrito Uj ∈ U é conexo se o subgrafo induzido L(G)[Uj] for conexo. Uma forma de

garantir a conexidade dos distritos consiste em utilizar fluxo em redes. Para tanto, basta conectar um vértice fonte artificial e0 a todos os vértices, fazendo com que |U | unidades de fluxo saiam de e0 por exatamente m arestas e cada vértice e ∈ U consuma exatamente

(27)

uma unidade de fluxo. Seja G0 o supergrafo de L(G) obtido ao adicionar o vértice fonte artificial e0. Formalmente, G0 = (U0, A0) onde U0 = U ∪ {e0} e A0 = A ∪ {{e0, e} : e ∈ U }.

Note que |U0| = |E| + 1 e |A0| = 1

2 X

v∈V

(|δG({v})|2).

A Figura 5.1 mostra o mesmo distritamento da Figura 2.1 no grafo G0. Nesta figura, os vértices em U foram particionados em três subconjuntos: os vermelhos pontilhados, os verdes contínuos e os azuis tracejados. As arestas por onde o fluxo passa em cada distrito também são destacadas. Note que estas arestas induzem uma árvore em G0 e uma árvore para cada distrito em L(G).

Variáveis de decisão:

xe,j =

  

1, se o vértice e ∈ U for alocado a Uj,

0, caso contrário.

y{e0,e},j =

  

1, se a aresta {e0, e} ∈ A0\ A for alocada a Uj,

0, caso contrário.

ze,f,j ∈ R+: fluxo percorrendo a aresta {e, f } ∈ A0 no sentido e → f em Uj

Função objetivo: max ( m X j=1 X e∈U ce,jxe,j ) (5.7) Restrições: m X j=1 xe,j = 1, ∀e ∈ U (5.8) 2X e∈U dexe,j ≤ min ( D,2(1 + B) m X e∈U de ) , ∀j ∈ {1, . . . , m} (5.9) 2X e∈U dexe,j ≥ 2(1 − B) m X e∈U de, ∀j ∈ {1, . . . , m} (5.10) X e∈U y{e0,e},j = 1, ∀j ∈ {1, . . . m} (5.11) m X j=1 X e∈U ze0,e,j = |U | (5.12)

(28)

X

{e,f }∈δG0({e})

zf,e,j −

X

{e,f }∈δG0({e})

ze,f,j− xe,j = 0, ∀e ∈ U, j ∈ {1, . . . , m} (5.16)

xe,j ∈ {0, 1}, ∀e ∈ U, j ∈ {1, . . . , m} (5.17)

y{e0,e},j ∈ {0, 1}, ∀{e0, e} ∈ A0 \ A, j ∈ {1, . . . , m} (5.18)

ze,f,j ∈ [0, |U |], ∀{e, f } ∈ A0, j ∈ {1, . . . , m} (5.19)

A função objetivo (5.7) e as restrições (5.8), (5.9) e (5.10) são análogas à função obje-tivo (5.1) e às restrições (5.2), (5.3) e (5.4) da formulação da Seção 5.1, respectivamente. As restrições (5.11) garantem que haverá uma aresta {e0, e} ∈ A0 \ A adjacente ao vértice artificial e0 alocada a cada distrito Uj. A restrição (5.12) garante que sairão |U |

unidades de fluxo do vértice artificial e0. As restrições (5.13) garantem que se a aresta {e0, e} ∈ A0 \ A não for alocada a um distrito U

j (y{e0,e},j = 0), então não haverá fluxo

saindo de e0 para e pelo distrito Uj (ze0,e,j = 0). Juntas, as restrições (5.11), (5.12) e

(5.13) garantem que |U | unidades de fluxo sairão de e0 por m arestas. As restrições (5.14) garantem que se um vértice e ∈ U não for alocado a um distrito Uj (xe,j = 0), então

nenhum fluxo sairá do vértice e pelo distrito Uj (ze,f,j = 0, ∀{e, f } ∈ δL(G)({e})). As

restrições (5.15) garantem que se um vértice e ∈ U não for alocado a um distrito Uj

(xe,j = 0), então nenhum fluxo entrará no vértice e pelo distrito Uj (zf,e,j = 0, ∀{e, f } ∈

δL(G)({e})). Juntas, as restrições (5.14) e (5.15) garantem que só haverá fluxo percorrendo

uma aresta {e, f } ∈ A por um distrito Uj (ze,f,j > 0) se ambos os vértices extremos

e, f ∈ U estiverem alocados ao distrito Uj (xe,j = xf,j = 1). As restrições (5.16) garantem

a conservação do fluxo, isto é, se um vértice e ∈ U for alocado a um distrito Uj (xe,j = 1),

então a quantidade de fluxo que entra em e pelo distrito Uj é uma unidade maior do que

a quantidade de fluxo que sai de e pelo distrito Uj (

X f ∈δG0({e}) zf,e,j − X f ∈δG0({e}) ze,f,j = 1);

por outro lado, se um vértice e ∈ U não for alocado a um distrito Uj (xe,j = 0), então

a quantidade de fluxo que entra em e pelo distrito Uj é igual a quantidade de fluxo que

sai de e pelo distrito Uj (

X

f ∈δG0({e})

zf,e,j −

X

f ∈δG0({e})

ze,f,j = 0). Juntas, as restrições (5.11),

(29)

Por fim, as restrições (5.17) garantem a integralidade das soluções, enquanto que as restrições (5.18) e (5.19) definem o domínio das variáveis y e z, respectivamente.

(30)

Capítulo 6

Metodologias de Resolução

Neste capítulo são apresentadas metodologias heurísticas, exatas e meta-heurísticas para o CEDP. Sobre heurísticas, são apresentadas uma heurística construtiva gulosa-aleatória, um método de factibilização de soluções não factíveis e uma heurística de busca local. Sobre métodos exatos, são propostos dois algoritmos fundamentados nos paradigmas Branch-and-Bound e Branch-and-Cut. Sobre meta-heurísticas, foram desenvolvidas uma Heurística Lagrangiana e um GRASP (“Greedy Randomized Search Procedure”) para a solução do CEDP.

6.1

Metodologias Heurísticas

Uma heurística consiste em uma técnica projetada para obter soluções não triviais para problemas de otimização, sem garantias de otimalidade, quando métodos exatos são muito lentos.

6.1.1

Heurística Construtiva

Uma heurística construtiva gulosa-aleatória é um método heurístico que começa com uma solução vazia e, iterativamente, escolhe um elemento para incorporar a solução atual de modo aleatório e guloso, até que se obtenha uma solução completa. A cada iteração, a escolha do próximo elemento a ser adicionado na solução atual é determinada ordenando-se todos os elementos em uma lista de candidatos com respeito a uma função gulosa, que mede o benefício de selecionar cada elemento. O candidato que efetivamente entra na solução é escolhido aleatoriamente a partir da lista dos melhores candidatos, chamada de lista restrita de candidatos.

No Algoritmo 1 apresenta-se o pseudo-código da heurística construtiva gulosa-aleatória proposta para o CEDP. No laço das linhas 2 ∼ 4 constrói-se uma solução vazia (E1 ←

∅; . . . ; Em ← ∅;). Em cada iteração do laço das linhas 5 ∼ 58 escolhe-se um elemento para

(31)

uma aresta não alocada e e um distrito Ej para alocá-la até que todas as arestas sejam

alocadas. O valor do benefício de cada elemento é dado pelo ganho na função objetivo ao se alocar a aresta e no distrito Ej, dado por ce,j.

No laço das linhas 7 ∼ 16 popula-se a lista de candidatos com distritos Ej não vazios

(Ej 6= ∅) com demanda abaixo do mínimo permitido (dEj < (1 − B) ¯dE) e arestas e não

alocadas (e /∈

m

S

k=1

Ek) adjacentes ao distrito Ej (e ∈ δG(Vj)) que não violam a demanda

máxima permitida (dEj+ 2de≤ minD, (1 + B) ¯dE ), isto é, popula-se a lista com

candi-datos que irão expandir os distritos não vazios com demanda abaixo do mínimo permitido. Este laço é priorizado em relação aos demais com o intuito de evitar que distritos fiquem com demanda abaixo do mínimo permitido. Por exemplo, se existir um distrito Ej com

demanda abaixo do mínimo permitido, mas priorizar-se criar novos distritos ou expandir distritos que já possuem demanda acima do mínimo permitido, pode acontecer de todas as arestas adjacentes a Ej serem alocadas a outros distritos, de forma que se torna

inviá-vel expandir Ej, fazendo com que ele fique conexo e com a demanda abaixo do mínimo

permitido.

Se todos os distritos não vazios têm demanda acima do mínimo permitido ou se não for possível expandir nenhum distrito não vazio com demanda abaixo do mínimo permitido preservando-se a conexidade e respeitando-se a demanda máxima permitida, no laço das linhas 18 ∼ 31 popula-se a lista de candidatos com distritos Ej vazios (Ej = ∅) e arestas

e não alocadas (e /∈

m

S

k=1

Ek), e com distritos não vazios (Ej 6= ∅) e arestas e não alocadas

(e /∈

m

S

k=1

Ek) adjacentes ao distrito Ej (e ∈ δG(Vj)) que respeitam a demanda máxima

permitida (dEj + 2de ≤ minD, (1 + B) ¯dE ), isto é, popula-se a lista com candidatos

que irão criar novos distritos ou expandir distritos que já possuem demanda acima do mínimo permitido. Note que se for criado um novo distrito Ej, o laço das linhas 7 ∼ 16

garante que as próximas iterações do laço das linhas 5 ∼ 58 irão expandir Ej com arestas

adjacentes enquanto for possível ou até que Ej possua a demanda mínima permitida.

Se não houver distritos vazios e não for possível expandir os distritos não vazios preservando-se a conexidade e respeitando-se a demanda máxima permitida, no laço das li-nhas 34 ∼ 40 popula-se a lista de candidatos com distritos Ej e arestas e não alocadas (e /∈

m

S

k=1

Ek) que respeitam a demanda máxima permitida (dEj+ 2de≤ minD, (1 + B) ¯dE ).

Se não houver distritos vazios e não for possível expandir os distritos não vazios respeitando-se a demanda máxima permitida, no laço das linhas 43 ∼ 47 popula-se a lista de candidatos com distritos Ej e arestas e não alocadas (e /∈

m

S

k=1

Ek).

Após popular a lista de candidatos, nas linhas 49 ∼ 54 popula-se a lista restrita de candidatos com os melhores candidatos, utilizando o threshold α. Sejam minC e maxC os valores mínimos e máximos dos candidatos, respectivamente, um candidato (e, j) entrará na lista restrita de candidatos somente se ce,j ≥ maxC − α(maxC − minC). Na linha 55

(32)

portanto, a escolha sempre será totalmente aleatória.

A complexidade de cada iteração do laço das linhas 5 ∼ 58 é dominada pelo laço das linhas 7 ∼ 16. O laço das linhas 7 ∼ 16 itera por cada um dos m distritos e, a cada iteração, o laço das linhas 10 ∼ 14 itera, no pior caso, por cada uma das |E| arestas, sendo que cada iteração é executada em tempo constante. Logo, cada iteração do laço das linhas 5 ∼ 58 tem complexidade de O(m|E|). A cada iteração do laço das linhas 5 ∼ 58 uma aresta é alocada a um distrito até que todas as arestas estejam alocadas. Logo, são realizadas |E| iterações deste laço. Portanto, a complexidade do Algoritmo 1 é de O(m|E|2).

6.1.2

Método de Factibilização

Dada uma instância (m, D, B, G = (V, E), d, c) do CEDP, uma coleção E = {E1, . . . , Em}

de m subconjuntos de E é uma solução factível somente se: 1. E for uma divisão de E. Para tanto, é necessário que:

(a) Ei ∩ Ej 6= ∅ para todo i, j ∈ {1, . . . , m} com i 6= j, isto é, cada aresta seja

alocada a no máximo um distrito; (b)

m

S

j=1

Ej = E, isto é, cada aresta seja alocada a no mínimo um distrito;

2. cada distrito Ej ∈ E seja conexo, isto é, que G[Ej] seja conexo para todo Ej ∈ E;

3. cada distrito Ej ∈ E respeite a capacidade máxima de distritamento D, isto é, que

dEj ≤ D para todo Ej ∈ E;

4. cada distrito Ej ∈ E respeite o desbalanceamento máximo B. Para tanto, é

neces-sário que:

(a) dEj ≥ (1 − B) ¯dE para todo Ej ∈ E;

(b) dEj ≤ (1 + B) ¯dE para todo Ej ∈ E.

A heurística construtiva da Seção 6.1.1 e a heurística lagrangiana da Seção 6.3.1, podem obter soluções não factíveis, isto é, podem obter coleções E = {E1, . . . , Em} de m

subconjuntos de E que violam um ou mais dos critérios de factibilidade elencados acima. Logo, um método que factibiliza tais soluções faz-se necessário.

(33)

Algoritmo 1 Heurística Construtiva (O(m|E|2))

1: Heurística-Construtiva(m, D, B, G = (V, E), d, c) 2: para todo j ∈ {1, . . . , m} faça

3: Ej ← ∅; 4: fim para 5: enquanto E \ m S j=1 Ej 6= ∅ faça 6: CL ← ∅;

7: para todo j ∈ {1, . . . , m} faça

8: se Ej 6= ∅ ∧ dEj < (1 − B) ¯dE então

9: Seja Vj ⊆ V tal que G[Ej] = (Vj, Ej); 10: para todo e ∈ δG(Vj) \ m S k=1 Ek faça 11: se dEj+ 2de≤ minD, (1 + B) ¯dE então 12: CL ← CL ∪ {(e, j)}; 13: fim se 14: fim para 15: fim se 16: fim para 17: se CL = ∅ então

18: para todo j ∈ {1, . . . , m} faça

19: se Ej = ∅ então 20: para todo e ∈ E \ m S k=1 Ek faça 21: CL ← CL ∪ {(e, j)}; 22: fim para 23: senão

24: Seja Vj ⊆ V tal que G[Ej] = (Vj, Ej); 25: para todo e ∈ δG(Vj) \ m S k=1 Ek faça 26: se dEj+ 2de ≤ minD, (1 + B) ¯dE então 27: CL ← CL ∪ {(e, j)}; 28: fim se 29: fim para 30: fim se 31: fim para 32: fim se

(34)

33: se CL = ∅ então

34: para todo j ∈ {1, . . . , m} faça

35: para todo e ∈ E \ m S k=1 Ek faça 36: se dEj+ 2de≤ minD, (1 + B) ¯dE então 37: CL ← CL ∪ {(e, j)}; 38: fim se 39: fim para 40: fim para 41: fim se 42: se CL = ∅ então

43: para todo j ∈ {1, . . . , m} faça

44: para todo e ∈ E \ m S k=1 Ek faça 45: CL ← CL ∪ {(e, j)}; 46: fim para 47: fim para 48: fim se

49: Sejam minC e maxC os valores mínimo e máximo dos candidatos em CL, respectivamente;

50: RCL ← ∅;

51: para todo (e, j) ∈ CL faça

52: se ce,j ≥ maxC − α(maxC − minC) então RCL ← RCL ∪ {(e, j)}

53: fim se

54: fim para

55: Escolha um candidato (e, j) ∈ RCL aleatoriamente;

56: Ej ← Ej∪ {e};

57: retorna E = {E1, . . . , Em}; 58: fim enquanto

(35)

No Algoritmo 2 apresenta-se o pseudo-código do método de factibilização proposto para o CEDP. Na linha 2 factibiliza-se as arestas alocadas a mais de um distrito (critério 1.a). Na linha 3 se os distritos desconexos (critério 2). Na linha 4 factibiliza-se os distritos com demanda acima do máximo permitido (critérios 3 e 4.a). Se após factibilizar distritos com demanda acima do máximo permitido ainda existir algum dis-trito desconexo, na linha 5 novamente factibiliza-se os disdis-tritos desconexos. Na linha 6 factibiliza-se os distritos com demanda abaixo do mínimo permitido (critério 4.b). Por fim, na linha 7 factibiliza-se as arestas que não estão alocadas a nenhum distrito (critério 1.b). Note, porém, que como encontrar uma solução factível para o CEDP é um problema NP-completo, o método de factibilização proposto pode falhar.

Algoritmo 2 Método de Factibilização (O(m|E|3))

1: Factibiliza-Solução(m, D, B, G = (V, E), d, c, E = {E1, . . . , Em}) 2: E ← Factibiliza-Arestas-Alocadas-a-Múltiplos-Distritos(m, D, B, G, d, c, E ); 3: E ← Factibiliza-Distritos-Desconexos(m, D, B, G, d, c, E); 4: E ← Factibiliza-Distritos-Com-Demanda-Acima-Do-Máximo(m, D, B, G, d, c, E ); 5: E ← Factibiliza-Distritos-Desconexos(m, D, B, G, d, c, E); 6: E ← Factibiliza-Distritos-Com-Demanda-Abaixo-Do-Mínimo(m, D, B, G, d, c, E ); 7: E ← Factibiliza-Arestas-Não-Alocadas(m, D, B, G, d, c, E); 8: retorna E ; 9: fim

O método que factibiliza as arestas alocadas a mais de um distrito é apresentado no Algoritmo 3. Para cada e ∈ E, nas linhas 3 ∼ 8 computa-se a quais distritos a aresta e está alocada. Se e estiver alocada a mais de um distrito (|distritos| > 1), nas linhas 10 ∼ 19 escolhe-se o melhor distrito Ej para se alocar a aresta e e, então, nas linhas

20 ∼ 24 desaloca-se a aresta e dos distritos Ek com k 6= j (Ek ← Ek\ {e}).

Uma aresta pode estar alocada em até m distritos. Então, como a operação de inserção em conjunto tem complexidade logarítmica no tamanho do conjunto, cada execução da linha 6 tem complexidade de O(log(m)). Logo, como são executadas m iterações, o laço das linhas 4 ∼ 8 tem complexidade de O(m log(m)). Analogamente, como um distrito pode ter até |E| arestas, cada execução da linha 22 tem complexidade de O(log(|E|)). Logo, o laço das linhas 20 ∼ 24 tem complexidade de O(m log(|E|)). Portanto, como são realizadas |E| iterações do laço das linhas 2 ∼ 26, a complexidade do Algoritmo 3 é de O(m|E| log(m|E|))

O método que factibiliza os distritos desconexos é apresentado no Algoritmo 4. Para cada distrito Ej ∈ E, se G[Ej] não for conexo, no laço das linhas 7 ∼ 13 escolhe-se a

melhor componente conexa E∗ de Ej, isto é, a componente conexa de maior valor e, em

(36)

Algoritmo 3 Factibiliza Arestas Alocadas a Múltiplos Distritos (O(m|E| log(m|E|)))

1: Factibiliza-Arestas-Alocadas-a-Múltiplos-Distritos(m, D, B, G = (V, E),

d, c, E = {E1, . . . , Em}) 2: para todo e ∈ E faça

3: distritos ← ∅;

4: para todo j ∈ {1, . . . , m} faça

5: se e ∈ Ej então 6: distritos ← distritos ∪ {j}; 7: fim se 8: fim para 9: se |distritos| > 1 então 10: j ← 0; 11: maxC ← −∞; 12: minD ← ∞;

13: para todo k ∈ distritos faça

14: se maxC < ce,k∨ (maxC = ce,k∧ minD > dEk) então

15: j ← k;

16: maxC ← ce,k;

17: minD ← dEk;

18: fim se

19: fim para

20: para todo k ∈ distritos faça

21: se k 6= j então 22: Ek ← Ek\ {e}; 23: fim se 24: fim para 25: fim se 26: fim para 27: retorna E ; 28: fim

(37)

das demais componentes conexas (Ej ← E∗).

Uma componente conexa de um distrito Ej pode ter até |Ej| − 1 arestas. Então, como

um distrito Ej pode ter |E| arestas, o cálculo da linha 10 tem complexidade de O(|E|).

Como um distrito Ej pode ter até |Ej| componentes conexas, temos que o laço das linhas

7 ∼ 13 é iterado até |E| vezes. Logo, a complexidade do laço das linhas 7 ∼ 13 é de O(|E|2) Portanto, como o laço das linhas 4 ∼ 16 é iterado m vezes, a complexidade do

Algoritmo 4 é de O(m|E|2).

Algoritmo 4 Factibiliza Distritos Desconexos (O(m|E|2))

1: Factibiliza-Distritos-Desconexos(m, D, B, G = (V, E), d, c, E = {E1, . . ., Em})

2: para todo j ∈ {1, . . . , m} faça

3: se G[Ej] for desconexo então

4: E∗ ← ∅;

5: maxC ← −∞;

6: maxE ← −∞;

7: para todo componente conexa G0 = (V0, E0) de G[Ej] faça

8: se maxC < X

e∈E0

ce,j∨ (maxC =

X

e∈E0

ce,j∧ maxE < |E0|) então

9: E∗ ← E0; 10: maxC ← X e∈E0 ce,j; 11: maxE ← |E0|; 12: fim se 13: fim para 14: Ej ← E∗; 15: fim se 16: fim para 17: retorna E ; 18: fim

O método que factibiliza os distritos com demanda acima do máximo permitido é apresentado no Algoritmo 5. Para cada distrito Ej ∈ E, enquanto a demanda de Ej estiver

acima do máximo permitido (dEj > minD, (1 + B) ¯dE ), no laço das linhas 8 ∼ 22

procura-se a melhor aresta e ∈ Ej para se remover do distrito Ej, preservando-se sua

conexidade e respeitando-se a demanda mínima permitida (dEj − 2de ≥ (1 − B) ¯dE). No

laço das linhas 11 ∼ 20 procura-se um novo distrito Ek 6= Ej, também preservando-se a

conexidade do distrito Ek e respeitando-se a demanda máxima permitida (dEk + 2de ≤

minD, (1 + B) ¯dE ). Caso não se encontre nenhuma aresta, no laço das linhas 24 ∼ 30

procura-se a melhor aresta e ∈ Ej para se remover do distrito Ej, porém sem preservar a

conexidade nem respeitar a demanda mínima permitida. Por fim, na linha 32 desaloca-se a aresta escolhida e de Ej (Ej ← Ej\ {e}) e, caso tenha sido encontrado um novo distrito

Ek6= Ej para se alocar e, na linha 34 aloca-se e ao distrito Ek (Ek← Ek∪ {e}).

(38)

cada iteração é dominada pelo laço das linhas 8 ∼ 22, a complexidade do laço das linhas 3 ∼ 36 é de O(|E|3). Portanto, como o laço das linhas 2 ∼ 37 é executado m vezes, a

complexidade do Algoritmo 5 é de O(m|E|3).

O método que factibiliza os distritos com demanda abaixo do mínimo permitido é apresentado no Algoritmo 6. Para cada distrito Ej ∈ E, enquanto a demanda de Ej

estiver abaixo do mínimo permitido (dEj < (1 − B) ¯dE), no laço das linhas 9 ∼ 15

procura-se a melhor aresta e não alocada (e /∈

m

S

l=1

El) para se alocar ao distrito Ej, preservando-se

a conexidade do distrito Ej e respeitando-se a demanda mínima permitida (dEj + 2df ≤

minD, (1 + B) ¯dE ). Caso não se encontre nenhuma aresta, no laço das linhas 17 ∼ 25

procura-se a aresta e já alocada a algum distrito Ek 6= Ej (e ∈ Ek) para ser realocada ao

distrito Ej, também preservando-se a conexidade dos distritos Ej e Ek e respeitando-se as

demandas máxima (dEj+ 2de ≤ minD, (1 + B) ¯dE ) e mínima (dEk − 2de≥ (1 − B) ¯dE)

permitidas. Por fim, se for encontrada uma aresta e, na linha 28 aloca-se e ao distrito Ej

(Ej ← Ej ∪ {e}) e, caso a aresta e já estiver alocada a um outro distrito Ek, na linha 30

desaloca-se e do distrito Ek (Ek ← Ek\ {e}).

Cada iteração do laço das linhas 9 ∼ 15 é executado em tempo constante e são executadas da ordem de |E| iterações, logo sua complexidade é de O(|E|). A cada iteração do laço das linhas 3 ∼ 35 uma aresta é adicionada a um distrito Ej até que sua demanda

respeite o mínimo permitido. No pior caso, Ej era vazio e passará a ter apenas |E| arestas,

isto é, serão executadas |E| iterações do laço. Como a complexidade de cada iteração é dominada pelo laço das linhas 9 ∼ 15, a complexidade do laço das linhas 3 ∼ 35 é de O(|E|2). Portanto, como o laço das linhas 2 ∼ 36 é iterado m vezes, a complexidade do

Algoritmo 6 é de O(m|E|2).

O método que factibiliza as arestas não alocadas é apresentado no Algoritmo 7. En-quanto houver arestas que não estão alocadas a nenhum distrito (

m

S

j=1

Ej 6= E), no laço das

linhas 8 ∼ 19 procura-se a melhor aresta e que não está alocada a nenhum distrito (e /∈

m

S

j=1

Ej) e o melhor distrito Ej para se alocar a aresta e, conservando-se a conexidade do

dis-trito Ej e respeitando-se a demanda máxima permitida (dEj+2de ≤ minD, (1 + B) ¯dE ).

Caso não se encontre nenhuma aresta, no laço das linhas 21 ∼ 31 procura-se a melhor aresta e que não está alocada e o melhor distrito Ej para se alocar a aresta e, porém sem

preservar a conexidade nem respeitar a demanda máxima permitida. Por fim, na linha 33 aloca-se a aresta e ao distrito Ej (Ej ← Ej ∪ {e}).

(39)

Algoritmo 5 Factibiliza Distritos Com Demanda Acima Do Máximo (O(m|E|3))

1: Factibiliza-Distritos-Com-Demanda-Acima-Do-Máximo(m, D, B, G =

(V, E), d, c, E = {E1, . . . , Em}) 2: para todo j ∈ {1, . . . , m} faça

3: enquanto dEj > minD, (1 + B) ¯dE faça

4: e ← ∅;

5: k ← j;

6: minC ← ∞;

7: maxD ← −∞;

8: para todo f ∈ Ej faça

9: se G[Ej \ {f }] for conexo então

10: maxC ← −∞; 11: para todo g ∈ (δG(f ) ∩ ( m S l=1 El)) \ Ej faça 12: Seja l ∈ {1, . . . , m} tal que g ∈ El;

13: se dEj−2df ≥ (1−B) ¯dE∧dEl+2df ≤ minD, (1 + B) ¯dE ∧(e =

∅ ∨ minC > cf,j ∨ (minC = cf,j ∧ (maxD < df ∨ (maxD = df ∧ maxC < cf,l))))

então 14: e ← f ; 15: k ← l; 16: minC ← cf,j; 17: maxD ← df; 18: maxC ← cf,l; 19: fim se 20: fim para 21: fim se 22: fim para 23: se e = ∅ então

24: para todo f ∈ Ej faça

25: se e = ∅ ∨ minC > cf,j∨ (minC = cf,j ∧ maxD < df) então

26: e ← f ; 27: minC ← cf,j; 28: maxD ← df; 29: fim se 30: fim para 31: fim se 32: Ej ← Ej\ {e}; 33: se k 6= j então 34: Ek← Ek∪ {e}; 35: fim se 36: fim enquanto 37: fim para 38: retorna E ; 39: fim

(40)

3: enquanto dEj < (1 − B) ¯dE faça

4: e ← ∅;

5: k ← j;

6: maxC ← −∞;

7: maxD ← −∞;

8: Seja Vj ⊆ V tal que G[Ej] = (Vj, Ej); 9: para todo f ∈ δG(Vj) \ (

m

S

l=1

El) faça

10: se dEj+ 2df ≤ minD, (1 + B) ¯dE ∧ (e = ∅ ∨ maxC < cf,j∨ (maxC =

cf,j ∧ maxD < df)) então 11: e ← f ; 12: maxC ← cf,j; 13: maxD ← df; 14: fim se 15: fim para 16: se e = ∅ então 17: para todo f ∈ δG(Vj) ∩ ( m S l=1 El) faça 18: Seja l ∈ {1, . . . , m} tal que f ∈ El;

19: se dEj+ 2df ≤ minD, (1 + B) ¯dE ∧ dEl− 2df ≥ (1 − B) ¯dE∧ G[El\

{f }] for conexo ∧ (e = ∅ ∨ maxC < cf,j − cf,l∨ (maxC = cf,j − cf,l ∧ maxD < df))

então 20: e ← f ; 21: k ← l; 22: maxC ← cf,j − cf,l; 23: maxD ← df; 24: fim se 25: fim para 26: fim se 27: se e 6= ∅ então 28: Ej ← Ej ∪ {e}; 29: se k 6= j então 30: Ek ← Ek\ {e}; 31: fim se 32: senão 33: break; 34: fim se 35: fim enquanto 36: fim para 37: retorna E ; 38: fim

(41)

Cada iteração do laço das linhas 9 ∼ 18 é executado em tempo constante e são executadas da ordem de |E| iterações, logo sua complexidade é de O(|E|). O laço das linhas 8 ∼ 19 é iterado da ordem de |E| vezes e cada iteração tem complexidade de O(|E|), logo sua complexidade é de O(|E|2). Cada iteração do laço das linhas 22 ∼ 30

é executado em tempo constante e são executadas m iterações, logo sua complexidade é de O(m). O laço das linhas 21 ∼ 31 é iterado da ordem de |E| vezes e cada iteração tem complexidade de O(m), logo sua complexidade é de O(m|E|). Então, a complexidade de cada iteração do laço das linhas 2 ∼ 34 é de O(|E|(m + |E|)). A cada iteração, uma aresta é alocada até que todas as arestas estejam alocadas. Logo, são executadas da ordem de |E| iterações. Portanto, a complexidade do Algoritmo 7 é de O(|E|2(m + |E|)).

6.1.3

Heurística de Busca Local

Uma heurística de busca local é um método utilizado para resolver problemas de oti-mização que se inicia a partir de uma solução factível inicial e, então, iterativamente melhora a solução atual enquanto for possível, isto é, move-se para uma solução factível de melhor valor na vizinhança da solução atual até que um ótimo local seja alcançado. Tipicamente, cada solução factível tem mais de uma solução vizinha e a escolha de para qual delas a busca irá mover-se é tomada utilizando apenas informações sobre as soluções na vizinhança da solução atual, por isso o nome busca local.

No Algoritmo 8 apresenta-se o pseudo-código de uma heurística de busca local para o CEDP. Primeiramente, na linha 2 procura-se a permutação dos distritos da solução inicial que resulta no distritamento de maior valor utilizando-se o método húngaro para o Problema da Atribuição, do inglês Assignment Problem (AP) (KUHN, 1955). O laço das linhas 5 ∼ 22 é executado enquanto a solução atual puder ser melhorada ou até que |E| melhorias tenham sido feitas. Para cada distrito Ej ∈ E, no laço da linhas 8 ∼ 20

procura-se uma aresta e ∈ Ej e um novo distritos Ek 6= Ej para se realocar e que obtenha um lucro

melhor (ce,j < ce,k), preservando-se a conexidade dos distritos Ej e Ek e respeitando-se as

demandas mínima (dEj − 2de ≥ (1 − B) ¯dE) e máxima (dEk+ 2de ≤ minD, (1 + B) ¯dE )

permitidas. Por fim, como as arestas em cada distrito possivelmente foram alteradas, na linha 23 novamente procura-se pela melhor permutação dos distritos.

As linhas 2 e 23, que invocam o método húngaro para o AP, tem complexidade de O(m3). Como um distrito pode ter até |E| arestas, cada execução das linhas 13 e 14 tem

complexidade de O(log(|E|)). No pior caso, o laço das linhas 10 ∼ 18 é iterado |E| vezes, logo sua complexidade é de O(|E| log(|E|)). O laço das linhas 8 ∼ 20 é iterado da ordem de |E| vezes, logo sua complexidade é de O(|E|2log(|E|)). O laço das linhas 7 ∼ 21 é iterado m vezes, logo sua complexidade é de O(m|E|2log(|E|)). Por fim, o laço das

linhas 5 ∼ 22 é iterado, no máximo, |E| vezes e sua complexidade é de O(m|E|3log(|E|)).

(42)

2: enquanto S j=1 Ej 6= E faça 3: e ← ∅; 4: j ← 0; 5: maxC ← −∞; 6: minW ← ∞; 7: minD ← ∞; 8: para todo f ∈ E \ ( m S k=1 Ek) faça 9: para todo g ∈ δG(f ) ∩ ( m S k=1 Ek) faça 10: Seja k ∈ {1, . . . , m} tal que g ∈ Ek;

11: se dEk+ 2df ≤ minD, (1 + B) ¯dE ∧ (e = ∅ ∨ maxC < cf,k∨ (maxC =

cf,k∧ (minW > df ∨ (minW = df && minD > dEk)))) então

12: e ← f ; 13: j ← k; 14: maxC ← cf,k; 15: minW ← df; 16: minD ← dEk; 17: fim se 18: fim para 19: fim para 20: se e = ∅ então 21: para todo f ∈ E \ ( m S k=1 Ek) faça 22: para todo k ∈ {1, . . . m} faça

23: se e = ∅ ∨ maxC < cf,k∨ (maxC = cf,k∧ (minW > df ∨ (minW =

df ∧ minD > dEk))) então 24: e ← f ; 25: j ← k; 26: maxC ← cf,k; 27: minW ← df; 28: minD ← dEk; 29: fim se 30: fim para 31: fim para 32: fim se 33: Ej ← Ej∪ {e}; 34: fim enquanto 35: retorna E ; 36: fim

(43)

Algoritmo 8 Heurística de Busca Local (O(m3+ m|E|3log (|E|)))

1: Heurística-de-Busca-Local(m, D, B, G = (V, E), d, c, E = {E1, . . . , Em}) 2: E ← Alocacao-De-Custo-Máximo(E);

3: melhorou ← true;

4: contador ← 0;

5: enquanto melhorou ∧ contador < |E| faça

6: melhorou ← f alse;

7: para todo j ∈ {1, . . . , m} faça

8: para todo e ∈ Ej faça

9: se G[Ej \ {e}] for conexo ∧dEj − 2de ≥ (1 − B) ¯dE então

10: para todo f ∈ δG(e) \ Ej faça

11: Seja k ∈ {1, . . . , m} tal que f ∈ Ek;

12: se dEk+ 2de ≤ minD, (1 + B) ¯dE ∧ ce,j < ce,k então

13: Ej ← Ej \ {e}; 14: Ek← Ek∪ {e}; 15: melhorou ← true; 16: contador ← contador + 1; 17: fim se 18: fim para 19: fim se 20: fim para 21: fim para 22: fim enquanto 23: E ← Alocacao-De-Custo-Máximo(E); 24: retorna E ; 25: fim

(44)

1998; NEMHAUSER; WOLSEY, 1988; BERTSIMAS; TSITSIKLIS, 1997).

6.2.1

Branch-and-Bound

O método B&B para ILP utiliza uma abordagem de divisão e conquista para explorar o conjunto de soluções inteiras factíveis. Como explorar todo o conjunto é impraticável para a maioria dos problemas, são utilizados limitantes primais e duais no valor ótimo para evitar explorar certas partes do conjunto.

Para a metodologia B&B, utilizou-se a formulação ILP por fluxo em redes no grafo linha, apresentada na Seção 5.2. Seja S = {x ∈ B|U |×m : x satisfaz a (5.8), (5.9), (5.10), (5.11), (5.12), (5.13), (5.14), (5.15) e (5.16) para algum y ∈ B|A0\A|×m e algum z ∈ R2|A0|×m} o conjunto de soluções inteiras factíveis para o CEDP:

w = max ( X e∈E m X j=1 ce,jxe,j : x ∈ S ) .

Divide-se recursivamente o conjunto S em uma coleção finita de subconjuntos S = {S1, . . . , Sk} e resolve-se separadamente cada um dos subproblemas:

wi = max ( X e∈E m X j=1 ce,jxe,j : x ∈ Si ) , i ∈ {1, . . . k}.

Os subproblemas são resolvidos recursivamente e suas soluções ótimas são comparadas, retornando-se a melhor. Esta é a parte de ramificação do método, que induz uma árvore de subproblemas. Esta ramificação pode ser vista como uma enumeração total dos elementos de S. Porém, como a enumeração total não é viável para a maioria dos problemas, precisa-se evitar dividir o conjunto inicial S em muitos subconjuntos. Se for possível estabelecer que não são mais necessárias subdivisões no subconjunto Si ∈ S, então diz-se que a árvore

de subproblemas pode ser podada no nó correspondente a Si.

Sejam wi e wi, respectivamente, limitantes primal e dual de wi, no valor de uma

solução ótima de cada subproblema Si ∈ S. Então w = k max i=1{wi} e w = k max i=1 {wi}

são, respectivamente, limitantes primal e dual de w, o valor de uma solução ótima para o problema original S. Os limitantes primais podem ser obtidos por meio de soluções factíveis para os subproblemas, enquanto que os limitantes duais podem ser obtidos por meio de relaxações ou dualidade.

(45)

Pode-se podar a árvore de subproblemas e, assim, enumerar um grande número de soluções implicitamente, se qualquer uma das seguintes condições é satisfeita:

• Poda por inviabilidade: Si = ∅.

• Poda por dominância de valor: wi ≤ w.

• Poda por otimalidade: uma solução ótima para Si é conhecida.

No Algoritmo 9 apresenta-se o pseudo-código de um algoritmo B&B para o CEDP. Na implementação do método B&B, foi utilizado o resolvedor Gurobi 8.11. Também utilizou-se a heurística construtiva da Seção 6.1.1 e o método de factibilização da Seção 6.1.2 para obter uma solução inicial como ponto de partida do Gurobi. Além disso, utilizou-se a heurística de busca local da Seção 6.1.3 para melhorar as solução factíveis obtidas pelo Gurobi, caso não fosse possível obter a solução ótima dentro do limite de tempo.

6.2.2

Branch-and-Cut

O método B&C é uma variante do método B&B no qual planos de corte são gerados ao longo da árvore de subproblemas. A ideia desse método é explorar cada nó em busca de melhores limitantes duais. Existe, na prática, um trade-off, pois, se muitos cortes forem adicionados em cada nó, a reotimização pode ficar muito lenta.

Para a metodologia B&C, utilizou-se a formulação ILP do CEDP por corte de arestas, apresentada na Seção 5.1. As restrições (5.5) são em número exponencial no tamanho da entrada, de modo que não é possível carregar todas elas na memória para uma instância de interesse prático. Logo, inicialmente carrega-se o modelo da Seção 5.1 sem as restrições (5.5) e, ao encontrar uma solução relaxada x∗ para o problema, adiciona-se ao modelo uma ou mais restrições válidas violadas por x∗ como lazy-constraints, caso exista. O problema de encontrar uma ou mais desigualdades válidas violadas por uma solução relaxada é chamado de problema de separação.

No Algoritmo 10 apresenta-se o pseudo-código de um algoritmo para o problema de separação do CEDP. Primeiramente, na linha 2 constrói-se o conjunto R de desigualdades válidas violadas pela solução atual (R ← ∅). Para cada distrito Ej ∈ E, no laço das linhas

5 ∼ 9 computa-se as arestas e que estão no distrito Ej na solução atual. Se o distrito Ej

não for conexo, no laço das linhas 11 ∼ 15 percorre-se cada par de componentes conexas E0 e E00 de Ej e cada par de arestas (e, f ) ∈ E0× E00, adicionando-se a desigualdade válida

violada xe,j+ xf,j −

X

g∈δG(V0)

xg,j ≤ 1 a R . Por fim, na linha 18 retorna-se o conjunto R

com todas as desigualdades válidas violadas que foram encontradas.

Como δG(V0) pode ter da ordem de |E| arestas, cada execução da linha 13 tem

(46)

Algoritmo 9 Branch-and-Bound 1: Branch-and-Bound (S) 2: S ← {S}; 3: x? ← ∅; 4: w ← −∞; 5: w ← −∞; 6: enquanto S 6= ∅ faça

7: Selecione um problema ativo Si de S 8: se Si = ∅ então

9: S ← S \ {Si};

10: senão

11: Compute um limitante dual wi e uma solução dual x0 para Si; 12: se wi ≤ w então

13: S ← S \ {Si};

14: senão

15: se uma solução ótima x?i para Si de valor wi é conhecida então

16: se w ≤ wi então 17: x? ← x? i; 18: w ← wi; 19: fim se 20: S ← S \ {Si}; 21: senão

22: Divida o problema Si em uma coleção de subproblemas Si;

23: S ← S \ {Si}; 24: S ← S ∪ Si; 25: fim se 26: fim se 27: fim se 28: fim enquanto 29: retorna x?; 30: fim

Referências

Documentos relacionados

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

c.4) Não ocorrerá o cancelamento do contrato de seguro cujo prêmio tenha sido pago a vista, mediante financiamento obtido junto a instituições financeiras, no

Contudo, sendo um campo de pesquisa e de atuação muito específico e novo no Brasil, ainda existe uma série de dificuldades para a eleição de parâmetros de conservação

A participação foi observada durante todas as fases do roadmap (Alinhamento, Prova de Conceito, Piloto e Expansão), promovendo a utilização do sistema implementado e a

Objetivo: Garantir estimativas mais realistas e precisas para o projeto, ao considerar nesta estimativa o esforço necessário (em horas ou percentual do projeto) para

Ainda segundo Gil (2002), como a revisão bibliográfica esclarece os pressupostos teóricos que dão fundamentação à pesquisa e às contribuições oferecidas por

Para disciplinar o processo de desenvolvimento, a Engenharia de Usabilidade, também conceituada e descrita neste capítulo, descreve os métodos estruturados, a

Como pontos fortes, destacam-se a existência de iniciativas já em- preendidas em torno da aprovação de um Código de classificação e uma Ta- bela de temporalidade e destinação