Você está na página 1de 90

CENTRO FEDERAL DE EDUCACAO

TECNOLOGICA DE MINAS GERAIS


Diretoria de Pesquisa e Pos-Graduacao

Curso de Mestrado em Modelagem


Matematica e Computacional

Uma Aplicacao de Metodos


Aproximados a Problemas de
Fluxo Multiproduto Inteiro

Dissertacao de Mestrado, submetida ao Curso de


Mestrado em Modelagem Matematica e Computacional,
como parte dos requisitos exigidos para a obtencao do
ttulo de Mestre em Modelagem Matematica e Com-
putacional.

Aluno: Rosklin Juliano Chagas


Bacharel em Ciencia da Computacao

Orientador: Prof. Dr. Sergio Ricardo de Souza

Belo Horizonte, 31 de outubro de 2005.


Aos meus pais.

i
Agradecimentos

Agradeco a Deus por ter me dado saude e forca para que eu pudesse chegar ao
fim desta etapa.

Aos meus pais, Francisco e Fatima, pelo apoio, confianca, incentivo e pelas
oracoes que por mim fizeram.

A minha prima Lylian e ao meu irmao Adriano pelo apoio que me deram ao
longo do curso aqui em Belo Horizonte.

A Liliam, pela confianca e incentivo que sempre me passou.

Ao meu orientador Prof. Sergio Ricardo de Souza, por ter me ajudado a realizar
este trabalho.

Aos professores e funcionarios do CEFET pelo apoio que recebi durante o curso.

A Superintendencia Comercial e a Universidade Corporativa da PRODEMGE,


pela colaboracao e apoio na realizacao desse trabalho.

E finalmente agradeco a meus familiares e amigos que torceram e colaboraram


para o exito do meu trabalho.

ii
Resumo

Neste trabalho, e proposta uma aplicacao da tecnica de relaxacao lagrangeana e


do algoritmo de Benders para resolver o problema multiproduto inteiro. Este proble-
ma surge quando varios produtos, identificados pelo par origem-destino, devem ser
distribudos em uma rede a um custo mnimo, sem exceder a capacidade dos arcos.
Alem disso, o fluxo de cada produto deve fazer uso de uma unica rota. Ao aplicar re-
laxacao lagrangeana ao problema original, e criada uma funcao lagrangeana concava
e linear por partes. O algoritmo de Benders e utilizado para resolver o problema
dual lagrangeano, que tem, como objetivo, fornecer o maior valor para a funcao
lagrangeana. Sua solucao produz um limite inferior para o problema original. A
grande vantagem apresentada pelo algoritmo de Benders e que ele permite fazer
uso da estrutura especial apresentada pelo conjunto de restricoes contidas na for-
mulacao do problema. A solucao factvel inicial no problema original, utilizada para
inicializar o algoritmo de Benders, e obtida utilizando-se a metaheurstica busca
tabu. O problema mestre e resolvido utilizando o metodo simplex classico e o sub-
problema e decomposto em um conjunto de problemas de caminho minimo, que
sao resolvidos pelo algoritmo de Dijkstra. Alem disso, o trabalho apresenta uma
comparacao entre as formulacoes no-arco e arco-rota, mostrando que a eficiencia do
algoritmo de Benders nao se altera ao ser aplicado a estas duas formulacoes. Por
fim, sao apresentados alguns resultados computacionais para algumas instancias do
problema.

Palavras-Chave: Problema Multiproduto Inteiro. Relaxacao Lagrangena. Ben-


ders.

iii
Abstract

In this work, an application of the technique of lagrangian relaxation and the


algorithm of Benders is proposal for solving the integer multicommodity problem.
This problem appears when some products, identified for the pair origin-destine,
must be distributed in a net to a minimum cost, without exceeding the capacity
of the arcs. Moreover, the flow of each product must make use of an only route.
When applying lagrangian relaxation to the original problem, is created a piecewise
concave and linear lagrangian function. The algorithm of Benders is used to solve
the lagrangian dual problem, that has, as objective, to supply the biggest value of
the lagrangian function. Its solution produces a low bound for the original problem.
The great advantage presented for the algorithm of Benders is that it allows to make
use of the special structure presented by the set of restrictions contained in the
structure of the problem. The initial feasible solution in the original problem, used
to initiate the algorithm of it Benders, is gotten using tabu search metaheuristic.
The master problem is solved using the classic simplex method and subproblem is
decomposed in a set of shorstest path problems, which is resolved by the algorithm
of Dijkstra. Moreover, the work presents a comparison between the knot-arc and
arc-route formulations, showing that the sucess of the algorithm of Benders does
not changed when it is applied to one of these two formulations. Finally, some
computational results for some instances of the problem are presented.

Key-words: Integer Multicommodity Problem. Lagrangian Relaxation. Benders


Decomposition.

iv
Sumario

1 Introducao 1

2 Problemas Multiproduto 5
2.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Definicao do Problema . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Formulacoes No-Arco . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Formulacao Arco-Rota . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Variacoes em Problemas Multiproduto . . . . . . . . . . . . . . . . . 11
2.5.1 Modelo Nao Linear . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5.2 Redes nao direcionadas . . . . . . . . . . . . . . . . . . . . . . 12
2.5.3 Problema de Projeto de Rede . . . . . . . . . . . . . . . . . . 14
2.6 Problemas Multiproduto Inteiro . . . . . . . . . . . . . . . . . . . . . 15
2.6.1 Aplicacoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3 Metodos de Decomposicao 20
3.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Decomposicao de Dantzig-Wolfe . . . . . . . . . . . . . . . . . . . . . 20
3.2.1 Algoritmo de Decomposicao de Dantzig-Wolfe . . . . . . . . . 22
3.2.2 Calculo do Limite Inferior . . . . . . . . . . . . . . . . . . . . 25
3.2.3 Resumo do Metodo de Decomposicao de Dantzig-Wolfe . . . . 26
3.3 Relaxacao Lagrangeana . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.1 Definicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.2 Relaxacao Lagrangeana e Relaxacao Linear . . . . . . . . . . . 30
3.4 Decomposicao de Benders . . . . . . . . . . . . . . . . . . . . . . . . 32
3.5 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4 Aplicacao de Relaxacao Lagrangeana ao Problema Multiproduto 36


4.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Relaxacao Lagrangeana aplicada ao Problema Multiproduto . . . . . 36
4.3 Aplicacao de Decomposicao de Benders . . . . . . . . . . . . . . . . . 37

v
Sumario vi

4.3.1 Problema Mestre de Benders . . . . . . . . . . . . . . . . . . . 39


4.3.2 Subproblema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3.3 Solucao Factvel Inicial . . . . . . . . . . . . . . . . . . . . . . 43
4.4 Resultados Computacionais . . . . . . . . . . . . . . . . . . . . . . . 47
4.5 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5 Conclusoes e Trabalhos Futuros 53


5.1 Conclusoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

A Implementacoes MatLab 56
A.1 Script Principal - resolve.m . . . . . . . . . . . . . . . . . . . . . . . . 56
A.2 Leitura dos Dados - carbin.m . . . . . . . . . . . . . . . . . . . . . . 58
A.3 Criacao do Modelo de Programacao Linear - gera formulacao.m . . . 60
A.4 Heuristica - heuristica.m . . . . . . . . . . . . . . . . . . . . . . . . . 62
A.4.1 caminhos minimos.m . . . . . . . . . . . . . . . . . . . . . . . 63
A.4.2 Metaheuristica Busca Tabu - busca tabu.m . . . . . . . . . . . 63
A.4.3 Geracao dos vizinhos - vizinhos tabu.m . . . . . . . . . . . . . 68
A.4.4 Geracao dos vizinhos - vizinhos tabu2.m . . . . . . . . . . . . 70
A.5 Algoritmo de Decomposicao de Benders - benders.m . . . . . . . . . . 72
A.5.1 Problema Mestre - simplex.m . . . . . . . . . . . . . . . . . . 75
A.6 Algoritmo de Dijkstra - dijkstra.m . . . . . . . . . . . . . . . . . . . . 77

Referencias Bibliograficas 80
Captulo 1

Introducao

Preliminares
O interesse em pesquisa em torno do problema de fluxo de rede multiproduto data
do incio dos anos 60. Os trabalhos iniciais foram de Fulkerson(1962) [15] e Hu(1963)
[19]. Os problemas multiproduto surgem quando varios produtos compartilham
os arcos em uma rede e competem pela capacidade destes arcos. O objetivo e
determinar o fluxo dos produtos em cada arco, a um custo mnimo, de modo a
atender as restricoes de conservacao de fluxo.
Em geral, o modelo de programacao matematica deste problema apresenta
muitas variaveis e muitas restricoes. Contudo, seu conjunto de restricoes apresenta
uma estrutura especial, que torna bastante adequado o uso de metodos de decom-
posicao. A maioria dos trabalhos realizados aplica, de uma forma ou de outra,
tecnicas de decomposicao que procuram tirar proveito desta estrutura especial do
conjunto de restricoes.
Ja os problemas multiproduto inteiro foram resolvidos utilizando dentre outros,
o metodo branch-and-price-and-cut [5] e o metodo branch-and-price [12]. Ambos
sao uma variacao do algoritmo branch-and-bound, combinado com o metodo de
decomposicao de Dantzig-Wolfe.
Os problemas multiproduto, de um modo geral, tem recebido muita atencao,
devido ao crescimento de aplicacoes em areas de transportes e telecomunicacoes. A
dificuldade pratica de se resolver modelos de fluxo de rede multiproduto aumenta
de forma muito rapida a medida que o problema cresce em numero de variaveis e,
principalmente, em relacao ao numero de produtos. Aplicacoes em telecomunicacoes
tipicamente conduzem a instancias com um alto numero de produtos. Resolver tais
instancias torna-se, portanto, um grande desafio [22].

1
1 Motivacao 2

Motivacao
O problema multiproduto inteiro e um problema NP-difcil, ou seja, nao ha
algoritmo polinomial que o resolva. Problemas de otimizacao desta classe tem sido
foco de recentes estudos. Como exemplo, pode-se citar a grande aceitacao das
heursticas computacionais na busca de solucoes sub-otimas para problemas em que
os metodos exatos tem dificuldades na determinacao de solucoes otimas, em especial
para problemas combinatoriais.
Do ponto de vista teorico, a estrutura da formulacao deste problema motiva
o estudo dos metodos de decomposicao, devido a facilidade de aplicacao destes
metodos em problemas que possuem estruturas especiais de restricoes.
De um ponto vista pratico, a grande gama de aplicacoes dessa classe de problemas
torna a procura de melhores solucoes uma questao de forte impacto economico,
visando ao melhor uso das redes de comunicacoes existentes ou dos sistemas de
transporte, em particular.

Caracterizacao do Problema

O problema de fluxo de custo mnimo multiproduto inteiro origem-destino es-


pecfico, ou apenas, problema multiproduto inteiro, e uma versao mais restrita do
problema multiproduto linear, no qual o fluxo de cada produto, identificado pelo
par origem-destino, deve fazer uso de apenas uma rota.
Este problema pode ser modelado como um problema de programacao linear
inteira 0/1, considerando a matriz de incidencia no-arco da rede ou a matriz arco-
rota.

Objetivos

O objetivo geral deste trabalho e realizar um estudo sobre metodos de otimizacao


combinatoria, que sejam eficientes para resolver problemas multiproduto inteiro. Em
particular, serao tratados os metodos de decomposicao.
Uma meta importante neste trabalho e realizar uma comparacao entre as for-
mulacoes no-arco e arco-rota para o problema multiproduto inteiro, procurando
verificar qual delas apresenta melhor desempenho, ao se aplicar o algoritmo de
decomposicao de Benders ao problema dual lagrangeano. Em [20], os autores a-
presentam uma comparacao entre diferentes formulacoes no-arco para o problema
multiproduto linear, mostrando o quanto a formulacao influencia no desempenho do
metodo de decomposicao de Dantzig-Wolfe.
1 Proposta de Desenvolvimento 3

Espera-se determinar, em tempo aceitavel, uma solucao subotima para o pro-


blema multiproduto inteiro. A garantia de que seja encontrada a solucao otima do
problema original e uma dificuldade que esta alem do escopo deste trabalho.
Como objetivo especfico, procura-se obter uma solucao subotima para o pro-
blema multiproduto inteiro, a partir do uso da tecnica de relaxacao lagrangeana
e do algoritmo de decomposicao de Benders, que e aplicado ao problema dual la-
grangeano. Para tal, sao estudados metodos eficientes para resolver o problema
mestre e o subproblema gerados pela decomposicao de Benders.
Alem disso, deve-se encontrar heursticas que fornecam uma solucao factvel ini-
cial, necessaria para inicializar o algoritmo de Benders. Assim, espera-se obter uma
solucao dentro de um limite de tolerancia aceitavel para o problema multiproduto
inteiro.

Proposta de Desenvolvimento

Procurando atender aos objetivos apresentados, foi realizado um estudo sobre a


tecnica de relaxacao lagrangeana e sobre o algoritmo de decomposicao de Benders,
alem de outros metodos de decomposicao.
As formulacoes no-arco e arco-rota sao analisadas, apresentando suas diferencas
e similaridades ao aplicar relaxacao lagrangeana. E mostrado, tambem, como a
relaxacao lagrangeana e o algoritmo de Benders podem ser aplicados a estas for-
mulacoes. Ao aplicar o algoritmo de Benders ao problema dual lagrangeano, sao
gerados dois outros problemas: um problema mestre e um subproblema.
O problema mestre e resolvido pelo metodo simplex classico e o subproblema
e decomposto em problemas de caminho mnimo. Estes problemas, por sua vez,
podem ser resolvidos utilizando o algoritmo de Dijkstra, pois todos os custos das
instancias utilizadas sao nao-negativos.
Para encontrar a solucao factvel inicial do problema original, e utilizada a meta-
heurstica busca tabu.
Em seguida, estes algoritmos sao aplicados as instancias utilizadas em [12], com
o objetivo de comparar os resultados aqui obtidos com os obtidos pela utilizacao do
algoritmo branch-and-price.

Organizacao do Trabalho

Este trabalho esta organizado como segue. No captulo 2, e apresentada uma


revisao da literatura sobre problemas multiproduto, mostrando suas diferentes par-
ticularidades e os principais metodos utilizados. No captulo 3, sao apresentados os
metodos de decomposicao de Dantzig-Wolfe, relaxacao lagrangeana e o algoritmo
1 Organizacao do Trabalho 4

de Benders. O metodo de decomposicao de Dantzig-Wolfe e aplicado ao problema


multiproduto linear. E apresentada, tambem, uma visao teorica sobre relaxacao
lagrangeana e o algoritmo de Benders. Em seu final, uma conclusao apresenta uma
comparacao dos tres metodos.
No captulo 4, e apresentada uma aplicacao da relaxacao lagrangeana as for-
mulacoes no-arco e arco-rota do problema multiproduto inteiro. O algoritmo de de-
composicao de Benders e utilizado para resolver o problema dual lagrangeano, que
fornece um limite inferior para o problema original. Detalhes do problema mestre,
do subproblema e da metaheurstica busca tabu que foi utilizada para encontrar
a solucao factvel inicial tambem sao apresentados. Em seguida, sao apresenta-
dos resultados computacionais da aplicacao dos algoritmos desenvolvidos a algumas
instancias do problema multiproduto inteiro.
E finalmente, no captulo 5, o trabalho e concludo e alguns topicos para trabalhos
futuros sao apresentados.
Captulo 2

Problemas Multiproduto

2.1 Introducao

Desde os anos 60, varios artigos surgiram tratando diversos modelos de problemas
de fluxo multiproduto. Os trabalhos iniciais, segundo [27], foram os apresentados
por Fulkerson(1962) e Hu(1963). Estes problemas, de um modo geral, possuem um
grande numero de variaveis e de restricoes e, principalmente, uma larga variedade
de aplicacoes. Em especial, essa classe de problemas tem se voltado para o estudo
de modelos de otimizacao de projetos de rede, postos como problemas de fluxo de
rede multiproduto [27].
Um fato que tem contribudo para o aumento de interesse no estudo deste pro-
blema e que, apesar de o problema multiproduto ser modelado como um problema
de programacao matematica generico, de um modo geral, as instancias que surgem
sao muito grandes. Problemas com um pequeno numero de arcos, nos e produtos
geram modelos com um grande numero de variaveis e restricoes, o que torna inviavel
a utilizacao de metodos de programacao matematica genericos [10].
Este captulo esta organizado como segue. Na proxima secao, e apresentada
uma definicao do problema multiproduto. Em seguida, uma visao das formulacoes
no-arco e arco-rota, e os principais metodos utilizados. Depois disso, sao apresen-
tadas algumas variacoes do problema e, no final, uma visao geral de problemas
multiproduto inteiro, ao qual o estudo deste trabalho se dedica.

2.2 Definicao do Problema


Problemas multiproduto surgem quando varios produtos compartilham os arcos
em uma rede e competem pela capacidade destes arcos [20]. O modelo do proble-
ma de fluxo custo mnimo multiproduto para um grafo dirigido G(N , A), ou rede

5
2.2 Problema Multiproduto 6

direcionada, com P produtos, |N | nos e |A| arcos, esta apresentado em (2.1).

P
X
min c p xp (2.1a)
p=1

P
X
suj. a xp u (2.1b)
p=1

Axp = bp , 1 p P, (2.1c)

xp 0, 1 p P, (2.1d)

sendo:

cp - vetor de custo unitario do produto p em cada arco;

xp - vetor de variaveis de decisao, representando o fluxo do produto p nos arcos


da rede;

u - vetor de capacidade dos arcos;

A - matriz de incidencia no-arco da rede;

bp - vetor que indica as ofertas e as demandas do produto p em cada no da


rede.

As restricoes (2.1b) sao denominadas restricoes de aglutinacao. Seu objetivo e


garantir que o fluxo de todos os produtos em cada arco nao ultrapasse a respectiva
capacidade do arco. Ja as restricoes (2.1c) sao chamadas de restricoes de conservacao
de fluxo ou equacoes de Kirchhoff. Elas garantem que a quantidade do produto p
que sai do no i subtrada da quantidade que chega em i seja igual a bpi . Desse modo,
se i for um no de oferta do produto p, entao bpi sera maior que zero; se for um no de
demanda, bpi e menor que zero; e, em outros casos, trata-se de um no de transbordo
[6].
Caso se considere o problema sem as restricoes (2.1b), tem-se, para cada produto,
um problema de fluxo de custo mnimo, como apresentado em (2.2). Um algoritmo
bastante eficiente para este problema e o algoritmo simplex de rede, que possui a
mesma logica do algoritmo simplex classico, mas, em lugar de realizar o calculo da
inversa da base nas operacoes de pivoteamento, faz as operacoes diretamente sobre
a estrutura da rede. Este algoritmo e entre 200 a 300 vezes mais veloz que o metodo
simplex classico, no caso de problemas de fluxos de custo mnimo em rede [6].
2.2 Problema Multiproduto 7

O modelo da formulacao do problema de fluxo de custo mnimo e dado, entao,


por:

X
min cij xij (2.2a)
(i,j)A
X X
suj. a xij xji = bi , iN (2.2b)
(i,j)A (j,i)A

xij 0, (i, j) A (2.2c)

no qual

cij - custo do produto no arco (i, j);

xij - fluxo do produto no arco (i, j);

bi - oferta ou demanda do produto no no i.

Ao aplicar as operacoes de pivoteamento na matriz A do conjunto de restricoes


Ax = b em (2.2b), e possvel transforma-la em uma matriz triangular inferior ou
superior, na qual os elementos da diagonal principal sejam todos 1 ou 1. Isto
indica que, se o vetor b de ofertas/demandas possuir apenas valores inteiros, entao
a solucao do problema (2.2) sera dado por um vetor de valores inteiros.
Alem disso, a matriz A possui uma propriedade importante, que e a unimodula-
ridade total. Uma matriz A e dita totalmente unimodular quando o determinante de
qualquer submatriz quadrada de A possui valor +1, 1 ou zero. Esta propriedade
significa que, mesmo adicionando-se variaveis de folga ou artificiais, de modo a gerar
colunas formadas por vetores unitarios +1 ou 1, a matriz continua sendo total-
mente unimodular, o que garante a solucao inteira em qualquer vertice do politopo
convexo gerado pelo conjunto de restricoes. Uma demonstracao desta propriedade
pode ser encontrada em [6].
Como observado, os problemas de fluxo multiproduto compartilham muitas das
caractersticas de problemas de fluxo com um unico produto. No entanto, o acopla-
mento de multiplos fluxos frequentemente invalida a base teorica de problemas de
fluxo com um unico produto e, portanto, reduz a utilidade de algoritmos bem de-
senvolvidos para problemas desta classe.
Como exemplo, no caso de problemas monoproduto, o teorema fluxo-maximo
corte-mnimo de Ford e Fulkerson [6] garante que o fluxo maximo em uma rede e
inteiro, quando a capacidade dos arcos e a demanda dos nos sao valores inteiros.
Uma propriedade como esta nao pode, no entanto, ser estendida a problemas de
fluxo multiproduto [33].
2.3 Problema Multiproduto 8

Por outro lado, um modo de fazer uso destas propriedades e utilizando-se tecnicas
de decomposicao. A estrutura de blocos diagonais de (2.1), formada por P blocos
de restricoes de conservacao de fluxo, sugere a utilizacao de tais tecnicas. Ao inves
de se resolver o problema original diretamente, em geral e criado um problema
mestre e um conjunto de subproblemas, que sao mais faceis de serem resolvidos
que o problema original proposto. As principais tecnicas de decomposicao sao:
decomposicao guiada ao preco, decomposicao guiada ao recurso e decomposicao
guiada pela particao da base (primal partitioning ou basis partitioning). Em [3] e
apresentado uma comparacao entre estes tres metodos.
Em [2], e apresentada uma aplicacao da tecnica de relaxacao lagrangeana a pro-
blemas de fluxo multiproduto com o metodo subgradiente usado para resolver o
problema dual Lagrangeano. Ao aplicar relaxacao lagrangeana ao problema mul-
tiproduto, as restricoes de aglutinacao, consideradas complicantes, sao relaxadas,
fazendo surgir um subproblema que pode ser decomposto em problemas de fluxo de
custo mnimo - um para cada produto [9].

2.3 Formulacoes No-Arco


Algumas variacoes do modelo multiproduto apresentado em (2.1) sao propostas
na literatura. Em [20], e apresentada uma aplicacao do metodo de decomposicao de
Dantzig-Wolfe a tres formulacoes no-arco de problemas de fluxo multiproduto linear
contnuo (nao-inteiro):

Produto Especfico (CSP): nesta formulacao, cada produto e identificado por


seu ndice p, podendo ser transmitido de qualquer no-origem para qualquer
no-destino.

Destino Especfico (DSP): ao utilizar a formulacao DSP, um produto p pode


partir de qualquer no-origem, porem seu destino d e especfico.

Origem Destino Especfico (ODP): a formulacao ODP possui um conjunto de


produtos p, que sao identificados por suas identidades e pelos pares origem-
destino. Nesta formulacao, o numero de variaveis e o numero de restricoes
aumentam, porem, a combinatoria do problema e menor, quando comparada
as outras formulacoes anteriores.

A tabela 2.1 apresenta o numero de restricoes e variaveis de cada formulacao.


Nela, o conjunto S N representa os nos de oferta e o conjunto D N os nos de
demanda.
O subproblema gerado para cada produto, ao utilizar o metodo de decomposicao
de Dantzig-Wolfe, e, na formulacao ODP, um problema de caminho mnimo. Ja na
2.3 Problema Multiproduto 9

Tabela 2.1: Dimensao dos Problemas Multiproduto


Formulacao CSP DSP ODP
Restricoes |A| + P |N | |A| + P |D| |N | |A| + P |S| |D| |N |
Variaveis P |A| P |D| |A| P |S| |D| |N |

formulacao DSP e um problema de arvore geradora mnima e, na formulacao CSP,


e um problema de fluxo de custo mnimo.
Em [20], ao aplicar o metodo de decomposicao de Dantzig-Wolfe, e mostrado que,
embora a formulacao ODP seja a que possua o maior numero de variaveis e restricoes,
e a que se apresenta como a mais eficiente, pois, alem dos subproblemas serem mais
faceis de serem resolvidos, o problema mestre apresenta um menor numero de pontos
extremos.
Varios pesquisadores concluram que utilizar um codigo de programacao linear
baseado no metodo simplex classico para resolver o programa mestre gerado pela de-
composicao de Dantzig-Wolfe e uma alternativa eficiente para problemas de pequeno
e de medio porte [4]. Contudo, em problemas de grande porte, uma melhor opcao e
a utilizacao de metodos de pontos interiores. Em [17], um metodo de ponto interior
do tipo Plano de Corte de Centro Analtico e utilizado para resolver um problema
mestre gerado pela decomposicao de Dantzig-Wolfe. Este metodo apresenta bom
desempenho, quando aplicado a problemas de fluxo multiproduto de grande porte.
Em [3], e realizada uma comparacao entre tres procedimentos: a decomposicao
guiada ao preco de Dantzig-Wolfe; a decomposicao guiada ao recurso, utilizando
o metodo de subgradiente em um algoritmo de aproximacao; e basis partitioning
chamado, neste artigo, de primal partitioning. E mostrado que, apesar da decom-
posicao guiada ao recurso nao convergir ao valor otimo, seu tempo de solucao e,
em media, a metade do tempo gasto em cada um dos outros dois metodos onde a
convergencia e garantida. Por outro lado, dos 20 problemas usados como teste, em
apenas um nao foi obtida uma solucao dentro de 10% da otimalidade.
Um dado importante a ser considerado ao utilizar relaxacao lagrangeana e que,
na maioria dos problemas praticos, o numero de arcos saturados contidos na solucao
otima de um problema multiproduto nao e mais que 10% do numero total de arcos
[4]. Em outras palavras, para a maioria dos arcos, o fluxo total na solucao otima
e estritamente menor que sua capacidade. Logo, as variaveis duais do problema
dual lagrangiano associadas a estes arcos devem possuir valor otimo igual a zero.
Se este conjunto de variaveis fosse conhecido previamente, poderia ser desenvolvida
uma metodologia de relaxacao lagrangiana parcial, restrita aos arcos saturados,
reduzindo o tamanho do problema dual.
Na pratica, o conjunto de arcos saturados nao sao conhecidos a priori, mas podem
ser estimados. Em [4], e apresentado um metodo que possibilita estimar, durante
2.4 Problema Multiproduto 10

sua execucao, o conjunto de arcos saturados. Com esta tecnica, os pesquisadores


conseguiram resolver problemas de fluxo multiproduto lineares e contnuos com uma
grande quantidade de produtos.

2.4 Formulacao Arco-Rota


Uma outra formulacao interessante do problema multiproduto e a formulacao
arco-rota, apresentada em (2.3).
Nesta formulacao, cada produto p possui uma demanda dp , que indica a quan-
tidade do produto p que deve ser transportada de um no-origem s a um no-destino
t. O conjunto R(p) e formado por todas as rotas que ligam o no-origem s ao no-
destino t do produto p. A variavel xpr indica a quantidade do produto p que passa
pela rota r. O custo cpr e dado pela soma do custo unitario do produto p em cada
arco (i, j) contido na rota r. A matriz A, formada pelos elementos arij , e a matriz
de incidencia arco-rota da rede. Assim, arij e igual a 1 se o arco (i, j) estiver contido
na rota r R(p); e 0, caso contrario.
A formulacao arco-rota, portanto, e resumida pela expressao (2.3):

P
X X
min cpr xpr (2.3a)
p=1 rR(p)
P
X X
suj. a arij xpr uij , (i, j) A (2.3b)
p=1 rR(p)
X
xpr = dp , 1pP (2.3c)
rR(p)

xpr 0, r R(p) e p = 1, . . . , P (2.3d)

As restricoes (2.3b) garantem que o fluxo de todos os produtos em todas as


rotas que fazem uso do arco (i, j) seja limitado a capacidade uij do proprio arco. O
conjunto de restricoes (2.3c) indica que a demanda do produto p deve ser distribuda
por todas as rotas que ligam o no-origem s ao no-destino t.
Esta formulacao se baseia na matriz arco-rota da rede e e apresentada em [11].
Nesse artigo, e proposto o metodo Generalized Upper Bounding para sua solucao.
Em [23], e apresentada uma aplicacao do metodo de decomposicao guiada ao
preco a formulacao arco-rota. Esta tecnica e bastante similar ao metodo de decom-
posicao de Dantzig-Wolfe. A diferenca se encontra na estrutura das restricoes do
problema mestre encontrado que, no metodo de decomposicao guiada ao preco, sao
formadas por todas as linhas do problema original e por um subconjunto das colu-
nas originais. O sucesso deste metodo se deve ao fato das restricoes da formulacao
2.5 Problema Multiproduto 11

arco-rota possurem um pequeno numero de linhas, o que facilita a resolucao do


problema mestre em cada iteracao e, embora o numero de colunas seja elevado, a
utilizacao da tecnica de geracao de colunas. Sao resolvidos problemas de caminho
mnimo, de modo que o esforco computacional se tornasse reduzido.
A grande vantagem de se utilizar a tecnica de geracao de colunas para resolver
problemas multiproduto e que um conjunto de colunas sao deixadas fora do modelo
linear e a maioria delas terao suas variaveis associadas com valor igual a zero na
solucao otima [2].
Observe que, tanto a formulacao ODP quanto a arco-rota se referem a um mesmo
problema multiproduto. Alem disso, apesar da formulacao arco-rota apresentar um
numero bem menor de restricoes, calculado pela soma do numero de arcos e o numero
de produtos, possui um grande numero de variaveis, que e dado pela multiplicacao
do numero de produtos pelo numero de rotas.

2.5 Variacoes em Problemas Multiproduto


Observe nos modelos (2.1) e (2.3) apresentados, que o custo e fixo e a capacidade
nos arcos e consumida de forma homogenea por todos os produtos.
Para considerar o consumo em cada arco variando com o tipo do produto, basta
substituir as restricoes (2.1b) de aglutinacao por:
P
X p p
ij xij uij (2.4)
p=1

p
sendo ij o consumo da capacidade do arco (i, j) por unidade do produto p [2].
Na formulacao arco rota, arij deixa de conter apenas os valores {0,1} para ar-
mazenar a quantidade que o produto p consome no arco (i, j) ao fazer uso de sua
rota r. Neste caso, nao ha necessidade de alteracao do modelo (2.3).

2.5.1 Modelo Nao Linear


Algumas aplicacoes que procuram diminuir o tempo de espera da rede podem
fazer uso de um modelo multiproduto no qual as restricoes de capacidade nos arcos
sao substitudas por uma funcao objetivo convexa, como apresentado em (2.5). Este
modelo advem de resultados obtidos em Teoria das Filas [2]. A funcao objetivo
includa procura diminuir o fluxo dos produtos nos arcos da rede, evitando, assim,
2.5 Problema Multiproduto 12

o aumento na fila de espera.


P
X
xpij
X p=1
min P
(2.5a)
X
(ij)A uij xpij
p=1

Estes problemas nao-lineares foram estudados com o objetivo de resolver pro-


blemas de rede de transporte e telecomunicacoes. Por exemplo, ao considerar a
distribuicao de pacotes em uma rede de computadores, eles devem ser distribudos,
de modo que o tempo de espera medio seja reduzido.
Outra aplicacao interessante deste modelo surge em problemas de roteamento
de mensagens. O problema consiste em determinar um conjunto de rotas, nas quais
os pacotes devem ser transmitidos de modo a otimizar alguma funcao de custo,
que meca a qualidade global do servico. A funcao apresentada em (2.5), tambem
conhecida como funcao de delay de Kleinrock, e utilizada na maioria dos casos [27].
As principais tecnicas de solucao para problemas nao-lineares de fluxo multipro-
duto inicialmente eram baseadas em algoritmos classicos de programacao nao-linear,
como os metodos de Newton e o metodo de gradiente conjugado. Recentemente, con-
tudo, metodos aproximados e pontos interiores tem sido mais utilizados. Em [27],
os autores apresentam uma descricao de alguns algoritmos, dentre eles, o metodo de
desvio de fluxo, o metodo de projecao e algoritmos de planos de corte.
Em [27] e apresentada, tambem, uma revisao da literatura sobre os metodos
utilizados para resolver estes problemas. A maioria dos algoritmos apresentados
procura fazer uso de alguma estrategia de decomposicao. Muitos deles se baseiam
em dualidade e relaxacao das restricoes de aglutinacao.

2.5.2 Redes nao direcionadas

Em algumas aplicacoes encontradas na pratica, os fluxos nos arcos da rede podem


ser bidirecionais. Neste caso, os produtos que se movem em ambas as direcoes usam
a mesma capacidade do arco. Logo, o problema multiproduto tera sua restricao
de capacidade modificada, de modo a considerar o fluxo em ambas as direcoes.
Um exemplo de problemas multiproduto desse tipo e o problema de roteamento de
mensagens.
O modelo para essa formulacao de problema e apresentado em (2.6).

P
X X
min cpij |xpij | (2.6a)
p=1 (i,j)A
2.5 Problema Multiproduto 13

P
X X
s. a |xpij | uij (i, j) A (2.6b)
p=1 (i,j)A

X X
xpij xpji = bpi i N , 1 p P, (2.6c)
(i,j)A (j,i)A

sendo:

cpij - custo unitario do produto p no arco (i, j);

|xpij | - valor absoluto do fluxo do produto p no arco (i, j);

uij - capacidade do arco (i, j);

bpi - oferta ou demanda do produto p no no i.

Neste modelo, xpij < 0 indica que o fluxo do produto p e de j para i. Quando
positivo, de i para j. Assim, as restricoes de capacidade nos arcos consideram a
soma do valor absoluto de xpij para todos os produtos, como apresentado em (2.6b).
A mesma definicao e valida para a funcao objetivo.
Uma maneira alternativa de se solucionar um problema multiproduto de uma
rede nao direcionada e transforma-la em uma rede direcionada. Em [2], e apresen-
tada uma metodologia para esse proposito. Considera-se que cp 0 para p =
1, 2, ..., P . A figura 2.1 apresenta a modificacao realizada. Nesta nova rede, todo
o fluxo de i para j devera passar pelo arco (i0 , j 0 ) e o mesmo ocorre para o fluxo
de j para i. Os valores de b0i e b0j devem ser nulos e os valores bi e bj permanecem
inalterados para todos os produtos.
PSfrag replacements (0,
) i0 )
(0,
(c(i,j) , u(i,j) )
i j i (c(i,j) , u(i,j) ) j
(0,
)
)
(0,
j0
Figura 2.1: Transformacao de um arco nao-direcionado em uma estrutura direcionada.

Uma desvantagem desta transformacao e que a dimensao do problema cresce


consideravelmente, pois sao adicionados 2 novos nos e 4 novos arcos para cada arco
nao direcionado da rede original.
2.5 Problema Multiproduto 14

Em problemas de grande porte, como, por exemplo, o roteamento de mensagens,


essa metodologia se torna ineficiente, devido ao fato do aumento na quantidade de
rotas ser muito alto.
Em [25], este problema e modelado como um problema multiproduto direcionado,
tendo funcoes lineares por partes tanto na funcao objetivo quanto nas restricoes de
capacidade. Isto torna possvel a manipulacao de forma implcita do valor absoluto
das variaveis dos fluxos nao direcionados na funcao objetivo e nas restricoes de
capacidade.
Alem disso, os autores de [25] propuseram uma modificacao a maneira com que
o algoritmo simplex avalia o custo relativo das colunas nao-basicas. Foram uti-
lizadas tecnicas de geracao de colunas, sendo criados subproblemas lagrangianos,
cuja solucao pode ser obtida resolvendo problemas de caminho mnimo.
Desse modo, os autores obtiveram uma solucao do modelo nao direcionado (2.6)
sem gerar, de forma explcita, o modelo multiproduto para a rede transformada da
Figura 2.1. Com efeito, nao so o tempo de solucao foi reduzido, como tambem o
numero de operacoes de pivoteamento necessarias para solucionar o problema.
A ideia do metodo de basis partitioning e dividir a base, de modo a fazer uso da
estrutura especial da rede para que o processo de calculo de sua inversa seja mais
eficiente [33].
Em [11], e utilizado o metodo GUB - Generalized Upper Bounding, que utiliza
a divisao da base para facilitar o calculo de sua inversa. Em lugar de calcular a
inversa de uma matriz de tamanho m + P , e calculada a inversa de uma matriz de
tamanho m, sendo m a quantidade de arcos saturados em uma formulacao arco-rota
e P a quantidade de produtos. Alem disso, na maioria das aplicacoes de fluxo de
rede multiproduto, o numero de produtos P e muito maior que o numero de arcos
M . Isto faz com que o metodo GUB se torne bem aplicavel.
Em [24], foi mostrado uma comparacao dos principais metodos utilizados para
resolver problemas de fluxo multiproduto linear. O metodo basis partitioning, ou
base particionada, apresentou melhor desempenho, tanto para problemas pequenos
quanto para problemas de grande porte. Dentre os metodos analisados, estao as
tecnicas de decomposicao, metodos de pontos interiores e, ainda, a utilizacao destes
dois metodos em conjunto.

2.5.3 Problema de Projeto de Rede

Um problema de network design considera, alem do fluxo dos produtos, a modi-


ficacao da capacidade dos arcos.
Considere o problema de instalar capacidades nos arcos da rede, de modo que
toda a demanda dos produtos seja atendida. As capacidades sao instaladas nos
arcos em unidades inteiras e seu custo ca representa o custo de obter uma unidade
2.6 Problemas Multiproduto Inteiro 15

de capacidade para o arco a. O objetivo e obter uma instalacao de capacidades que


tenha o menor custo e permita que todos os produtos possam ser distribudos pela
rede simultaneamente. Este problema e conhecido como problema de instalacao de
capacidade de custo mnimo e e estudado em [8].
Ha, tambem, o problema de projeto de rede nao capacitado. Neste caso, con-
siderando que o arco exista na rede, tem-se capacidade suficiente para rotear todos
os produtos da rede por este arco. Em [2] e apresentado um modelo de programacao
linear para este problema. Aplicacoes deste problema sao geralmente encontrados
em projeto de redes de computadores e telecomunicacoes [2].

2.6 Problemas Multiproduto Inteiro


Os problemas de fluxo de rede multiproduto inteiro surgem quando o fluxo de
determinado produto, identificado pelo par origem-destino, deve fazer uso de um
unico caminho.
Em [5], este problema foi modelado como um problema de programacao linear
inteira 0/1, utilizando as formulacoes no-arco e arco-rota. O modelo (2.7) apresenta
a formulacao no-arco deste problema.

P
X X
min cpij dp xpij (2.7a)
p=1 (i,j)A

P
X
s. a dp xpij uij (i, j) A (2.7b)
p=1
X X
xpij xpji = bpi i N,1 p P (2.7c)
(i,j)A (j,i)A

xpij {0, 1}, (i, j) A, 1 p P (2.7d)

Nesta formulacao, tem-se:

cpij - custo unitario do produto p no arco (i, j);

xpij - quando igual a 1, indica que o fluxo do produto p faz uso do arco (i, j);

uij - capacidade do arco (i, j);

dp - demanda do produto p que deve fluir da origem s ao destino t.

bpi - indica se o no i e um no de oferta ou demanda para o produto p.


2.6 Problemas Multiproduto Inteiro 16

sendo:
1 se i = s,
bpi = 1 se i = t,

0, caso contrario.
Ao considerar o modelo inteiro nessa formulacao, a oferta/demanda para cada
produto, que deveria ser dp no no de origem e dp no no de destino, foi modificada
para 1 e 1, respectivamente. Em virtude disto, ocorreu a modificacao nos coefi-
cientes da funcao objetivo (2.7a) e nas restricoes de capacidade nos arcos (2.7b),
adicionando a demanda dp para cada produto. Desse modo, a variavel xpij , que, no
modelo (2.1) foi utilizada para armazenar o fluxo do produto p no arco (i, j), e,
no modelo (2.7), utilizada apenas para indicar se o arco (i, j) faz ou nao parte do
caminho gerado para este produto.
Uma vez que se trata de uma formulacao origem-destino especficos, este
problema inteiro tambem pode ser modelado utilizando a formulacao arco-rota,
mostrada pela expressao (2.8).

P
X X
min cpr dp xpr (2.8a)
p=1 rR(p)

P
X X
s. a arij dp xpr uij (i, j) A (2.8b)
p=1 rR(p)
X
xpr = 1 1pP (2.8c)
rR(p)

xpr {0, 1}, r R(p) e p = 1, . . . , P (2.8d)

na qual:

cpr - custo unitario do produto p na rota r;

xpr - quando igual a 1, indica que a rota r e a rota utilizada pelo produto p;

arij - elemento da matriz arco-rota da rede. Seu valor sera igual a 1 se o arco
(i, j) estiver contido na rota r R(p) e 0, caso contrario.

Observe o quanto esta formulacao e similar a nao-inteira apresentada em (2.3).


Contudo, algumas diferencas devem ser notadas, como segue.
A constante dp foi inserida na funcao objetivo (2.8a) e nas restricoes de capaci-
dade dos arcos (2.8b), com o objetivo de transformar o problema em um problema
binario, da mesma forma como ocorreu na formulacao no-arco (2.7). A restricao
2.6 Problemas Multiproduto Inteiro 17

(2.8c) teve seu valor dp substitudo por 1, indicando que o fluxo do produto p deve
fazer uso de uma unica rota.
Existem varios metodos que sao utilizados para solucionar um problema de pro-
gramacao linear inteira - PLI. Uma forma, por exemplo, seria utilizando relaxacao
linear, eliminando as restricoes de integralidade das variaveis, em um algoritmo
do tipo branch-and-bound [16]. Porem, este metodo se torna ineficiente devido ao
grande numero de variaveis inteiras. Sem a utilizacao de tecnicas de decomposicao,
estas relaxacoes podem requerer uma elevada quantidade de memoria e um grande
tempo de execucao [5].
Em [5], foi utilizado o algoritmo branch-and-price-and-cut, que e uma variacao
de branch-and-bound, com limites calculados pela solucao de programas lineares
usando geracao de colunas e cortes nos nos da arvore gerada pelo algoritmo branch-
and-bound. Ao utilizar branch-and-bound, os autores nao conseguiram obter uma
solucao factvel inteira para alguns problemas de maior porte. No entanto, com a
utilizacao da geracao de colunas e linhas em cada no da arvore, foi possvel nao
so obter solucoes factveis inteiras, como tambem que estas estivessem proximas
da otimalidade do problema. Ate entao, poucos trabalhos haviam sido realizados
fazendo uso de geracao de linhas e colunas para resolver problemas de PLI.
Uma alternativa interessante para solucionar os problemas multiproduto inteiro,
que estao na classe dos problemas NP-difceis, sao os metodos de aproximacao e
heursticas. Contudo, para problemas de fluxo multiproduto linear, como obser-
vado anteriormente, a maioria das tecnicas desenvolvidas e baseada em metodos de
solucao para problemas nao-lineares ou lineares de grande porte [33].
Os metodos heursticos sao bastante eficientes para a determinacao de uma
solucao, porem, nao garantem a otimalidade da solucao final determinada [11].
Em [33], e resolvido um problema multiproduto nao-linear inteiro. Segundo o au-
tor, diante das dificuldades de se obter a solucao otima para este problema, pode-se
optar pela obtencao de uma solucao aproximada, que pode ser obtida por heursticas.
Porem, embora algumas heursticas obtenham alguma solucao satisfatoria, e geral-
mente difcil avaliar a qualidade da solucao em relacao a solucao otima global.
Outro modo de resolver este problema nao-linear seria utilizar relaxacao das
restricoes nao-lineares ou restricoes de integralidade. No entanto, ao relaxar as re-
stricoes de aglutinacao, o problema dual lagrangiano obtido pode ser decomposto
em um conjunto de subproblemas bem mais faceis de serem resolvidos. Em [33],
foi utilizado a tecnica de relaxacao lagrangeana. As restricoes de aglutinacao foram
substitudas por um termo de penalidade na funcao objetivo. O metodo de subgra-
diente foi utilizado para encontrar os multiplicadores de Lagrange otimos.
2.7 Conclusao 18

2.6.1 Aplicacoes
Redes de comunicacoes usando fibras oticas podem ser modeladas na forma do
problema multiproduto inteiro. Nestas redes, os dados sao transportados entre pon-
tos de acesso utilizando apenas uma rota conhecida como lightpath. Para que os
dados possam ser transportados de um ponto a outro, e necessario estabelecer uma
rota na rede e alocar um wavelength livre em todos os arcos pertencentes a rota. A
bandwidth inteira sobre o caminho e reservada para esta conexao, ate que ela seja
finalizada, quando os wavelengths tornam-se disponveis em todos os arcos da rota.
Este problema pode ser modelado como um problema multiproduto inteiro, no qual
o fluxo de cada origem para cada destino e restrito a utilizar uma unica rota [28].
Em [30], e utilizada a tecnica de geracao de colunas para resolver duas classes de
problemas multiproduto inteiro, definidos em uma rede com capacidade limitada nos
arcos. Em um dos problema, e dado um conjunto de produtos, com suas demandas
e o custo unitario de cada produto em cada arco. O objetivo e selecionar um
subconjunto de produtos para serem roteados e associar, a cada um deles, uma
unica rota, que liga sua origem ao seu destino, tendo, como finalidade, maximizar o
benefcio da distribuicao. Este benefcio e medido utilizando-se um valor constante
para cada produto em cada rota. O outro problema consiste na selecao de todos os
produtos necessarios. Nesse caso, o problema se torna um problema de minimizacao
de custos.

2.7 Conclusao

Os metodos apresentados para resolver problemas multiproduto se baseiam em


algoritmos de decomposicao, seja ela guiada ao preco, como em Dantzig Wolfe;
divisao da base, como em basis partitioning; ou decomposicao guiada ao recurso,
como em relaxacao lagrangeana. E interessante notar que a maioria dos trabalhos
realizados desde os anos 60 sempre fez uso de tais tecnicas ou variacoes das mesmas,
seja para resolver um problema multiproduto inteiro ou nao.
O que torna interessante o uso destes metodos, em um problema de fluxo mul-
tiproduto, e a estrutura apresentada pelo seu conjunto de restricoes. De um modo
geral, em formulacoes arco-rota, os pesquisadores tem optado pelo metodo de ba-
sis partitioning, como ocorre em [11] e [25]. Na formulacao no-arco, as tecnicas de
geracao de colunas, do tipo Dantzig-Wolfe, foram mais utilizadas.
Para o problema multiproduto inteiro, torna-se bastante interessante o uso de
relaxacao lagrangeana, pois, mesmo que nao seja obtida a solucao otima para o
problema, pode-se obter uma solucao perto do otimo global. Isto e confirmado nos
resultados apresentados em [3] e [33].
2.7 Conclusao 19

No proximo captulo, serao discutidos o metodo de decomposicao de Dantzig-


Wolfe, a tecnica de relaxacao lagrangeana e o algoritmo de decomposicao de Benders.
Captulo 3

Metodos de Decomposicao

3.1 Introducao

Neste captulo, sao apresentadas tres tecnicas de decomposicao. A decomposicao


de Dantzig-Wolfe, que e guiada ao preco; a tecnica de relaxacao lagrangeana, que e
uma decomposicao guiada ao recurso; e, por fim, o algoritmo de decomposicao de
Benders.
A secao 3.2 apresenta uma aplicacao da decomposicao de Dantzig-Wolfe ao pro-
blema multiproduto linear. Ja as secoes 3.3 e 3.4 apresentam uma visao teorica da
tecnica de relaxacao lagrangeana e do algoritmo de Benders. Uma aplicacao destas
duas tecnicas de decomposicao ao problema multiproduto inteiro esta apresentada
no Captulo 4.

3.2 Decomposicao de Dantzig-Wolfe

A estrategia da decomposicao de Dantzig-Wolfe e dividir o problema original em


dois problemas: um problema mestre, formado pelas restricoes complicantes; e um
subproblema, formado pelas restricoes especiais. Cada solucao do problema mestre
gera um novo vetor dual, que e passado ao subproblema. A solucao do subproblema
gera uma nova coluna para o problema mestre. Os dois problemas sao resolvidos
alternadamente, ate que se atinja a solucao otima do problema original [6].
Para o problema multiproduto, o subproblema gerado e dividido em varios sub-
problemas, sendo um para cada produto.
Considere a formulacao no-arco do problema multiproduto apresentada em (2.1).
Ao adicionar as variaveis de folga f as restricoes de capacidade nos arcos, e obtido

20
3.2 Decomposicao de Dantzig-Wolfe 21

o problema de programacao linear multiproduto, em sua forma padrao, como apre-


sentado em (3.1).

min c1 x1 + c2 x2 + ... + cP xP + 0f (3.1a)

suj. a x1 + x2 + ... + xP + If =u (3.1b)

Ax1 = b1 (3.1c)

Ax2 = b2 (3.1d)

..
. (3.1e)

AxP = bP (3.1f)

xp 0, 1pP (3.1g)

f 0 (3.1h)
Nessa expressao, tem-se que:
P - numero total de produtos da rede;
cp - vetor de custo unitario do produto p nos arcos da rede;
xp - vetor de fluxo do produto p nos arcos da rede;
I - matriz identidade;
f - vetor das variaveis de folga;
u - vetor de capacidade dos arcos;
A - matriz de incidencia no-arco da rede;
bp - vetor de ofertas e demandas para o produto p.
O conjunto de restricoes do modelo (3.1) e formado pelas restricoes de capacidade
nos arcos (3.1b) e pela estrutura bloco diagonal dada pelas restricoes (3.1c)-(3.1f),
na qual cada bloco e composto pelo conjunto de restricoes de conservacao de fluxo
para cada produto. Esta estrutura e que torna interessante a aplicacao do metodo
de decomposicao de Dantzig-Wolfe.
3.2 Decomposicao de Dantzig-Wolfe 22

3.2.1 Algoritmo de Decomposicao de Dantzig-Wolfe

No modelo (3.1), considere, para cada produto p, um conjunto convexo p ,


definido como:
p = {xp : Axp = bp , xp 0} , p = 1, . . . P
ou seja, p e formado pelo conjunto dos pontos factveis para as restricoes de con-
servacao de fluxo (Axp = bp , p = 1, . . . P ) e para as restricoes de nao-negatividade
(xp 0, p = 1, . . . P ), para cada produto p.
Como todo p e um conjunto de pontos delimitado por restricoes lineares, qual-
quer ponto xp p pode ser escrito como o somatorio da combinacao convexa
dos pontos extremos desse conjunto, dados por xpj , e da combinacao linear nao-
negativa de suas direcoes extremas, dadas por dpj , como apresentado em (3.2a), com
as condicoes de ponderacao impostas por (3.2b), (3.2c) e (3.2d).
vp tp
X X
p
x = pj xpj + jp dpj (3.2a)
j=1 j=1
vp
X
pj = 1 (3.2b)
j=1

pj 0, 1 j vp (3.2c)

jp 0, 1 j tp (3.2d)
Neste modelo, pj e jp sao escalares nao-negativos; vp e tp indicam, respectivamente,
o total de vertices e de direcoes extremas contidos em p , para cada p.
Uma vez conhecidos todos os vertices e direcoes extremas pertencentes aos con-
juntos p , pode-se eliminar, do modelo (3.1), as restricoes Axp = bp , p = 1, . . . P , e
xp 0, p = 1, . . . P , que delimitam p , e substituir o vetor xp da funcao objetivo
(3.1a) e das restricoes de capacidade dos arcos (3.1b) pela combinacao convexa e
linear nao-negativa dos pontos extremos e direcoes extremas de p , respectivamente,
na forma apresentada em (3.2). Feito isto para todos os produtos p, o problema de
programacao linear multiproduto (3.3) e obtido.
v1
X t1
X vP
X tP
X
min (c1 x1j )1j + (c1 d1j )j1 + . . . + (cP xPj )Pj + (cP dPj )jP + 0f (3.3a)
j=1 j=1 j=1 j=1

v1
X t1
X vP
X tP
X
suj. a x1j 1j + d1j j1 + ... + xPj Pj + dPj jP + If = u (3.3b)
j=1 j=1 j=1 j=1
3.2 Decomposicao de Dantzig-Wolfe 23

vp
X
pj = 1, p = 1, 2, ..., P (3.3c)
j=1

pj 0, 1 j vp , p = 1, 2, ..., P (3.3d)

jp 0, 1 j tp , p = 1, 2, ..., P (3.3e)

f 0 (3.3f)

Contudo, o problema mestre (3.3) considera todos os vertices e direcoes extremas


para todos p , p = 1, . . . P . Isso torna impraticavel identificar todas as colunas
existentes no problema e, em seguida, resolve-lo.
Desse modo, e interessante a utilizacao do metodo simplex revisado. Este metodo
utiliza um tableau reduzido, em que sao armazenadas apenas as colunas referentes
as variaveis basicas.
Supondo que uma solucao factvel basica inicial (, , f ) seja conhecida, o tableau
inicial apresentado na Tabela (3.1) pode ser construdo. Neste tableau, apenas a
matriz inversa B 1 da matriz formada pelas colunas associadas as variaveis basicas;
as variaveis duais e ; os valores das variaveis basicas b; e o valor da funcao
objetivo b cB b sao retidos. Uma solucao inicial factvel para o problema mestre pode
ser encontrada, utilizando-se ou metodo big M ou o metodo das duas fases [6].

Tabela 3.1: Tableau inicial para o problema mestre (3.3).


(, ) b cB b
1
B b

Neste tableau, tem-se que:


B - matriz-base, de dimensao [(|A| + P ) (|A| + P )].

- variaveis duais associadas as restricoes (3.3b). A dimensao do vetor e


|A|.

- vetor dual associado as restricoes (3.3c). Sua dimensao e P .

b
cB - vetor de custo das variaveis basicas na funcao objetivo. Cada componente
deste vetor e dada pelo custo associado a um ponto extremo cp xpj , j = 1, . . . , vp ,
p = 1, . . . , P ; pelo custo associado a uma direcao extrema cp dpj , j = 1, . . . , vp ,
p = 1, . . . , P ; ou pelo custo de uma variavel de folga fi , que e nulo.
3.2 Decomposicao de Dantzig-Wolfe 24

1 ... 1})0 .
b - valor corrente das variaveis basicas, dado por b = B 1 (u0 1| 1 {z
P

Apos construdo o tableau inicial, pode-se realizar o pivoteamento, fazendo com


que uma coluna nao-basica entre na base, ou concluindo que a solucao factvel basica
atual e otima.
A solucao atual e otima se o custo relativo de todas as colunas for nao-positivo.
Caso contrario, a coluna que possuir o maior custo relativo (que pode ser referente a
uma variavel pj , jp ou fi ) entra na base, pelas operacoes de pivoteamento realizadas
pelo metodo simplex revisado.
Considere a busca pela coluna k, de maior custo relativo dentre as colunas rela-
cionadas a determinado produto p. Para as variaveis pj , tem-se:
 
zkp b
ckp = max zjp b cj p = max xpj + p cp xpj (3.4)
1jvp 1jvp

Para as variaveis jp , tem-se:


 
zkp b
ckp = max zjp b
cj p = max dpj cp dpj (3.5)
1jtp 1jtp

Como o numero de vertices vp e de direcoes extremas tp e elevado; e os pontos


extremos xpj e as direcoes extremas dpj nao sao conhecidos, torna-se inviavel avaliar
explicitamente todas as colunas associadas ao problema (3.3), em busca daquela que
possui o maior custo relativo.
Por outro lado, observe que o problema apresentado em (3.6) tem, como solucao,
ou um ponto extremo xpj p , p = 1, . . . P , ou uma solucao ilimitada ao longo do
raio dado por alguma direcao extrema dpj p , p = 1, . . . P . Pode-se resolver, entao,
os problemas (3.4) e (3.5) de forma alternativa, segundo apresentado a seguir.
Considere o subproblema (3.6):

xp
j = max
p p
( cp )xp + p (3.6)
x

Em (3.6), p , sendo uma constante, pode ficar fora desse modelo. Para isto, seu
valor deve ser adicionado ao valor da funcao objetivo do problema mestre no incio
do procedimento de decomposicao.
A solucao otima xp
j do subproblema (3.6) e ou limitada, na forma de um ponto
extremo xj ; ou ilimitada, na forma de uma direcao extrema dpj , tal que (cp )dpj > 0.
p

Em relacao as variaveis de folga fi , cada uma possui seu custo relativo, dado por i ,
em que o ndice i indica o arco da rede.
Desse modo, deve-se resolver um subproblema (3.6) para cada produto p. Em
seguida, comparar os resultados obtidos com os custos relativos das variaveis de
folga f . A solucao que possuir o maior custo relativo e a coluna k escolhida. Assim,
esta solucao, quando maior que zero, indica a variavel pj , jp ou fi a entrar na base.
3.2 Decomposicao de Dantzig-Wolfe 25

Observe que o subproblema (3.6) e facil de ser resolvido, pois trata-se de um


problema de fluxo de custo mnimo, dado pelas restricoes de conservacao de fluxo
e de nao negatividade de cada produto. Podem surgir algumas modificacoes nos
subproblemas, de acordo com a formulacao adotada. Isto foi mostrado na secao 2.3.
Apos resolver os subproblemas e identificar a coluna k, caso a solucao atual nao
seja a solucao otima, insira esta nova coluna no tableau mestre, apresentado na
Tabela 3.1, e repita o processo.
Ao obter a solucao otima do problema mestre apresentado em (3.3), a solucao
otima x = (x1 x2 ... xp ) do problema original pode ser obtida a partir da equacao
(3.2a), na qual jp e pj nao conhecidos possuem valor igual a zero.
Em cada iteracao, perceba que e encontrada uma nova solucao factvel melhorada
para o problema original. Contudo, quando a execucao do algoritmo se aproxima do
final, sua convergencia torna-se lenta. Assim, pode-se utilizar um limite inferior LI,
para interromper a execucao do algoritmo quando for encontrada uma boa solucao,
ou seja, dentro de um limite de tolerancia aceitavel.

3.2.2 Calculo do Limite Inferior


Um novo limite inferior pode ser calculado, em cada iteracao, apos resolver os
subproblemas e calcular o custo relativo de cada variavel de folga.
Ao resolver todos os subproblemas (3.6), e encontrada, para cada produto p,
a coluna k com maior custo relativo, dado por zkp b ckp . Logo, qualquer solucao
x = (x1 x2 . . . xP ), factvel no problema original, deve atender a condicao (3.7)
para todo produto p, p = 1, . . . P :
( cp )xp + p zkp b
ckp cp xp xp + p (zkp b
ckp ) (3.7)
Do mesmo modo, ao comparar os custos relativos das variaveis de folga f asso-
ciadas as restricoes de capacidade dos arcos, e encontrada a coluna k, referente a
variavel de folga fk , que possui maior custo relativo, dado por zk b ck . Assim, qual-
quer fi , factvel no problema original, com custo relativo zi b
ci , atende a condicao
dada por (3.8):
zi b
c i zk b
ck f 0 zk b
ck 0f f (zk b
ck ) (3.8)
Assim, a partir de (3.7) e (3.8), tem-se:
c1 x1 x1 + 1 (zk1 b
c1k ) (3.9a)
c2 x2 x2 + 2 (zk2 b
c2k ) (3.9b)
..
.
c x x + P (zkP b
P P P
cPk ) (3.9c)
0f f (zk bck ) (3.9d)
3.2 Decomposicao de Dantzig-Wolfe 26

Logo, somando-se os lados direito e esquerdo da expressao (3.9), encontra-se:


P P
! P P
!
X X X X
cp xp + 0f xp + f + p (zkp b
cpk ) + (zk b
ck ) (3.10)
p=1 p=1 p=1 p=1

P
X
Mas, xp + f = u, pois xp e factvel. Entao:
p=1
P P P
!
X X X
cp xp u + p (zkp b
cpk ) + (zk b
ck ) (3.11)
p=1 p=1 p=1

Porem, como:

u
( ) 1
P
X z }| {

1
u + p = [ ] [u0 |1 1{z... 1}]0 = b
cB B 1 cB b
P = b
..
p=1 P .



1

a expressao (3.11) pode ser escrita na forma:


P P
!
X X
c p xp b
cB b (zkp b
cpk ) + (zk b
ck ) (3.12)
p=1 p=1

Como a condicao (3.12) e verdadeira para todo xp factvel no problema original,


entao: !
XP
cB b
b (zkp b
cpk ) + (zk b
ck )
p=1

e um limite inferior (LI) para o problema original. Alem disso, toda solucao obtida
para o problema mestre, b cB b, e um limite superior (LS) para o problema original.
Portanto, em cada iteracao, pode-se interromper a execucao do algoritmo caso seja
obtida uma solucao dentro de um limite de tolerancia aceitavel, ou seja, LS LI
gap, sendo que o valor gap indica a tolerancia.

3.2.3 Resumo do Metodo de Decomposicao de Dantzig-Wolfe

A decomposicao de Dantzig-Wolfe e uma tecnica de geracao de colunas, pois, em


cada iteracao, uma nova coluna e conhecida e adicionada ao problema mestre.
Algumas variacoes podem ocorrer no algoritmo, como por exemplo, assim que
encontrar uma coluna com custo relativo maior que zero, entao esta deve entrar
3.2 Decomposicao de Dantzig-Wolfe 27

imediatamente na base, evitando, dessa forma, a necessidade de se resolver todos os


subproblemas em cada iteracao.
Em cada iteracao, o problema mestre passa um novo vetor dual (, ) para os
subproblemas. Assim, uma vez que ocorre variacao de uma iteracao para outra
apenas na funcao objetivo dos subproblemas, torna-se interessante a utilizacao de
tecnicas de pos-otimizacao para resolve-los.
Em [29], e proposto um algoritmo generico para reotimizar problemas de cami-
nho mnimo quando ocorrem mudancas apenas nos custos dos arcos. Este algoritmo
poderia ser aplicado em uma formulacao no-arco ODP ao ser utilizado o metodo de
decomposicao de Dantzig-Wolfe.
A figura 3.1 apresenta o algoritmo do metodo de decomposicao de Dantzig-Wolfe
para um problema de minimizacao.

t Incio

?
Encontre uma solucao
factvel e construa o tableau
inicial do problema mestre

?
- Tableau
6 do problema mestre
(, )
?
Resolva os subproblemas e
Coluna k
encontre a coluna k com
max{zk ck }
Coluna k
?
Q
 Q
 Q Solucao otima do problema
Adicione a coluna k  Q
Sim -
Q zk c k 0
 Q
ao tableau do  mestre dada por (, , f ) e
Q 
problema mestre Q  obtida
Q 
6 Q
Nao ?
? Calcule a solucao otima do
Calcule problema original
novo LI

?
? Fim
Q 
 Q
 Q
 Q Solucao para o
 Nao  LS LI gapQ Sim -
Q  problema original
Q 
Q 
Q 
Q 
?
Fim

Figura 3.1: Algoritmo de Decomposicao de Dantzig-Wolfe.

Maiores detalhes sobre este metodo podem ser encontrados em [6] e [20], dentre
3.3 Relaxacao Lagrangeana 28

outras referencias.

3.3 Relaxacao Lagrangeana

Este topico apresenta uma visao geral da tecnica de relaxacao lagrangeana. No


incio, e apresentada sua definicao. Em seguida, uma comparacao com a relaxacao
linear. Depois, uma explicacao detalhada do algoritmo de Benders, que e utilizado
para encontrar os multiplicadores de Lagrange otimos. No Captulo 4, e apresentada
a aplicacao desta tecnica ao problema multiproduto inteiro em sua formulacao no-
arco e arco-rota.

3.3.1 Definicao

A tecnica de relaxacao lagrangeana e uma tecnica de decomposicao aplicavel a


problemas de programacao linear inteira que apresentam, em sua estrutura, um con-
junto de restricoes denominadas complicantes que, caso removidas, torna a solucao
do problema de mais facil determinacao.
Assim, pode-se criar um problema lagrangeano, no qual as restricoes compli-
cantes sao substitudas por um termo de penalidade na funcao objetivo, que conside-
ra a quantidade violada destas restricoes e suas variaveis duais. Este novo problema
e facil de ser resolvido e fornece um limite inferior para o valor otimo do problema
original [14].
Considere, entao, o seguinte problema:

min cx (3.13a)
suj. a Ax b (3.13b)
Dx = e (3.13c)
x 0 e inteiro (3.13d)

no qual x possui dimensoes n 1; b tem dimensoes m 1; e tem dimensoes k 1 e


as matrizes possuem dimensoes aceitaveis.
Assuma que as restricoes (3.13b) sejam as restricoes complicantes, e que, caso
sejam removidas, o problema torna-se facil de ser resolvido. Para construir o pro-
blema lagrangeano, define-se um vetor nao-negativo , de dimensoes 1 m, e, em
seguida, adiciona-se o termo (Ax b) a funcao objetivo de (3.13a), para obter o
problema (3.14).

min cx + (Ax b) (3.14a)


3.3 Relaxacao Lagrangeana 29

suj. a Ax b (3.14b)
Dx = e (3.14c)
x 0 e inteiro (3.14d)

Observe que o valor otimo de (3.14), para fixado em um valor nao-negativo,


e menor ou igual ao valor otimo do problema (3.13), pois foi adicionado um valor
nao-positivo a sua funcao objetivo. Removendo-se as restricoes Ax b de (3.14), e
obtido o subproblema lagrangeano, apresentado em (3.15).

min cx + (Ax b) (3.15a)


suj. a Dx = e (3.15b)
x 0 e inteiro (3.15c)

O valor otimo de (3.15), para fixo e nao negativo, e tambem um limite inferior para
o problema (3.13). Alem disso, o subproblema (3.15) e mais facil de ser resolvido que
o problema (3.13). Desse modo, deve-se calcular o valor de de forma a maximizar
o resultado do problema (3.15), ou seja, maximizando o valor da funcao lagrangeana
L() dada em (3.16).

L() = min cx + (Ax b) (3.16a)


suj. a Dx = e (3.16b)
x 0 e inteiro (3.16c)

Observe que, para cada x factvel nas restricoes (3.16b) e (3.16c), e gerada uma
funcao linear em dada por (Axb)0 0 +cx. Uma vez que, para cada 0, deve-se
minimizar a funcao objetivo (3.16a), entao a funcao L() e composta pelos menores
valores destas funcoes lineares. A figura 3.2 apresenta o grafico da funcao L().
Ou seja, a solucao do problema dual lagrangeano (3.17) fornece o melhor limite
inferior para o problema original.

L( ) = max L() (3.17)


0

Como observado pelo grafico da figura 3.2, a funcao L() e concava e linear por
partes. Logo, o valor otimo obtido para o problema dual lagrangeano (3.17) e otimo
global.
Por outro lado, uma vez que a funcao lagrangeana que se quer otimizar viola as
restricoes Ax b, a otimalidade do problema original nao e garantida.
Desse modo, pode-se fazer uso de um limite superior LS, dado pela melhor
solucao factvel obtida para o problema original. Caso seja encontrada uma solucao
para o problema dual lagrangeano (3.17), que possua valor otimo igual ao melhor
limite superior encontrado, entao essa solucao e otima para o problema original. Ou
3.3 Relaxacao Lagrangeana 30

cx + (Ax b)

PSfrag replacements

L()

Figura 3.2: Grafico da funcao L().

seja, essa solucao possui gap de dualidade igual a zero. Caso contrario, a solucao
obtida apresenta uma folga primal-dual, dada por = LS LI.
Em [21], e desenvolvido um conjunto de condicoes de otimalidade aplicadas a for-
mulacao do problema lagrangeano, considerando um gap de dualidade previamente
definido como meta a ser alcancada no procedimento de otimizacao.
Em [13], e citado um metodo capaz de eliminar a folga primal-dual. Este metodo
utiliza uma funcao de Lagrange generalizada, em lugar do vetor de multiplicadores
de Lagrange. Porem, a solucao do problema dual e extremamente complicada.
Maiores detalhes sobre relaxacao lagrangeana podem ser obtidos em [2], [6] e
[14].

3.3.2 Relaxacao Lagrangeana e Relaxacao Linear

Foi mostrado anteriormente que o objetivo principal do uso da tecnica de re-


laxacao lagrangeana e fornecer um limite inferior para o problema original. Uma
maneira alternativa de calcular um limite inferior para um problema de programacao
linear inteira consiste em remover a restricao de integralidade das variaveis, gerando
um modelo de programacao linear.
Nesta secao, sera apresentado que o limite inferior obtido ao utilizar relaxacao
lagrangeana e, na pior das hipoteses, tao bom quanto o limite obtido ao utilizar
relaxacao linear. Ou seja, em um problema de minimizacao, o limite inferior obtido
pela relaxacao lagrangeana e maior ou igual ao obtido pela relaxacao linear [2].
3.3 Relaxacao Lagrangeana 31

Considere o problema (3.17), aqui reescrito na forma:

max min cx + (Ax b) (3.18)


0 x
suj. a Dx = e
x 0 e inteiro

Seja tambem o problema:

max min cx + (Ax b) (3.19)


0 x
suj. a Dx = e
x0

O problema (3.19) e o proprio problema dual lagrangeano, sem a presenca das


restricoes de integralidade das variaveis x. Note que esses dois problemas serao
iguais, caso o vetor x, encontrado a partir da solucao de (3.19), seja inteiro. Caso
contrario, como o conjunto de solucoes factveis de (3.18) esta contido no espaco
gerado pelas restricoes de (3.19), o valor otimo de (3.19) sera menor que o valor
otimo de (3.18).
Desenvolvendo o dual da parcela de minimizacao do problema (3.19), sendo o
vetor das variaveis duais associadas as restricoes Dx = e, tem-se que:

max max e b (3.20)


0
suj. a D A c
livre

O problema (3.20) pode ser escrito como:

max e b (3.21)
,
suj. a D A c
0
livre

que, na forma dual, e dado por:

min cx (3.22)
suj. a Ax b
Dx = e
x0

Pelas condicoes de otimalidade de um problema de programacao linear, pode-se


afirmar que a solucao do problema (3.22), dual do problema (3.20), possui o mesmo
3.4 Relaxacao Lagrangeana 32

valor que a solucao dos problemas (3.20) e (3.19). Uma vez que a solucao de (3.19)
e igual a solucao obtida pela relaxacao linear do problema original apresentada em
(3.22), pode-se concluir que o limite inferior obtido pela relaxacao lagrangeana sera
maior ou igual ao limite obtido pela relaxacao linear [14].
Ja em problemas multiproduto inteiro, o limite inferior obtido pela relaxacao
lagrangeana e igual ao limite obtido pela relaxacao linear, pois os subproblemas
lagrangeanos sao problemas de fluxo de custo mnimo que contem uma matriz de
restricoes unimodular, o que garante a integralidade de x. Embora isto aconteca,
ainda e interessante utilizar a relaxacao lagrangeana, pois a estrutura do problema
lagrangeano, formada por problemas de caminho mnimo, o torna bem mais facil de
ser resolvido.
Vale ressaltar que esta comparacao e valida considerando-se um modelo linear
com funcao objetivo linear. Em [26], um modelo de programacao linear que considera
uma funcao objetivo de custo concava e linear por partes e utilizado para resolver um
problema multiproduto de custos concavos. Neste caso, e mostrado que os limites
inferiores resultantes da relaxacao lagrangeana nao sao melhores do que os limites
gerados pela relaxacao linear.

3.4 Decomposicao de Benders

Em [6] e [7], e apresentado o algoritmo de decomposicao de Benders, que pode


ser utilizado para resolver o problema dual lagrangeano (3.17).
O algoritmo de decomposicao de Benders, assim como o metodo de decomposicao
de Dantzig-Wolfe, divide o problema original em um problema mestre e um ou mais
subproblemas.
Considere o problema dual lagrangeano (3.17) apresentado, por facilidade de
desenvolvimento, novamente em (3.23).

L( ) = max min cx + (Ax b) (3.23a)


0 x
suj. a Dx = e (3.23b)
x 0 e inteiro. (3.23c)

Fazendo-se Z = L( ), a desigualdade Z cx + (Ax b) e verdadeira para


todo x , sendo o conjunto dos pontos delimitados pelas restricoes (3.23b) e
(3.23c). Desse modo, pode-se escrever o problema:

max Z (3.24a)
suj. a Z cx + (Ax b), x (3.24b)
0 e Z variavel livre (3.24c)
3.4 Relaxacao Lagrangeana 33

que e equivalente ao problema (3.23). Uma vez que o numero de pontos contidos
em e infinito, torna-se inviavel criar um problema deste tipo com todas as suas
restricoes. Contudo, supondo que sejam conhecidos os pontos x1 , x2 , . . . , x(K1)
factveis em , ao inves de resolver o problema (3.24), pode-se resolver o problema
mestre (3.25).

max Z (3.25a)
suj. a Z cx1 + (Ax1 b) (3.25b)
Z cx2 + (Ax2 b) (3.25c)
..
.
Z cx(K1) + (Ax(K1) b) (3.25d)
0 e Z variavel livre. (3.25e)

O problema (3.25) e linear e possui um numero finito de restricoes, o que permite


a utilizacao do metodo simplex para sua solucao.
Considere que (Zk , k ) seja a solucao obtida em (3.25). Se for factvel em (3.24),
entao e a solucao otima do problema dual lagrangeano. Para verificar essa conclusao,
ou seja, avaliar se (Zk , k ) e factvel em (3.24), deve-se resolver o subproblema (3.26).
Este subproblema e o mesmo gerado pela decomposicao de Dantzig-Wolfe.

min cx + k (Ax b) (3.26a)


s.a x (3.26b)

Considere a solucao xk obtida ao se resolver o subproblema (3.26). Se Zk


cxk + k (Axk b), entao a solucao (Zk , k ) e factvel em (3.24). Logo, (Zk , k )
e a solucao otima do problema dual lagrangeano. Caso contrario, adiciona-se a
restricao Z cxk + (Axk b) ao conjunto de restricoes do problema mestre e
resolva-o novamente. Esta restricao adicionada se refere ao hiperplano de suporte
que tangencia a funcao lagrangeana L(), pois, para cada k , e encontrado sempre
um xk que minimiza a funcao objetivo (3.26a). Observe, na figura 3.2, que, para cada
k fixo nao-negativo, ha varios hiperplanos, sendo um para cada xk factvel em .
Logo, as solucoes obtidas ao resolver os subproblemas constroem a regiao destacada
na figura 3.2. Desse modo, o problema mestre contem apenas as restricoes que
representam os hiperplanos que tangenciam a funcao L().
Alem disso, cada solucao obtida ao resolver o subproblema (3.26) fornece um
novo limite inferior para o problema original. Alem disso, em cada iteracao pode-se
verificar se a solucao xk e factvel no problema original, o que nos fornece um novo
limite superior.
Observe que, a cada iteracao do algoritmo de Benders, uma nova restricao e ge-
rada, fazendo com que sejam gerados novos cortes no espaco do conjunto de solucoes
3.5 Conclusao 34


t Incio

?
Encontre uma solucao x1
factvel para o problema
original. Faca LS = cx1

?
k=2
?
Resolva o problema mestre
max Z
- suj. a Z cxj + (Axj b) 1 j k 1
6
0
Z livre

Z k , k
?
Resolva o problema
min cx + k (Ax b)
suj. a x

k k+1 xk
?
6 
Q
Q
 Q
- Novo LS
 Q Sim
 Axk b Q
Q
Q 
 igual a cxk
Q 
Q 
Q
Nao
?
Novo LI igual a 
 ?
cxk + k Axk b

?
PP
 PP
Adicione a restricao   PP  Solucao otima do
 Nao k PP Sim -
k k
Z cx + Ax b 
PPZ cx + Axk b
k k problema dual 
PP 
no problema mestre PP   lagrangeano: Z k , k
P
P 

?
Fim


Figura 3.3: Algoritmo de decomposicao de Benders.

factveis do problema mestre. Da seu nome de algoritmo de planos de corte ou


outer-linearization.
Um resumo do algoritmo de decomposicao de Benders e apresentado na figura
3.3.

3.5 Conclusao

E interessante notar a semelhanca que ha entre os algoritmos de decomposicao


de Dantzig-Wolfe e de Benders.
3.5 Conclusao 35

Se for resolvido um problema primal utilizando Dantzig-Wolfe, e possvel gerar


o dual deste problema e resolve-lo utilizando Benders, que apresentara o mesmo
comportamento. Como Benders adiciona, em cada iteracao, restricoes (cortes) e,
para cada restricao no primal, ha uma variavel correspondente no dual, equivalente-
mente, do ponto de vista de Dantzig-Wolfe, e como se fossem adicionadas variaveis
no problema mestre gerado pelo respectivo metodo de decomposicao. Ha, desse
modo, uma relacao de dualidade entre os respectivos problemas mestres, gerados
por cada um dos metodos de decomposicao.
Observe que, no metodo de Benders, o conjunto de solucoes factveis vai sendo
reduzido ao longo das iteracoes. Ja na decomposicao de Dantzig-Wolfe, a cada nova
base gerada para o problema mestre, ha uma aproximacao ao valor otimo.
Ao utilizar a decomposicao de Dantzig-Wolfe ou a de Benders, a convergencia
para o valor otimo do problema original e garantida. Porem, ao se aproximar da
solucao otima, a convergencia se torna lenta. Desse modo, e aconselhavel utilizar
algum outro criterio de parada como um limite para o gap de dualidade.
Ja a relaxacao lagrangeana nao garante a convergencia para o otimo do proble-
ma original. Contudo, ha garantia de otimalidade do problema dual lagrangeano,
pois e utilizado o algoritmo de Benders. Porem, devido a lenta convergencia desse
algoritmo, e interessante limitar seu numero de iteracoes a um valor especfico.
E importante observar que a utilizacao da relaxacao lagrangeana e necessaria,
pois, se aplicassemos o algoritmo de Benders diretamente a formulacao dual do pro-
blema multiproduto, nao haveria garantia de integralidade das variaveis no problema
original.
Captulo 4

Aplicacao de Relaxacao
Lagrangeana ao Problema
Multiproduto

4.1 Introducao

Este captulo apresenta uma aplicacao da tecnica de relaxacao lagrangeana, jun-


tamente com o algoritmo de Benders, as formulacoes no-arco e arco-rota do problema
multiproduto inteiro definido em (2.6). Primeiro, e construda a funcao lagrangeana
de cada formulacao do problema. Em seguida, e apresentada uma aplicacao do
algoritmo de Benders ao problema dual lagrangeano, com detalhes da solucao do
problema mestre, dos subproblemas gerados em cada formulacao e da obtencao da
solucao factvel inicial. Depois disso, sao mostrados resultados obtidos ao se resolver
instancias-teste encontradas na literatura. Ao final, sao apresentadas conclusoes.
Os algoritmos desenvolvidos estao no Apendice A. Foram implementados: o al-
goritmo de decomposicao de Benders; o algoritmo simplex, para resolver o problema
mestre de Benders; o algoritmo de Dijkstra, para resolver os problemas de caminho
mnimo gerados pela decomposicao; e a metaheurstica busca tabu, para obter a
solucao factvel inicial do problema original.

4.2 Relaxacao Lagrangeana aplicada ao Problema


Multiproduto

Ao aplicar a metodologia de relaxacao lagrangeana a formulacao no-arco (2.7),

36
4.3 Decomposicao de Benders 37

substituindo as restricoes de capacidade nos arcos, dadas por (2.7b), pelo termo de
penalidade que e adicionado a funcao objetivo, obtem-se a funcao lagrangeana L()
apresentada em (4.1):
P P
!
X X p X X
p p p p
L() = min cij d xij + ij d xij uij (4.1a)
p=1 (i,j)A (i,j)A p=1
X X
suj. a xpij xpji = bpi i N, 1 p P (4.1b)
(i,j)A (j,i)A

xpij {0, 1}, (i, j) A, 1 p P (4.1c)

Para a formulacao arco-rota, apresentada em (2.8), e construda a funcao la-


grangeana (4.2), que considera, como restricoes complicantes, as restricoes de ca-
pacidade nos arcos:

XP X X P
X X
L() = min cpr dp xpr + ij arij dp xpr uij (4.2a)
p=1 rR(p) (i,j)A p=1 rR(p)
X
suj. a xpr = 1 1 p P, (4.2b)
rR(p)

xpr {0, 1}, r R(p), p = 1, . . . , P (4.2c)

Apos a montagem das funcoes lagrangeanas de cada formulacao, o proximo passo


consiste em encontrar multiplicadores de Lagrange , otimos para o problema dual
lagrangeano:
L( ) = max L() (4.3)
0

Em seguida, deve-se determinar a qualidade da solucao factvel do problema original


obtida, pela analise do gap de dualidade encontrado. A proxima secao descreve estas
duas etapas.

4.3 Aplicacao de Decomposicao de Benders

O algoritmo de decomposicao de Benders foi aplicado as formulacoes no-arco e


arco-rota do problema de fluxo de custo mnimo multiproduto inteiro para resolver
o problema dual lagrangeano (4.3).
4.3 Decomposicao de Benders 38

No caso da formulacao no-arco, este algoritmo, na iteracao k, resolve o problema


mestre (4.4), utilizando o metodo simplex classico:
max Z (4.4a)
P P
!
X X X X
suj. a Z cpij dp xpij1 + ij dp xpij1 uij (4.4b)
p=1 (i,j)A (i,j)A p=1

..
.

P P
!
X X X X
Z cpij dp xpij(k1) + ij dp xpij(k1) uij (4.4c)
p=1 (i,j)A (i,j)A p=1

Z livre e 0. (4.4d)
Nesta mesma iteracao, tambem e resolvido o subproblema (4.5), que e decom-
posto em P problemas de caminho mnimo. Ao final, caso nao seja atingida a
otimalidade do problema dual lagrangeano, o vetor x e enviado ao problema mestre.
P P
!
X X p X X
min cij dp xpij + ijk dp xpij uij (4.5a)
p=1 (i,j)A (i,j)A p=1
X X
suj. a xpij xpji = bpi i N, 1 p P (4.5b)
(i,j)A (j,i)A

xpij {0, 1}, (i, j) A, 1 p P. (4.5c)


Quando o algoritmo de Benders e aplicado a formulacao arco-rota, sao criados
o problema mestre (4.6) e o subproblema (4.7). Este problema mestre e tambem
resolvido pelo metodo simplex.
max Z (4.6a)

P
X X X P
X X
suj. a Z cpr dp xpr1 + ij arij dp xpr1 uij (4.6b)
p=1 rR(p) (i,j)A p=1 rR(p)

..
.

P
X X X P
X X
Z cpr dp xpr(k1) + ij arij dp xpr(k1) uij (4.6c)
p=1 rR(p) (i,j)A p=1 rR(p)

Z livre e 0 (4.6d)
4.3 Problema Mestre 39

O subproblema (4.7) apresenta um pequeno numero de restricoes, porem, o


numero de variaveis e bastante elevado. Para sua solucao, poder-se-ia utilizar o
metodo simplex revisado, mas ha uma forma mais eficiente de resolve-lo, apresen-
tada em seguida.

XP X X P
X X
min cpr dp xpr + ijk arij dp xpr uij (4.7a)
p=1 rR(p) (i,j)A p=1 rR(p)
X
suj. a xpr = 1 1pP (4.7b)
rR(p)

xpr {0, 1}, r R(p) e p = 1, . . . , P (4.7c)


Observe que a solucao otima do subproblema (4.7) possui uma variavel basica
xpr para cada produto p. Logo, basta selecionar, para cada produto, a variavel xpr
que possui o menor coeficiente de custo relativo

X
cpr + ijk arij dp (4.8)
(i,j)A

na funcao objetivo. Considerando que o custo cpr , associado a cada rota, e dado por:
X p
cpr = cij arij (4.9)
(i,j)A

sendo cpij o custo unitario do produto p no arco (i, j), o coeficiente (4.8) da variavel
xpr pode ser escrito como:
X 
cpij + ijk arij dp (4.10)
(i,j)A

Como todo produto p possui um no-origem s e um no-destino t, pode-se resolver


um problema de caminho mnimo para cada produto, tendo o custo de cada arco
dado por (cpij + ijk ). Desse modo, a solucao obtida indicara a rota r otima para o
produto p. O conjunto das rotas selecionadas formam, portanto, a base otima do
subproblema (4.7).

4.3.1 Problema Mestre de Benders

A solucao do problema mestre, em cada iteracao do algoritmo de Benders, foi


obtida utilizando o metodo simplex classico. O metodo das duas fases foi utilizado
para obter a solucao factvel basica inicial.
4.3 Subproblema 40

Em cada iteracao do algoritmo de Benders, uma nova restricao e adicionada


ao problema mestre. Ao considerar a formulacao no-arco, o problema mestre (4.4)
recebe, na iteracao k + 1, a restricao (4.11), obtida pela solucao do subproblema
(4.5), que fornece um novo vetor xk .
P P
!
X X p X X
Z cij dp xpijk + ij dp xpijk uij (4.11a)
p=1 (i,j)A (i,j)A p=1

O mesmo acontece quando se utiliza a formulacao arco-rota. Na iteracao k + 1,


a restricao (4.12) e adicionada ao problema mestre (4.6) para cada nova rota r que
e encontrada ao se resolver o subproblema (4.7) na iteracao anterior.

P
X X X P
X X
Z cpr dp xprk + ij arij dp xprk uij (4.12a)
p=1 rR(p) (i,j)A p=1 rR(p)

Como foi mostrado, a rota r, encontrada na iteracao k para cada produto p, se


refere ao caminho mnimo que liga o no-origem s ao no-destino t, tendo seu custo
dado por (4.10). Alem disso, a coluna na matriz arco-rota da rede, associada a
variavel xpr que identifica a rota otima para cada produto, mostra os arcos contidos
na rota. Desse modo, pode-se concluir que a restricao (4.12) e equivalente a restricao
(4.11).
Assim, o politopo convexo formado pelas restricoes do problema mestre e o
mesmo em ambas as formulacoes. Logo, o numero de iteracoes realizadas pelo
metodo simplex classico na formulacao no-arco, necessarias para solucionar o pro-
blema, e igual ao numero de iteracoes necessarias para resolver o mesmo problema
em sua formulacao arco-rota.
Alem disso, a solucao (Zk , k ) obtida em cada iteracao e a mesma em ambas for-
mulacoes. Portanto, a solucao do subproblema, que recebe estas variaveis duais, em
cada iteracao tambem e a mesma, tanto na formulacao no-arco quanto na formulacao
arco-rota.

4.3.2 Subproblema

Como se pode observar, os subproblemas gerados, tanto na formulacao no-arco


quanto na formulacao arco-rota, podem ser decompostos em um conjunto de pro-
blemas de caminho mnimo - um para cada produto.
O problema de caminho mnimo pode ser formulado como um problema de fluxo
em rede, para o qual deve ser enviada uma unidade de fluxo do no s ao no t a um
custo mnimo. Desse modo, considere que o no s tenha oferta igual a 1; o no t,
4.3 Subproblema 41

demanda 1; e os demais nos da rede, oferta e demanda iguais a zero. O modelo


linear (4.13) apresenta a formulacao deste problema.
As restricoes (4.13b) representam as equacoes de conservacao de fluxo de rede.
As restricoes (4.13c) indicam se o arco pertence ou nao ao caminho mnimo.
X
min cij xij (4.13a)
(i,j)A
X X
suj. a xij xki = bi , i N, (4.13b)
(i,j)A (k,i)A

xij {0, 1} (i, j) A , (4.13c)


sendo
1 se i = s,
bi = 1 se i = t,

0, caso contrario.
Uma vez que o problema de caminho mnimo e um problema de fluxo de custo
mnimo, poderia ser resolvido utilizando-se o algoritmo simplex de rede ou o metodo
simplex classico. Entretanto, existem metodos especficos para este problema, que
sao mais eficientes [6].
Durante as ultimas 4 decadas, foram desenvolvidos algoritmos para a obtencao
da solucao do problema de caminho mnimo. Em [32], sao apresentados varios
metodos que podem ser utilizados para resolver o problema do caminho mnimo
de forma eficiente. Alem disso, sao apresentadas as vantagens e desvantagens dos
algoritmos, quando aplicados ao problema de caminho mnimo em multiplos pares
origem-destino OD.
Um algoritmo simples, eficiente e bem conhecido para resolver este problema,
quando os custos nos arcos da rede sao todos nao-negativos, e o algoritmo de Dijkstra
[6]. Em [30], este algoritmo e utilizado no processo de geracao de colunas.
O pseudo-codigo deste algoritmo, que pode ser encontrado em [6], e apresentado
a seguir. Em cada iteracao, ele calcula o valor de uma nova variavel wq , para indicar
a distancia de menor custo do no origem ao no q. O conjunto e utilizado para
armazenar os nos para os quais ja foi calculado o valor wi ; o conjunto indica
os nos para os quais ainda nao foi calculado esse valor. Logo, em cada iteracao, e
construdo um caminho mnimo do no-origem s a um novo no da rede.
Algoritmo de Dijkstra
1. ws = 0; {s}; = N ;
2. Escolha do proximo no a entrar no conjunto .
wp + cpq = min {wi + cij } (4.14)
(i,j)(,)
4.3 Subproblema 42

3. wq = wp + cpq
4. {q}
5. Volte ao passo 2.
A equacao (4.14) mostra que o no q , a ser transferido para , e aquele que
possui a menor distancia do no-origem. Esse valor de distancia e armazenado em
wq .
PSfrag replacements
Como exemplo, considere a aplicacao do algoritmo de Dijkstra para encontrar o
caminho mnimo entre o no-origem 1 e o no-destino 4 da rede apresentada na figura
4.1.
2
2
1 5

1 1 4 4
4
2 3

3
3
Figura 4.1: Rede orientada com custos em cada arco.

Para esse exemplo, sao obtidos os seguintes valores das variaveis, em cada itera-
cao do algoritmo:
1. = {1}; = {2, 3, 4}; w1 = 0;
2. min{(w1 + c12 ), (w1 + c13 )} = min{1, 2} = 1; = {1, 2}; = {3, 4}; w2 = 1;
3. min{(w1 + c13 ), (w2 + c23 ), (w2 + c24 )} = min{2, 5, 6} = 2;
= {1, 2, 3}; = {4}; w3 = 2;
4. min{(w2 + c24 ), (w3 + c34 )} = min{6, 5} = 5; = {1, 2, 3, 4}; = {}; w4 = 5;
5. Como e vazio, o algoritmo e finalizado. A solucao otima e o caminho {1,3,4}.
Em [6] e apresentada uma demonstracao de que o algoritmo de Dijkstra sempre
encontra uma solucao otima para o problema de caminho mnimo.
Como as instancias que foram resolvidas possuem todos os custos cpij nao-
negativos, entao o vetor de custo de cada subproblema, dado por cp + k , tambem
e nao-negativo. Logo, e aceitavel a utilizacao deste algoritmo para solucionar os
problemas de caminho mnimo gerados.
4.3 Solucao Factvel Inicial 43

4.3.3 Solucao Factvel Inicial

O algoritmo de Benders, para ser inicializado, precisa de uma solucao inicial


que seja factvel no problema original. Para obter esta solucao, e utilizada a meta-
heurstica busca tabu.
Esta solucao nao e facil de ser obtida para o problema multiproduto inteiro,
pois trata-se de um problema NP-difcil que, na maioria dos problemas praticos, se
apresenta com um elevado numero de variaveis inteiras.
Assim, a utilizacao de um metodo de programacao matematica como o algoritmo
branch-and-bound, no qual em cada no e resolvido um problema de programacao
linear, torna-se inviavel, pois o numero de variaveis inteiras e bastante elevado.
A adocao de tecnicas heursticas tem permitido, de um modo geral, a deter-
minacao, de forma eficiente, de solucoes para problemas de programacao linear in-
teira. A grande restricao na aplicacao dessas tecnicas reside na impossibilidade
de garantia da determinacao da solucao otima de um problema. Alem disso, nao
indicam o quanto a solucao obtida esta distante da otimalidade [31].
A seguir, sao apresentadas algumas definicoes, pertinentes particularmente ao
uso de tecnicas heursticas, que serao utilizadas ao longo do texto.
Considere o conjunto S como sendo o conjunto de todas as solucoes possveis do
problema. Seja a funcao f definida como a funcao de avaliacao ou funcao objetivo
a minimizar, utilizada para avaliar a qualidade de cada solucao obtida. A funcao
N associa, a cada s S, sua vizinhanca N (s) S. Desse modo, cada s0 N (s) e
um vizinho de s. A modificacao que transforma uma solucao s em qualquer vizinho
s0 que esteja contido em N (s) e conhecida como movimento. A realizacao de um
movimento m e representada por s0 s m [31].
As tecnicas heursticas se classificam em heursticas construtivas, heursticas de
refinamento e metaheursticas. As heursticas construtivas geram uma solucao ele-
mento por elemento. Estes elementos sao ordenados por uma funcao de avaliacao,
que determina a prioridade de cada um, e, em seguida, sao inseridos em uma lista
de elementos candidatos, no qual apenas o melhor e escolhido em cada iteracao.
As heursticas de refinamento partem de uma solucao inicial e exploram sua
vizinhanca, de modo a buscar sempre uma solucao melhor que a solucao atual.
Assim, sao finalizadas quando um otimo local e encontrado.
O pseudo-codigo do metodo da descida, que e uma heurstica de refinamento
classica, e apresentado a seguir. Esta heurstica pode ser encontrada em [18].

Metodo da descida
1. Escolha uma solucao inicial s em S.

2. Encontre a melhor solucao s0 em N (s) de modo que f (s0 ) f (s).


4.3 Solucao Factvel Inicial 44

3. Se f (s0 ) f (s), entao pare. Senao, s s0 e volte ao passo 2.


Observe que este procedimento para em um otimo local. Outras heursticas de
refinamento podem ser encontradas em [31].
As metaheursticas, por sua vez, sao heursticas que dispoem de mecanismos
para escapar de otimos locais. As metaheursticas se classificam em metaheursticas
de busca local, que se baseiam na nocao de vizinhanca, e metaheurstica de busca
populacional, em que uma nova populacao de indivduos ou solucoes e gerada com
base na populacao anterior.
Dentre as metaheursticas de busca local, se encontram as tecnicas simulated
anneling, busca tabu e GRASP. Dentre as metaheuristicas de busca populacional,
estao os algoritmos geneticos e os algoritmos memeticos.
Para encontrar a solucao factvel inicial para o problema multiproduto inteiro,
foi utilizada a metaheurstica busca tabu.
A metaheurstica busca tabu escolhe, em cada iteracao, o melhor vizinho s0
N (s), mesmo que ele seja pior que a solucao s atual, ou seja, mesmo que f (s0 ) > f (s),
o vizinho s0 sera escolhido. Desse modo, e possvel escapar de otimos locais. Porem,
ao realizar estes movimentos, pode-se levar a ocorrencia do fenomeno de ciclagem,
ou seja, o algoritmo retorna a uma solucao que ja foi encontrada anteriormente.
Para evitar isto, e definida uma lista tabu L, utilizada para armazenar os movi-
mentos reversos aos ultimos |L| movimentos realizados. Estes movimentos sao
proibidos de serem realizados enquanto estiverem na lista tabu. Assim, qualquer
movimento para as solucoes anteriores e proibido.
A lista tabu classica funciona como uma fila de tamanho fixo, ou seja, quando
atinge seu tamanho maximo, sempre que um novo elemento e adicionado a lista, o
mais antigo sai. Assim, as ultimas solucoes obtidas nao sao geradas, pois os movi-
mentos que as geram estao na lista tabu, reduzindo-se, desse modo, a possibiidade
de ciclagem.
Por outro lado, esta lista tambem pode impedir movimentos para solucoes ainda
nao visitadas. Assim, e definida uma funcao de aspiracao, que permite realizar um
movimento que esteja na lista tabu. Um exemplo seria permitir a realizacao de um
movimento tabu que conduza a uma solucao melhor que a encontrada ate entao.
A lista tabu pode ser estatica ou dinamica. A lista tabu dinamica permite a
alteracao de seu tamanho durante o progresso da pesquisa pela solucao otima. A
grande vantagem da lista tabu de tamanho dinamico e que se minimiza a possibili-
dade de ocorrer ciclagem.
Os principais passos do algoritmo busca tabu utilizado para obter a solucao
factvel inicial para o problema multiproduto inteiro sao apresentados a seguir.

Algoritmo Busca Tabu


1. inicio;
4.3 Solucao Factvel Inicial 45

2. x caminhos minimos();

3. x x;

4. tam lista = arredonda((tmax tmin )aleatorio[0 1] + tmin );

5. atual 0;

6. melhorIter 0;

7. L [ ];

8. enquanto nao encontrar solucao viavel e (atualmelhorIter < BT max), faca:

9. atual atual + 1;

10. a cada 2tmax , modifique o tamanho de L;

11. Selecione x0 x m de modo que o valor de f (x0 ) seja minimo e m nao


seja tabu. Se todos os movimentos sao tabu, entao selecione f (x0 ) de modo
que f (x0 ) < f (x ). Caso todos os movimentos m sejam tabu e nao propiciem
melhoria no valor de f (), entao deve ser escolhido o movimento mais antigo
da lista tabu;

12. L [L movimento]. Este movimento e identificado pela n-upla (p a),


em que p indica o produto e a, o arco violado;

13. x x0 ;

14. se (f (x) < f (x )) entao:

15. x x;

16. melhorIter atual;

17. fim se;

18. fim enquanto;

19. x x ;

20. fim algoritmo.

A seguir sao apresentadas algumas particularidades da aplicacao da meta-


heurstica busca tabu ao problema multiproduto inteiro para obter a solucao factvel
inicial.
4.3 Solucao Factvel Inicial 46

1. No passo 2, sao resolvidos P problemas de caminho mnimo para todos os


produtos, de modo a gerar uma solucao inicial x que, em geral, e infactvel no
problema original, pois viola as restricoes de capacidade dos arcos.
2. A funcao de avaliacao
f (x) = cx + max{0, (Ax u)} (4.15)
na qual X
= cij
(ij)A

foi utilizada para avaliar cada solucao x obtida. Seu objetivo e penalizar
os arcos com capacidade violada. O arco i com capacidade violada possui
Ai x > ui . Essa funcao de avaliacao fornece uma medida do quanto a solucao
atual e infactvel. Logo, o algoritmo procura a solucao para a qual o valor
f (x) seja mnimo.
3. A cada 2tmax , o tamanho da lista tabu e modificado, de modo a evitar a
ciclagem. Esta estrategia de modificacao do tamanho da lista tabu no intervalo
[tmin , tmax ] mostrou-se eficiente ao resolver um problema de roteamento de
veculos, conforme esta apresentado em [31]. Na referencia citada, tmin = 0.9n
e tmax = 1.1n, sendo n o numero de cidades da instancia considerada.
4. No passo 12 do algoritmo, sao gerados os vizinhos da solucao atual e o melhor
vizinho e escolhido como nova solucao para o problema. Um vizinho x0 e gerado
como segue. Para cada produto p que faz uso do arco (i, j) com capacidade
violada, seu custo cpij e penalizado e um novo problema de caminho mnimo e
resolvido para este produto p. Desse modo, o arco (i, j) atual nao mais fara
parte do novo caminho encontrado para o produto p. Em seguida, este novo
0
caminho mnimo, identificado por xp , e agregado ao vetor x atual de modo
a gerar um novo x0 . Cada x0 , entao, representa uma nova solucao, dada pela
modificacao do fluxo nos arcos para cada produto p. Alem disso, se ja existir
na lista tabu n-uplas (p a) para o produto p, todos os arcos contidos na lista
sao tambem penalizados.
5. Apos a realizacao do movimento escolhido, a n-upla (p a) e adicionada a lista
tabu.
6. Em seguida, no passo 15, e realizado um teste que atualiza a melhor solucao
encontrada.
A condicao de parada do algoritmo e encontrar uma solucao factvel para o
problema original, ou realizar um numero de iteracoes sem melhora maior ou igual
a BT max.
4.4 Resultados Computacionais 47

Tabela 4.1: Dimensao dos Problemas Multiproduto


Instancias Produtos (p) Nos (n) Arcos (a) p/n a/n
Bl01 a Bl04 48 32 96 1.5 3
Bl05 a Bl08 48 32 320 1.5 10
Bl09 a Bl12 192 32 96 6 3

Algumas alteracoes foram realizadas de acordo com a instancia a ser resolvida.


Dentre elas, pode-se citar a alteracao nos valores de tmin e tmax .

4.4 Resultados Computacionais

Os algoritmos desenvolvidos foram testados utilizando-se as instancias Carbin.


Estas instancias de teste foram obtidas em [1]. A tabela 4.1 apresenta os dados
referentes a estas instancias, agrupadas pela razao produtos/no (indicada pelo valor
p/n) e pela densidade da rede, dada pela razao numero de arcos por no (indicada
pelo valor a/n).
Dentro de um mesmo grupo, as variacoes que ocorrem de uma instancia para
outra sao o intervalo de variacao do valor dos custos e se o custo e igual ou nao
para todos os produtos em um mesmo arco. Todas as instancias possuem os custos
gerados de forma aleatoria. A primeira e a segunda instancias de um grupo possuem
o custo variando no intervalo [1..1000] e a terceira e quarta instancias possuem o
custo variando no intervalo [1..10]. Os produtos da primeira e terceira instancias
possuem o mesmo custo e os da segunda e quarta instancias possuem custos distintos.
Todas as instancias utilizadas possuem o vetor de custos cp de cada produto
p maior ou igual a zero. Isto possibilitou a utilizacao do algoritmo de Dijkstra
para solucionar os problemas de caminho mnimo que sao gerados ao se aplicar
a metaheurstica busca tabu e, tambem, ao decompor o subproblema gerado pelo
algoritmo de decomposicao de Benders.
Para resolver estas instancias, foi utilizado o software MatLab versao 6.5, sob
uma plataforma Pentium 4, clock de 2.8GHz, tendo 512MB de memoria RAM e sob
o sistema operacional Windows XP.
Para encontrar a solucao factvel inicial para o problema original, foi utilizada a
metaheurstica busca tabu. Para resolver o problema dual lagrangeano, foi utilizado
o algoritmo de decomposicao de Benders. O problema mestre gerado pela decom-
posicao foi resolvido pelo metodo simplex classico e o subproblema foi decomposto
em p problemas de caminho mnimo, resolvidos utilizando-se o algoritmo de Dijkstra.
A metaheurstica busca tabu, como foi apresentada, e um algoritmo nao-
4.4 Resultados Computacionais 48

Tabela 4.2: Resultados Obtidos


Instancia Metaheurstica Benders
Arcos Violados Tempo (seg) Tempo (seg) gap (%)
Bl01 0 94,65 11,06 11,31
Bl02 3 > 1800 - -
Bl03 3 > 1800 - -
Bl04 8 > 1800 - -
Bl05 0 5,12 33,79 6,20
Bl06 0 4,07 27,25 5,06
Bl07 0 9,82 39,45 4,37
Bl08 0 3,10 17,14 7,79
Bl09 5 > 1800 - -
Bl10 9 > 1800 - -
Bl11 0 1228,80 202,20 7,74
Bl12 1 880,20 - -

determinstico, ou seja, dada uma entrada, a sada obtida nao e garantida ser a
mesma sempre que o algoritmo e executado. Esta variacao no resultado gerado
pela metaheurstica ocorre porque o tamanho da lista tabu e modificado de forma
aleatoria. Assim, para todas as instancias, foram realizadas tres tentativas de se
obter a solucao factvel inicial e o melhor resultado das tres esta apresentado na
tabela 4.2.
Uma dificuldade de se usar a metaheurstica busca tabu esta no ajuste de seus
parametros, principalmente o tamanho da lista tabu. Por exemplo, para a instancia
Bl01, o tamanho ideal foi um valor aleatorio entre 0, 9n e 1, 1n, para n igual a 12.
Ja para as instancias Bl05 a Bl08, que possuem uma rede mais densa, o tamanho
da lista tabu foi um valor aleatorio neste mesmo intervalo, porem com n igual a 6.
Quando o tamanho da lista tabu e muito pequeno, ocorre ciclagem. Por outro
lado, ao aumentar demasiadamente o tamanho da lista tabu para a mesma instancia,
o numero de iteracoes sem melhora atinge o limite BT max = 500. Isto significa
que, caso nao ocorra melhoria na solucao atual por 500 iteracoes, entao o algoritmo
e interrompido com uma solucao infactvel.
A tabela 4.2 apresenta o tempo de execucao gasto pela metaheurstica busca
tabu e pelo algoritmo de decomposicao de Benders, quando aplicados as instancias
da tabela 4.1. Alem do tempo de execucao, sao apresentados, tambem, o numero de
arcos violados obtidos ao final da aplicacao da metaheurstica busca tabu e o valor
do gap de dualidade, dado pela formula (4.16).
O gap de dualidade e usado como medida da qualidade da solucao obtida, in-
PSfrag replacements

4.4 Resultados Computacionais 49

1016
7
f (x)
6

00 100 200 300 400 500 600 700


Iteracao

Figura 4.2: Solucoes obtidas pela metaheurstica busca tabu na instancia Bl01.

formando o quanto ela esta distante da solucao otima. A qualidade da solucao e


dada pelo valor percentual da distancia que a solucao atual, dada pelo melhor limite
superior, se encontra da solucao otima.

min(LS) max(LI)
gap = 100 (4.16)
min(LS)

Para diversas instancias da tabela 4.1, a aplicacao da metaheurstica busca tabu


nao possibilitou a geracao de uma solucao inicial factvel. As instancias para as quais
esse fato ocorreu tem numero de arcos violados maior que zero na tabela 4.2. Nesses
casos, nao e possvel a solucao do problema dual lagrangeano utilizando o algoritmo
de decomposicao de Benders, pois este exige o conhecimento de uma solucao inicial
factvel do problema original para sua aplicacao.
Para a aplicacao do algoritmo de Benders, foi imposto tambem um limite maximo
de 30 iteracoes. Este limite e utilizado para interromper sua execucao, caso nao seja
encontrada uma solucao otima para o problema dual lagrangeano. Neste caso, o
maior limite inferior encontrado e dado como solucao para o problema dual la-
grangeano.
Ao aplicar a metaheurstica busca tabu a instancia Bl01, foram obtidos os valo-
res apresentados no grafico da figura 4.2 para f (x) dado em (4.15). Como pode-se
observar, nas primeiras iteracoes, como e sempre escolhido um movimento para uma
solucao x0 que seja o melhor vizinho, o valor de f (x) tende a diminuir ate alcancar
um mnimo local. Em seguida, o valor de f (x) oscila, devido aos movimentos de
piora que a metaheurstica busca tabu realiza para escapar dos otimos locais.
4.4 Resultados Computacionais 50

1016
2
f1 ( )
1, 5
f2 ( )
1

0, 5

0, 5

1 0 5 10 15 20 25
Iteracao
Figura 4.3: Limites encontrados pelo algoritmo de Benders na instancia Bl01.

Em seguida, o algoritmo de decomposicao de Benders recebe, como entrada,


a solucao factvel obtida pela metaheurstica busca tabu e resolve o problema dual
lagrangeano da instancia Bl01. O grafico da figura 4.3 apresenta o limites superiores
- LS - e os limites inferiores - LI - obtidos pelo algoritmo de Benders em cada itera-
cao. Os limites superiores LS indicam os valores obtidos para a funcao objetivo do
problema original, ou seja:
f1 = cx
Os limites inferiores LI demonstram o valor da funcao objetivo do problema dual
lagrangeano, dado por:
f2 = cx + (Ax u)
Os valores de LI, como podem ser observados, nao sao estritamente crescentes.
Em [2] e mostrado este mesmo comportamento ao usar o metodo subgradiente para
resolver um problema dual lagrangeano gerado para um problema multiproduto.
Por outro lado, observe que a oscilacao dos valores dos limites inferiores encon-
trados pelo algoritmo de Benders tende a diminuir, convergindo ao valor otimo. A
diferenca entre o valor obtido na iteracao k 1 e k diminui a medida que k aumenta,
o que mostra a convergencia do metodo. Esta convergencia e garantida pois, em
cada iteracao, o conjunto de solucoes factveis do problema mestre e reduzido pela
adicao de uma nova restricao.
No entanto, a medida que k cresce, a convergencia se torna lenta. Isto e uma
caracterstica comum dos metodos de decomposicao. Desse modo, o algoritmo de
Benders e limitado a um numero maximo de 30 iteracoes.
4.5 Conclusao 51

Note tambem que o limite superior LS e mantido constante ao longo de todas


as iteracoes do algoritmo de Benders. Isto acontece porque o algoritmo de Benders
realiza apenas o teste Axk u para verificar se xk , obtido ao resolver o subproblema
da iteracao k, e factvel no problema original.
Tanto a densidade da rede quanto a razao (produto)/(nos) influenciam forte-
mente na resolucao das instancias. Isto e refletido ao se observar o tempo gasto pela
metaheurstica busca tabu e pelo algoritmo de decomposicao de Benders. Quanto
maior for a densidade da rede, mais facil se torna a tarefa de obter uma solucao
factvel inicial ao utilizar busca tabu.
Por outro lado, o algoritmo de decomposicao de Benders se apresentou mais
eficiente na solucao de instancias que possuem uma rede menos densa. Isto ocorre
devido a dimensao do modelo de programacao linear se tornar menor, pois o numero
de nos e o mesmo para todas as instancias. A tabela (4.2) mostra o quanto ele e
mais rapido para resolver a instancia Bl01 do que as outras instancias que foram
resolvidas.
O tempo apresentado na tabela (4.2) corresponde a melhor solucao obtida, das
tres tentativas de se resolver cada instancia. Para a instancia Bl09, por exemplo,
foi obtida uma solucao inicial, ao resolver problemas de caminho mnimo no passo 2
do algoritmo busca tabu, tendo 40 arcos com capacidade violada. Apos ser aplicada
a metaheurstica busca tabu a esta solucao, em 34 minutos foi obtida uma nova
solucao com apenas 5 arcos com capacidade violada. No entanto, esta instancia nao
foi resolvida em 1 hora de computacao pelo metodo branch-and-price, como mostra o
artigo [12]. Ja o Cplex, como mostra tambem este artigo, demorou aproximadamente
50 minutos para fornecer uma solucao com gap de 3, 1%. Outras instancias tambem
apresentaram uma quantidade pequena de arcos com capacidade violada ao final da
execucao da metaheurstica busca tabu. A instancia Bl03, por exemplo, apresentou
apenas 3 arcos; ja a instancia Bl04, apresentou 8 arcos. Para a instancia Bl11, o
numero de iteracoes foi atingido em menos de 30 minutos. Para se alcancar um
melhor resultado, poder-se-ia aumentar o valor de BT max, que indica o numero de
iteracoes sem melhora.

4.5 Conclusao

Na secao (4.3) foi mostrado que o problema mestre e o subproblema gerados pelo
algoritmo de decomposicao de Benders para resolver o problema dual lagrangeano
nas formulacoes no-arco e arco-rota sao identicos. Desse modo, nao houve necessi-
dade de realizar testes com a formulacao arco-rota para verificar o desempenho do
algoritmo de Benders.
A metaheurstica utilizada para encontrar a solucao factvel inicial tem um papel
4.5 Conclusao 52

muito importante na qualidade da solucao final obtida. Prova disso e que, para
nenhuma instancia, o algoritmo de decomposicao de Benders conseguiu melhorar o
limite superior encontrado.
Como pode ser observado, a otimalidade do problema original nao foi garantida
para nenhuma instancia. Ou seja, todas as solucoes foram obtidas com um gap maior
que zero, indicando uma folga primal-dual. Contudo, as solucoes obtidas para as
instancias Bl05 a Bl08 atingiram um gap dentro de um limite de tolerancia aceitavel.
Em [12], estas instancias foram resolvidas utilizando o metodo branch-and-price,
que e um algoritmo tipo branch-and-bound, sendo que em cada no da arvore ge-
rada um problema multiproduto e resolvido, utilizando o metodo de decomposicao
de Dantzig-Wolfe. Caso a solucao apresente alguma variavel com valor fracionario,
novas restricoes ou cortes sao adicionados ao problema mestre gerado pela decom-
posicao de Dantzig-Wolfe.
Captulo 5

Conclusoes e Trabalhos Futuros

5.1 Conclusoes

Esse trabalho centrou-se na discussao do problema de fluxo multiproduto inteiro


e nos metodos adotados para sua solucao, em especial aqueles associados a tecnicas
de decomposicao.
Os problemas de fluxo multiproduto sao problemas de difcil solucao, em especial
devido a presenca das denominadas restricoes de aglutinacao. Esse fato da campo
ao uso extensivo de metodos de decomposicao para resolver problemas dessa classe.
Caso, alem disso, se agregue a restricao adicional de integralidade da solucao, essa
dificuldade e aumentada sensivelmente.
No presente trabalho, um dos principais problemas encontrados para o estudo
realizado e a dificuldade para obtencao de uma solucao factvel inicial inteira para o
problema original. No inicio de seu desenvolvimento, foi realizada uma tentativa de
encontrar tal solucao utilizando metodos de programacao matematica, porem sem
sucesso.
Por outro lado, ao utilizar a metaheurstica busca tabu, como pode ser observado
na tabela (4.2), foi possvel obter solucoes factveis de uma forma bastante eficiente.
A vantagem de se utilizar relaxacao lagrangeana e que a solucao do problema
dual lagrangeano fornece um limite inferior para o problema original, mesmo quando
o algoritmo de decomposicao de Benders e finalizado antes de encontrar a solucao
otima do problema.
O algoritmo de decomposicao de Benders, quando aplicado ao problema dual
lagrangeano, permite que o subproblema gerado possa ser decomposto em problemas
de caminho mnimo, que podem ser resolvidos de forma eficiente pelo algoritmo de
Dijkstra.
Desse modo, a combinacao de metaheurstica busca tabu, para obter a solucao

53
5.2 Conclusao 54

factvel inicial, com relaxacao lagrangeana e algoritmo de Benders, para fornecer um


limite inferior, pode ser uma boa alternativa para solucionar o problema multipro-
duto inteiro.
A comparacao realizada em [20] mostra que, ao utilizar o metodo de decom-
posicao de Dantzig-Wolfe, a formulacao ODP, apesar de possuir um maior numero
de variaveis e restricoes, e mais eficiente do que as formulacoes DSP e CSP.
No captulo 4 foi mostrado que as formulacoes no-arco e arco-rota apresentam
o mesmo desempenho para o problema multiproduto inteiro. Desse modo, pode-se
concluir que a formulacao do problema multiproduto inteiro, utilizada ao aplicar a
tecnica de relaxacao lagrangeana com o algoritmo de decomposicao de Benders, nao
influencia no desempenho dos algoritmos.
No caso do problema multiproduto analisado, observou-se que a formulacao, por
si so, nao influenciou o desempenho do metodo de solucao adotado. A principal
influencia no desempenho do algoritmo foi a propria combinatoria do problema em
estudo. Observou-se, tambem, que o numero de solucoes possveis do problema
multiproduto e maior na formulacao CSP do que na formulacao ODP, pois esta
considera fixados a origem e o destino de cada produto.
Vale ressaltar que podem existir algoritmos que sejam mais eficientes para de-
terminados problemas multiproduto especficos, como, por exemplo, o metodo basis
partitioning para o problema multiproduto contnuo, como mostrado em [24], ou a
aplicacao da tecnica de relaxacao lagrangeana e do algoritmo de Benders ao proble-
ma multiproduto inteiro. A justificativa para isso e o fato de que eles fazem uso da
estrutura especial apresentada pelo conjunto de restricoes das formulacoes.
Porem, quando um mesmo algoritmo e aplicado em diferentes formulacoes de
uma mesma instancia, o que fara com que uma formulacao seja mais eficiente do
que outra, no caso analisado, e a propria combinatoria envolvida. Logo, apenas
alterando formulacoes de um problema multiproduto nao se poderia ganhar em
eficiencia.

5.2 Trabalhos Futuros

Ao realizar este trabalho, foi observado que a metodologia apresentada poderia


ter melhor desempenho, tanto em tempo de execucao quanto com relacao a qualidade
da solucao final obtida.
O problema mestre, gerado pela decomposicao de Benders, poderia ser resolvido
pelo metodo dual simplex, pois, com a adicao da nova restricao, apenas a factibili-
dade primal e perdida.
Em cada iteracao do algoritmo de Benders ocorre variacao apenas no vetor de
custos de cada subproblema gerado. Logo, torna-se interessante a utilizacao de
5.2 Conclusao 55

tecnicas de pos-otimizacao para reotimizar os problemas de caminho mnimo. Em


[29], e utilizada uma tecnica bastante eficiente para reotimizar problemas de ca-
minho mnimos, quando ocorre variacao apenas no vetor de custos. Ao utilizar as
tecnicas de pos-otimizacao, haveria uma reducao de forma bastante consideravel no
tempo de resolucao deste problema.
Uma outra linha de trabalho futuro reside no estudo da adocao de outras meta-
heursticas para a geracao da solucao inicial. Deve ser ressaltado que esse tema nao
foi objeto de estudo central da presente dissertacao, mas, por outro lado, surgiu
como uma ferramenta acessoria apenas para a solucao dessa questao especfica de
inicializacao do metodo. Assim, a utilizacao de outra metaheurstica para encon-
trar a solucao factvel inicial poderia ser mais eficiente e pode, inclusive, buscar
encontrar as solucoes factveis para as instancias nao resolvidas. A utilizacao de
um procedimento de intensificacao para a metaheurstica busca tabu, como a tecnica
de reconexao de caminhos, por exemplo, poderia tornar esta tecnica mais eficiente,
quando aplicada a solucao do problema em estudo.
Vale ressaltar que a metaheurstica busca tabu foi utilizada apenas com objetivo
de obter a solucao factvel inicial. E, portanto, nao foi utilizada na melhoria da
solucao factvel obtida, pois a metaheurstica e interrompida tao logo seja encon-
trada uma solucao que seja factvel para o problema original. Desse modo, deve-se
modificar a metaheurstica busca tabu, ou utilizar outra metaheurstica, de modo a
realizar uma possvel melhoria na solucao do problema.
Outra forma de aplicar relaxacao lagrangeana ao problema multiproduto inteiro
seria substituir as restricoes de conservacao de fluxo por um termo de penalidade
na funcao objetivo, ao inves das restricoes de capacidade nos arcos. Assim, o sub-
problema gerado pelo algoritmo de Benders seria um problema da mochila, para
o qual existem bons algoritmos desenvolvidos [12]. Desse modo, uma vez que o
subproblema nao possui a propriedade da unimodularidade total, o limite inferior
fornecido pela relaxacao lagrangeana seria de melhor qualidade. Em [12], e apresen-
tada uma comparacao entre as duas formas de decompor o problema utilizando o
metodo branch-and-price.
Algumas variacoes do problema multiproduto inteiro como, por exemplo, os pro-
blemas multiproduto inteiro nao-lineares, ou problemas em redes nao-direcionadas,
problemas de projeto de rede e problemas de localizacao poderiam tambem ser
resolvidos utilizando a relaxacao lagrangeana.
Apendice A

Implementacoes MatLab

A.1 Script Principal - resolve.m


% -------------------------------------------------------------------
% Este e o script principal que deve ser invocado para resolver
% o problema multiproduto inteiro.
% -------------------------------------------------------------------

% Apaga todas as variaveis da memoria.


clear all

% Declara as variaveis globais c A u no_arco e B.


% Estas variaveis definem a formulacao no-arco do problema.
% c - vetor de custos da funcao objetivo.
% A - matriz dos coeficientes das restricoes Ax <= u
% no_arco - matriz de incidencia no-arco da rede.
% B - matriz que contem em cada coluna um vetor de ofertas e demandas
% para cada produto.
global c A u no_arco B

% Leia os dados do arquivo Bl03.fmc.


[tabela, no_arco, custo, u] = carbin(Bl01.fmc);

% -------------------------------------------------------------
% Os parametros de configuracao da metaheuristica busca tabu
% s~ao configurados na funcao busca_tabu.m apresentada
% sec~
ao 4.2 deste anexo.
% -------------------------------------------------------------

56
A.1 Implementacoes MatLab 57

% A funcao gera_formulacao carrega valores nas variaveis globais


gera_formulacao(tabela, custo);

% Mostra a quantidade de produtos, nos e arcos.


produtos = size(tabela,1)
nos = size(no_arco,1)
arcos = size(no_arco,2)

clear tabela custo;

% Tenta obter uma solucao factivel inicial x_k para o problema original
% utilizando a funcao heuristica.
tic
[z,x_k,fx] = heuristica;
tempo_heuristica = toc
z_inicial = z;

% Verifica se a solucao e factivel.


if any (A*x_k > u)
Solucao inicial nao factivel - Ax<=u
else
Inicializac~
ao ok
% Calcula o melhor limite inferior para o problema original.
tic
[k,LI,LS,x_factivel] = benders(x_k);
toc
LS=round(LS)
LI=round(LI)
gap = min(LS)-max(LI)
k = k -1;
x = 1:k;

end

% 0 - resultado de benders
% 1 - valores f(x) das solucoes obtidas pela busca tabu.
grafico_metaheuristica = 1;

if grafico_metaheuristica
% Apresenta o grafico com os valores f(x) obtidos para todas as
% solucoes visitadas pela metaheuristica busca_tabu.
A.2 Implementacoes MatLab 58

fx=round(fx);
k = length(fx);
x = 1:k;
hold off;
hold on;
grid on;
plot(x,fx,b);
else
% Apresenta o grafico com os limites inferiores.
hold off;
hold on;
grid on;
plot(x,LI,g);
plot(x,LS,b);
end

A.2 Leitura dos Dados - carbin.m


% -------------------------------------------------------------------
% Script para ler dados no formato especificado para as
% instancias multiproduto utilizadas.
% -------------------------------------------------------------------

function [tabela, no_arco, custo, u] = carbin(arq)

fid=fopen(arq);
atual=1;
q_arcos=0; q_produtos=0;
arco_atual=1; produto_atual=1;
while 1
linha = fgetl(fid);
if ~ischar(linha)
break
end

if isempty(linha)
disp(linha em branco);
else
A.2 Implementacoes MatLab 59

vet_atual = str2num(linha);
end

% disp(linha)

%Cabecalho
if (atual == 2)
C = vet_atual(1);
elseif (atual == 5)
q_nos = vet_atual(1);
elseif (atual == 6)
q_arcos = vet_atual(1);
elseif (atual == 7)
q_produtos = vet_atual(1);
% inicializa as variaveis no_arco e custo
no_arco=zeros(q_nos,q_arcos);
custo = zeros(q_produtos,q_arcos);
elseif (atual>=9) && (atual < 9+q_arcos)
% matriz de incidencia no-arco da rede
no_arco(vet_atual(1),arco_atual) = 1;
no_arco(vet_atual(2),arco_atual) = -1;

% vetor de capacidade
u(arco_atual) = vet_atual(3);

% matriz de custos
if (C==2)
for p = 1 : q_produtos
custo(p,arco_atual)=vet_atual(4);
end
else
for p = 1 : q_produtos
custo(p,arco_atual)=vet_atual(3+p);
end
end

arco_atual=arco_atual+1;

elseif (atual>=9+q_arcos) && (atual < 9+q_arcos+q_produtos)


tabela(produto_atual,1) = 1;
tabela(produto_atual,2) = vet_atual(1); %origem
A.3 Implementacoes MatLab 60

tabela(produto_atual,3) = vet_atual(2); %destino


tabela(produto_atual,4) = vet_atual(3); %demanda
produto_atual = produto_atual +1;
end

atual=atual+1;
end
fclose(fid);

u = u;

A.3 Criacao do Modelo de Programacao Linear -


gera formulacao.m
% --------------------------------------------------------------------
% Esta funcao gera a formulac~
ao do problema multiproduto inteiro.
% --------------------------------------------------------------------

% Func~
ao utilizada para gerar a formulac~
ao no-arco ODP de um PFCMMI.
% Entrada:
% tabela = [ K S T D ]. Onde:
% kst - identifica um produto k que sai de s e vai para t.
% d - indica a demanda do produto.
%
% Exemplo: [ 1 2 3 5] - Devem ser coletadas 5 unidades do produto 1
% no no 2 e serem entregues no no 3.
% O indice K nao e necessario. Ele foi criado devido a outras
% instancias que foram utilizadas como teste.
%
% no_arco = e a matriz de incidencia no-arco da rede.
%
% custo = e uma matriz onde cada linha identifica um produto e, cada
% coluna representa um arco da rede.
% Na mesma sequencia que a matriz de incidencia no-arco da rede.
%
% capacidade = e um vetor que contem, em cada posic~
ao, a capacidade
% total de cada arco.
%
A.3 Implementacoes MatLab 61

% Sada:
% sp A = matriz dos coeficientes do conjunto de restric~
oes Ax <= u.
% sp no_arco = matriz de incidencia no-arco da rede.
%
% sp B = Uma matriz onde cada coluna e um vetor b de ofertas e
% demandas de cada produto.
%
% sp indica que as matrizes sao esparsas.

function gera_formulacao(tabela, custo)

global c no_arco B u A

% vetor c
c = [];
for i = 1 : size(custo,1)
c = [ c custo(i,:) ];
end

% matriz de incidencia no-arco da rede


no_arco = sparse(no_arco);

% conjunto de ofertas e demandas dos produtos.


linhas_B = size(no_arco,1);
colunas_B = size(tabela,1);
B = zeros(linhas_B,colunas_B);
for p = 1 : size(tabela,1)
origem = tabela(p,2);
destino = tabela(p,3);
demanda = tabela(p,4);
B(origem,p) = demanda;
B(destino,p) = -demanda;
end
B = sparse(B);

% matriz A do conjunto de restric~


oes Ax <= u
produtos = size(tabela,1);
arcos = size(no_arco,2);
A = [];
for kst = 1 : produtos
A = [A sparse(eye(arcos))];
A.4 Implementacoes MatLab 62

end

A.4 Heuristica - heuristica.m

% -----------------------------------------------------------------------
% Script que encontra uma solucao inicial x e faz uma chamada a funcao
% busca_tabu(x) com o objetivo de retornar uma solucao factivel para o
% problema multiproduto inteiro.
% -----------------------------------------------------------------------

% Saida:
% fx_min - valor da funcao objetivo no problema original para a melhor
% solucao encontrada.
% x_min - vetor x da solucao encontrada.
% valor_fx - vetor contendo os valores f(x) obtidos para cada solucao x
% encontrada pelo metodo busca tabu, onde f(x)=cx+alfa*max{Ax-u,0}.

function [fx_min,x_min, valor_fx] = heuristica()

global c A u no_arco B

q_produtos = size(B,2);
q_arcos = size(no_arco,2);

c_atual = c;

% Construcao da solucao inicial x.


tic
[z, x] = caminhos_minimos(c_atual); % solucao s
toc;

% Mostra o valor f(x) e a quantidade de arcos com capacidade violada.


fs_solucao_inicial = f(x)
arcos_capacidade_violada = size(find(A*x>u))

% A metaheuristica busca_tabu busca uma solucao que seja factivel.


tic
[fx_min, x_min, valor_fx] = busca_tabu(x);
A.4 Implementacoes MatLab 63

toc

% Mostra na tela o valor f(x) e a quantidade de arcos com capacidade


% violada para a solucao obtida pela metaheuristica busca_tabu.
fs_solucao_final = f(x_min)
arcos_capacidade_violada = size(find(A*x_min>u))

A.4.1 caminhos minimos.m

% --------------------------------------------------------------
% Esta funcao encontra uma solucao x referente a todos
% os caminhos minimos para todos os produtos.
% --------------------------------------------------------------

function [z,x] = caminhos_minimos(c)

global no_arco B

arcos = size(no_arco,2);
produtos = size(B,2);
z = 0;
x = [];
for i = 1 : produtos
demanda = B(find(B(:,i)>0),i);
b = B(:,i)/demanda;
[z_atual,x_atual] = dijkstra(c((i-1)*arcos+1:i*arcos),b);
x = [ x; demanda*x_atual ];
end
z = c*x;

A.4.2 Metaheuristica Busca Tabu - busca tabu.m


% -------------------------------------------------------------------
% A funcao busca_tabu implementa a metaheuristica busca_tabu.
% -------------------------------------------------------------------
% Entrada:
% x - solucao inicial infactivel fornecida como parametro.
% Saida:
A.4 Implementacoes MatLab 64

% fx_min - valor da funcao objetivo no problema original para a melhor


% solucao encontrada.
% x_min - vetor x da solucao encontrada. Pode ou nao ser factivel.
% valor_fx - vetor contendo os valores f(x) obtidos para cada
% solucao x, onde f(x)=cx+alfa*max{Ax-u,0}.

function [fx_min, x_min, valor_fx] = busca_tabu(x)

global no_arco B A c u Lista V

% ------------------------------------------------------
% Parametros a serem ajustados para cada instancia.
BTmax = 500;
t_min = 0.9*12; % Bl01-04 - 12; Bl05-08 - 6
t_max = 1.1*12;
% ------------------------------------------------------

q_produtos = size(B,2);
q_arcos = size(no_arco,2);

x_otimo = x;

Atual = 0;
MelhorIteracao = 0;
cont_vizinho2 = 0;
Lista = [];

f_min = 0;

tam_lista = round((t_max-t_min)*rand+t_min);
delta = sum(c);

valor_fx(Atual + 1) = f(x);
while (f(x) > f_min) && (Atual - MelhorIteracao < BTmax)
Atual = Atual + 1;

if Atual > 30
Atual = Atual;
end

if round(Atual / (2*t_max)) == (Atual / (2*t_max))


A.4 Implementacoes MatLab 65

tam_lista = round((t_max-t_min)*rand+t_min);
if (size(Lista,1) > tam_lista)
Lista(1:(size(Lista,1) - tam_lista),:) = [];
end
end
V = [];
if (Atual - MelhorIteracao) > 5 && (Atual - cont_vizinho)> 5
vizinhos_tabu2(x, Lista);
cont_vizinho = Atual;
else
vizinhos_tabu(x, Lista);
end

if isempty(V)
fx_min = f(x_otimo);
x_min = x_otimo;
return;
end

% Selecione x em V de modo que f(x) seja minimo e nao seja tabu. Ou,
% seja tabu e com valor de f(x)<f(x_otimo).
encontrou = 0;
cont_tabu = 0;
while ~ encontrou
if ~ isempty(V)
[ fx_viz, viz_escolhido] = min(V(:,1));
produto = V(viz_escolhido,2);
arco = V(viz_escolhido,3);
if e_tabu(V(viz_escolhido,2:3)) % se e tabu
% realizo este movimento em x.
x_viz = x;
x_viz((produto-1)*q_arcos+1:produto*q_arcos) =
V(viz_escolhido,4:length(V(viz_escolhido,:)));
if f(x_viz) < f(x_otimo)
encontrou = 1;
else
% nao sendo permitido o movimento da lista,
% outro x e procurado.
V(viz_escolhido,1) = inf;
end
A.4 Implementacoes MatLab 66

cont_tabu = cont_tabu + 1;
else
encontrou = 1;
end
end

% se todos movimentos sao tabu e nao propiciam melhoria.


if (cont_tabu >= size(V,1)) || isempty(V)

%Entao movimento para o mais antigo da Lista.


% erro_vizinho_tabu = 1

viz_escolhido = 1; % %o mais antigo e melhor.


if viz_escolhido > size(V,1)
viz_escolhido = 1;
end

produto = Lista(1,1);
arco = Lista(1,2);

V(1,2) = produto;
V(1,3) = arco;

% encontre nova rota para este produto


demanda = B(find(B(:,produto)>0),produto);
b = B(:,produto)/demanda;
c_temp = c((produto-1)*q_arcos+1:produto*q_arcos);
% if (~ isempty(Lista))
% arco_recente = max(find(Lista(:,1)==produto));
% for i = 1 : size(Lista,1)
% if (Lista(i,1) == produto)
% if (i ~= arco)
% c_temp(Lista(i,2)) = c_temp(Lista(i,2)) + delta;
% end
% end
% end
% end

[z, x_p] = dijkstra(c_temp,b);

% crie um novo vizinho


A.4 Implementacoes MatLab 67

V(viz_escolhido,4:length(x_p)+3) = demanda*x_p;

Lista(1,:) = [];
encontrou = 1;

end
end

produto = V(viz_escolhido,2);
arco = V(viz_escolhido,3);

mov = [ produto arco ];


Lista1 = [ 0 0 ];
if ~ isempty(Lista)
Lista1 = Lista;
end

if ~ e_tabu(mov)
Lista = [ Lista; mov ];
end
if (size(Lista,1) > tam_lista)
Lista(1,:) = [];
end

if (size(Lista,1) == size(Lista1,1))
if (Lista == Lista1)
pare = listas iguais
end
end

% realizo o movimento dado pelo vizinho de x escolhido.


produto = V(viz_escolhido,2);
x((produto-1)*q_arcos+1:produto*q_arcos) =
V(viz_escolhido,4:length(V(viz_escolhido,:)));

%f(x)
valor_fx(Atual + 1) = f(x);

if f(x) < f(x_otimo)


x_otimo = x;
MelhorIteracao = Atual
A.4 Implementacoes MatLab 68

arcos = find(A*x_otimo>u);
arcos_capacidade_violada = size(find(A*x_otimo>u))

end

end

iter = Atual
x_min = x_otimo;
fx_min = f(x_otimo);

function vf = e_tabu(m)

global Lista

vf = 0;
i = 1;
while (i <= size(Lista,1)) && ~ vf
if all(Lista(i,:) == m)
vf = 1;
end
i = i + 1;
end

A.4.3 Geracao dos vizinhos - vizinhos tabu.m

% -----------------------------------------------------------------
% Gera os vizinhos para a metaheuristica busca tabu.
% Esta funcao penaliza os custos para todos os arcos
% contidos na Lista tabu para todo produto que faz uso do
% arco (i,j) com capacidade violada.
% -----------------------------------------------------------------

function vizinhos_tabu(x, Lista)

global A u no_arco B c V

q_produtos = size(B,2);
A.4 Implementacoes MatLab 69

q_arcos = size(no_arco,2);

fx = f(x);

delta = sum(c);
%delta = 100;
c_atual = c;

% arcos com capacidade violada


arcos = find (A*x>u);

% Para cada arco, aumente o custo c_(ij)^p para o produto de maior


% demanda e calcule uma nova solucao x.
% Se f(x) < f(x) entao x e um novo vizinho de x.
% Fazer isto para cada arco.
atual = 1;
vizinho_atual = 1;
V = [];
while atual <= length(arcos)
arco_violado = arcos(atual);

% encontre todo x > 0 para o arco_violado


indice_x_produtos_arco_violado =
arco_violado:q_arcos:(q_produtos-1)*q_arcos+arco_violado;

aux = find(x(indice_x_produtos_arco_violado));
indice_x_produtos_arco_violado = indice_x_produtos_arco_violado(aux);

qde_produtos_arco = length(indice_x_produtos_arco_violado);
for i = 1 : qde_produtos_arco

indice_atual = indice_x_produtos_arco_violado(i);

% aumente o custo do produto no arco_atual


c_atual(indice_atual) = c_atual(indice_atual) + delta;

produto = ceil(indice_atual/q_arcos);
demanda = B(find(B(:,produto)>0),produto);

for i = 1 : size(Lista,1)
if (Lista(i,1) == produto)
A.4 Implementacoes MatLab 70

c_atual((produto-1)*q_arcos+Lista(i,2)) =
c_atual((produto-1)*q_arcos+Lista(i,2)) + delta;
end
end

% encontre nova rota para este produto


b = B(:,produto)/demanda;
[z, x_p] = dijkstra(c_atual((produto-1)*q_arcos+1:produto*q_arcos),b);

% crie uma nova solucao


x_viz = x;
x_viz((produto-1)*q_arcos+1:produto*q_arcos) = demanda*x_p;

% verifique se esta solucao e um novo vizinho


fx_viz = f(x_viz);
V(vizinho_atual,:) = [ fx_viz produto arco_violado demanda*x_p ];
vizinho_atual = vizinho_atual+1;
end
atual = atual + 1;
end

A.4.4 Geracao dos vizinhos - vizinhos tabu2.m

% -----------------------------------------------------------------
% Gera os vizinhos para a metaheuristica busca tabu.
% Esta funcao penaliza os custos para os arcos contidos na
% Lista tabu de forma aleatoria, para todo produto que faz
% uso do arco (i,j) com capacidade violada.
% -----------------------------------------------------------------

function vizinhos_tabu2(x, Lista)

global A u no_arco B c V

q_produtos = size(B,2);
q_arcos = size(no_arco,2);

fx = f(x);

delta = sum(c);
A.4 Implementacoes MatLab 71

%delta = 100;
c_atual = c;

% arcos com capacidade violada


arcos = find (A*x>u);

% Para cada arco, aumente o custo c_(ij)^p para o produto de maior


% demanda e calcule uma nova solucao x.
% Se f(x) < f(x) entao x e um novo vizinho de x.
% Fazer isto para cada arco.
atual = 1;
vizinho_atual = 1;
V = [];
while atual <= length(arcos)
arco_violado = arcos(atual);

% encontre todo x > 0 para o arco_violado


indice_x_produtos_arco_violado =
arco_violado:q_arcos:(q_produtos-1)*q_arcos+arco_violado;

aux = find(x(indice_x_produtos_arco_violado));
indice_x_produtos_arco_violado = indice_x_produtos_arco_violado(aux);

qde_produtos_arco = length(indice_x_produtos_arco_violado);
for i = 1 : qde_produtos_arco

indice_atual = indice_x_produtos_arco_violado(i);

% aumente o custo do produto no arco_atual


c_atual(indice_atual) = c_atual(indice_atual) + delta;

produto = ceil(indice_atual/q_arcos);
demanda = B(find(B(:,produto)>0),produto);

% para os arcos contidos na Lista tabu referentes a este produto


% que forem selecionados de forma aleatoria, tambem aumente o custo.
aleatorio = round(10*rand);
if (aleatorio/2) == round(aleatorio/2)
for i = 1 : size(Lista,1)
if (Lista(i,1) == produto)
c_atual((produto-1)*q_arcos+Lista(i,2)) =
A.5 Implementacoes MatLab 72

c_atual((produto-1)*q_arcos+Lista(i,2)) + delta;
end
end
end

% encontre nova rota para este produto


b = B(:,produto)/demanda;
[z, x_p] = dijkstra(c_atual((produto-1)*q_arcos+1:produto*q_arcos),b);

% crie uma nova solucao


x_viz = x;
x_viz((produto-1)*q_arcos+1:produto*q_arcos) = demanda*x_p;

% verifique se esta solucao e um novo vizinho


fx_viz = f(x_viz);
V(vizinho_atual,:) = [ fx_viz produto arco_violado demanda*x_p ];
vizinho_atual = vizinho_atual+1;
end
atual = atual + 1;
end

A.5 Algoritmo de Decomposicao de Benders - ben-


ders.m
% --------------------------------------------------------------------
% Algoritmo de Benders aplicado ao problema dual lagrangeano.
% --------------------------------------------------------------------

% Entrada:
% x_k - solucao factivel inicial para o problema multiproduto inteiro.
% Saida:
% LI - vetor contendo os limites inferiores para o problema.
% LS - vetor contendo os limites superiores encontrados para o problema.
% x_factivel - melhor limite superior encontrado. E a solucao
% final para o problema multiproduto inteiro.

function [k,LI,LS,x_factivel] = benders(x_k)


A.5 Implementacoes MatLab 73

global c A u no_arco B

produtos = size(B,2);
arcos = size(no_arco,2);
nos = size(no_arco,1);

pi_k = zeros(1,arcos); % para preencher o vetor c_mestre na 1a. iterac~


ao.

LS(1) = c*x_k;
x_factivel = x_k;
k=1;

A_mestre = [];
b_mestre = [];
fim = 0;
while ~fim & k<30

% PROBLEMA MESTRE
% z = z - z
%
% max z - z
% S.a z - z <= cx + pi*(Ax-u)
% pi >= 0, z >= 0 e z >= 0.
%
%

% Adiciona-se o corte e resolve-se o problema mestre.


% Sua soluc~
ao e Z_k, pi_k.
b_mestre = [b_mestre; c*x_k];
c_mestre = [-1 1 0*pi_k 0*b_mestre]; % -z1 +z2
n_restricoes = length(b_mestre);

folga = zeros(n_restricoes,n_restricoes);
for i = 1 : n_restricoes
folga(i,i) = 1;
end

if ~ isempty(A_mestre)
A_mestre = A_mestre(:,1:length(u)+2);
end
A.5 Implementacoes MatLab 74

coef_pi = (u-A*x_k);
A_mestre = [ A_mestre; 1 -1 coef_pi ];
A_mestre = [ A_mestre folga ];

lin = size(A_mestre,1);
col = size(A_mestre,2);
ibase = [ col-lin+1 : col ];

[Z,pi_k,base_otima] = simplex(c_mestre, A_mestre, b_mestre, ibase);


Z_k = - Z;

% Retira Z (1a. variavel) e folga de pi (ultimas variaveis).


% Z e uma variavel na F.O. e e a soluc~
ao do problema.
pi_k((arcos+3):length(pi_k)) = [];
pi_k(1) = []; % posicao 1 e o Z
pi_k(2) = []; % posicao 2 e o Z

% SUBPROBLEMA

c_sub = c + pi_k*A;
[z,x_k] = caminhos_minimos(c_sub);

LI(k) = z - pi_k*u;

% Verifica factibilidade no problema original para gerar um novo LS.


if (A*x_k <= u)
LS(k) = c*x_k;
x_factivel = x_k;
else if k > 1
LS(k) = LS(k-1);
else
% LS(k) = +inf recebe o c*x_k para o x_k factivel inicial.
end
end

% Verifica se foi atingido a soluc~


ao otima do dual Lagrangeano.
if Z_k - (c*x_k + pi_k*(A*x_k - u)) <= 0.01
fim = 1;
end
A.5 Implementacoes MatLab 75

k = k + 1;
end

A.5.1 Problema Mestre - simplex.m


% ---------------------------------------------------------------
% Metodo Simplex
% ---------------------------------------------------------------
% Func~
ao para resolver um problema de minimizac~
ao utilizando o
% metodo simplex classico.
% c = vetor de custos.
% A = matriz A do sistema de restric~
oes Ax = b.
% b = vetor do lado direito do sistema de restric~
oes. (b >= 0)
% indiceBase = [4 5 6]; indica as variaveis que est~ao na base inicial.

%Observac~
oes:
% Tem que fornecer uma base inicial factivel.
% Ele identifica uma unica soluc~
ao. Soluc~
ao ilimitada ele apresenta
% z=-inf e um
% *No caso de multiplas soluc~
oes, ele apresenta apenas um vertice.
% *N~
ao trata soluc~
oes degeneradas.

function [z,x_otimo,base_otima] = simplex(c,A,b,indiceBase)

A = full(A);
b = full(b);

for i = 1 : length(indiceBase)
base(:,i) = full(A(:,indiceBase(i)));
cb(i) = c(indiceBase(i));
end

terminou = 0;
vertices_visitados = 0;

epsilon = 0.01;

while ~ terminou

%inv_base = inv(base);
A.5 Implementacoes MatLab 76

xb = base\b;
z = cb*xb;

vertices_visitados = vertices_visitados + 1;

%Coluna que entra na base


maxCustoRelativo = 0;
w = cb/base;

c_relativo = w*A-c;
[ maxCustoRelativo, k ] = max(c_relativo);

if maxCustoRelativo < epsilon


%soluc~
ao otima encontrada. Pode haver uma unica ou varias soluc~
oes.
%Por enquanto, trata apenas uma unica soluc~ao.

terminou = 1;
%mostra o resultado:
x_otimo(length(c)) = 0;
for i = 1 : length(indiceBase)
x_otimo(indiceBase(i)) = xb(i);
end
xb;
base_otima = indiceBase;
x_otimo = x_otimo;
z;
vertices_visitados;

else
%ocorre mudanca de base.
yk = base\A(:,k);
if any(yk > 0) %soluc~
ao limitada

raioMinimo = inf;
for i = 1 : length(b)
if yk(i) > 0
bbarra = base\b;
if bbarra(i)/yk(i) < raioMinimo
raioMinimo = bbarra(i)/yk(i);
r = i; %linha da variavel que sai.
A.6 Implementacoes MatLab 77

end
end
end

base(:,r) = A(:,k);
cb(r) = c(k);
indiceBase(r) = k;

else % soluc~
ao ilimitada
M = 5000000;
% apenas para evitar erro de nao atribuic~
ao aos parametros de sada.
z = -M;
x_otimo(length(c)) = 0;

x_otimo(k) = M;
for i = 1 : length(indiceBase)
% raio ao longo o valor tende a inf
x_otimo(indiceBase(i)) = xb(i) - x_otimo(k)*yk(i);
end

x_otimo = x_otimo;
terminou = 1;
end
end %end if maxCustoRelativo == 0

end %end while.

base_otima = 0;

A.6 Algoritmo de Dijkstra - dijkstra.m

% ------------------------------------------------
% Algoritmo de Dijkstra.
% ------------------------------------------------
% Entrada:
% c - vetor custo
% no_arco - matriz de incid^
encia no-arco da rede.
% b - vetor de oferta/demanda.
% b(o)=1, b(d)=-1 e b(i)=0 para todo i diferente de O e D.
A.6 Implementacoes MatLab 78

%
% Saida:
% z - valor do caminho mnimo
% x - o vetor x do problema linear
% {min cx : no_arco.x=b x=[0,1]}
%
% Exemplo: [z, x] = dijkstra(c,b)

function [z, x] = dijkstra(c,b)

global no_arco

% sem no raiz. c(6) = [].

qde_nos = length(b);
qde_arcos = length(c);

o = find(b==1);
d = find(b==-1);
X = [o];
% X_ = find(b~=1);
XX_ = find(no_arco(o,:)==1);

p = o;
q = o;

w(o) = 0;

arco = 1;

while (q~=d)

% percorra todos os arcos de XX_ e encontre o menor w(i)+c(ij).


min = Inf;
for i = 1 : length(XX_)
if (w(find(no_arco(:,XX_(i))==1)) + c(XX_(i))) < min
min = w(find(no_arco(:,XX_(i))==1)) + c(XX_(i));
arco = XX_(i);
end
end
A.6 Implementacoes MatLab 79

p = find(no_arco(:,arco)==1);
q = find(no_arco(:,arco)==-1);
w(q) = min; % potencial do no.
X = [ X q ];
anterior(q) = p;
arco_pq(q) = arco;

% remover todos os arcos que chegam em q.


arcos = find(no_arco(q,:)==-1);
for i = 1 : length(arcos)
XX_(find(XX_==arcos(i))) = [];
end

% Adicionar todos os arcos que saem de q.


% Eliminar arcos que tenham destino em X.
arcos = find(no_arco(q,:)==1);

i = length(arcos);
while i >= 1
destino = find(no_arco(:,arcos(i))== -1);
if ~isempty(find(X==destino)) % se existe destino em X
arcos(i) = [];
end
i = i-1;
end

XX_ = [ XX_ arcos ];

end

% cria o vetor x que contem 1 para os arcos que comp~


oem o caminho
% e 0, para os outros.
x = zeros(qde_arcos,1);
no = d;
while no ~= o
x(arco_pq(no)) = 1;
no = anterior(no);
end

z = w(d);
Referencias Bibliograficas

[1] http://www.dps.uminho.pt/pessoais/falvelos/research/research mcf.htm.


http://www.dps.uminho.pt/pessoais/falvelos/research/mcf/instances/carbin.zip,
Ultimo acesso em 26/09/05.

[2] R. K. Ahuja, T. L. Magnanti, and J. B. Orlin. Network Flows: Theory, Algo-


rithms, and Applications. Prentice Hall, New Jersey, 1993.

[3] A. Ali, J. Helgason, Kennington, and H. Lall. Computational comparison


among three multicommodity network flow algorithms. Operations Research,
28. No. 4:9951000, 1980.

[4] F. Babonneau, O. du Merle, and J. P. Vial. Solving large scale linear mul-
ticommodity flow problems with an active set strategy and proximal-accpm.
Operations Research, Aceito para publicacao.

[5] C. Barnhart, C. A. Hane, and P. H. Vance. Using branch-and-price-and-cut


to solve origin-destination integer multicommodity flow problems. Operations
Research, 48(2):318326, 2000.

[6] M. S. Bazaraa, J. J. Jarvis, and C. M. Shetty. Linear Programming and Network


Flows. Wiley, New York, 1990.

[7] M. S. Bazaraa, H. D. Sherali, and C. M. Shetty. Nonlinear Programming:


Theory and Algorithms. Wiley, New York, 1979.

[8] D. Bienstock, S. Chopra, O. Gunluk, and C. Y. Tsai. Minimum cost capacity


installation for multicommodity network flows. Mathematical Programming,
81:177199, 1998.

[9] A. Bompadre and J. B. Orlin. A simple method for improving the primal
simplex method for the multicommodity flow problem. 2004.

80
Referencias Bibliograficas 81

[10] C. B. Browne. Using interior point methods to solve the multicommodity net-
work flow problem. Faculty of Administration - University of Ottawa, pages
132, 1992.

[11] Jr. C. J. McCallum. A generalized upper bounding approach to a communica-


tions network planning problem. Networks, 7:123, 1977.

[12] F. Alvelos et. al. Comparing branch-and-price algorithms for the unsplittable
multicommodity flow problem. In Proceedings of the International Network
Optimization Conference, pages 712, 2003.

[13] N. M. Filho, R. E. Campello, and L. B. R. Lopes. Relaxacao lagrangeana em


programacao inteira. ES, pages 4084.

[14] M. L. Fisher. An applications oriented guide to lagrangian relaxation. Inter-


faces, 15:1021, 1985.

[15] L. R. Ford and D. R. Fulkerson. Flows in networks. Princeton University Press,


1962.

[16] R. S. Garfinkel and G. L. Nemhauser. Integer Programming. Wiley, New York,


1972.

[17] J. Gondzio, R. Sarkissian, and J. P. Vial. Using an interior point method for the
master problem in a decomposition approach. European Journal of Operational
Research, 101:577587, 1997.

[18] A. Hertz, E. Taillard, and D. de Werra. A tutorial on tabu search. In Pro-


ceedings of Giornate di Lavoro AIRO95 (Enterprise Systems: Management of
Technological and Organizational Changes), pages 1324, Italy, 1995.

[19] T. C. Hu. Multi-commodity network flows. Operations Research, 11:344360,


1963.

[20] K. L. Jones, I. J. Lustig, J. M. Farvolden, and W. B. Powell. Multicommodity


network flows: The impact of formulation on decomposition. TR SOR, 91:23,
1992.

[21] T. Larsson and M. Patriksson. Global optimality conditions for discrete and
nonconvex optimization - with applications to lagrangian heuristics and column
generation. Operations Research, Aceito para publicacao.
Referencias Bibliograficas 82

[22] T. Larsson and D. Yuan. An augmented lagrangian algorithm for large


scale multicommodity routing. Computational Optimization and Applications,
27:187215, 2004.

[23] J. W. Mamer and R. D. McBride. A decomposition-based pricing procedure


for large-scale linear programs: An application to the linear multicommodity
flow problem. Management Science, 46 (5):693709, 2000.

[24] R. D. McBride. Advances in solving the multicommodity-flow problem. Inter-


faces, 28:3241, 1998.

[25] R. D. McBride and J. W. Mamer. Solving the undirected multicommodity flow


problem using a shortest path-based pricing algorithm. Networks, 38(4):181
188, 2001.

[26] Ana Muriel and Farhad Munshi. Capacitated multicommodity network flow
problems with piecewise linear concave costs. IIE Transactions, Volume
36(7):683696, 2004.

[27] A. Ouorou, P. Mahey, and J.-Ph. Vial. A survey of algorithms for convex
multicommodity flow problems. Management Science, 46:126147, 2000.

[28] A. E. Ozdaglar and D. P. Bertsekas. Optimal solution of integer multicommod-


ity flow problems with application in optical networks. Proc. of Symposium on
Global Optimization, Santorini, Greece, page 23, 2003.

[29] S. Pallottino and M. G. Scutella. A new algorithm for reoptimizing shortest


paths when the arc costs change. Networks, 31:149160, 2003.

[30] S. Park, D. Kim, and K. Lee. An integer programming approach to the path
selection problems. In Proceedings of INOC2005 - International Network Op-
timization Conference, Faculdade de Ciencias, Universidade de Lisboa, Lisboa,
Portugal, 2002.

[31] M. J. F. Souza. Inteligencia computacional para otimizacao. Notas de aula,


Departamento de Computacao, Universidade Federal de Ouro Preto, disponvel
em http://www.decom.ufop.br/prof/marcone/InteligenciaComputacional/In-
teligenciaComputacional.html, 2005.

[32] I-Lin Wang. Shortest Paths and Multicommodity Network Flows. Phd thesis,
School of Industrial and Systems Engineering. Georgia Institute of Technology,
EUA, 2003.
Referencias Bibliograficas 83

[33] K. Wu. Flow Aggregation based Lagrangian Relaxation with Applications to


Capacity Planning of IP Networks with Multiple Classes of Service. Phd the-
sis, Department of Electrical and Computer Engineering. North Carolina State
University, EUA, 2004.