• Nenhum resultado encontrado

1: Define a ordem das BLs em

N

;

2: x0←xgp; 3: Insere f (x0) em L1; 4: for n = 1 to 3 do 5: repeat 6: fi= f (x 0) ; 7: Executa BLn(x 0) ; 8: if f (x0)∈Ln then

9: return Substitui xgppor novo indivíduo criado pela HC2;

10: else

11: Insere f (x0) em Ln;

12: end if

13: until f (x0)6= fi

14: if f (x0)mudou na BLnand n 6= 1 then

15: n= 1;

16: else

17: n= n + 1;

18: end if

19: end for

20: if f (x0)= f (xgp)para algum p ∈

P

then

21: return Substitui xgppor novo indivíduo criado usando HC2;

22: end if

23: return xgp← x 0

;

A população inicial é criada (linhas 5-11), sendo metade dos indivíduos pela HC1 e o restante pela HC2. Os indivíduos criados são avaliados e ordenados pela função objetivo em ordem crescente de custo (linha 12). Antes de iniciar as iterações, o algoritmo elitiza com o VND a melhor solução gerada pelas HCs (linha 13). Pelo menos GR gerações

serão avaliadas a menos que o clock atinja o tempo máximo de execução do algoritmo (linha 15). Em cada geração os operadores de seleção, cruzamento, mutação e aceitação do AG são executados (linha 16). O elitismo é feito quando um novo melhor indivíduo é encontrado ou passaram-se GR gerações sem melhoria no indivíduo (linhas 18-21). O

contador de gerações g é reiniciado sempre que uma nova melhor solução for encontrada pelos operadores (linhas 22-24). Após GR gerações sem melhoria, o reinício é aplicado

(linha 26-30) e um elisitsmo é executado em uma das soluções novas (linha 29). A melhor solução encontrada é retornada ao final do algoritmo (linha 32).

3.4

Outras considerações sobre o AG+VNDi

Em termos de complexidade, as buscas locais são os mecanismos mais custosos do AG+VNDi. Isto porque estas heurísticas exigem um processamento enorme de soluções vizinhas para encontrar uma solução aprimorante. Em um nível mais baixo, podemos de-

46 CAPÍTULO 3. DESCRIÇÃO DO ALGORITMO terminar a complexidade do algoritmo pela quantidade de execuções do FCM. Nos casos em que o FCM já foi executado a avaliação da solução pode ser feita rapidamente através da busca na tabela hash que guarda as soluções das configurações de facilidades já explo- radas. Isto significa que efetuar buscas locais em soluções muito próximas é muito menos custoso que em soluções de uma população muito heterogênea, o que justifica o uso do operador de cruzamento convergente no AG+VNDi. Entretanto, soluções parecidas ten- dem a levar a ótimos locais semelhantes.

Uma outra maneira de acelerar as buscas é feita reaproveitando os grafos construí- dos na execução do algoritmo para facilitar as inicializações avançadas (warm starts) na resolução do fluxo a custo mínimo. O último grafo utilizado num FCM é mantido pelo AG+VNDi. Quando houver demanda para uma nova execução do FCM, o grafo é refor- mulado atualizando os nós e arcos ativos. Com isto, o FCM utiliza parte da estrutura da solução anterior como solução inicial da nova configuração evitando recomeçar a busca pelo fluxo ótimo do zero.

A complexidade de cada BL é subjetiva e depende da estrutura da solução a ser ava- liada. Na BL1, por exemplo, cada gene igual a zero ou L impede o teste de retirada ou adição de um módulo, respectivamente, reduzindo a quantidade de execuções do FCM. Da mesma forma, soluções apertadas - quando há pouca capacidade ociosa - terão poucos movimentos viáveis de redução de módulos.

Nas instâncias com custos de localização relativamente altos, comuns em problemas de localização, a média de execuções do FCM na BL1 tenderá a um valor próximo a JT (quantidade máxima de execuções do FCM para operações de adição de um módulo), uma vez que haverá poucas opções de redução de capacidade gerando soluções viáveis. O número de chamadas poderá ser ainda menor se houver facilidades sendo utilizadas em seu máximo nível de capacidade, evitando operações de adição de segmentos.

Supor instâncias com custos de localização altos é bastante razoável em aplicações logísticas, uma vez que construir facilidades são projetos que exigem vultuosos investi- mentos. Assim, é esperado que uma facilidade instalada agregue uma quantidade relati- vamente elevada de capacidade ao sistema, de modo que a quantidade de facilidades que serão abertas não seja tão grande quando comparada à quantidade de locais potenciais. Nas instâncias com estas características, a quantidade de segmentos de módulos será re- duzida, diminuindo consideravelmente a quantidade de execuções do FCM em relação ao descrito nas análises de pior caso.

Considerando as BL2 e BL3, uma outra implicação do cenário descrito é que como são heurísticas que majoritariamente não criam novos segmentos na solução, ao assumir que a quantidade de segmentos das boas soluções é próximo de um valor constante baixo, é prudente realizar estas BLs apenas em indivíduos que possuam aproximadamente esta quantidade constante. Como a BL1 deve ser capaz de lapidar soluções ruins em termos de quantidade de segmentos ativos, uma boa estratégia é utilizar esta BL antes das outras no VND para melhorar a configuração de entrada delas. Testes para verificação da melhor ordem de exploração das vizinhanças criadas serão mostrados mais adiante no trabalho no Capítulo 4.

Uma exceção para a análise anterior é quando os custos de expansão de facilidades são de magnitude menor que os de construção do primeiro módulo, ou seja, se o efeito

3.4. OUTRAS CONSIDERAÇÕES SOBRE O AG+VNDI 47 da economia de escala for significativo na instância. Se isto for verdadeiro, e os custos de alocação não forem tão altos, as soluções tenderão a ter uma concentração de módulos em poucos locais da rede, o que aumenta a quantidade de segmentos na solução.

Todas as análises de complexidade feitas até aqui foram relacionadas a execução das BLs separadamente. Na prática do algoritmo criado, quando uma busca local explora uma vizinhança ela deixa seu rastro na tabela hash de soluções já calculadas pelo FCM. A repetição de execuções do VND o torna mais rápido à medida em que o mapeamento das vizinhanças vai sendo feito. No algoritmo evolucionário criado, graças ao operador de cruzamento convergente, isto fica ainda mais evidente. Comumente serão escolhidas na rotina do VND soluções muito próximas às já exploradas, reduzindo a complexidade da avaliação a simples recuperações de dados na tabela hash. A implicação disto é que normalmente a primeira descida será a mais longa em termos de tempo computacional e a maior parte das demais passarão por poucas ou mesmo nenhuma execução do FCM. Os resultados dos experimentos computacionais que serão mostrados no próximo capítulo atestam estas afirmações.

48 CAPÍTULO 3. DESCRIÇÃO DO ALGORITMO

Algoritmo 6 Pseudocódigo do AG+VNDi

1: Inicializa parâmetros: P, α, β, R, %mut, GV ND, GR, tMAX;

2: Inicializa estruturas para armazenamento de informações: Ln(n = {1, 2, 3}), THASH;

3: Ler instância; 4: Inicializa população: x0p, p = {1, . . . , P}; 5: for i = 0 to P do 6: if i < P/2 then 7: Cria xi0usando HC1; 8: else 9: Cria xi0usando HC2; 10: end if 11: end for

12: Ordena indivíduos x pela função objetivo;

13: Elitismoem x00;

14: for r = 0 to R do

15: for g = 1 to GR and clock ≤ tMAX do

16: Operadores do AG; 17: Ordena x; 18: if g % GV ND= 0 ∨ x0g6= x0g−1 then 19: p= RAND{0, α + β} ∨ p = 0; 20: Elitismoem xgp; 21: end if 22: if f (x0g) < f (x0(g−1)) then 23: g= 0; 24: end if 25: end for 26: for i = 1 to P and r < R do 27: Reinício; 28: p= RAND{1, P − 1} 29: Elitismoem xgp; 30: end for 31: end for 32: return x0

Capítulo 4

Experimentos computacionais

Neste capítulo serão mostrados os experimentos realizados para demonstrar a efetivi- dade do método proposto. Para isto, foram usadas as instâncias de Jena et al. (2015a). Os experimentos foram realizados nas instâncias do problema ER-GMC do artigo ori- ginal, mas podem ser facilmente replicados ao problema CR-GMC criando as variáveis referentes ao fechamento parcial das facilidades.

As instâncias são agrupadas pelos seus tamanhos em relação às combinações faci- lidades/clientes (10/20, 10/50, 50/50, 50/100, 50/250, 100/250, 100/500 e 100/1000) e quantidade máxima de módulos por facilidade (3, 5 e 10).

Cada uma destas 24 categorias reunem 12 combinações de instâncias a partir dos parâmetros:

• Topologia da rede: três cenários onde nós são localizados em áreas quadradas de tamanhos 300 x 300, 380 x 380 e 450 x 450 km;

• Distribuição das demandas: dois cenários, um com a soma das demanda estável em cada período de tempo e outro com demandas instáveis e aleatórias;

• Proporção dos custos: dois cenários, um com os custos originais do problema do estudo de caso e outro com os custos de alocação aumentados em 500%.

No total, 288 instâncias foram testadas com grafos variando de um máximo de 30 nós e 200 arestas nas menores (10/20) até 1100 nós e 100.000 arestas nas maiores (100/1000) em cada período do horizonte de planejamento.

Devido ao tamanho das instâncias, o algoritmo de fluxo a custo mínimo escolhido para resolver o problema das alocações foi a Rede Simplex, incluso na biblioteca de otimização de redes LEMON [Dezs˝o et al. 2011, Lemon 2017]. Kovács (2015) mostrou que este método desempenha melhor que os outros métodos da própria biblioteca, e até outros solvers, em instâncias com até alguns milhares de nós.

Os experimentos foram rodados em um Intel Core i5-3337U com quatro núcleos e 1,8 GHz com 8 GB de memória RAM e cada execução usou um único processador. O AG+VNDi foi implementado em C++ e compilado pelo gcc 4.8.4. Todos os testes de ajustes do algoritmo foram executados nas instâncias menores (10/20, 10/50 e 50/50) e L= 10, exceto quando explicitado, sendo replicados 10 vezes cada. O tempo de execução foi medido usando o tempo da CPU obtido na biblioteca time da linguagem C.

50 CAPÍTULO 4. EXPERIMENTOS COMPUTACIONAIS

4.1

Ordem de exploração das vizinhanças

O primeiro conjunto de experimentos busca determinar a melhor forma de aplicar as vizinhanças criadas para o VND. Cada teste consistiu em executar as HCs e em seguida o VND com diferentes combinações das buscas locais na melhor solução criada. A Tabela 4.1 mostra os resultados das execuções de cada busca local isolada. A primeira coluna se refere a instância e as demais às BLs. O intervalo de integralidade (GAP) foi calculado como

GAP(x) = f¯(x) − f (x

)

f(x∗) . (4.1) sendo ¯f(x) a média das soluções obtidas ao final da busca local e f (x∗) a melhor solução encontrada pelo método exato no problema.

Tabela 4.1: Resultados computacionais da aplicação de vizinhanças isoladas no VND Instância BL1 BL2 BL3

GAP Tempo GAP Tempo GAP Tempo 10/20 4,34% 0,03s 1,07% 0,15s 6,93% 0,13s 10/50 2,01% 0,10s 0,65% 0,38s 4,14% 0,30s 50/50 5,19% 1,08s 1,97% 15,42s 11,40% 7,56s Média 3,85% 0,40s 1,23% 5,31s 7,49% 2,66s

Nota-se da Tabela 4.1 que a BL1 é a mais rápida e a BL2 a mais efetiva quando apli- cadas sozinhas. Já a BL3 é superada por ambas na qualidade da solução. Este resultado é explicado pelas características das buscas locais e das instâncias.

A BL1 tem menor complexidade de tempo mas não executa operações de troca de mó- dulos entre facilidades de modo que quando a solução chega próxima à quantidade ótima de módulos se torna difícil efetuar operações que resultem em melhoria. Uma adição de módulos geralmente leva a um aumento de custo de localização que não seria compensado pela redução dos custos de alocação. Já uma retirada é (quase sempre) impossível devido a pouca capacidade ociosa na solução. Isto foi evidente principalmente nas instâncias com menor custo de alocação.

O outro extremo é a BL3, onde não são feitas operações de mudanças na quantidade de módulos, apenas alterações nas localizações dos existentes. Como a HC1, mais eficaz que a HC2, gera soluções com muitos módulos abertos, a BL3 sozinha é incapaz de melhorar o resultado a partir de uma entrada ruim.

A BL2 envolve operações dos dois tipos, mudanças na quantidade e nas localizações dos módulos. Isto faz com que ela seja eficaz mesmo quando aplicada sozinha. Entre- tanto, a um custo computacional mais alto que as outras.

A Tabela 4.2 mostra os resultados das execuções das BLs em pares para determinar qual é a primeira vizinhança a ser explorada mais efetiva no VND. Cada coluna mostra a execução do VND com as duas vizinhanças na ordem apresentada.

Os resultados confirmam as justificativas dadas para os testes anteriores. A BL1 torna a solução inicial apertada de modo que a sua execução antes das outras BLs é mais eficaz

4.1. ORDEM DE EXPLORAÇÃO DAS VIZINHANÇAS 51 Tabela 4.2: Resultados computacionais da aplicação de pares de vizinhanças no VND

Instância BL1 → BL2 BL1 → BL3 BL2 → BL1 GAP Tempo GAP Tempo GAP Tempo 10/20 0,27% 0,10s 0,38% 0,10s 0,30% 0,20s 10/50 0,06% 0,21s 0,12% 0,22s 0,05% 0,42s 50/50 0,27% 6,43s 0,49% 5,34s 0,27% 18,12s Média 0,20% 2,25s 0,33% 1,89s 0,20% 6,25s Instância BL2 → BL3 BL3 → BL1 BL3 → BL2

GAP Tempo GAP Tempo GAP Tempo 10/20 0,93% 0,22s 0,64% 0,21s 1,93% 0,26s 10/50 0,53% 0,47s 0,11% 0,45s 1,59% 0,56s 50/50 1,26% 19,25s 0,60% 11,53s 1,47% 16,39s Média 0,91% 6,64s 0,45% 4,06s 1,66% 5,74s

que o inverso. A execução de BL2 → BL1 obtém um resultado semelhante, porém a um tempo computacional quase três vezes maior que a aplicação inversa. Portanto, a vizinhança da BL1 deve ser sempre explorada antes das demais para um resultado efetivo. Resta identificar se o impacto da exploração das três vizinhanças é mais eficaz que a simples aplicação de duas delas. A Tabela 4.3 mostra o resultado das aplicações do VND com as três vizinhanças, começando pela BL1.

Tabela 4.3: Resultados computacionais da aplicação das três vizinhanças no VND Instância BL1 → BL2 → BL3 BL1 → BL3 → BL2

GAP Tempo GAP Tempo 10/20 0,19% 0,11s 0,20% 0,12s 10/50 0,05% 0,26s 0,05% 0,24s 50/50 0,25% 6,88s 0,26% 6,03s Média 0,16% 2,42s 0,17% 2,13s

Comparando os resultados nas Tabelas 4.2 e 4.3 vemos uma redução do GAP das aplicações da BL1 seguida das BL2 e BL3 de 0,20% e 0,33%, respectivamente, para 0,16% e 0,17% quando aplicadas as três buscas locais. Na comparação com a execução das BLs sozinhas na Tabela 4.1 percebe-se que a exploração de múltiplas vizinhanças é bastante vantajosa para aumentar a qualidade da solução.

Com relação ao tempo de execução, pouco foi alterado mesmo acrescentando uma terceira vizinhança ao VND. A explicação para isto está no espaço de busca das duas BLs maiores que são em grande parte semelhantes, o que torna o processo de avaliação das soluções pouco custoso, uma vez que configurações de facilidades se repetirão frequente- mente e a avaliação pode ser feita recuperando os valores armazenados na tabela hash do FCM.

A BL2 se mostrou mais eficaz em todas os testes, mas como a BL3 é mais rápida, alternar momentos de prioridade de execução entre as duas parece ser uma estratégia

52 CAPÍTULO 4. EXPERIMENTOS COMPUTACIONAIS razoável para o VND no AG+VNDi. Nos testes a seguir optou-se por usar esta estratégia para determinar a ordem de exploração das vizinhanças no VND.