• Nenhum resultado encontrado

Algoritmo Proposto

5.1.2 Pseudocódigo PI-SIC

Para as abordagens de programação matemática foi utilizada a formulação Ft, visto o melhor desempenho no método exato, como observado anteriormente.

O algoritmo PI-SIC se baseia na inserção iterativa de soluções ao resolvedor PIM. Uma solução inicial é informada ao resolvedor PIM, de forma a aprimorar o algoritmo exato. Essa solução inicial é encontrada por meio da Heurística de Factibilidade Inicial, descrita no Algoritmo 3.

A fim de melhorar os limites superiores do B&C, a cada quantidade m de nós abertos pelo branching, soluções são adicionadas. Ao interromper o branching são tomadas as fixações feitas pelo B&C e com essas informações é gerado um sub-grafo. Essas informações podem ser consideradas como uma solução parcial, pois algumas variáveis já estão fixadas. Para tratar essa solução parcial na Heurística de Factibilidade, foi gerado um subgrafo.

A Heurística de Factibilidade utilizada para solução durante a execução do Al-goritmo PI-SIC, se diferencia da Heurística de Factibilidade Inicial em relação aos grafos considerados. Neste momento, os grafos contém informações das fixações feitas pelo B&C. A geração de subgrafos será detalhada mais adiante.

5.1 Algoritmo PI-SIC 44

Tabela 5.1: Comparação entre as estratégias para atributo do arco

Estratégia 1 Estratégia 2 Instância |K| Média Melhor Média Melhor

bl01 48 6 2 2 1 bl02 48 8 6 7 5 bl03 48 8 6 5 5 bl04 48 8 6 6 5 bl05 48 0 0 0 0 bl06 48 0 0 0 0 bl07 48 0 0 0 0 bl08 48 0 0 0 0 bl09 192 21 14 10 6 bl10 192 18 14 9 5 bl11 192 12 7 7 3 bl12 192 15 8 4 1 bl13 192 1 0 0 0 bl14 192 3 0 0 0 bl15 192 0 0 0 0 bl16 192 2 0 0 0 bl17 320 21 14 12 7 bl18 320 22 15 3 0 bl19 320 26 19 7 3 bl20 320 20 14 8 3 bl21 320 1 0 0 0 bl22 320 7 0 0 0 bl23 320 1 0 0 0 bl24 320 6 2 0 0 bs01 48 7 5 5 3 bs02 48 8 6 4 2 bs03 48 7 3 5 2 bs04 48 5 2 4 3 bs05 48 0 0 0 0 bs06 48 0 0 0 0 bs07 48 0 0 0 0 bs08 48 0 0 0 0 bs09 192 22 15 7 2 bs10 192 18 11 5 2 bs11 192 24 14 7 2 bs12 192 18 11 9 5 bs13 192 1 0 0 0 bs14 192 15 5 0 0 bs15 192 1 0 0 0 bs16 192 7 0 0 0 bs17 320 14 7 5 2 bs18 320 22 15 6 3 bs19 320 18 10 6 0 bs20 320 17 10 4 2 bs21 320 0 0 0 0 bs22 320 23 11 0 0 bs23 320 0 0 0 0 bs24 320 4 0 0 0

5.1 Algoritmo PI-SIC 45

Com o subgrafo gerado, a Heurística de Factibilidade completa a solução e daí, inicializa o B&C. É importante ressaltar que esse subgrafo pode ser incompleto, devido às fixações feitas e a possibilidade dos arcos atingirem a capacidade máxima, fazendo com que alguns produtos não tenham fluxo na rede.

O algoritmo PI-SIC é apresentado no Algoritmo4.

Algoritmo 4: PI-SIC

Entrada: Instância do PFMB

Saída: Vetor de solução x

início 1 iter←−0; 2 f(xinicial)←− ∞; 3

Inicialize o programa inteiroPI com os dados do problema, utilizando a 4

formulaçãoFt;

enquanto iter < iterMaxInicial faça 5

xinicial = solução encontrada pela Heurística de Factibilidade; 6

se f(xinicial)< f(xinicial) então 7 xinicial ←−xinicial; 8 fim 9 fim 10

P ← {k : k é produto que satisfaz o seu par origem-destino em xinicial }; 11

para cada k ∈P faça 12 tk i ←−0, i∈ N; 13 fim 14

Informe xinicial ao B&C; 15

para cada m nós do B&C faça 16

Crie um subgrafo G0 considerando as fixações feitas pelo B&C; 17

Construa uma rota para os produtos de acordo com o subgrafo G0

18 gerado; iter ←−0; 19 f(xh)←− ∞; 20

enquanto iter < iterMax faça 21

xh = solução encontrada pela Heurística de Factibilidade em G0 ; 22 se f(xh)< f(xh) então 23 xh ←−xh; 24 fim 25 fim 26

Informe xh aoB&C com ; 27 fim 28 Retornex. 29 fim 30

O algoritmo inicializa o programa inteiro PI utilizando a formulação Ft com os dados do problema. A estratégia adotada no algoritmo PI-SIC, primeiramente, foi informar uma solução inicial ao resolvedor. Soluções são geradas por meio da Heurística de Factibilidade Inicial, que é executada repetidas vezes, escolhendo-se a melhor solução (xinicial).

5.1 Algoritmo PI-SIC 46

A solução xinicial pode ser uma solução infactível para a formulação original F, ou seja, alguns produtos não possuem fluxo na rede, não satisfazendo o par origem-destino. Os produtos que possuem o fluxo completo na rede, aqueles que satisfazem o par origem-destino, são inseridos no conjunto P. A partir daí, para todos os produtos k pertencentes ao conjunto P, a variável tk

i será fixada em zero, em que i∈ N. A solução inicial é adicionada ao modelo e o Branch-and-Cut é iniciado.

A heurística proposta neste algoritmo é aplicada a cada m nós da árvore do

Branch-and-Cut. Assim, no m-ésimo nó do B&C cria-se um subgrafo. A criação desse subgrafo é feita de acordo com as fixações do B&Ce ocorre do seguinte modo: caso o arco (i, j) esteja fixado pelo B&C, todos os outros arcos que partem do nó i serão retirados no subgrafo gerado, exceto o arco (i, j). Com esse subgrafo e com as atualizações nos arcos em relação à capacidade disponível, soluções são encon-tradas por meio da Heurística de Factibilidade. As figuras a seguir exemplificam o procedimento para criação do subgrafo.

Na Figura 5.1 tem-se a configuração de uma rede de fluxo. Para o fluxo do produtoPAapenas uma fixação foi feita e está representada na Figura5.2 pelo arco tracejado. A partir daí, são excluídos os arcos de acordo com o nó de fronteira, como descrito anteriormente, Figura 5.3. Finalmente, na Figura 5.4 é escolhida uma rota para o produto PA. Para o fluxo do produtoPB são atualizadas as capacidades dos arcos e o procedimento é repetido, ou seja, são consideradas as fixações feitas para este produto e finalmente encontra-se o fluxo do produto PB.

Figura 5.1: Rede inicial completa.

Esse procedimento é similar ao métodoDiving, que a partir de informações atu-ais das fixações do B&C, chega a uma solução completa, que neste caso foi feita heuristicamente. São geradas várias soluções e é considerada a de menor custo, de-notada por xh. Inicia-se novamente oB&Ccom a solução geradaxh. Essas soluções são adicionadas iterativamente, até que seja atingido o critério de parada, utilizado pelo próprio resolvedor PIM.

5.1 Algoritmo PI-SIC 47

Figura 5.2: Fixações feitas no B&C para o produto PA.

Figura 5.3: Construção do subgrafo.

Os produtos a serem roteados foram priorizados em relação aos que possuíam pelo menos uma variável fixada pelo B&C. Assim, foram criados dois grupos de produtos. Grupo 1: produtos que possuem alguma fixação e Grupo 2: produtos que não possuem qualquer fixação. Primeiro foram encontrados os fluxos para cada produto do Grupo 1, de forma sequencial.

5.2 Algoritmo PI-SIC 48

Figura 5.4: Fluxo para o produtoPA.

A ordem de escolha dos produtos foi aleatória. Definidos todos os fluxos dos produtos do Grupo 1, passa-se às definições dos fluxos dos produtos do Grupo 2, também de forma sequencial e aleatória.

O Algoritmo PI-SIC foi proposto de forma a encontrar comprovadamente as solu-ções ótimas para todas as instâncias, adotando como critério de parada os utilizados pelo resolvedor PIM.

Os parâmetros foram testados a fim de encontrar os de melhor adequação ao algoritmo. No Algoritmo PI-SIC foram utilizados três parâmetros: número de nós da árvore de B&C (m), a quantidade de soluções iniciais geradas (iterMaxInicial) e a quantidade de soluções iterativas (iterMax).

O parâmetro m representa a frequência, em números de nós gerados peloB&C, de execução da heurística de factibilidade para solução de caminho. Por meio de ex-perimentos pode-se verificar que para valores pequenos dem, a heurística é aplicada mais vezes na árvore, podendo gerar uma busca exaustiva a cada nó da árvore. Por outro lado, com valores grandes dem, essa heurística faz menos efeito na resolução, interferindo muito pouco na árvore de busca.

A quantidade de soluções iniciais se deu de forma a ter uma grande variabilidade de soluções. Contudo, para as soluções inseridas no decorrer da geração da árvore de busca, foram tomadas poucas soluções uma vez que o subgrafo é menor e assim menos possibilidades de soluções completas.

Os parâmetros que melhor se adequaram ao algoritmo são mostrados na Tabela

5.2.

5.2 Algoritmo DPPFM 49

Tabela 5.2: Tabela de parâmetros para o Algoritmo PI-SIC

m iterMaxInicial iterMax

100 100 10

5.2 Algoritmo DPPFM

Esse algoritmo baseia-se na resolução de subproblemas por meio da decomposi-ção por produtos. Como visto no Capítulo 4, com a realização de testes foi possível verificar qual das dualizações propostas propiciou um esforço computacional menor, que auxilia na eficiência do algoritmo. Além dessa análise foi priorizada, também, a que melhor adequasse à heurística proposta, sendo a formulação Fta única possibi-lidade dentre as formulações propostas. Para o algoritmo DPPFM fez-se necessária a utilização da formulação Ft. Dessa forma, todas as abordagens heurísticas feitas no trabalho foram baseadas no produto e não no arco.

Para resolver o PFMB foi utilizada a dualização do problema na restrição de conservação de fluxo, ou seja, a formulação Ft. Posteriormente, foi estudada uma decomposição heurística por produto, obtendo-se subconjuntos de produtos a serem resolvidos sequencialmente, a fim de diminuir o tamanho do problema.

Como visto anteriormente, a Formulação Nó-Arco F foi alterada acrescentando uma variável de folga tk

i na restrição de conservação de fluxo. Neste algoritmo essa variável será de grande importância, pois através dela será possível controlar os produtos que serão roteados. Com a adição dessa variável foi possível fazer uma heurística baseada na decomposição do problema em outros subproblemas menores. Essa decomposição se deu por meio da escolha de apenas alguns produtos na rede, os quais terão seu fluxo encontrado. Apresentada como uma decomposição por produtos, a proposta é tomar conjuntos menores de produtos e resolvê-los de forma sequencial.

O tamanho do conjunto de produtos para os subproblemas está associado ao número de variáveis que apresentaram boa solução em instâncias menores testadas. SejaP o conjunto de produtos selecionados para serem alocados epopto tamanho desse conjunto. O termo alocação de um produto, no presente trabalho, significa determinar o seu fluxo na rede. O parâmetro popt representa o número máximo de produtos a serem alocados na rede, dado por:

popt = maxvar |A| , (5.1)

em que |A| é a quantidade de arcos existentes na rede e maxvar é o número de variáveis que apresentaram boa solução em problemas menores.

Um modo de alocar os produtos é fixando as variáveis relacionadas a eles. Entende-se por fixar uma variável da seguinte forma: caso a variável relacionada ao produto k seja fixada em 1, significa que este produto já foi alocado e, além disso, possui uma rota; caso a variável seja fixada em 0, significa que o produto k será alocado na rede sem fluxo, ou seja, não será roteado e caso libere a variável o produto estará livre na rede, isto é, está disponível para ser alocado.

5.2 Algoritmo DPPFM 50

5.2.1 Pseudocódigo DPPFM

Devido ao tamanho do problema e à sua complexidade, propõe-se dividir a ins-tância em pequenos subproblemas e resolvê-los sequencialmente, integrando-se as soluções obtidas a fim de conseguir uma solução completa. Fixar a solução para um subproblema e resolver os demais sequencialmente tem uma desvantagem pois pode-se limitar a solução final em níveis subótimos. Para contornar tal dificuldade, uma estratégia na escolha dos produtos para o subproblema foi levada em conta.

A escolha dos produtos para os subproblemas foi realizada de acordo com a demanda do produto. Devido ao limite da capacidade dos arcos, os produtos com maior demanda podem se tornar mais competitivos na rede. Assim, os subconjuntos de produtos para os subproblemas se deram por ordem de maior demanda por produto.

A heurística de programação matemática baseada em decomposição por produ-tos é apresentada no Algoritmo 5.

Algoritmo 5: DPPFM

Entrada: Instância do PFMB

Saída: Vetor de solução x

início 1

Inicialize o programa inteiroPI com os dados do problema, utilizando a 2 formulaçãoFt; R← ∅; 3 enquanto|R| ≤ |K|faça 4

P recebe os popt elementos k ∈ K\R ; 5 xkij ←0, ∀k /∈P e k /∈R; 6 Resolva PI; 7 Fixe xkij em 1, ∀k ∈P, (i, j)∈ A: xkij = 1; 8 R =R∪P; 9 fim 10

Q={k : k é o produto que satisfaz o seu par origem-destino; } 11

para cadak ∈ Kfaça 12 se k ∈Q então 13 tk i ←0, i∈ N; 14 senão 15 Libere as variáveis tk i; 16 fim 17 fim 18

Libere as variáveis xkij tal que k ∈ K, (i, j)∈ A; 19 Resolva PI; 20 Retornex; 21 fim 22

Inicializa-se o programa inteiro PI utilizando a formulação Ft com os dados do problema. Cria-se um conjunto R, cujos elementos são todos os produtos que já foram alocados na rede. Inicialmente, R está vazio. Os elementos do conjunto P são os produtos escolhidos para alocação em uma dada iteração do procedimento.

5.2 Algoritmo DPPFM 51

A solução será usada como solução incumbente e oferecerá um limite superior válido para a busca que se inicia. Assim, o problema será resolvido considerando apenas os produtos do conjunto P na rede.

As variáveis referentes aos produtos que foram alocados serão fixadas em 1. Re-alizadas as alocações dos produtos do conjunto P, estes são inseridos no conjunto R. Se o conjunto R não contiver todos os elementos da rede, então escolhe-se nova-mente um outro conjuntoP de produtos a serem roteados e segue-se novamente todo o procedimento. Esse processo ocorrerá até que todos os produtos sejam alocados.

É de se esperar que alguns produtos alocados na rede não possuam rota, ou seja, não terão fluxo na rede. Isso se deve ao fato de que, à medida em que produtos são roteados os arcos vão atingindo o limite da sua capacidade. Desta forma, pode haver casos em que a variável de folga tk

i seja ativada, representando que o produto não foi roteado, ou seja, alocado sem fluxo na rede.

O conjuntoQreúne todos os produtos roteados. A partir daí, todos os produtos pertencentes ao conjunto Q, ou seja, aqueles que possuem rota na rede, terão sua variável de folgatki fixada em zero. Isto implica que esses produtos terão prioridade na rota fazendo com que certamente sejam roteados. As variáveis restantes do problema serão liberadas. Posteriormente, segue a resolução do problema e, ao final da execução do procedimento, retorna-se a melhor solução inteira encontrada para o problema.

O algoritmo permite que as variáveis sejam fixadas, iterativamente, a cada resolu-ção dos subproblemas. Essa fixaresolu-ção oferecerá uma soluresolu-ção inicial para o subproblema seguinte.

Finalmente, com a resolução de todos os subproblemas, algumas variáveis de folga serão fixadas e o restante das variáveis ficarão livres. Isto disponibilizará ao algoritmo todo o espaço de busca, caracterizando-o em um método exato.

No Capítulo 6 são apresentados os resultados computacionais do Algoritmo DPPFM.

Capítulo 6

Documentos relacionados