• Nenhum resultado encontrado

ras de calcular o limitante dual é resolver a relaxação do programa linear relativo ao problema no nó da árvore em questão, utilizando variáveis contínuas, processo que é detalhado na próxima seção.

Podemos perceber que a informação necessária (limitantes e restrições que particio- nam o espaço de soluções) para o funcionamento de um algoritmo de branch-and-bound está nas folhas da árvore. Por isso, a implementação destes algoritmos, na maioria das vezes, só considera as folhas construindo a árvore implicitamente.

3.5.2

O algoritmo de Branch-and-Bound e a Programação Linear

Uma boa forma de calcular o limitante dual de um problema é resolver a relaxação da formulação linear inteira deste, onde as restrições de integralidade das variáveis não são respeitadas. Desta maneira, a solução da relaxação, na maioria das vezes fracioná- ria, pode ser usada como uma valiosa informação na hora da poda da árvore. A grande vantagem da utilização da programação linear é que ela pode ser resolvida em tempo polinomial no tamanho do programa linear. Em cada nó, o problema é reotimizado levando em conta suas modificações. Em geral, estas modificações são acréscimos de restrições ou variáveis ao problema. O primeiro trabalho que apresenta um algoritmo de branch-and-bound utilizando programação linear inteira é de Land e Doig [38], e os primeiros resultados de sucesso foram conseguidos por Little et al. [39] para o Pro- blema do Caixeiro Viajante.

O algoritmo de branch-and-bound com programação linear utiliza a relaxação da for- mulação do problema em questão para calcular os limitantes duais. Em geral, quando o valor resultante das variáveis é fracionário, a ramificação é feita tomando uma vari- ável, digamos y, com valor fracionário y = v, e considerando duas opções, uma com a limitação y ≤ bvc e outra com a limitação y ≥ dve. Note que, ajustar os limites das variáveis corresponde exatamente em construir uma solução parcial: cada ajuste de integralidade força a escolha de valores para uma solução válida. Para mais detalhes, veja Papadimitriou e Steiglitz [49], e Nemhauser e Wolsey [47].

3.6

O Método Branch-and-Price

O algoritmo de branch-and-bound com relaxações de programação linear que permite a geração de colunas e sua inserção na formulação é conhecido como Branch-and-Price.

A Figura 3.3 mostra um esquema para um algoritmo de branch-and-price para pro- blemas de minimização. Como não temos todas as colunas disponíveis, devemos ini- ciar o sistema com uma solução válida, que nos fornecerá um conjunto restrito de

3.6. O Método Branch-and-Price 32

Existe nó em aberto?

A soluçao e fracionaria? Crie uma soluçao valida

e a atribua a um no

Calcule a relaxaçao (limitante inferior) utilizando geraçao de colunas

Insira restriçoes que descartem a soluçao fracionaria criando

subproblemas mais restritos (ramificaçao) Devolva a melhor solução encontrada e pode i por otimalidade Pode i por

Calcule o limitante superior LS

derivados do problema do nó i Crie uma solução inicial válida ou

uma base válida para o problema

LS ← LIi

reduzido negativo Gere variáveis com custo

LIi< LS?

Escolha um nó i

3.6. O Método Branch-and-Price 33

variáveis, ou uma base válida. Como no algoritmo de branch-and-bound padrão, os limitantes são calculados e testados.

O teste sobre a solução atual deve ser baseada na otimalidade da relaxação. Como não temos todas as variáveis disponíveis, o valor da relaxação pode não ser o ótimo. Assim, temos que gerar as colunas que melhorem a qualidade da solução, de modo que leve a relaxação à otimalidade. O retângulo tracejado da Figura 3.3 destaca a fase de geração de colunas, que é descrita em detalhes na Seção 3.4. O restante do algoritmo procede da mesma maneira que um algoritmo de branch-and-bound padrão.

Os algoritmos de branch-and-price têm sido muito utilizados em diversos problemas. Vance aplicou esta técnica para o problema de empacotamento unidimensional [57] e para o problema de corte unidimensional [58], Desrosiers et al. [17] para problemas de roteamento, Vance et al. [59] para problemas de escalonamento de tripulação, Savels- bergh [53] para o problema de atribuição generalizada, Jeong et al. [35] para o problema da árvore de Steiner, entre outros. Barnhart et al. [1] a presentam uma discussão sobre reformulação com grande números de variáveis e algoritmos de branch-and-price.

3.6.1

Considerações sobre algoritmos de Branch-and-Price

Ramificação

Embora seja promissor, o método branch-and-price esbarra em uma dificuldade crucial: o problema é modificado quando as restrições da ramificação são adicionadas no pro- blema principal, o que desfigura os subproblemas (de geração de colunas), ou seja, seu tipo pode ser diferente do tipo da última iteração, implicando na destruição da estrutura que é explorada ou necessária para resolução eficiente destes subproblemas. Isto significa que o algoritmo utilizado para geração das colunas tende a ser mais com- plexo, tratando de vários casos, o que potencialmente aumenta o custo computacional. Portanto, é necessário que as regras de ramificação sejam elaboradas cuidadosamente para uma resolução eficiente dos subproblemas em cada nó da árvore de busca. Van- derbeck [61] e Vanderbeck e Wolsey [62] discutem algumas maneiras de ramificação para minimizar o impacto sobre a geração de colunas.

Geração de Colunas

O processo de gerar uma coluna pode ser trabalhoso. Em geral, utiliza-se um método rápido como um algoritmo aproximado ou uma heurística para que seja gerado uma coluna viável. A manipulação dessas colunas também pode ser trabalhosa, já que o processo de geração pode devolver uma coluna que já foi eliminada nas ramificações anteriores. Portanto, é necessário que haja um gerenciamento de colunas eficiente.

3.6. O Método Branch-and-Price 34

Outra dificuldade muito conhecida é o efeito de tailing-off, onde um grande número de iterações é necessário para provar a otimalidade. Potencialmente, isto pode ocorrer em cada nó da árvore onde o subproblema a ser resolvido é tipicamente um problema inteiro difícil (veja Vanderbeck e Wolsey [62]).

Capítulo 4

Algoritmos Aproximados e Heurísticas

para o PEBF2

Documentos relacionados