Académique Documents
Professionnel Documents
Culture Documents
Departamento de Informática
INF-280
Pesquisa Operacional I
Conteúdo:
Programação Linear
Programação em Redes
Fevereiro de 2005
ASPECTOS GERAIS DA PESQUISA OPERACIONAL ........................................................................................ 1
EXEMPLOS DE ALGUNS PROBLEMAS COMUNS DA P.O............................................................................................... 5
PARTE I – PROGRAMAÇÃO LINEAR ................................................................................................................. 8
EXEMPLOS DE MODELOS PARA ALGUNS PROBLEMAS CLÁSSICOS DE PROGRAMAÇÃO LINEAR .................................. 13
PROBLEMAS PARA MODELAGEM ............................................................................................................................ 17
SOLUÇÃO DE UM PROBLEMA DE PROGRAMAÇÃO LINEAR – INTERPRETAÇÃO GEOMÉTRICA ...................................... 19
CASOS ENCONTRADOS NA RESOLUÇÃO GRÁFICA ................................................................................................... 23
O MÉTODO SIMPLEX.......................................................................................................................................... 27
MODELO MATEMÁTICO E FORMA PADRÃO DE UM PPL............................................................................................. 27
DEFINIÇÕES BÁSICAS ............................................................................................................................................. 30
TEOREMAS FUNDAMENTAIS ................................................................................................................................... 35
O ALGORITMO SIMPLEX ........................................................................................................................................ 37
ALGORITMO SIMPLEX – MÉTODO DAS DUAS FASES ................................................................................................ 47
ELEMENTOS DE PÓS-OTIMIZAÇÃO................................................................................................................ 53
MUDANÇA NO VETOR C .......................................................................................................................................... 55
MUDANÇA NO VETOR B .......................................................................................................................................... 56
DUALIDADE .......................................................................................................................................................... 57
PARTE II – PROGRAMAÇÃO EM REDES......................................................................................................... 63
INTRODUÇÃO ........................................................................................................................................................ 63
INTRODUÇÃO À TEORIA DE GRAFOS ............................................................................................................ 65
UMA BREVE HISTÓRIA DA TEORIA DOS GRAFOS ..................................................................................................... 65
CONCEITOS BÁSICOS DA TEORIA DE GRAFOS .......................................................................................................... 68
FLUXOS EM REDE ............................................................................................................................................... 74
FORMULAÇÃO GERAL (CLÁSSICA) PARA PROBLEMAS DE FLUXOS EM REDE ............................................................. 75
O PROBLEMA DE FLUXO DE CUSTO MÍNIMO (PFCM).............................................................................................. 79
O PROBLEMA DE TRANSPORTE (PT) ....................................................................................................................... 87
O PROBLEMA DE DESIGNAÇÃO (PD) ...................................................................................................................... 94
O PROBLEMA DO CAMINHO MAIS CURTO (PCMC) ............................................................................................... 100
O PROBLEMA DE FLUXO MÁXIMO (PFM) ............................................................................................................. 104
O PROBLEMA DA ÁRVORE GERADORA MÍNIMA (AGM) ........................................................................................ 111
O PROBLEMA DE STEINER EM GRAFOS NÃO DIRECIONADOS .................................................................................. 115
REDES PERT / CPM ............................................................................................................................................ 117
REDES PERT....................................................................................................................................................... 117
REDES PERT/CPM.............................................................................................................................................. 121
BIBLIOGRAFIA................................................................................................................................................... 125
ii
Aspectos Gerais da Pesquisa Operacional
1. Introdução e Histórico
Durante a II Guerra Mundial, líderes militares da Inglaterra e dos Estados Unidos requisita-
ram um grupo de cientistas de diversas áreas de conhecimento para analisarem alguns problemas
militares. Entre esses problemas citam-se: desenvolvimento, operação e localização de radares, ge-
renciamento e controle de navios de apoio, planejamento de ataques aéreos, lançamento de bombas
contra submarinos, defesa das comunidades européias contra ataques aéreos inimigos, abastecimen-
to de tropas com munições e alimentos, operações de mineração, etc. A aplicação de métodos ma-
temáticos e científicos para ajudar as operações militares foi chamada “Operational Research” ou
“Operations Research”.
1
2. Definição
“Pesquisa Operacional é o uso do método científico com o objetivo de prover departamentos exe-
cutivos de elementos quantitativos para a tomada de decisões, com relação a operações sob seu
controle” (Kittel, 1947).
Hoje, o termo operations research, ou pesquisa operacional, significa “um método científico
para tomada de decisão, que busca determinar como melhor planejar e operar um sistema, usual-
mente sob condições que requerem alocação de recursos escassos”.
• identificação do problema;
• construção de um modelo;
• obtenção da solução;
• teste do modelo e avaliação da solução;
• implantação e acompanhamento da solução.
Deve-se salientar que tais fases não são distintas, superpondo-se e interagindo entre si, na
tentativa de se obter uma melhor identificação entre o modelo e o real. Quando a pesquisa opera-
cional é usada para resolver um problema de uma organização, o seguinte procedimento, poderá ser
seguido:
Em primeiro lugar deve ser definido claramente o problema da organização, incluindo a es-
pecificação dos objetivos e as partes da organização que devem ser estudadas antes que o problema
possa ser resolvido.
Dados devem ser coletados para estimar valores de parãmetros que afetam o problema da
organização. Estes valores são usados para desenvolver e avaliar o modelo matemático para o pro-
blema.
2
sentá-las. Quando isso acontece é possível desenvolver modelos de simulação e usar a capacidade
dos computadores para aproximar o comportamento desses sistemas.
A partir da definição do modelo e das alternativas determinadas para o problema são feitas
as recomendações para os gerentes das organizações para que eles possam tomar as decisões que
melhor atendem os objetivos buscados.
4. Áreas de aplicação
• administração
• agropecuária
• economia e planejamento econômico
• educação e saúde
• energia
• engenharia
• forças armadas
• investimentos e finanças
• localização-armazenamento-distribuição
• planejamento e controle da produção
• planejamento urbano e regional
• recursos hídricos
• siderurgia
• telecomunicações
• transporte
3
5. Técnicas aplicadas
Estas técnicas permitem que se resolva uma variedade enorme de problemas, dentre os quais
são típicos:
• Alocação de recursos
• Localização e distribuição da produção
• Estoque
• Substituição e reposição de equipamentos
• Seqüenciamento e coordenação de tarefas
• Determinação de caminhos em rede
• Situações de competição (teoria dos jogos)
• Busca de informação
• Roteamento de veículos
• Fluxos em rede
• Problemas de características híbridas
O início da P.O. no Brasil se deu aproximadamente uma década após sua implantação na
Grã-Bretanha e nos Estados Unidos. Assim, já nos meados da década de 50, professores com for-
mação em Engenharia, Matemática e/ou Estatística, entusiasmados com as novas técnicas relacio-
nadas a P.O. que aqui chegavam pela difusão natural do conhecimento humano, começaram a for-
mar equipes de P.O. nas universidades e instituições de ensino (ITA, PUC, COPPE-UFRJ, UFPB,
UNICAMP, UFSC, UFMG, UFV, etc.), reproduzindo-se e induzindo a formação de equipes em
conjunto com as empresas (PETROBRÁS, ELETROBRÁS, USIMINAS, CSN, EMBRAPA,
SOUZA CRUZ, TELEBRÁS, etc.), bem como a formação de consultorias nas grandes cidades.
Atualmente, vê-se com certo otimismo as perspectivas da P.O. no Brasil e, em particular, na
Agricultura, Sistemas de Produção e Engenharia de Alimentos, baseando-se nos seguintes fatores:
• A crise como elemento propulsor (escassez de recursos);
• A explosão da informática;
• Massa crítica existente de analistas de P.O.;
• Integração universidade × empresa;
• Seminários de P.O. aplicada à agropecuária;
• Existência de cursos de P.O. nas universidades brasileiras;
• Cursos e pesquisas em andamento na COPPE, UNICAMP, UFPb, UFSc, EMBRAPA, etc.
4
Exemplos de Alguns Problemas Comuns da P.O.
Problema do Caminho Mínimo (PCM)
Problema da Mochila
Rolando Caio da Rocha, um exuberante alpinista, está se preparando para uma longa escalada nos
Alpes. Ele consegue levar até W quilos em sua mochila. Ele tem N diferentes tipos de itens que po-
de incluir em seu fardo, e cada unidade de item j pesa wj quilos. Para cada item j, ele calculou um
valor numérico Rj representando o valor de sobrevivência de cada unidade do item. Como exemplo,
se ele levar cinco unidades do item 3 e sete unidades do item 9, o “valor” para ele desta seleção na
mochila é 5R3 + 7R9. O problema do Rolando é escolher o número de cada tipo para incluir em sua
mochila.
5
Escolha da Mistura para Rações
Usinas
Depósitos
S1 D1
Fornecimentos S2 D2 Necessidades
disponíveis
S3 D3 de demanda
Dn
Sm
Objetivos: determinar a quantidade do produto que cada fornecedor deve enviar para cada depósito,
de forma que o custo total do transporte seja mínimo, que cada depósito tenha sua demanda atendi-
da, e que nenhum depósito estoure sua capacidade de fornecimento.
6
Problemas de Produção
Recursos Especificações Atividades
INSUMOS PRODUTOS
Máquinas Produto 1
Ferramentas Produto 2
Capital
Matéria prima
⇔ Decisões
⇔ .
.
Mão-de-obra Produto n
CUSTOS RECEITA
Objetivos: determinar as atividades que devem ser realizadas ou produzidas de forma a maximizar o
lucro ou minimizar o custo de produção, levando-se em conta a quantidade máxima disponível para
cada insumo.
1 1
2 2
3 3
Objetivos: minimizar o custo total para executar um conjunto de tarefas, onde cada tarefa deve ser
executada por uma única máquina, e cada máquina executa uma única tarefa.
7
Parte I – Programação Linear
1. O significado da expressão
2. O problema geral
Objetivos:
8
3. Fases na solução de um problema de pesquisa operacional
FLUXOGRAMA
FORMULAÇÃO
DO
PROBLEMA
OBTENÇÃO
DO
MODELO
DEFINIÇÃO
DO MÉTODO
DE SOLUÇÃO
OBTENÇÃO
E PREPARO EXPERIÊNCIA
DOS DADOS
RESOLUÇÃO
DO
PROBLEMA
INTERPRETAÇÃO COMPARAÇÃO
DOS COM A
RESULTADOS REALIDADE
IMPLEMENTAÇÃO
DA
SOLUÇÃO
9
4. Modelagem de problemas
5. Modelos matemáticos
Os modelos matemáticos são modelos simbólicos - o sistema real é representado por EQUAÇÕES
E EXPRESSÕES MATEMÁTICAS que descrevem suas propriedades relevantes.
VALIDADE
ASSOCIADA AO
GRAU DE COR-
RELAÇÃO
10
6. Expressão matemática de um modelo de programação linear
OBJETIVO
Determinar os valores das variáveis x1, x2, … , xn que otimizam (maximizam ou minimizam) a fun-
ção linear
Z = c1 x1 + c2 x2 + … + cn xn,
xn ≥ 0, xn ≥ 0, … xn ≥ 0.
Temos que cj, aij e bi são constantes conhecidas, para todo i e todo j.
Definir as atividades (xj) e escolher uma unidade de medida para o seu nível.
12
Exemplos de Modelos para Alguns Problemas Clássicos de Pro-
gramação Linear
Queremos obter uma ração que tenha um custo mínimo. Portanto, o modelo completo fica assim:
Sujeito a: (Restrições)
e: x1 ≥ 0, x2 ≥ 0, x3 ≥ 0
13
Problema de Produção
A empresa Nova Linha produz artigos de vidro de alta qualidade: janelas e portas, em três seções de
produção:
a capacidade de produção por minuto de cada seção, a ser utilizada para produzir uma
unidade de cada produto
os lucros unitários para cada produto
Modelo completo:
x1 ≥ 0, x2 ≥ 0
14
Problema da Mochila
Rolando Caio da Rocha, um exuberante alpinista, está se preparando para uma longa escalada nos
Alpes. Ele consegue levar até W quilos em sua mochila. Ele tem N diferentes tipos de itens que po-
de incluir em seu fardo, e cada unidade de item j pesa wj quilos. Para cada item j, ele calculou um
valor numérico Rj representando o valor de sobrevivência de cada unidade do item. O problema do
Rolando é escolher o número de cada tipo para incluir em sua mochila.
Modelo:
F.O.: Max. R1x1 + R2x2 + ... + Rjxj + ... + RNxN
s.a.: w1x1 + w2x2 + ... + wjxj + ... + wNxN ≤ W
xj ≥ 0
ou:
N
Max. ∑R x
j=1
j j
s.a.:
∑w x
j =1
j j ≤W
xj ≥ 0
15
Cutting Stock
F.O.: Min. NB = x1 + x2 + x3 + x4 + x5 + x6
s.a.:
x1 + x2 ≥ 26
x1 + 3x3 + 2x4 + x5 ≥ 71
x1 + 3x2 + x3 + 3x4 + 5x5 + 7x6 ≥ 47
x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, x4 ≥ 0, x5 ≥ 0, x6 ≥ 0
n
s.a. ∑a x
j =1
ij j ≥ bi , i = 1, 2, ..., m
xj ≥ 0 e inteiro, j = 1, 2, ..., n
16
Problemas para Modelagem
O custo de enviar um avião do terminal a cada cidade é dado pelo seguinte quadro:
Denote por xij o número de aviões do tipo i enviado para a Cidade j (x1A, x1B, x1C, x2A etc.). Formule
um modelo de PL para esse problema.
17
Problema de Planejamento de Tarefas
Uma determinada região está sendo ameaçada pela ruptura de uma barragem e deve ser evacuada
em, no máximo, 10 horas. São no total 8.000 homens, 7.900 mulheres e 1.850 crianças a transpor-
tar. Cada pessoa poderá levar até 10 quilos de bagagem pessoal, Toda a região foi isolada e só cir-
culam veículos autorizados para que se evitem acidentes e engarrafamentos. Para efetuar a evacua-
ção estão disponíveis os seguintes meios:
Veículo de Veículo de
Veículo
6 ton. do ¼ ton. do Helicóptero Ônibus Microônibus
de Passeio
Exército Exército
Quantidade
de Unidades 10 20 15 10 5 60
Disponíveis
Capacidade de
20 pessoas 5 pessoas 10 pessoas 30 pessoas 15 pessoas 5 pessoas
Transporte
Capacidade
1 ton. 20 kg 50 kg 1 ton. 500 kg 100 kg
para bagagem
Custo por
10 u.m. 4 u.m. 75 u.m. 5 u.m. 3 u.m. 2 u.m.
Viagem
Tempo de
1h 45 min. 10 min. 45 min. 30 min. 30 min.
Viagem
Para minimizar o pânico, as crianças deverão viajar acompanhadas por suas mães. Existem 10 famí-
lias com 5 filhos, 25 com 4 filhos, 150 com 3, 450 com 2 e 350 com 1. Os carros de passeio só po-
derão fazer uma viagem de evacuação, ficando, por segurança, retidos fora da área de perigo.
18
Solução de um Problema de Programação Linear –
Interpretação Geométrica
Representação no espaço de soluções – duas dimensões (variáveis).
Exemplo 1
19
Exemplo 2
Por determinação médica, um jovem precisa fazer algum tipo de atividade física em uma academia.
Por questões pessoais, ele escolheu fazer natação e/ou pólo aquático. Ele sabe que:
• Uma hora de aula de natação custa R$8,00;
• Uma hora de aula de pólo custa R$5,00;
• Seu orçamento lhe permite dispor de 100 reais mensais para as atividades de academia;
• Seus afazeres escolares lhe dão liberdade de gastar mensalmente, no máximo, 18 horas e 40.000
calorias de sua energia para essas atividades;
• Cada hora de aula de pólo consome 3.300 calorias, e de natação consome 1.600 calorias;
• Ele não tem preferência por nenhuma dessas duas atividades.
Como ele deve planejar as suas atividades físicas para obter o número máximo de horas-aula, con-
siderando o limite dos recursos que tem? Modele o problema como um problema de programação
linear (PPL).
máx. x1 + x2 (1)
s.a.:
x1 + x2 ≤ 18 (2)
8x1 + 5x2 ≤ 100 (3)
1600x1 + 3300x2 ≤ 40000 (4)
(3) (4)
(1) (2)
20
Exemplo 3
Um fazendeiro deseja determinar que área de sua propriedade deve plantar milho e feijão para ma-
ximizar o seu lucro, e informa o seguinte:
a) o fazendeiro dispõe de uma área máxima de 8 alqueires para o plantio das 2 culturas, 100 m3 de
água para irrigação por semana, e a semente de feijão lhe permite um plantio de 4 alqueires no
máximo;
b) o lucro por alqueire plantado com milho é de R$200,00 e plantado com feijão é de R$150,00;
c) cada alqueire plantado com milho requer 10m3 de água por semana, e com feijão 20m3 ;
d) por questões pessoais, ele deseja plantar no máximo 2/3 da área total com milho.
21
Exemplo 4
Suponha que, por motivos justificáveis, uma certa dieta alimentar esteja restrita a leite desnatado e
uma salada de composição bem conhecida. Sabendo-se ainda que os requisitos nutricionais serão
expressos em termos de vitamina A e cálcio e controlados por suas quantidades mínimas (em mili-
gramas). A tabela abaixo resume a quantidade de cada nutriente em disponibilidade nos alimentos e
a sua necessidade diária para a boa saúde de uma pessoa.
22
Casos Encontrados na Resolução Gráfica
Continuaremos usando aqui modelos de duas variáveis, mantendo um espaço bidimensional (pla-
no), facilitando assim a visualização, para ilustrar todas as situações possíveis de ocorrer para um
modelo de PL qualquer.
Exemplo 1:
máx. x1 + x2
s.a.:
8x1 + 5x2 ≤ 100 (1)
16x1 + 33x2 ≤ 400 (2)
x2
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2 x1
1
0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
F.O.
(1)
(2)
23
Exemplo 2:
(2)
(1)
24
3. Solução ótima ilimitada.
Exemplo 1:
(2)
(1)
Exemplo 2:
max x1 – x2
s.a.
2x1 – x2 ≥ 0 (1)
x2 ≤ 4 (2)
x2
(1)
(2)
x1
25
Exemplo 3:
min x1 – 2x2
s.a.
2x1 – x2 ≥ 0 (1)
– x1 + 2x2 ≤ 4 (2)
x2
(1) (2)
x1
Neste caso, embora existam soluções ótimas finitas (qualquer ponto sobre a reta 2, incluindo
e à direita do ponto de intercessão dessa reta com a reta 1), limitando o valor ótimo da F.O.,
o conjunto desses pontos não é limitado ou “fechado”.
(2)
(1)
x1
Veja que, neste caso, não existe nenhum ponto (x1, x2) no plano euclidiano que satisfaça si-
multaneamente as expressões (1) e (2).
26
O Método Simplex
O método Simplex, desenvolvido por DANTZIG em 1956, procura, a partir de uma deter-
minada partição da matriz A, resolver o sistema de equações Ax = b. Veremos a seguir como pode-
mos “preparar” um modelo de PL qualquer para que seja resolvido pelo Simplex, quais os funda-
mentos teóricos do algoritmo, e como ele podemos usá-lo para resolver os modelos estudados.
a) Forma de Somatório:
n
Maximizar Z = ∑c
j =1
j xj
n
Sujeito a: ∑a
j =1
ij x j ≤, =, ≥ bi, i = 1, … , m;
xj ≥ 0, j = 1, … , n.
b) Forma Matricial
Maximizar Z = cx
Sujeito a: Ax ≤, =, ≥ b
x≥ 0
27
Forma Padrão de um Modelo de PL
Antes de estabelecermos um algoritmo único para resolver os modelos matemáticos apresentados
anteriormente, é necessário padronizar o formato desses modelos. Usaremos o formato padrão de
maximização, que é adotado pela maioria dos livros de P.L.:
Um modelo de PL na forma padrão é constituído apenas por equações lineares, e suas variáveis e
termos independentes (bi) devem ser não negativas, como o modelo abaixo:
n
Maximizar Z = ∑c
j =1
j xj
n
Sujeito a: ∑a
j =1
ij x j = bi, i = 1, … , m;
xj ≥ 0, j = 1, … , n;
bi ≥ 0, i = 1, … , m.
É importante salientar que em um problema de programação linear qualquer podem aparecer vará-
veis que devem ser deixadas livres em sua formulação, ou seja, variáveis irrestritas em sinal. Além
disso, outras varáveis podem representar grandezas que na prática não podem ser positivas. Para
que um problema com variáveis dos tipos mencionados acima seja colocado na forma padrão tor-
nam-se necessários alguns recursos matemáticos, os quais serão discutidos a seguir.
1) Função Objetivo
[ ]
Mínimo ∑ c j x j = − Máximo − ∑ c j x j = − Máximo ∑ (−c j ) x j
2) Variáveis de Folga
∑a
j =1
kj x j ≤ bk
Utiliza-se uma variável xk, chamada variável de folga, em que xk = bk – ∑j akj xj, de forma que
∑a
j =1
kj x j + x k = bk
Para cada restrição do tipo "≤" deve-se utilizar uma variável de folga diferente que representa a
“folga” do recurso disponível que não foi utilizado.
28
3) Variáveis de Excesso
∑a
j =1
sj x j ≥ bs
Utiliza-se uma variável xs, chamada variável de excesso, em que xs = ∑j asj xj, – bs, de forma que
∑a
j =1
sj x j − x s = bs
Para cada restrição do tipo "≥" deve-se utilizar uma variável de excesso diferente que representa o
“excesso” do recurso utilizado.
Quando uma variável representa uma grandeza que pode assumir na prática valores positivos, nulos
ou negativos, ou seja, a variável deve ser irrestrita em sinal, então na forma padrão essa variável é
substituída pela diferença de duas outras não negativas, e, posteriormente, quando o problema for
resolvido, seu valor real é resgatado. Assim, se xl é irrestrita em sinal, faz-se: xl = xl' - xl'', onde xl' ≥
0 e xl'' ≥ 0. Resolve-se o problema com xl' e xl'', e após a solução obtém-se xl.
Quando uma variável xq representa uma grandeza que não deve assumir valores positivos no pro-
blema original, então, para construir a forma padrão do modelo de PL, substitui-se essa variável, fa-
zendo-se xq = - xq', onde xq' ≥ 0. Resolve-se o PPL com xq' e, posteriormente, recupera-se xq.
Se algum bi tiver sinal negativo, basta multiplicar a linha toda por –1:
4x1 – 3x2 ≤ –2 ⇔ – 4x1 + 3x2 ≥ 2
Exemplo:
min. 2x1 + 1,2x2
s.a. 2x1 + 50x2 ≥ 11
50x1 + 10x2 ≥ 70
Forma padrão:
max. – 2x1 – 1,2x2
s.a. 2x1 + 50x2 – x3 = 11
50x1 + 10x2 – x4 = 70
29
Definições básicas
Considere o problema de programação linear na forma matricial e padrão:
Maximizar Z = cx (1)
Sujeito a: Ax = b (2)
x ≥ 0 (3)
Define-se como solução de um PPL, um vetor x que satisfaz as restrições (2); solução viável de um
PPL é um vetor x que satisfaz as restrições (2) e (3); e região viável ou conjunto de soluções viá-
veis de um PPL é o conjunto de vetores x que satisfazem (2) e (3).
o que significa que o sistema Ax = b é compatível, ou seja, tem solução. Uma permutação das colu-
nas de A pode ser feita de forma a obter
A = [B,N],
x B = B −1b
xN = 0
O vetor x = (xB | xN) é chamado uma solução básica do sistema de equações Ax = b. Se x ≥ 0, então
x é chamado uma solução básica viável do sistema. A matriz B é chamada matriz básica, ou sim-
plesmente base do sistema e a matriz N é chamada matriz não básica. No vetor x = (xB | xN), as
componentes de xB são chamadas variáveis básicas e as componentes de xN são chamadas variá-
veis não básicas. Se todas as componentes de xB forem maiores que zero, então x é chamado solu-
ção básica viável não degenerada, e se pelo menos uma de suas componentes for nula, então x é
chamado solução básica degenerada.
Maximizar z = x1 + 3 x2 (1)
sujeito a: x1 + x2 ≤ 6 (2)
x2 ≤ 3 (3)
xj ≥ 0
30
Obtendo-se a forma padrão do PPL pela introdução das variáveis de folga x3 e x4 nas restrições (2) e
(3), respectivamente, tem-se o seguinte sistema de equações lineares:
x1 + x2 + x3 = 6
x2 + x4 = 3
xj ≥ 0
1 1 1 0
A= = [a1 a2 a3 a4 ]
0 1 0 1
Para se obter uma matriz básica B (2 × 2) a partir da matriz A, deve-se selecionar 2 vetores, ai e aj,
linearmente independentes. Para uma matriz A (m × n), o número máximo possível de matrizes
quadradas de dimensões m × m é dado por:
n!
m!(n − m)!
1)
1 1
B = [a1 a2 ] =
0 1
x 1 − 1 6 3
x B = 1 = B −1b = =
x2 0 1 3 3
x 0
xN = 3 =
x 4 0
31
2)
1 0
B = [a1 a4 ] =
0 1
x1 1 0 6 6
x B = = B −1b = =
x4 0 1 3 3
x 0
xN = 2 =
x3 0
3)
1 1
B = [a 2 a3 ] =
1 0
x 0 1 6 3
x B = 2 = B −1b = =
x3 1 − 1 3 3
x 0
xN = 1 =
x 4 0
4)
1 0
B = [a 2 a4 ] =
1 1
x2 1 0 6 6
x B = = B −1b = =
x4 − 1 1 3 − 3
x 0
xN = 1 =
x3 0
5)
1 0
B = [a 3 a4 ] =
0 1
x 1 0 6 6
x B = 3 = B −1b = =
x4 0 1 3 3
x 0
xN = 1 =
x 2 0
Das soluções básica obtidas, apenas a solução número 4 não é viável, visto que o componente x4 é
negativo. Então são 4 soluções básicas viáveis para o PPL, a saber:
Estes pontos pertencem a R4 . Uma projeção em R2, ou seja, no plano gerado por x1 e x2, tem como
resultante os seguintes pontos:
32
3 6 0 0
x1 = , x2 = , x3 = , x4 =
3 0 3 0
Estes pontos são identificados na solução gráfica do problema, mostrando que eles correspondem
aos pontos extremos do polígono de restrições (figura seguinte).
x3 x1
x4 x2
Seja o seguinte conjunto de restrições de um PPL com duas variáveis e três restrições (assumiremos
sempre todos os xj ≥ 0, a menos que se diga o contrário):
x1 + x2 ≤ 6
x2 ≤ 3
x1 + 2 x2 ≤ 9
33
Usando variáveis de folga o sistema é transformado em igualdades, na forma:
x1 + x2 + x3 = 6
x2 + x4 = 3
x1 + 2 x2 + x5 = 9
1 1 1 0 0
A = [a1 a2 a3 a 4 ] = 0 1 0 1 0
1 2 0 0 1
Considere a matriz básica formada pelas três primeiras colunas de A, ou seja, B = [a1 a2 a3]. A so-
lução correspondente é dada por:
Variáveis básicas:
−1
x1 1 1 1 6 0 2 1 6 3
x B = x 2 = B −1b = 0 1 0 3 = 0 1 0 3 = 3
x3 1 2 0 9 1 1 − 1 9 0
Variáveis não básicas:
x 4 0
xN = =
x5 0
Tendo em vista que a variável básica x3 = 0, então a solução é degenerada. Veremos as implicações
disso mais tarde.
34
Teoremas fundamentais
Considere o problema de programação linear na forma padrão:
Maximizar Z = cx
Sujeito a: Ax = b
x ≥ 0
Definição 1: Uma base de uma matriz A (m × n) é uma matriz quadrada de m vetores coluna line-
armente independentes em —m. As variáveis associadas a essas colunas são chamadas
variáveis básicas.
Ax = b
x = (xB, xR), onde:
xB representa o vetor das variáveis básicas de m componentes, e
xR representa o vetor das restantes n – m variáveis não básicas.
xB
x:
B R
A: m
m n–m
BxB + RxR = b
Como podemos solucionar o conjunto de equações somente em função das variáveis básicas,
temos:
xR = 0 e BxB = b
Definição 2: Seja B uma base associada a uma matriz A. O vetor composto de x B = B −1b e xR = 0
é chamado de solução básica.
Definição 3: Uma solução básica sem componentes negativas é denominada solução básica viá-
vel.
35
Teorema 1
Demonstração:
x = α x1 + (1 − α ) x 2 ∈ C
{x1 , x 2 } ∈ C ⇒
0 ≤ α ≤ 1
Ax = A[α x1 + (1 − α ) x 2 ] = α Ax1 + (1 − α ) Ax 2 = α b + (1 − α )b = b
Teorema 2
Toda solução básica viável do sistema Ax = b é um ponto extremo do conjunto de soluções viáveis,
ou seja, um ponto extremo do conjunto C
Teorema 3
Todo ponto extremo x de um conjunto de soluções viáveis de um sistema Ax = b é uma solução bá-
sica viável.
Corolário 2: Se existe uma solução viável, então existe uma solução básica viável.
Teorema 4
1. Se o PPL tem solução ótima (máximo ou mínimo de Z) finita, então pelo menos uma solução ó-
tima ocorre em um ponto extremo (vértice) do conjunto C;
2. Se a solução ótima ocorre simultaneamente em mais de um ponto extremo, então qualquer com-
binação convexa desses pontos extremos também é solução ótima.
36
O Algoritmo Simplex
O algoritmo Simplex é um procedimento computacional desenvolvido para resolver problemas de
programação linear. Podemos dividi-lo em duas fases distintas:
Fase 1 - consiste em determinar uma solução básica viável do PPL ou, então, mostrar que tal solu-
ção não existe. Neste último caso, não havendo solução básica viável, não existe solução para o
problema, ou seja, o conjunto de restrições é inconsistente. Quando uma solução básica viável pu-
der ser identificada facilmente, a Fase 1 não precisa ser usada;
Fase 2 - consiste em determinar a solução ótima para o PPL ou, então, mostrar que a solução é ili-
mitada, ou seja, que o valor de Z pode crescer ou decrescer infinitamente. A Fase 2 inicia a partir de
uma solução básica viável do PPL, que pode ser obtida usando-se a Fase 1.
Ilustração
Maximizar 1 x1 + 2 x2
sujeito a: -1 x1 + 3 x2 ≤ 9
1 x1 - 2 x2 ≤ 0
2 x1 + 1 x2 ≤ 10
2 x1 + 1 x2 ≥ 5
Solução gráfica
Maximizar 1 x1 + 2 x2
sujeito a: -1 x1 + 3 x2 + x3 = 9
1 x1 - 2 x2 + x4 = 0
2 x2 + 1 x2 + x5 = 10
2 x1 + 1 x2 - x6 = 5
37
Tomando-se x1 e x2 como variáveis não básicas, tem-se x1 = 0 e x2 = 0. Os valores das variáveis bá-
sicas são obtidas de forma trivial, ou seja: x3 = 9, x4 = 0, x5 = 10 e x6 = -5. A solução básica corres-
pondente é x = (0, 0, 9, 0, 10, -5), que não é viável, pois existe uma componente negativa (x6 = -5).
Neste caso, para se obter uma solução básica inicial é necessário usar a Fase 1 do Simplex. Vere-
mos como isso pode ser feito mais adiante.
Maximizar 5 x1 + 2 x2
sujeito a: 1 x1 ≤ 3
1 x2 ≤ 4
1 x1 + 2 x2 ≤ 9
Solução gráfica
Maximizar 5 x1 + 2 x2
sujeito a: 1 x1 + x3 = 3
1 x2 + x4 = 4
1 x2 + 2 x2 + x5 = 9
Tomando-se x1 e x2 como variáveis não básicas, tem-se x1 = 0 e x2 = 0. Os valores das variáveis bá-
sicas são obtidas de forma trivial, ou seja: x3 = 3, x4 = 4 e x5 = 9. A solução básica correspondente é
x = (0, 0, 3, 4, 9), que é viável, pois todas componentes são não negativas. Neste caso, para se obter
uma solução básica inicial não é necessário usar a Fase 1 do Simplex.
38
O Algoritmo Simplex – Detalhamento
Passo 1
Determine uma solução básica viável (SBV) inicial. Se necessário usar a Fase 1;
Passo 2
Testar se a SBV corrente é ótima. Se sim, pare, o problema está resolvido; se não, vá ao pas-
so seguinte;
Passo 3
Podemos também descrever o algoritmo em forma de fluxograma, como mostra a figura seguinte:
39
40
Exemplo 1
Uma grande fábrica de móveis dispõe em estoque de 250m de tábuas, 600m de pranchas e 500m de
painéis de conglomerado. A fábrica normalmente oferece uma linha de móveis composta por um
modelo de escrivaninha, uma mesa de reunião, um armário e uma prateleira. Cada tipo de móvel
consome uma certa quantidade de matéria prima, conforme a tabela abaixo. A escrivaninha é vendi-
da por R$100, a mesa por R$80, o armário por R$120 e a prateleira por R$20. Modele e resolva o
problema pelo simplex, de forma a maximizar a receita com a venda dos móveis.
A nossa solução básica viável inicial pode ser obtida, neste caso, de forma trivial:
x1 = 250; x2 = 600; x3 = 500; xE = xM = xA = xP = 0.
Podemos agora montar o quadro simplex. Para isso, trataremos a equação da F.O. como se
fosse apenas mais uma equação do nosso sistema linear:
41
Essa linha será destacada no quadro, e sua importância será vista no decorrer do algoritmo.
Além disso, usaremos a 1ª coluna para fazer a numeração das linhas, somente para facilitar
as explicações a seguir. A 2ª coluna serve para relacionarmos as variáveis básicas (V.B.):
V.B. xE xM xA xP x1 x2 x3 b
L0 –Z 100 80 120 20 0 0 0 0
L1 x1 1 1 1 4 1 0 0 250
L2 x2 0 1 1 2 0 1 0 600
L3 x3 3 2 4 0 0 0 1 500
Para entrar na base, devemos escolher a variável que possui o maior coeficiente na linha L0.
Esses coeficientes indicam a contribuição que cada variável dá à Função Objetivo. para cada
unidade de aumento de seus respectivos valores. No quadro acima, vemos que cada unidade
de aumento da variável xA resulta em um aumento de 120 unidade no valor da F.O. Essa é a
variável que mais contribui localmente para o processo de maximização da F.O., e é portan-
to a escolhida para entrar na base. Esse processo de escolha é representado no fluxograma da
seguinte maneira:
cj* = max(cj)
Para que a variável xA entre na base, é preciso que uma variável básica saia da base (por
que?). Para determinar isso, é só fazer com que o valor de xA cresça o máximo possível. Po-
demos ver pelos valores do quadro acima que, se xA for maior que 125 (ou 4xA > 500), então
teremos para a ultima restrição o seguinte:
4xA + x3 = 500
x3 = 500 – 4xA
e o valor de x3 seria negativo, o que seria inviável. Com isso, o maior valor que xA pode as-
sumir sem violar nenhuma das restrições é xA = 125. Nesse caso, o valor de x3 seria igual a
zero, e ele então sai da base. Todo esse processo de escolha é representado no fluxograma da
seguinte maneira:
O significado desse “procedimento” é bem simples: divida todos os bi pelos valores de aij*
que forem maiores que zero, e pegue o menor valor dessa divisão, que corresponderá à linha
i*. No caso acima, teríamos:
42
V.B. xE xM xA xP x1 x2 x3 b
L0 –Z 100 80 120 20 0 0 0 0
L1 x1 1 1 1 4 1 0 0 250
L2 x2 0 1 1 2 0 1 0 600
L3 x3 3 2 4 0 0 0 1 500
O elemento destacado representa o nosso pivot. Observe que os vetores-coluna das variáveis
básicas na matriz A formam uma matriz identidade, e seus coeficientes da linha L0 são nulos.
Esse padrão será mantido durante todo o decorrer do algoritmo. Dessa forma, os valores das
V.B. são obtidos diretamente na última coluna (b), e o valor de – Z é obtido na posição b0.
V.B. xE xM xA xP x1 x2 x3 b
L0 –Z 100 80 120 20 0 0 0 0
L1 x1 1 1 1 4 1 0 0 250
L2 x2 0 1 1 2 0 1 0 600
L′3 xA ¾ ½ 1 0 0 0 ¼ 125
Depois, fazemos:
V.B. xE xM xA xP x1 x2 x3 b
L′0 –Z 10 20 0 20 0 0 -30 -15.000
L′1 x1 ¼ ½ 0 4 1 0 -¼ 125
L′2 x2 -¾ ½ 0 2 0 1 -¼ 475
L′3 xA ¾ ½ 1 0 0 0 ¼ 125
Observe que ainda existem variáveis que podem contribuir para o crescimento da F.O. Co-
mo existe um empate no maior valor, entre xM e xP, escolheremos xM para entrar na base.
Nesse caso, haverá também um empate entre x1 e xA para sair da base. Escolheremos xA para
sair da base (depois discutiremos as implicações desses empates).
43
Executamos então o 2º pivoteamento:
L1′′ ← L′1 ÷ ½
L′0′ ← -20 × L1′′ + L′0
L′2′ ← -½ × L1′′ + L′2
L′3′ ← -½ × L1′′ + L′3
V.B. xE xM xA xP x1 x2 x3 b
L′0′ –Z 0 0 0 -140 -40 0 -20 -20.000
L1′′ xM ½ 1 0 8 2 0 -½ 250
L′2′ x2 -1 0 0 -1 1 1 0 350
L′3′ xA ½ 0 1 -4 -1 0 ½ 0
A variável de folga x2 representa a folga do recurso “Pranchas”. A solução ótima para esse
problema, consiste em fabricar somente 250 mesas, tendo uma sobra de 350m de pranchas, e
obtendo um lucro máximo de R$20.000,00.
Veja que, apesar da variável xA estar na base, seu valor é nulo, indicando que essa solução é
degenerada.
Para evitar o processo de ciclagem, normalmente recorre-se a uma das duas regras mais conhecidas:
– Regra de Bland
• Entre todas as candidatas a entrar na base, selecione a variável xk que possui o menor índice.
• Entre todas as candidatas a sair na base, selecione a variável xr que possui o menor índice.
44
Exemplo 2
Uma sorveteria produz dois tipos de sorvete: no palito e no copinho. Na sorveteria, o único ponto
crítico é a mão-de-obra disponível. O sorvete no copinho consome 50% a mais de mão-de-obra do
que no palito. Sabe-se que se todo sorvete produzido fosse no palito a companhia poderia produzir
400 toneladas por dia. No entanto, o mercado tem condições de absorver, diariamente, apenas 300
toneladas de sorvete no palito e 150 toneladas de sorvete no copinho.
max. Xp + Xc
s.a.
Xp ≤ 300
Xc ≤ 150
Xp + 1,5Xc ≤ 400
2. Resolva-o graficamente.
Xc
400
300
200
100
Solução ótima: (Xp=300; Xc=66,67; Z=366,67)
Pela inclinação e sentido de crescimento da F.O. (linha pontilhada), vemos que a solução ó-
tima é a interseção das retas Xp = 300 e Xp + 1,5Xc = 400. Isso nos dá as seguintes coorde-
nadas:
Xp* = 300;
Xc* = (400 – Xp) / 1,5 = 100 / 1,5 = 66,67;
Z* = 366,67.
45
3. Resolva-o pelo método simplex.
Marcando os pivôs em negrito, temos os seguintes quadros do simplex (alguns valores apa-
recem arredondados no quadro):
====================================================
| Xp Xc X3 X4 X5| b
----------------------------------------------------
-Z| 1.0 1.0 0.0 0.0 0.0| 0.0
----------------------------------------------------
X3| 1.0 0.0 1.0 0.0 0.0| 300.0
X4| 0.0 1.0 0.0 1.0 0.0| 150.0
X5| 1.0 1.5 0.0 0.0 1.0| 400.0
====================================================
-Z| 0.0 1.0 -1.0 0.0 0.0| -300.0
----------------------------------------------------
Xp| 1.0 0.0 1.0 0.0 0.0| 300.0
X4| 0.0 1.0 0.0 1.0 0.0| 150.0
X5| 0.0 1.5 -1.0 0.0 1.0| 100.0
====================================================
-Z| 0.0 0.0 -0.3 0.0 -0.7| -366.7
----------------------------------------------------
Xp| 1.0 0.0 1.0 0.0 0.0| 300.0
X4| 0.0 0.0 0.7 1.0 -0.7| 83.3
Xc| 0.0 1.0 -0.7 0.0 0.7| 66.7
====================================================
Solucao otima:
Z* = 366.67
x* = (300; 66,67; 0; 83.33; 0; 0)
Observe que a variável X4 representa a folga em termos de mercado para o sorvete em copi-
nho (ou seja, é o tanto que estamos produzindo abaixo do valor máximo permitido).
4. Agora observe de novo a solução gráfica e observe o que acontece, graficamente, a cada itera-
ção do Simplex.
46
Algoritmo Simplex – Método das Duas Fases
x2
6 A B
3
C
0 2 4 x1
Observe que, neste caso, não podemos considerar a solução inicial contendo somente as variáveis
de folga, o que resultaria em uma solução inviável. Isso pode ser visto na representação gráfica do
problema, mostrado acima. A solução trivial x1 = 0 e x2 = 0 não pertence ao espaço de soluções.
Nessas situações, normalmente opta-se por usar um dos seguintes métodos para solucionar o mode-
lo de P.L.:
• Método do grande M
• Método das duas fases
Veremos aqui o método das duas fases (o outro será discutido em sala de aula).
47
Na FASE 1, utilizamos o simplex sobre o problema modificado, e tentamos encontrar uma solução
básica viável inicial do problema original.
FASE 1
1. Introduzimos uma variável artificial x aj para cada restrição do problema, ou somente para as
restrições que tiverem variável de folga com coeficiente negativo.
Introduzindo uma variável artificial x 6a , e mudando a função objetivo de forma a conter somente as
variáveis artificiais, temos:
Minimizar q = x 6a
s.a.:
x1 + x3 = 4
x2 + x4 = 6
3x1 + 2x2 - x5 + x 6a = 18
x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, x4 ≥ 0, x5 ≥ 0, x 6a ≥ 0
V.B. x1 x2 x3 x4 x5 x 6a
q 0 0 0 0 0 -1
x3 1 0 1 0 0 0 4
x4 0 1 0 1 0 0 6
x 6a 3 2 0 0 -1 1 18
Iteração 1:
V.B. x1 x2 x3 x4 x5 x 6a
q 3 2 0 0 -1 0 18
x3 1 0 1 0 0 0 4
x4 0 1 0 1 0 0 6
a
x6 3 2 0 0 -1 1 18
48
Iteração 2:
V.B. x1 x2 x3 x4 x5 x 6a
q 0 2 -3 0 -1 0 6
x1 1 0 1 0 0 0 4
x4 0 1 0 1 0 0 6
a
x6 0 2 -3 0 -1 1 6
V.B. x1 x2 x3 x4 x5 x 6a
q 0 0 0 0 0 -1 0
x1 1 0 1 0 0 0 4
x4 0 0 3/2 1 1/2 -1/2 3
x2 0 1 -3/2 0 -1/2 1/2 3
Fim da Fase 1. Retirando as partes sombreadas acima, e re-introduzindo a função objetivo original,
temos:
FASE 2
V.B. x1 x2 x3 x4 x5
-Z’ 3 5 0 0 0 0
x1 1 0 1 0 0 4
x4 0 0 3/2 1 1/2 3
x2 0 1 -3/2 0 -1/2 3
Iteração 3:
V.B. x1 x2 x3 x4 x5
-Z’ 0 0 9/2 0 5/2 -27
x1 1 0 1 0 0 4
x4 0 0 3/2 1 1/2 3
x2 0 1 -3/2 0 -1/2 3
Iteração 4:
V.B. x1 x2 x3 x4 x5
-Z’ 0 0 0 -3 1 -36
x1 1 0 0 -2/3 -1/3 2
x3 0 0 1 2/3 1/3 2
x2 0 1 0 1 0 6
49
Quadro final (ótimo):
V.B. x1 x2 x3 x4 x5
-Z’ 0 0 -3 -5 0 -42
x1 1 0 1 0 0 4
x5 0 0 3 2 1 6
x2 0 1 0 1 0 6
x2
Z = -36
6 A B
Z = -42
3 C q=0
Z = -27
q = 18 q=6
0 2 4 x1
Sujeito a:
50
FASE 1
Introduzindo as variáveis de folga e as variáveis artificiais, temos o seguinte modelo artificial, já na
forma padrão:
V.B. x1 x2 x3 x4 x5a x 6a
q 0 0 0 0 -1 -1
x5a 2 3 -1 0 1 0 650
x 6a 5 3 0 -1 0 1 1050
Iteração 1:
V.B. x1 x2 x3 x4 x5a x 6a
q 7 6 -1 -1 0 0 1700
a
x5 2 3 -1 0 1 0 650
x 6a 5 3 0 -1 0 1 1050
Iteração 2:
V.B. x1 x2 x3 x4 x5a x 6a
q 0 1,8 -1 0,4 0 -1,4 230
a
x5 0 1,8 -1 0,4 1 -0,4 230
x1 1 0,6 0 -0,2 0 0,2 210
V.B. x1 x2 x3 x4 x5a x 6a
q 0 0 0 0 -1 -1 0
x2 0 1 -0,56 0,22 0,56 -0,22 127,78
x1 1 0 0,33 0,13 -0,33 -0,13 133,33
Fim da Fase 1. Retirando as partes sombreadas acima, e re-introduzindo a função objetivo original,
temos:
51
FASE 2
V.B. x1 x2 x3 x4
-Z’ 32 35 0 0 0
x2 0 1 -0,56 0,22 127,78
x1 1 0 0,33 0,13 133,33
x1 = 133,33 kg
x2 = 127,78 kg
Custo mínimo = $ 8.738.89
Mistura de Ração
x2
400
360
320
280
240
200
160
120
80
40 x1
0
0 40 80 120 160 200 240 280 320 360 400
F.O.
Nutr.A
Nutr.C
52
Elementos de Pós-Otimização
Seja o PPL dado pela Forma Padrão:
Max. Z = cx
s.a.
Ax = b,
x≥0
e suponha que a aplicação do método Simplex encontrou uma solução ótima associada a uma matriz
básica B.
1. Mudança no vetor c
2. Mudança no vetor b
3. Mudança na matriz A
4. Adição de nova atividade
5. Adição de uma nova restrição.
Se a análise não permite mudança na base B, tem-se uma Análise de Sensibilidade. Caso contrário,
uma Análise Paramétrica. Neste módulo, será feita uma abordagem da primeira situação.
Em que faixa podem variar os custos e os meus recursos de modo que a minha solução não
mude?
Max. Z = cx
s.a.
Ax = b,
x≥0
é equivalente a:
Max. Z = cB xB + cR xR
s.a.
BxB + RxR = b ,
xB ≥ 0, xR ≥ 0
Como já foi visto anteriormente, o método Simplex procura, a partir de uma determinada
partição da matriz A, resolver o sistema de equações Ax = b, sendo que a solução, para xR = 0 , é de-
nominada solução básica. Se esta solução atende a restrição x ≥ 0, ela é denominada de solução bá-
sica viável. Se ela minimiza a F.O. Z, ela é chamada de solução ótima do PPL.
xB xR
-Z 0 cj – zj cB B −1b
xB I B −1 R B −1b
onde zj = c B B −1 a j
53
Condição de Otimalidade (maximização):
(cj – zj) ≤ 0
para toda variável não básica.
Um exemplo:
Considere o modelo do PPL visto na página 45 (com Xp e Xc sendo substituídos por x1 e x2, respec-
tivamente):
max. x1 + x2
s.a.
x1 + x3 = 300
x2 + x4 = 150
x1 + 1,5x2 + x5 = 400
xj ≥ 0
sendo
x1
x
1 0 1 0 0 300 2
A = 0 1 0 1 0 b = 150 c = [1 1 0 0 0] x = x3
1 1,5 0 0 1 400 x4
x5
Z* = 366.67
x* = (300; 66,67; 0; 83.33; 0; 0)
Temos, portanto, que x1, x2 e x4 são atividades básicas, e x3, x5 são atividades não básicas. Expres-
sando isso em termos das equações matriciais vistas anteriormente, temos...
1 0 0 1 0 1 0 0
B = 0 1 1 R = 0 0 B = −0, 67 0 0, 67
−1
1 1, 5 0 0 1 0,67 1 −0, 67
x1
x3
cB = [1 1 0] cR = [ 0 0] xB = x2
xR =
x4 x5
cB xB = 366, 67
54
====================================================
-Z| 0.0 0.0 -0.3 0.0 -0.7| -366.7
----------------------------------------------------
Xp| 1.0 0.0 1.0 0.0 0.0| 300.0
X4| 0.0 0.0 0.7 1.0 -0.7| 83.3
Xc| 0.0 1.0 -0.7 0.0 0.7| 66.7
====================================================
Mudança no vetor c
A análise é feita considerando-se a variação no coeficiente de cada variável na função objetivo, exi-
gindo-se que as condições de otimalidade:
(cj – zj) ≤ 0
sejam atendidas para toda VNB. Neste caso, se a variável em questão for não básica resolve-se uma
desigualdade linear, enquanto que se ela for variável básica resolve-se um sistema de desigualdades
lineares.
Exemplo:
Deve-se ter:
Isso permite uma variação para c3 de –∞ até 0,333. Neste intervalo, x3 continuará sendo VNB. Mais
ainda, os conjuntos de VB e de VNB não mudam.
Para fazer a mesma análise considerando uma VB (e.g. x1), poderíamos fazer assim:
cR − cB B −1 R ≤ 0
1 0 0 1 0
⇒ [ 0 0] − [ (1 + λ ) 1 0] −0, 67 0 0,67 0 0 ≤ 0
0, 67 1 −0, 67 0 1
⇒ λ ≥ −0,333
55
Mudança no vetor b
Qualquer mudança no vetor b deve ser feita de modo que as VB continuem não negativas, ou seja:
B-1b ≥ 0
Exemplo:
b1 + λ 1 0 0 300 + λ
B
−1
b ≥ 0 ⇒ −0, 67 0 0, 67 150 ≥ 0
2
b3 0, 67 1 −0, 67 400
300 + λ ≥ 0
⇒ 66, 67 − 0.67λ ≥ 0
83,33 + 0.67λ ≥ 0
⇒ −125 ≤ λ ≤ 100
56
Dualidade
L
i
e(t) C i(t) e R L C
R
Circuito 1 Circuito 2
di 1
Circuito 1: L + Ri + ∫ idt = e(t )
dt C
de 1
Circuito 2: C + Gi + ∫ edt = i (t )
dt L
onde G = 1 R
dx
Forma geral: a + bx + c ∫ xdt = y (t )
dt
Circuito 1: primal
Circuito 2: dual
(ou vice-versa)
n
Max. ∑c x
j =1
j j (1)
n
s.a. ∑a j =1
ij x j ≤ bi , para i = 1, 2, ..., m (2)
m
Min. ∑b u
i =1
i i (4)
m
s.a. ∑a u
i =1
ij i ≥ c j , para j = 1, 2, ..., n (5)
57
Primal (P) Dual (D)
Max. cx Min. ub
s.a. Ax ≤ b s.a. uA ≥ c
x≥0 u≥0
x: (1× n) u: (m × 1)
Exemplo:
Teorema 1:
Teorema 2:
Se x e u são soluções viáveis dos problemas (P) e (D), respectivamente, e cx = u b , então essas so-
luções são ótimas, ou seja, cx * = u *b
Teorema da Existência
Para um par de problemas duais, uma e somente uma das alternativas abaixo é verdadeira:
Ex:
u(Ax – b) = 0
(c – uA)x = 0
Prova:
58
Ax ≥ b ∴ Ax − b ≥ 0 ∴ u ( Ax − b) ≥ 0
u A ≤ c ∴ c − u A ≥ 0 ∴ ( c − u A) x ≥ 0
Fazendo
α = u ( Ax − b)
β = (c − u A) x
Teremos:
α + β = u ( Ax − b) + (c − u A) x = cx − u b ≥ 0
cx = u b
Logo,
α =β =0
Problema de Problema de
Restrições
Maximização Minimização
Variáveis
≥0 ←–→ ≥
≤0 ←–→ ≤
Irrestrito ←–→ =
Restrições
Variáveis
≤ ←–→ ≥0
≥ ←–→ ≤0
= ←–→ Irrestrito
Feita essa primeira transformação, podemos então aplicar as regras usuais para passar o modelo du-
al para a forma padrão, caso, seja necessário.
59
Exemplo
Uma fábrica pode produzir três produtos: televisores, DVDs e cãmeras de vídeo. Na tabela abaixo
estão apresentados os consumos dos principais recursos da fábrica por produto, bem como a dispo-
nibilidade destes recursos, a contribuição unitária de cada produto para o lucro da empresa, e a de-
manda mínima do mercado.
Para o problema acima foi obtida a seguinte solução ótima através do Lindo:
OBJECTIVE FUNCTION VALUE
1) 9578.494
60
1. Construa um modelo matemático para este problema de produção.
Observando a tabela com os parãmetros, e mais a seqüência na qual estão dispostas as cons-
tantes do lado direito (RHS) na solução dada, podemos construir o modelo exato que foi u-
sado para obter a solução pelo Lindo:
i) 57 unid. / mês?
Pela análise de sensibilidade, vemos que, para que a mesma base seja mantida, a demanda de
televisores precisa estar entre (55,8 – 2,036438) e (55,8 + 1.379412), ou seja, entre 53,76 e
57,18. Portanto, com uma demanda de 57 unid./mês, podemos considerar o preço dual para a
restrição de demanda de televisores, que é de cerca de –153,48. Isso significa que o lucro da
empresa piora de R$ 153,48 para cada unidade de aumento da demanda de televisores. Para
uma demanda de 57, teríamos um aumento na demanda de 1,2, e portanto o lucro sofreria
um decréscimo de 1,2 × 153,48 = R$ 184,17 / mês.
Neste caso, a demanda ultrapassaria o limite estabelecido pela análise de sensibilidade, e te-
ríamos uma mudança de base. Não podemos, neste caso, fazer qualquer análise quantitativa
com base somente nas informações fornecidas na solução do problema.
4. Faça sugestões para o superintendente da empresa, de modo que se possa aumentar ainda mais o
lucro total.
62
PARTE II – Programação em Redes
Introdução
No contexto da Pesquisa Operacional, chamamos de Programação em Redes o estudo dos proble-
mas que utilizam a Teoria dos Grafos como um dos principais recursos de modelagem. Neste con-
texto, o termo “rede” pode se referir não somente a uma “rede de computadores”, mas também a
uma rede de transportes, de distribuição etc. Exemplos:
• Redes de computadores
• Redes ferroviárias
• Redes de telecomunicações
• Redes de estradas
• Redes Elétricas
• Redes de esgotos
• Redes de transportes
• Redes de atividades →
Neste escopo, portanto, uma rede pode se referir a qualquer conjunto de entidades (computadores,
lojas, fábricas, máquinas, pessoas etc.) interligadas por meio de cabos, estradas, caminhos etc., ou
que possuem algum inter-relacionamento. Esse tipo de problema se encaixa perfeitamente na mode-
lagem por meio de grafos, como veremos mais adiante.
Redes / Grafos
ESTRUTURA
TOPOLÓGICA
INFORMAÇÕES QUANTITATIVAS
SOBRE OS ELEMENTOS
Antes de estudarmos formalmente o que são grafos, considere o seguinte exemplo: Um vendedor
ambulante deve sair de uma cidade de origem, visitar várias outras cidades, e depois retornar à ci-
dade de origem, passando por cada uma dessas cidades uma única vez. Sabendo que existem muitas
formas diferentes de realizar essas visitas, ele deseja descobrir o itinerário que proporciona a menor
distância (ou tempo ou custo) total percorrida. Esse problema clássico da P.O. é chamado de “Pro-
blema do Caixeiro Viajante (PCV)”. Podemos exemplificar o problema considerando somente 5 ci-
dades e a rede de interligações (estradas) ilustrada na figura a seguir, onde os valores nas linhas re-
presentam as distâncias entre as cidades.
63
2 300 3
300
250
1 200
200 200
350
350 200
4 150 5
Como podemos resolver esse problema? A forma mais simples seria enumerar todas as rotas possí-
veis e calcular a distância de cada uma. Como a posição da cidade-origem no itinerário é fixo, esse
método envolveria analisar todas as permutações possíveis dentre as n–1 cidades restantes, ou seja,
analisar (n–1)! possíveis rotas.
Com 5 cidades, teríamos 4! = 24 rotas, o que seria trivial de analisar (podendo até mesmo ser feito à
mão). Com 10 cidades, teríamos cerca de 362 mil rotas, o que seria perfeitamente possível com a
ajuda de um micro-computador. Aumentando esse número para 20 cidades, teríamos cerca de 1017
rotas. Se pudéssemos implementar um programa que pudesse analisar uma solução (permutação) a
cada ciclo de relógio de um computador, então usando um computador de 4 GHz gastaríamos:
1017
= 2,5 × 107 segundos = 9,5 meses!
4 ×10 9
Com 50 cidades, teríamos cerca de 1062 rotas, requerendo cerca de 1045 anos de processamento!
Embora o uso de uma técnica dessas de “força bruta” não fosse a maneira mais inteligente de en-
contrar uma solução ótima para esse problema (a não talvez para um pequeno número de cidades),
nesse caso não existe realmente uma técnica apropriada para fazer isso, seja ela por meio de mode-
lagem matemática em forma de PL, ou usando um outro algoritmo qualquer. Diferente dos proble-
mas de PL que estudamos anteriormente, que dispõem do eficiente método Simplex, todos os méto-
dos disponíveis para a obtenção de uma solução ótima para o PCV possuem dificuldade exponenci-
al com o tamanho do problema (número de cidades).
Assim como o PCV, diversos outros problemas de programação em redes são extremamente difíceis
de resolver. Nesses casos, o mais indicado é o uso de heurísticas, ou seja, algoritmos buscam en-
contrar uma solução boa para o problema, mas não necessariamente a solução ótima, dentro de um
intervalo de tempo viável.
No entanto, outros problemas de programação em redes, embora possam ser modelados como PLs e
resolvidos pelo Simplex, possuem métodos de solução bem mais eficientes e que permitem resolver
problemas bem maiores do que seria possível se usássemos a modelagem matemática. Isso é possí-
vel graças aos desenvolvimentos obtidos na Teoria dos Grafos. Além de vermos alguns desses pro-
blemas, a nossa preocupação será também identificar aqueles problemas que, assim como o PCV,
são mais difíceis de resolver e, portanto, requerem a busca de soluções não-ótimas ou “aproxima-
das”.
64
Introdução à Teoria de Grafos
Teoria dos grafos é uma ferramenta para formular problemas, tornando-os precisos, e definindo in-
ter-relações fundamentais. Algumas vezes, uma formulação simples e precisa de um problema nos
ajuda a compreendê-lo melhor. O maior trunfo de uma ferramenta de formulação é a possibilidade
de compreender o modelo matemático de modo simplificado. Deste modo, na Teoria dos Grafos, a
maior unidade de aprendizado que se usa é a assistência a colocações e possíveis encaminhamentos
futuros a um problema. Uma vez que um problema seja formulado em linguagem teórica de grafos,
os conceitos de Teoria dos Grafos podem ser usados para definir o que é necessário para analisar o
problema. Também, a Teoria dos Grafos pode nos levar a novos conceitos teóricos os quais podem
ser usados para construir teorias sobre problemas da sociedade. No entanto, alguns problemas po-
dem ser modelados somente em parte por grafos - problemas de telecomunicações, dentre outros,
nos levando a crer que esta teoria é algo que complementa com elegância a análise de vários pro-
blemas de nosso dia a dia.
• Caminhos;
• Redes de comunicação;
• Localização de facilidades (Depósitos, Hospitais, Escolas, etc.);
• Desenhos de circuitos impressos;
• Desenho e/ou layout de revistas, jornais, etc;
• Distribuição de produtos;
• Telecomunicações;
• Limpeza urbana;
• Controle de tráfego;
• Atribuição de rádio freqüência móvel, etc.
Teoria dos grafos, sem abusar muito do princípio, é uma ferramenta que às vezes resolve problemas
e algumas vezes nos dá idéias sobre como resolvê-los. Ela, em geral, tem que ser usada em conjunto
com muitas outras ferramentas, matemáticas ou estatísticas, etc. Felizmente, o uso da teoria dos gra-
fos pode nos ajudar a compreender em “poucas palavras” o significado de grandes problemas liga-
dos à nossa vida social, e algumas de suas possíveis soluções.
65
Figura 1: Visualização de Königsberg, e indicação das sete pontes sobre o rio Pregel.
66
Muitos anos mais tarde, em 1962, um matemático da Universidade Normal de Shangtun, Kwan
Mei-Ko, quando de sua passagem como funcionário dos correios durante a revolução cultural chi-
nesa, preocupou-se com uma situação semelhante à de Euler e Heierholzer, porém adequada ao per-
curso dos carteiros que atenderiam ruas de sua cidade. Neste caso, Kwan mostrou-se interessado em
definir além da travessia, a forma mais fácil de fazê-la, percorrendo a menor distância possível.
Kwan, definiu assim o problema: Um carteiro tem que cobrir seu local de trabalho, antes de retor-
nar ao posto. O problema é encontrar a menor distância de percurso para o carteiro. Esse proble-
ma é conhecido como o “Problema do Carteiro Chinês”.
Dentre as muitas e famosas histórias da Teoria dos Grafos, sem dúvida uma das mais curiosas é a
do matemático William Rowan Hamilton. Hamilton já fazia parte da Royal Astronomia Irlandesa
aos 22 anos, foi condecorado Cavalheiro aos 30 anos, e foi reconhecido como um dos líderes mate-
máticos de sua época. Uma de suas descobertas mais significativas foi a existência da álgebra não
comutativa, ou seja, a álgebra onde a multiplicação xy não necessariamente é igual a yx. Há muitos
sistemas de álgebra não comutativa, e um deles, descoberto por Hamilton foi chamado por ele de O
Cálculo Icosiano, o qual pode ser interpretado em termos de caminhos sobre um grafo descrito por
um dodecaedro regular.
Hamilton comunicou sua descoberta em uma carta datada de 7 de outubro de 1856, e posteriormen-
te publicou dois artigos sobre o assunto. Ele usou uma representação gráfica como base de um que-
bra-cabeças, que ele chamou de O Jogo Icosiano. Hamilton expôs orgulhosamente o seu jogo na
Associação Britânica em Dublin, 1857. A idéia foi vendida por 16 pounds para um comerciante de
jogos e quebra-cabeças.
O jogo foi comercializado em 1857, acompanhado por um guia de instruções, escrito pelo próprio
Hamilton. O leitor logo veria que o objetivo do jogo era encontrar caminhos e circuitos sobre o gra-
fo formado pelo dodecaedro, satisfazendo certas condições específicas. Particularmente, o primeiro
problema era o de encontrar um circuito passando somente uma vez por cada vértice do dodecaedro,
que é exatamente o PCV descrito anteriormente (Figura 4).
Figura 4: (a) Dodecaedro para o Jogo Icosiano. (b) Uma solução ou “ciclo hamiltoniano”.
67
Conceitos Básicos da Teoria de Grafos
GRAFO
V = { p | p é uma pessoa }
A = { (v,w) | < v é amigo de w > }
Neste exemplo estamos considerando que a relação <v é amigo de w> é uma rela-
ção simétrica, ou seja, se <v é amigo de w> então <w é amigo de v>. Como conse-
qüência, as arestas que ligam os vértices não possuem qualquer orientação
A relação definida por A não é simétrica pois se <v é pai/mãe de w>, não é o caso
de <w é pai/mãe de v>. O grafo acima é dito ser um grafo orientado (ou digrafo),
sendo que as conexões entre os vértices são chamadas de arcos.
68
ORDEM
• ordem(G1) = 4
• ordem(G2) = 6
ADJACÊNCIA
Em um grafo simples (a exemplo de G1) dois vértices v e w são adjacentes (ou vizi-
nhos) se há uma aresta a=(v,w) em G. Está aresta é dita ser incidente a ambos, v e w.
É o caso dos vértices Maria e Pedro em G1. No caso do grafo ser dirigido (a exem-
plo de G2), a adjacência (vizinhança) é especializada em:
O grau de um vértice é dado pelo número de arestas que lhe são incidentes. Em G1,
por exemplo:
• grau(Pedro) = 3
• grau(Maria) = 2
• grauDeEmissao(Alfredo) = 2
• grauDeRecepção(Alfredo) = 0
FONTE
SUMIDOURO
69
GRAFO REGULAR
Um grafo é dito ser bipartido quando seu conjunto de vértices V puder ser particio-
nado em dois subconjuntos V1 e V2, tais que toda aresta de G une um vértice de V1 a
outro de V2.
Para exemplificar, sejam os conjuntos
H={h | h é um homem} e M={m | h é um
mulher} e o grafo G(V,A) (ver o exemplo
G5) onde:
G5:
• V=HUM
• A = {(v,w) | (v ∈ H e w ∈ M) ou (v
∈ M e w ∈ H) e <v foi namorado
de w>}
70
GRAFO VALORADO
MULTIGRAFO
SUBGRAFO
CADEIA
71
CAMINHO
Um ciclo é uma cadeia simples e fechada (o vértice inicial é o mesmo que o vértice
final). A seqüência de vértices (x1, x2, x3, x6, x5, x4, x1) é um exemplo de ciclo ele-
mentar em G11.
CIRCUITO
Um circuito é um caminho simples e fechado. A seqüência de vértices (x1, x2, x5, x4,
x1) é um exemplo de circuito elementar em G11.
FECHO TRANSITIVO
GRAFO DESCONEXO
Uma aresta é dita ser um a ponte se sua remoção provoca um redução na conexidade
do grafo. As arestas (x1, x2) em G13 e G14 são exemplos de pontes.
72
ÁRVORE
ARBORESCÊNCIA
G21:
Uma arborescência é uma árvore que possui uma ra-
iz. Aplica-se, portanto, somente a grafos orientados.
FLORESTA
G22:
Uma floresta é um grafo cujas componentes conexas
são árvores.
73
Fluxos em Rede
Uma rede é definida como um grafo orientado G(V,A) atravessado por um fluxo F = {f1, f2, ..., fm}
que circula em seus m arcos. Em uma rede, normalmente temos três tipos de nós:
Nós de oferta ou fontes, que representam entidades que produzem ou distribuem um determinado
produto;
Nós de demanda ou sumidouros, que representam entidades que consomem ou requerem uma de-
terminada demanda do produto;
Nós de transbordo, que representam somente “pontos de passagem” para os produtos. São cruza-
mentos, cidades, computadores ou quaisquer outras entidades que não produzem e nem consomem
nada, mas são somente pontos intermediários entre as ofertas e as demandas.
Temos abaixo alguns exemplos de redes, onde os nós s representam as ofertas, os nós t representam
as demandas, e os demais nós são nós de transbordo. Os valores em cada arco representam, em ge-
ral, custos de transporte, distâncias ou tempos de viagem entre cada par de nós.
Figura 1
Figura 2
Figura 3
Repare que na Figura 1 temos o caso mais simples, onde há somente um nó de oferta e um de de-
manda. Essa topologia é usada, por exemplo, na determinação de um caminho mais curto entre dois
nós, em problemas de fluxo máximo, e em redes PERT.
Na Figura 2, temos diversos nós de oferta e de demanda. Esse grafo poderia representar, por exem-
plo, um caso típico onde temos diversas fábricas ou atacadistas que desejam distribuir um ou mais
produtos para determinadas cidades ou lojas.
74
Na Figura 3, o nó de oferta (e.g. uma fábrica) possui diversos centros de distribuição (s1, s2 e s3),
que por sua vez distribuem o produto pela rede até outros centros intermediários (e.g. atacadistas ou
armazéns), que por sua vez abastassem o consumidor (que poderia ser mais de um, no caso).
Em todos esses tipos de problema, no entanto, o que normalmente se busca determinar é o fluxo da
rede tal que o custo, o tempo ou a distância total de transporte seja minimizado, ou que o fluxo total
seja maximizado. Para isso, devemos determinar o fluxo em cada arco que liga cada par de nós i e j:
xij
i j
Conhecendo o custo cij em cada arco para se transportar cada unidade desse fluxo, podemos calcular
o custo total do transporte no grafo todo como sendo:
n n
Custo Total = ∑∑ cij xij , ∀(i, j ) ∈ A
i =1 j =1
ou:
Custo Total = ∑
( i , j )∈A
cij xij
Além do custo ou distância em cada arco, como mostra as figuras anteriores, é comum também re-
presentarmos os limites mínimos e máximos dos fluxos nos arcos, como na figura abaixo. Chama-
mos essas restrições de capacidade nos arcos.
Da mesma forma, podemos ter restrições de capacidade nos nós. Um exemplo seria o da Figura 3
mostrado anteriormente, onde os centros de distribuição s1, s2 e s3 e os armazéns t1 e t2 teriam ca-
pacidades mínimas e/ou máximas associadas a elas (como poderíamos modelar isso?).
75
Podemos calcular a soma total dos fluxos que saem do nó i como sendo:
Da mesma forma, podemos calcular a soma total dos fluxos que chegam ao nó i como sendo:
Para os nós de oferta, temos que o fluxo total que sai do nó não poderá exceder a sua capacidade
máxima de oferta si. Além disso, podemos enxergar o fluxo que chega ao nó de oferta como sendo
um aumento de sua capacidade de produção ou oferta. Portanto, para cada nó de oferta deverá exis-
tir uma restrição com o seguinte formato:
∑
( i , j )∈ A
xij ≤ si + ∑
( k ,i )∈ A
xki
ou...
∑
( i , j )∈ A
xij − ∑
( k ,i )∈ A
xki ≤ si (1)
Para os nós de demanda, temos que o fluxo total que chega ao nó deverá ser exatamente igual à sua
demanda di. Além disso, podemos enxergar o fluxo que sai do nó de demanda como sendo um au-
mento de sua demanda. Em outras palavras, devemos fazer com que o fluxo resultante ou que efeti-
vamente permanece no nó de demanda seja igual a di. Portanto, para cada nó de demanda deverá e-
xistir uma restrição com o seguinte formato:
∑
( k ,i )∈A
xki = d i + ∑
( i , j )∈A
xij
ou...
∑
( k ,i )∈A
xki − ∑
( i , j )∈ A
xij = di
Podemos ainda fazer com que o lado esquerdo da equação acima fique igual à Eq.1, bastando mul-
tiplicá-la por (-1):
∑
( i , j )∈ A
xij − ∑
( k ,i )∈ A
xki = −di (2)
Para os nós de transbordo, temos que o fluxo total que sai do nó deverá ser exatamente igual ao
fluxo que chega ao nó, já que não há produção nem consumo no nó. Portanto, para cada nó de
transbordo deverá existir uma restrição com o seguinte formato:
76
∑
( i , j )∈ A
xij = ∑
( k ,i )∈ A
xki
ou...
∑
( i , j )∈ A
xij − ∑
( k ,i )∈A
xki = 0 (3)
s.a.
∑
( i , j )∈ A
xij − ∑
( k ,i )∈ A
xki ≤ si ∀i ∈ S
∑
( i , j )∈ A
xij − ∑
( k ,i )∈ A
xki = −di ∀i ∈ D
∑
( i , j )∈ A
xij − ∑
( k ,i )∈A
xki = 0 ∀i ∈ T
onde:
A última restrição, que limita o fluxo nos arcos, poderá existir ou não. Quando existir, dizemos que
o problema é capacitado. Caso contrário, o problema é não-capacitado, e essa restrição poderá ser
substituída por:
xij ≥ 0 ∀(i, j ) ∈ A
Veja que, para que o modelo seja viável, devemos ter, obrigatoriamente:
∑s ≥ ∑d i j ∀i ∈ S , j ∈ D
77
Sistemas Equilibrados
Em sistemas ditos equilibrados, temos que:
∑s = ∑d
i j ∀i ∈ S , j ∈ D
Minimizar ∑
( i , j )∈ A
cij xij
s.a.
si ∀i ∈ S
∑ xij − ∑ xki = − di ∀i ∈ D
( i , j )∈ A ( k ,i )∈ A 0 ∀i ∈ T
Podemos considerar o fluxo produzido em um nó como sendo a sua capacidade máxima de ofer-
ta, caso o nó seja de oferta. Caso contrário, o fluxo produzido no nó é igual a zero. Da mesma for-
ma, podemos considerar o fluxo consumido por um nó como sendo a sua demanda, caso o nó seja
de demanda. Caso contrário, o fluxo consumido pelo nó é igual a zero. Alguns nós podem inclusive
ter, ao mesmo tempo, uma capacidade de oferta e uma demanda interna, o que é facilmente resolvi-
do na expressão acima.
Veja que, seja ou não o sistema equilibrado, teremos sempre uma variável xij para cada arco do
grafo, e também uma restrição para cada nó do grafo.
78
O Problema de Fluxo de Custo Mínimo (PFCM)
Este problema possui papel principal entre os modelos de otimização em redes, uma vez que ele en-
globa uma enorme quantidade de aplicações e pode ser resolvido de maneira extremamente eficien-
te. O Problema de Transporte, de Designação, de Caminho Mais Curto e de Fluxo Máximo, que ve-
remos mais adiante, são casos especiais do PFCM.
Todos esses problemas citados acima são Problemas de Programação Linear, logo o Simplex pode
ser utilizado para sua resolução. No entanto, uma versão específica do Simplex, denominada Méto-
do Simplex de Redes, pode ser utilizada de maneira ainda mais eficiente do que o próprio Simplex.
Algumas Considerações
1. A rede é representada por um Dígrafo (orientada) e conectada.
2. No mínimo um dos nós é um nó de oferta (origem).
3. No mínimo um dos nós é um nó de demanda (destino).
4. Todos os nós restantes são nós de transbordo (entreposto, intermediário, transshipment).
5. A rede possui arcos, tanto quanto forem necessários, com capacidade suficiente para habilitar
todos os fluxos gerados nos nós de fornecimento para alcançar os nós de demanda.
6. O custo do fluxo através de cada arco é proporcional à quantidade daquele fluxo, onde o custo
por unidade de fluxo é conhecido (cij).
7. O objetivo é minimizar o custo total de enviar o fornecimento disponível através da rede para
satisfazer a demanda dada (um objetivo alternativo é maximizar o lucro total para fazer isto).
Exemplos de Aplicações
A mais importante aplicação está em planejar a operação de uma rede de distribuição de uma com-
panhia. Este tipo de aplicação envolve determinar um plano para transportar bens a partir das fontes
(fábricas, etc.) para locais de armazenagem intermediárias (quando necessário) e então para os cli-
entes (demanda).
Exemplo 1:
cAC = 4
cED = 2
cAB = 2
C cDE = 3
uAB = 10
cCE = 1
cBC = 3 uCE = 80
B E
sB = 50 dE = 60
bA = 60 bD = –30
(9, 0, ∞)
A D
(4, 0, ∞)
(2, 0, ∞)
(2, 0, 10)
C (3, 0, ∞)
(1, 0, 80)
(3, 0, ∞)
B E
bB = 50 bE = –60
onde os bi representam as ofertas nos nós, sendo que ofertas negativas são, na realidade, demandas.
80
OBJECTIVE FUNCTION VALUE
1) 480.0000
Esta solução pode ser vista com mais clareza se usarmos o próprio grafo para ilustrá-lo, como visto
na figura abaixo. As linhas tracejadas representam arcos (variáveis) não usados na solução.
bA = 60 bD = –30
10
A D
30
20
C
80
50
B E
bB = 50 bE = –60
Exemplo 2:
Considere agora a rede representada pelo grafo a seguir, diferindo do anterior somente por ser um
sistema equilibrado e totalmente não-capacitado. Nesse caso, os arcos são rotulados somente com
seus custos cij:
81
bA = 50 bD = –30
9
A D
4
2
2
C 3
1
3
B E
bB = 40 bE = –60
1) 470.0000
82
bA = 50 bD = –30
A D
50
30
C
90
40
B E
bB = 40 bE = –60
Caso o sistema não seja equilibrado, é fácil transformá-lo em um sistema equilibrado. Basta acres-
centarmos um nó de demanda artificial, cuja demanda será igual à diferença entre a oferta total e a
demanda total do sistema. Depois, ligamos todos os nós de oferta a esse nó artificial por meio de ar-
cos com custo igual a zero. Fazendo isso, a função-objetivo original não será afetada, e a oferta ex-
cedente será naturalmente “escoada” dos nós de oferta para esse nó artificial. Podemos ver isso u-
sando o Exemplo 1 visto anteriormente:
bA = 60 bD = –30
cAD = 9
A D
cAr = 0
cAC = 4
br = –20
cED = 2
r cAB = 2
C cDE = 3
uAB = 10
cCE = 1
cBr = 0
cBC = 3 uCE = 80
B E
bB = 50 bE = –60
Essa nova rede terá, em seu modelo de PL, uma restrição adicional, correspondendo ao nó artificial
r, e duas novas variáveis, devido à ligação desse nó com os dois nós de oferta:
1) 480.0000
Uma outra maneira de modelar esse tipo de problema é “fechando” ou “curto-circuitando” a rede,
como se fosse um circuito elétrico contínuo. Para fazermos isso, basta acrescentar dois novos nós:
um nó fonte f que servirá como “super-oferta”, ou seja, abastecerá todos os nós de oferta i ∈ S (com
fluxos xfi fixos ou constantes), e um nó sumidouro s que servirá como “super-demanda”, ou seja,
escoará a demanda de todos os nós de demanda j ∈ D (também com fluxos xjs fixos ou constantes).
Já que nessa rede não haverá aumento nem diminuição do fluxo total (assim como num circuito elé-
trico fechado a corrente total é constante), devemos ter, a princípio, um sistema equilibrado. Caso o
sistema não seja equilibrado, devemos adicionar ainda um terceiro nó de demanda “artificial”, como
descrito anteriormente.
Com esses procedimentos, teremos uma rede dita “conservativa”, e podemos utilizar um conceito
de conservação de fluxo (ou “corrente”) perfeita em cada nó (conhecida como a primeira Lei de
Kirschoff), e a restrição de fluxo de cada nó seguirá o seguinte formato:
Para exemplificar o uso da formulação restrita, usaremos a rede do Exemplo 2, que já é equilibrada,
e acrescentaremos somente os nós f e s, juntamente com os arcos correspondentes:
84
bA = 50 bD = –30
9
A D
0 0
4
bf = 90 2
bs = –90
2
f C 3 s
1
0
3
0
B E
bB = 40 bE = –60
0
Podemos então escrever o modelo da seguinte maneira:
bA = 50 bD = –30
9
A D
4
2
2
C 3
1
3
B E
bB = 40 bE = –60
85
Iremos agora escrever o modelo de PL, colocando cada variável em uma coluna distinta, já em um
formato que se assemelha ao “quadro simplex”:
Escrevendo a matriz A separadamente, em forma de tabela, somente com os coeficientes das variá-
veis, temos:
Arcos
Nós
xAB xAC xAD xBC xCE xDE xED
A +1 +1 +1
B –1 +1
C –1 –1 +1
D –1 +1 –1
E –1 –1 +1
Repare que, como temos exatamente uma variável xij para cada arco do grafo, e como cada arco (i,
j) “sai” do nó i e “entra” no nó j, temos então que cada vetor-coluna da matriz A associado à variá-
vel xij terá a forma:
ei – ej
A principal propriedade da matriz A é a total unimodularidade. Dizemos que uma matriz é total-
mente unimodular quando qualquer sub-matriz quadrada de A possui determinante igual a 0, 1 ou –
1. Por causa dessa propriedade, as soluções ótimas obtidas pelo algoritmo Simplex levando-se em
conta o sistema linear Ax = b, serão sempre inteiras, desde que os valores de bi sejam também intei-
ros.
Como já vimos também, a solução juntamente com a respectiva Base segue abaixo:
bA = 50 bD = –30
A D Arcos
Nós
50 xAC xBC xCE xED
A +1
30 B +1
C –1 –1 +1
C D –1
E –1 +1
90
40
B E
bB = 40 bE = –60
86
O Problema de Transporte (PT)
O problema de transporte é um caso especial do PFCM, onde a rede pode ser representada por um
grafo bipartido. Isso significa que não existem nós de transbordo (intermediários ou de transi-
ção) para o fluxo. Além disso, não existem arcos ligando entre si os nós de oferta ou os nós de de-
manda. O objetivo nesse caso é descobrir somente as quantidades do produto que cada nó de oferta
enviará para cada nó de demanda. A maneira como esses fluxos serão enviados (os trajetos) já é co-
nhecida de antemão.
cij d1
o1
d2
o2
d3
o3
d4
o4 d5
s.a.
∑
( i , j )∈ A
xij ≤ si ∀i ∈ S
− ∑
( i , j )∈ A
xij = −d j ∀j ∈ D
onde:
xij ≥ 0 ∀(i, j ) ∈ A
Apesar do modelo acima ser válido e seguir o padrão dos problemas de fluxo em rede, uma outra
forma, talvez mais natural ou intuitiva de escrevê-lo é mostrado abaixo (para problemas não-
capacitados):
Min. ∑
( i , j )∈ A
cij xij
s.a.
∑
( i , j )∈ A
xij ≤ si i = 1, 2,3,..., m
∑
( i , j )∈ A
xij = d j j = 1, 2, 3,..., n
xij ≥ 0 ∀(i, j ) ∈ A
Min. ∑
( i , j )∈ A
cij xij
s.a.
∑
( i , j )∈ A
xij = si i = 1, 2,3,..., m
∑
( i , j )∈ A
xij = d j j = 1, 2, 3,..., n
xij ≥ 0 ∀(i, j ) ∈ A
88
Exemplo 1:
Considere o Problema de Transporte representado pelo grafo abaixo. Note que os valores ao lado
dos nós são as ofertas (si) e as demandas (dj), e os valores nos arcos são os custos cij.
4 1 20
50 1
3
4
5 2 15
50 2
7
6 3 18
2
50 3
4
4 25
Usando a forma clássica, o modelo de PL que resolve esse problema pode ser escrito assim:
1) 261.0000
89
O grafo que representa essa solução é dado abaixo:
20 1 20
50 1
15
2 15
50 2
3 18
18
50 3
25
4 25
Exemplo 2:
Nesse caso, podemos lançar mão do mesmo artifício apresentado no PFCM para equilibrar sistemas
cuja oferta é maior que a demanda, simplesmente introduzindo um nó artificial de demanda, como
mostra o grafo abaixo.
4 1 20
50 1
3
0 4
5 2 15
50 2
7
0 6 3 18
2
50 3
4
4 25
0
5 72
90
d1) x11 + x21 = 20
d2) x12 + x22 = 15
d3) x23 + x33 = 18
d4) x24 + x34 = 25
d5) x15 + x25 + x35 = 72
xij ≥ 0
1) 261.0000
20 1 20
50 1
15
15
2 15
50 2
50
3 18
18
50 3
25
4 25
7
5 72
Vale lembrar que é possível também usar o modelo restrito para o PT, assim como foi feito para o
PFCM, e a propriedade de total unimodularidade também é válida, o que significa que, mesmo
que as variáveis xij tenham restrições de integralidade, podemos resolver o modelo usando qualquer
software que implementa o simplex (PROLIN, LINDO, LINGO, CPLEX etc.), ignorando essas res-
trições, e com isso aproveitando outros recursos importantes, como os valores dos custos reduzidos,
preços duais e a análise de sensibilidade.
91
Exemplo 3:
Uma companhia enlata ervilhas nas suas unidades C1, C2 e C3, e transporta as latas por caminhão
para as suas unidades de estocagem W1, W2, W3 e W4. A tabela abaixo mostra os custos de trans-
porte, a disponibilidade das unidades Ci e as necessidades dos estoques Wj. Deseja-se determinar a
distribuição das unidades Ci para os estoques Wj, de modo a minimizar o custo do transporte.
Nesse caso temos um grafo bipartido completo K3,4, pois cada unidade Ci pode enviar caminhões
para qualquer um dos estoques Wj. Com isso, teremos 3 × 4 = 12 variáveis, e 3 + 4 = 7 restrições. Já
que o modelo é também equilibrado, podemos escrevê-lo assim:
1) 152535.0
92
O grafo que representa essa solução é dado abaixo:
W1
C1 80
20
45 W2
C2
55
W3
70
C3
30
W4
Apesar de ser possível o uso do Simplex Primal tradicional para a resolução do PT, existem varia-
ções do Simplex que normalmente são usados de maneira muito mais eficiente, o que possibilita re-
solver problemas bem maiores sem a necessidade da modelagem explícita. Uma das simplificações
pode ser observada no início do algoritmo. Ao invés de usar o método das duas fases ou do grande
M para obter uma SBV inicial, podemos usar o método do canto noroeste. Esta é, na verdade, uma
heurística gulosa, que busca uma solução simples por meio da própria tabela de ofertas × demandas:
W1 W2 W3 W4 Disponibilidade
C1 75 75
C2 5 65 55 125 120 55
C3 15 85 100 85
Demanda 80 5 65 70 15 85
Essa solução inicial, não ótima, teria um custo de transporte de $165.595,00 (contra um ótimo de
$152.535,00). Com isso, os “pivoteamentos” começariam dessa solução inicial.
5 W1
C1 75
65 W2
C2
55
W3
15
C3
85
W4
93
O Problema de Designação (PD)
Este problema, também chamado de Problema de Atribuição, de Alocação ou de Casamento (1-
Matching), é um caso especial do Problema de Transporte. O enunciado clássico desse problema
segue abaixo:
Máquinas Tarefas
(ofertas) (demanda)
1 1
2 2
3 3
4 4
Esse problema tem uma ampla gama de aplicações, como designação de tarefas, alocação de vagas,
alocação de professores em turmas e salas de aula, agências de casamento, distribuição de médicos
entre hospitais, alocação dinãmica de táxis entre clientes, entre outros. Este problema também pode
ser visto com caso especial do Problema de Emparelhamento (PE), os as mesmas alocações são
feitas entre pares de nós, mas não necessariamente em um grafo bipartido.
Podemos enxergar esse problema como se fosse um PT equilibrado, onde todas as ofertas e de-
mandas são unitárias, ou seja, si = di = 1, ∀ i = 1, 2, ..., n. Com isso, podemos escrever o modelo
de PL da seguinte forma:
n n
Min. ∑∑ c x
i =1 j =1
ij ij
s.a.
n
∑x
j =1
ij =1 i = 1, 2, 3,..., n
n
∑x
i =1
ij =1 j = 1, 2, 3,..., n
94
1 se a máquina i estiver designada à tarefa j;
xij =
0 caso contrário.
Isso significa que a variável de decisão xij irá simplesmente determinar a existência ou não de um
arco no grafo que representa a solução. Novamente aqui temos também a propriedade de total uni-
modularidade da matriz A, e portanto essa restrição de integralidade pode ser relaxada se quisermos
resolver o problema usando o modelo matemático.
Exemplo 1:
Encontre uma solução ótima para o PD contendo 4 máquinas e 4 tarefas, onde a matriz de custos é
mostrada abaixo.
Tarefas
cij 1 2 3 4
1 1 3 4 5
Máquinas
2 4 2 4 7
3 6 7 8 3
4 5 4 2 1
Aplicação do Algoritmo:
Valor Mínimo
na Linha (ui)
1 3 4 5 1
4 2 4 7 2
6 7 8 3 3
5 4 2 1 1
0 2 3 4
2 0 2 5
3 4 5 0
4 3 1 0
95
0 2 3 4
2 0 2 5
3 4 5 0
4 3 1 0
Valor Mínimo
0 0 1 0
na Coluna (vj)
0 2 2 4
2 0 1 5
3 4 4 0
4 3 0 0
Essa matriz obtida é chamada de matriz reduzida. As designações que minimizam o custo total são
aquelas cujo “custo reduzido” cij é igual a zero. Como nesse caso n = 4, devemos escolher um fluxo
contendo 4 designações que minimizam o custo. Temos então as seguintes opções:
0 2 2 4 0 2 2 4 0 2 2 4
2 0 1 5 2 0 1 5 2 0 1 5
3 4 4 0 3 4 4 0 3 4 4 0
4 3 0 0 4 3 0 0 4 3 0 0
Configuração 1 (inviável) Configuração 2 (ótima) Configuração 3 (inviável)
O número máximo de células com custo reduzido zero tal que não mais de duas ocupem a mesma
linha é igual ao número mínimo de linhas horizontais e/ou verticais necessárias para cobrir todas as
células nulas da matriz. Essas células são chamadas independentes. Temos então o seguinte teore-
ma:
No exemplo acima, veja que é necessário no mínimo 4 linhas para cobrir todas as células nulas da
matriz. Exemplos dessa cobertura são dados abaixo:
0 2 2 4 0 2 2 4 0 2 2 4
2 0 1 5 2 0 1 5 2 0 1 5
3 4 4 0 3 4 4 0 3 4 4 0
4 3 0 0 4 3 0 0 4 3 0 0
Neste exemplo temos então uma única solução ótima, mostrada acima na “Configuração 2”, que
fornece um custo total igual a 12. O grafo que representa essa solução é mostrado seguir (nos arcos
foram colocados os custos das designações, obtidos da matriz original do problema):
96
Máquinas Tarefas
1
1 1
2
2 2
3 8 3
1
4 4
Exemplo 2:
Considere agora o seguinte PD, também contendo 4 máquinas e 4 tarefas:
Tarefas
cij 1 2 3 4
1 94 1 54 68
Máquinas
2 74 10 88 82
3 62 88 8 76
4 11 74 81 21
Aplicação do Algoritmo:
93 0 53 67
64 0 78 72
54 80 0 68
0 63 70 10
Agora subtraímos o menor valor de cada coluna, obtendo a seguinte matriz reduzida:
93 0 53 57
64 0 78 62
54 80 0 58
0 63 70 0
Observando os valores nulos da matriz, vemos que há duas violações de ortogonalidade da solução:
97
93 0 53 57
64 0 78 62
54 80 0 58
0 63 70 0
Com isso não é possível obter uma solução viável. Essa mesma conclusão pode ser obtida também
com a cobertura (ou rotulação) dos zeros da matriz. Vemos que é possível cobrir todos os zeros
com apenas três linhas. Uma das formas de se fazer isso é assim:
93 0 53 57
64 0 78 62
54 80 0 58
0 63 70 0
Não importa como os zeros são cobertos ou rotulados, contanto que usemos somente linhas hori-
zontais e/ou verticais, e o número dessas linhas seja mínimo. Com a rotulação feita acima e usando
o teorema visto anteriormente, chegamos à conclusão que nessa matriz reduzida encontramos no
máximo três células (ou variáveis) independentes, o que não é suficiente, pois precisamos de quatro
variáveis para solucionar o problema.
Passamos então à etapa de rotulação propriamente dito. Para cada fluxo inviável (como o visto aci-
ma), teremos uma iteração do algoritmo. Essa iteração é feita da seguinte maneira:
5. Fazer a cobertura dos zeros usando o menor número de linhas possível (já feito acima):
93 0 53 57
64 0 78 62
54 80 0 58
0 63 70 0
Como o menor número de linhas é menor que n, não temos portanto uma solução ótima viável, e
prosseguimos ao passo seguinte:
6. Determinar o menor valor descoberto. No exemplo acima, esse valor é igual a 53.
7. Subtrair esse valor de todos os valores descobertos, e somá-lo a todas as células que têm interse-
ção entre uma linha horizontal e uma vertical:
40 0 0 4
11 0 25 9
54 133 0 58
0 116 70 0
98
Retornamos agora ao passo 5, onde encontramos o segundo fluxo inviável:
40 0 0 4
11 0 25 9
54 133 0 58
0 116 70 0
36 0 0 0
7 0 25 5
50 133 0 54
0 120 74 0
Dessa matriz podemos extrair o fluxo viável indicado pelas células sombreadas acima. Seguindo es-
se algoritmo, todo fluxo viável produzido será ótimo. Portanto, a solução acima é ótima, com so-
ma total mínima igual a 97. O grafo que representa essa solução é dado abaixo:
1 1
68
10
2 2
3 8 3
11
4 4
Obs.: Nos exemplos acima, obtivemos uma única solução ótima, mas é comum obtermos matrizes
reduzidas contendo vários fluxos viáveis. Nesses casos, todos os fluxos viáveis obtidos serão óti-
mos, obviamente com valores idênticos para as funções-objetivo.
2 20 4
10 30
s t
15
1 40 6
35
20
25
3 35 5
Aplicações:
• Encontrar um caminho de distância mínima.
• Encontrar um caminho de tempo de viagem mínimo.
• Encontrar um caminho de custo mínimo.
• Encontrar um caminho de confiabilidade máxima.
Podemos enxergar esse problema como se fosse um PFCM equilibrado, com as seguintes particula-
ridades:
• Só existe um nó de oferta, correspondente ao local ou ponto de origem;
• Só existe um nó de demanda, correspondente ao local ou ponto de destino;
• A oferta e a demanda são unitárias, ou seja, ss = dt = 1, onde s e t são os nós de origem e des-
tino, respectivamente.
Minimizar ∑
( i , j )∈ A
cij xij
s.a.
1 se i = s
∑ xij − ∑ xki = −1 se i = t
( i , j )∈ A ( k ,i )∈ A 0 caso contrário
xij ∈{0,1} ∀i, j
Veja que, assim como no PD, a nossa variável de decisão é binária, ou seja, teremos:
O problema da determinação do menor caminho entre os vértices de um grafo pode ser definido
como um dos seguintes casos:
Algoritmo de Dijkstra
Esse algoritmo é bastante simples de implementar e entender e, apesar de não ser o mais eficiente
em termos de tempo de execução, nem por isso deixa de ser muito rápido. Veremos aqui a sua for-
ma clássica, que calcula o caminho mais curto entre um nó origem e todos os demais nós da rede.
No entanto, uma desvantagem desse algoritmo é que ele não funciona na presença de arestas ou ar-
cos de custo negativo, o que não é problema em aplicações de logística, por exemplo, mas pode não
ser adequado para outras aplicações.
1. Atribua valor zero à estimativa do custo mínimo do vértice s (a raiz da busca) e infinito às de-
mais estimativas;
2. Atribua um valor qualquer aos precedentes (o precedente de um vértice t é o vértice que precede
t no caminho de custo mínimo de s para t);
3. Enquanto houver vértice aberto:
• Seja k um vértice ainda aberto cuja estimativa seja a menor dentre todos os vértices aber-
tos;
101
• Feche o vértice k
• Para todo vértice j ainda aberto que seja sucessor de k faça:
o Some a estimativa do vértice k com o custo do arco que une k a j;
o Caso esta soma seja melhor que a estimativa anterior para o vértice j, substitua-
a e anote k como precedente de j.
vértices s u v x y
estimativas 0 ∞ ∞ ∞ ∞
precedentes - - - - -
vértices s u v x y
estimativas 0 10 ∞ 5 ∞
precedentes s s - s -
vértices s u v x y
estimativas 0 8 14 5 7
precedentes s x x s x
102
• selecione y (vértice aberto de estimativa mínima)
• feche y
• recalcule a estimativa de v
vértices s u v x y
estimativas 0 8 13 5 7
precedentes s x y s x
vértices s u v x y
estimativas 0 8 9 5 7
precedentes s x u s x
vértices s u v x y
estimativas 0 8 9 5 7
precedentes s x u s x
Quando todos os vértices tiverem sido fechados, os valores obtidos serão os custos mínimos dos
caminhos que partem do vértice tomado como raiz da busca até os demais vértices do grafo. O ca-
minho propriamente dito é obtido a partir dos vértices chamados acima de precedentes.
Para exemplificar, considere o caminho de custo mínimo que vai de s até v, cujo custo mínimo é 9.
O vértice precedente de v na última das tabelas acima é u. Sendo assim, o caminho é:
s → ... → u → v
s → ... → x → u → v
s→x→u→v
103
O Problema de Fluxo Máximo (PFM)
Considere uma rede direcionada (dígrafo) conexa, com dois nós especiais denominados Origem (nó
fonte do grafo) e Destino (nó sumidouro do grafo) e ainda, associada a cada arco, capacidades mí-
nima e máxima para o seu fluxo. O objetivo é maximizar o fluxo entre a Origem e o Destino.
Exemplos de Aplicações:
• Maximizar o fluxo de uma rede de distribuição de produtos de uma companhia a partir de suas
fábricas para os seus clientes.
• Maximizar o fluxo de óleo (ou água, gás etc.) através de um sistema de dutos.
• Maximizar o fluxo de veículos através de uma rede de transporte.
Exemplo 1:
Considere a rede abaixo, onde os nós O e T representam tanques de armazenamento de água de ori-
gem e destino, respectivamente, e os valores dos arcos representam o fluxo máximo de cada arco
(em m³/s). Determine o fluxo total máximo nessa rede.
5 3
1
7 4
O B D 9
T
4 2 5 1 6
4
C E
Essa solução, apesar de viável, não é a ótima. Nesse caso, duas soluções ótimas são dadas abaixo:
4 3
1
7 4
O B D 8
T
3 4 1 6
3
C E
104
A
3 3
7 4
O B D 8
T
4 3 1 6
4
C E
O modelo de PL para problemas de fluxo máximo difere um pouco do modelo geral visto para os
outros problemas de fluxo que estudamos anteriormente. Para este tipo de problema, podemos es-
crever o modelo assim:
Maximizar ∑
( O , j )∈ A
xOj (ou Maximizar ∑
( i ,T )∈ A
xiT )
s.a.
∑
( O , j )∈ A
xOj − ∑
( i ,T )∈ A
xiT = 0
∑
( i , j )∈ A
xij − ∑
( k ,i )∈A
xki = 0 ∀i ≠ O, T
onde:
A primeira restrição faz com que o fluxo total que sai do nó de Origem seja igual ao fluxo total que
chega ao nó de Destino. O segundo conjunto de restrições deve existir para cada um dos demais nós
(de transbordo), mantendo a conservação do fluxo.
Observe que esse problema é inerentemente capacitado, onde pelo menos as capacidades máximas
dos arcos devem existir (como no exemplo visto acima).
105
max xOA + xOB + xOC
st
T) xOA + xOB + xOC - xDT - xET = 0
A) xAB + xAD - xOA = 0
B) xBC + xBD + xBE - xOB - xAB = 0
C) xCE - xOC - xBC = 0
D) xDT - xAD - xBD - xED = 0
E) xED + xET - xBE - xCE = 0
end
sub xOA 5
sub xOB 7
sub xOC 4
sub xAB 1
sub xAD 3
sub xBC 2
sub xBD 4
sub xBE 5
sub xCE 4
sub xDT 9
sub xED 1
sub xET 6
Veja que as restrições de capacidade dos arcos foram dadas separadamente, não sendo contadas
como restrições normais. Esse recurso normalmente existe para os softwares de PL, e permite que o
modelo seja resolvido de forma muito mais eficiente. No caso do Lindo, podemos usar os comandos
SLB (Simple Lower Bound) para designar os valores de lij, e SUB (Simple Upper Bound) para de-
signar os valores de uij.
Como podemos ver, o Problema de Fluxo Máximo em uma Rede pode ser formulado como um
Problema de Programação Linear e, portanto, o algoritmo Simplex pode ser utilizado para obtenção
da solução ótima. Assim como no PFCM e no PT, existem também versões simplificadas do Sim-
plex para lidar com este problema, que aproveitam as características específicas da matriz A e con-
ceitos aproveitados da Teoria dos Grafos.
Entretanto, existem algoritmos mais eficientes para a solução do PFM. Um deles, bastante conheci-
do, é chamado de Algoritmo do Caminho de Aumento (Augmenting Path Algorithm). O algoritmo
do Caminho de Aumento é baseado em dois conceitos intuitivos: uma Rede Residual e um Caminho
de Aumento (propriamente dito).
Rede Residual
Considere os dois grafos mostrados na figura a seguir, representando uma solução viável, mas não
ótima, para o Exemplo 1 visto anteriormente. Os valores dos arcos da rede da esquerda representam
as capacidades máximas e seus respectivos fluxos (capacidade, fluxo). Os valores dos arcos da rede
da direita representam os resíduos, ou seja, a diferença entre a capacidade e o fluxo do arco.
A A 0
3,3
5,4 1
1,1 0
7,7 0 0
4,4 O
O B D B D 2
9,7
5,4 1
2,0 2 2 1
4,2 1,0 T
T
C E 6,6 C E 0
4,2 2
106
Caminho de Aumento
Um Caminho de Aumento é um caminho a partir da origem para o destino na Rede Residual tal que
todo arco sobre este caminho possui resíduo estritamente positivo. O valor mínimo destes resíduos é
chamado de “Capacidade Residual do Caminho de Aumento”, uma vez que este representa a quan-
tidade viável de fluxo que pode ser adicionado ao caminho todo.
A 0
1 O caminho:
0
O→C→E→D→T
0 0
O B D 2
é um Caminho de Aumento com Capacidade Resi-
1 dual 1 (menor resíduo neste caminho).
2 2 1
T
C E 0
2
N Nó O S
eliminado? FIM
107
Aplicaremos a seguir o algoritmo MPM à rede mostrada no Exemplo 1:
5 3
1
7 4
O B D 9
T
4 2 5 1 6
4
C E
Iteração 1:
j: O A B C D E T
vj: 16 4 8 4 8 7 15
O vértice de referência será então o vértice A. Forçando um fluxo de 4 unidades através desse vérti-
ce, temos o primeiro fluxo parcial e a rede residual obtida subtraindo as capacidades originais desse
fluxo:
f1: A 3
R1 : A
4 1
1
7 4
O B D O B D
3 6
1 4
4 2 1
T T
1 4 5
C E C E
Nesse momento, podemos eliminar o vértice A e seus arcos adjacentes, já que não existe mais ca-
minho de O até T passando por A.
Iteração 2:
j: O B C D E T
vj: 12 7 4 5 6 11
O vértice de referência será agora o vértice C. Forçando um fluxo de 4 unidades através desse vérti-
ce, temos o segundo fluxo parcial e a rede residual obtida subtraindo as capacidades de R1 desse
fluxo:
108
f2: R2 : A
A
1
7 4
O B D O B D 6
4
4 2 1
T 1 T
4 4
C E C E
Da mesma forma, podemos eliminar o vértice C e seus arcos adjacentes, já que não existe mais ca-
minho de O até T passando por C.
Iteração 3:
j: O B D E T
vj: 7 7 5 2 7
O vértice de referência será agora o vértice E. Forçando um fluxo de duas unidades através desse
vértice, temos o terceiro fluxo parcial e a rede residual obtida subtraindo as capacidades de R2 desse
fluxo:
f3: R3 : A
A
1
2 5 4
O O B D
B D 1 5
2 2
2
1 T
1 T
C E C E
Dessa vez, o vértice que ficou isolado, juntamente com seus arcos adjacentes, foi o vértice E.
Iteração 4:
Observando o grafo R3 acima, fica claro que o único fluxo agora possível é o seguinte:
f4: R4 : A
A
1
4 1
4 O B D
O B D 1
4
2
2
T T
C E C E
Nesse ponto, o algoritmo termina, já que não há mais caminho de O até T. Somando os quatro flu-
xos parciais, temos então a seguinte solução ótima:
109
A
4 3
1
6 4
O B D 8
T
4 3 1 6
4
C E
Veja que essa solução é diferente das outras duas soluções ótimas mostradas anteriormente para o
Exemplo 1.
110
O Problema da Árvore Geradora Mínima (AGM)
Considere uma rede não-direcionada, representada por um grafo G = (V,A) não-orientado, conexo,
onde associado a cada aresta temos uma distância (custo, tempo, etc.) não negativa. Deseja-se en-
contrar um subgrafo de G que também seja conexo, e cuja soma total das arestas (distâncias, custos,
tempos) seja o menor possível. O objetivo é manter uma ligação ou caminho entre cada par de vér-
tices, gastando a menor quantidade de conexões possível.
Esse problema, embora não seja modelado como um problema de fluxo em redes, encontra diversas
aplicações que envolvem fluxos ou transferências de produtos, informações etc.
Exemplos de Aplicações:
• Projeto de redes de telecomunicação (redes de computadores, redes de fibra-ótica, redes de tele-
fonia, redes de televisão a cabo, etc).
• Projeto de rodovias, ferrovias, etc.
• Projeto de redes de transmissão de energia.
• Roteamento de veículos.
Já vimos que uma árvore é um grafo conexo e sem ciclos. Uma árvore geradora (AG) de uma
grafo G qualquer é um subgrafo de G, conexo e sem ciclos, e que contém todos os vértices de G (e
obviamente só um subconjunto das arestas de G). Um grafo pode conter muitas árvores geradoras,
como mostra a figura abaixo (repare que não são mostradas todas as AGs).
Este problema, portanto, consiste em encontrar pelo menos uma das árvores geradoras cuja soma
das arestas seja mínima. Um modelo matemático para esse problema é dado a seguir:
Min. ∑
( i , j )∈ A
cij xij
s.a.
∑
( i , j )∈ A
xij = n − 1
∑
( i , j )∈S
xij ≤ S − 1 ∀S ⊂ G
A primeira restrição faz com que a AGM tenha exatamente n–1 arestas. O outro conjunto de restri-
ções significa que, para cada subgrafo S do grafo, o número de arestas escolhidas deve ser igual ao
número de nós em S menos 1. Isso implica na não existência de ciclos na AGM.
Apesar desse modelo de PL ser teoricamente possível para obter a AGM, diferentemente dos pro-
blemas de fluxo vistos anteriormente, ele é impraticável, porque o número de restrições cresce ex-
ponencialmente com o tamanho do grafo. No entanto, existem também algoritmos muito eficientes
111
que resolvem o problema usando somente a Teoria de Grafos. Os mais comuns são o algoritmo de
Kruskal (1956), o de Prim (1957), e o de Borüvka. Veremos dois deles a seguir:
Algoritmo de Kruskal:
Exemplo 1:
Determinar uma AGM do grafo abaixo usando o algoritmo de Kruskal.
5 3
1
7 4
O B D 3
T
4 2 5 1 6
4
C E
Solução:
A 3 A
5 3
5
1 1
7 4 7
O 4
B D 3 O B D 3
5 5
4 2 1 2
T 4 1
T
C E 6 C E 6
4 4
A 3 A
5 3
5
1 1
7 4 7
O 4
B D 3 O B D 3
5 5
4 2 1 2
T 4 1
T
C E 6 C E 6
4 4
112
A 3 A
5 3
5
1 1
7 4 7
O 4
B D 3 O B D 3
5 5
4 2 1 2
T 4 1
T
C E 6 C E 6
4 4
A 3
1
O algoritmo de Prim usa uma abordagem diferente. Ao invés de adições sucessivas de arestas até
que pequenas árvores formadas isoladamente se juntem numa única árvore geradora, o algoritmo de
Prim inicia a partir de um vértice qualquer do grafo, e vai sucessivamente unindo os outros vértices
através das arestas de menor peso. Assim, temos uma única árvore que vai crescendo até conter to-
dos os vértices de G.
Algoritmo de Prim:
Observação: no caso de empate de dois ou mais nós não conectados mais próximos de um nó co-
nectado, escolher arbitrariamente um dos nós não conectados. Ainda assim, a solução ótima é ga-
rantida, porém este fato pode ser um sinal da existência de múltiplas soluções ótimas. Todas as so-
luções ótimas podem ser obtidas executando novamente o algoritmo com decisões diferentes nos
casos de empate. Isso é válido também para o algoritmo de Kruskal.
Exemplo 2:
O grafo abaixo representa diversos computadores posicionados em um laboratório, juntamente com
as ligações (e suas respectivas distâncias em metros) possíveis de serem feitas entre eles. Deseja-se
ligar todos os computadores em rede, usando a menor quantidade em cabos coaxiais possível, de
forma que os usuários possam compartilhar dados e recursos, além de brincar com jogos interativos.
113
2
5 3
1
7 4
1 3 6 3
7
4 2 5 1 6
4
4 5
2 3 2 3
5 5
1 1
7 4 7 4
1 3 6 1 3 6
3 3
5 5
4 2 1 4 2 1
7 7
4 5 6 4 5 6
4 4
2 3 2 3
5 5
1 1
7 4 7 4
1 3 6 1 3 6
3 3
5 5
4 2 1 4 2 1
7 7
4 5 6 4 5 6
4 4
2 3
1
4 2 1
7
4 5
114
O Problema de Steiner em Grafos não Direcionados
O problema de Steiner em grafos não direcionados é o problema de conectar, a custo mínimo, um
conjunto específico de nós do grafo. Considere, por exemplo, uma região de plantio de lavouras on-
de existem diversos pontos de irrigação posicionados segundo determinados critérios técnicos e e-
conômicos (inclinação do terreno, tipo de lavoura, características do terreno etc.). O grafo abaixo
representa essa rede:
10
3
13
1 8
11
4
14
2 7 12
15
6 9
Suponha agora que os pontos de irrigação, representados pelos vértices 8, 12, 13 e 14, precisam ser
interligados e “abertos”. Essa interligação poderia ser feita de várias formas diferentes. A figura a-
baixo mostra duas formas de se fazer isso:
10 10
3 3
13 13
1 8 1 8
4 11 11
4
14 14
2 7 12 2 7 12
15 15
6 9 6 9
Veja que, na primeira solução, o subgrafo formado foi uma árvore contendo somente os pontos que
precisavam ser interligados. Já na segunda solução, a árvore formada contém, além dos pontos o-
brigatórios, um outro ponto (vértice 11) que, nesse caso, serve apenas de “ponto de interligação” en-
tre os demais. Esse ponto, que pode ser usado na interligação, mas não precisa obrigatoriamente fa-
zer parte da árvore-solução, é chamado de Ponto de Steiner. A solução da esquerda, portanto, não
contém pontos de Steiner, enquanto que a da direita contém um ponto de Steiner.
Embora não tenham sido dados os pesos (custos, distâncias) das arestas, o objetivo do problema a-
cima seria interligar os quatro pontos acima usando a menor soma total das arestas (para, por exem-
plo, minimizar a perda de pressão por atrito). É fácil demonstrar que a solução será sempre uma ár-
vore contendo um subconjunto de vértices e arestas do grafo original. Por isso, esse problema é
também chamado de Problema da Árvore de Steiner.
115
Dentre as várias aplicações para esse problema, destacamos as seguintes:
conjunto ∆ (pontos de Steiner) podem ser usados ou não pela estrutura de ligação.
Nesse caso, o problema torna-se um PCMC e pode ser facilmente resolvido (e.g. usando o algorit-
mo de Dijkstra visto anteriormente).
Nesse caso, o problema se resume em achar uma AGM do grafo, que também pode ser facilmente
resolvido (e.g. usando os algoritmos de Kruskal ou Prim vistos anteriormente).
3) Χ> 2 e ∆ ≠ ∅.
Nesse caso, o problema cai numa classe de problemas chamada de NP-Difícil, o que na prática sig-
nifica que não existe algoritmo que possa resolver qualquer instância do problema de maneira efici-
ente. Nesse caso, especialmente para problemas maiores, é recomendado o uso de heurísticas, ou se-
ja, algoritmos de solução aproximada (que não garantem a obtenção da solução ótima), porém mais
eficientes em termos de tempo de execução. Entre as soluções adotadas, podemos destacar as se-
guintes:
Heurísticas
• Baseadas no PCMC;
• Baseadas na AGM;
• Outras.
116
Redes PERT / CPM
As técnicas denominadas PERT (Program Evaluation and Review Technique) e CPM (Critical Path
Method) foram desenvolvidas independentemente para o Planejamento e Controle de Projetos em
torno de 1950, porém a grande semelhança entre estas fez com que o termo PERT/CPM seja utili-
zado corriqueiramente como uma única técnica.
PERT e CPM utilizam principalmente os conceitos de Redes (grafos) para planejar e visualizar a
coordenação das atividades ou tarefas do projeto. Um exemplo clássico de aplicação de
PERT/CPM é o planejamento e gerenciamento da construção civil. Veremos a seguir dois exemplos
dessa aplicação: a primeira usando uma Rede PERT tradicional e a segunda usando uma Rede
PERT/CPM orientada a eventos.
Redes PERT
Exemplo 1 (Hiller/Lieberman, pg 468):
Suponha que uma empreiteira ganhou uma concorrência de $5,4 milhões para construir uma planta
industrial. O contrato inclui:
De acordo com a experiência da empreiteira, a seguinte lista foi elaborada para este projeto:
2. Construção da Rede
A rede pode ser construída utilizando os arcos para representar as tarefas e os nos para separar as ta-
refas de suas tarefas precedentes, porém utilizar os nos para representar as tarefas e os arcos para
representar as relações de precedência parece ser mais intuitivo. A figura abaixo ilustra a rede para
o exemplo dado:
Início 0
A 2
B 4
C 10
D E 4 I 7
6
G 7 F 5
H 9 J 8
K 4 L 5
M 2
N 6
Fim 0
A partir da lista de tarefas e das relações de precedência, a rede pode ser facilmente construída. Para
isto, dada uma tarefa (nó), basta procurar na lista quais tarefas são suas tarefas precedentes. Por e-
xemplo, na rede da Figura 1, a tarefa J possui as tarefas F e I como precedentes, as quais devem ser
conectadas através de arcos orientados, indicando assim, a precedência.
Através da análise da rede, varias informações podem ser obtidas, entre elas, as respostas para duas
perguntas cruciais para 0 planejamento do projeto:
1. Qual o tempo total requerido para completar o projeto se nenhum atraso ocorrer?
2. Quais as tarefas que não podem sofrer atrasos para que o projeto seja executado sem atraso
(“Atividades Gargalos”)?
Um caminho através de uma rede é uma rota seguindo os arcos a partir do no INICIO até o FIM. O
comprimento de um caminho é a soma das durações das tarefas sobre o caminho. Na rede da Figura
118
1 existem 6 caminhos, que são dados na tabela abaixo, juntamente com seus respectivos compri-
mentos:
O caminho com maior comprimento é o Caminho Critico, uma vez que todos os demais caminhos
deverão alcançar o FIM antes do Caminho Critico. Isto responde a questão 1 dada acima, ou seja, o
tempo total requerido é 44 semanas para completar o projeto.
As tarefas sobre este caminho são as Atividades Criticas (Atividades Gargalos), ou seja, qualquer
atraso em uma dessas tarefas irá atrasar a duração de todo o projeto. Já as demais tarefas, se sofre-
rem algum atraso, poderão ou não atrasar a duração de todo o projeto. A Figura 2 mostra o Caminho
Critico:
Início 0
A 2
B 4
C 10
D E 4 I 7
6
G 7 F 5
H 9 J 8
K 4 L 5
M 2
N 6
Fim 0
A Programação das Tarefas na técnica PERT consiste em determinar em que tempo (por exemplo,
em que dia, em qual semana) uma tarefa deve começar e terminar. A principio, o tempo inicial de
uma tarefa deveria ser igual ao tempo final da tarefa precedente. No entanto, tarefas que possuem
duas ou mais tarefas precedentes necessitam que todas as tarefas precedentes estejam completadas
para só então dar início à tarefa em questão. Já para Atividades Não Criticas, o tempo inicial não
119
precisa ser necessariamente igual ao tempo final da sua tarefa precedente, uma vez que esta tarefa
possui folga (não pertence ao Caminho Critico da Rede). A fim de formalizar este raciocínio, a téc-
nica PERT utiliza quatro variáveis, a saber:
O Tempo Inicial Mais Cedo TICi de uma tarefa i é igual ao maior Tempo Final Mais Cedo
TFCj das tarefas precedentes j.
O Tempo Final Mais Tarde TFTi de uma tarefa i é igual ao menor Tempo Inicial Mais Tar-
de TITk das tarefas sucessoras k.
Exemplo: Cálculo de TIC, TFC, TIT e TFT para a tarefa J (divisórias) da rede do exemplo anterior:
TFCJ = TICJ + DJ = 25 + 8 = 33
TITJ = TFTJ – DJ = 33 – 8 = 25
Podemos ver que o cálculo do Tempo Inicial Mais Cedo (TIC) é função dos Tempos Finais Mais
Cedos (TFCs) precedentes. Portanto, a sua obtenção é realizada calculando os TICs e TFCs no sen-
120
tido do nó Início até o nó Fim. Já o cálculo do Tempo Final Mais Tarde (TFT) é função dos Tem-
pos Iniciais Mais Tardes (TITs) sucessores, e devem ser obtidos calculando os TITs e TFTs no sen-
tido do nó Fim para o nó Início.
Além disso, podemos observar também que o TICJ é igual ao TITJ, o que mostra que não há folga
para iniciar essa tarefa. O mesmo acontece com o par TFCJ e TFTJ, o que é coerente, já que essa ta-
refa faz parte do Caminho Crítico da rede. Com uma análise mais detalhada, poderíamos mostrar
que:
onde Si corresponde à folga da tarefa i, ou seja, o atraso que essa tarefa pode sofrer sem comprome-
ter o tempo total do projeto – ou o tempo do(s) caminho(s) crítico(s).
Na tabela a seguir mostramos os cálculos já prontos para todos os nós da rede. Repare que o cami-
nho crítico, já mostrado na Figura 2, corresponde ao caminho formado pelas tarefas (nós) com folga
Si = 0. Dependendo da topologia da rede e dos tempos Di, podemos ter mais de um caminho crítico.
Redes PERT/CPM
Vimos que, nas redes PERT tradicionais, as tarefas são representados por nós no grafo, e com isso
temos uma rede orientada por tarefa. Na rede PERT/CPM, as tarefas são representadas por arcos
no grafo, sendo que os nós nesse caso representam os inícios e os términos de uma ou mais tarefa.
Dizemos então que a rede PERT/CPM é orientada por evento, já que os nós representam um de-
terminado evento do processo, que pode ser o início ou o término de uma ou mais tarefas. Podemos
tratar a rede PERT/CPM como sendo a versão dual da rede PERT (mas não iremos entrar nos as-
pectos de dualidade aqui, apenas mostrar como obtemos o(s) caminho(s) crítico(s), como fizemos
para rede PERT).
Vamos considerar o mesmo exemplo usado anteriormente. A tabela correspondente aos tempos e
precedências das tarefas é replicada abaixo:
121
Tabela 1 - Tarefas, Tarefas Precedentes e Duração Estimada
Tarefas Duração Estimada
Tarefa Descrição
Precedentes (semanas)
A Escavação e Terraplanagem - 2
B Fundação A 4
C Paredes B 10
D Telhado C 6
E Encanamento Exterior C 4
F Encanamento Interior E 5
G Muros D 7
H Pintura Exterior E, G 9
I Instalação Elétrica C 7
J Divisórias F, I 8
K Piso J 4
L Pintura Interior J 5
M Acabamento Exterior H 2
N Acabamento Interior K, L 6
Construindo a rede, temos o grafo mostrado na Figura 3. Desta vez, são os arcos que recebem os va-
lores dos tempos de execução de cada tarefa, e não os nós. Note também que foram inseridos arcos
adicionais, representados por linhas pontilhadas. Esses arcos são chamados de arcos-fantasma. To-
dos possuem valores de tempo iguais a zero, e servem para separar os eventos de início e término de
determinadas tarefas. Dessa forma, não teremos nenhum nó representando o início ou o término de
mais de uma tarefa distinta.
G
7 10
7
D H M
6 12 15 19 Fim
9 2
4
A B C E
Início 1 2 3 5 8
2 4 10 4
23
11
6 F K
I 17 20
5 4 N 6
7 13
9
22
J L
14 16 18 21
8 5
Já que, para a rede PERT/CPM, os eventos de início e término representados pelos nós não possuem
tempo ou duração envolvida, podemos obter o caminho crítico usando somente duas variáveis para
cada nó da rede, a saber:
As regras que definem essas variáveis podem ser dadas da seguinte forma:
122
Regra do Tempo Mais Cedo:
TCInício = 0 (5)
TCj = max (TCi + Dij), ∀ i ∈ πj (6)
Podemos expressar essas mesmas regras de outra forma um pouco mais simples:
Para calcular o Tempo Mais Cedo de cada nó, basta percorrer todos os caminhos da origem (Início)
ao destino (Fim), somando os tempos e guardando sempre o maior valor.
Para calcular o Tempo Mais Tarde de cada nó, basta percorrer todos os caminhos do destino (Fim)
à origem (Início), subtraindo os tempos e guardando sempre o menor valor.
Terminado o cálculo dessas duas variáveis, podemos obter a folga em cada nó subtraindo os dois
tempos obtidos:
Si = TTi – TCi
123
Tabela 4 – Valores calculados para as variáveis de todos os nós da rede do Exemplo 1.
Evento (i) TCi TTi Si
Início 0 0 0
1 2 2 0
2 6 6 0
3 16 16 0
4 16 20 4
5 16 16 0
6 16 18 2
7 22 26 4
8 20 20 0
9 23 25 2
10 29 33 4
11 20 20 0
12 29 33 4
13 25 25 0
14 25 25 0
15 38 42 4
16 33 33 0
17 33 34 1
18 33 33 0
19 40 44 4
20 37 38 1
21 38 38 0
22 38 38 0
23 44 44 0
Fim 44 44 0
Podemos ver que o resultado obtido com a rede PERT/CPM orientada por eventos é o mesmo que o
obtido pela rede PERT orientada por tarefas, com apenas um caminho crítico passando pelas ativi-
dades A, B, C, E, F, J, L e N, e tempo total do projeto igual a 44 semanas.
124
Bibliografia
AHUJA, R.K., MAGNANTI, T.L., ORLIN, J.B., Network Flows: Theory, Algorithms, and Appli-
cations. Prentice Hall, 1993.
BAZARAA, M.S., JARVIS, J.J., SHERALI, H.D., Linear Programming and Network Flows, 2nd
Edition. John Wiley & Sons, 1990.
BREGALDA, P.F., OLIVEIRA, A.F., BORNSTEIN, C.T., Introdução à Programação Linear. Edi-
tora Campus, 1988.
HILLIER, F.S., LIEBERMAN, G.J., Introdução à Pesquisa Operacional, Editora Campus, Rio de
Janeiro. Editora USP, 1988.
LAW, A.M., KELTON, W.D., Simulation Modeling & Analysis, McGraw-Hill, 1991.
MEDEIROS da SILVA, E., et. al., Pesquisa Operacional: Para os Cursos de Economia, Administra-
ção e Ciências Contábeis, 3ª Edição. Editora Atlas, 1998.
RUBINSTEIN, R.Y., Monte Carlo Optimization, Simulation and Sensitivity of Queuing Networks.
Krieger Publishing Company, 1992.
SAIGAL, R., Linear Programming: A Modern Integrated Analysis. Kluwer Academic Pub., 1995.
WINSTON, W.L. Operations Research: Applications and Algorithms, 3rd Edition. Wadsworth,
1997.
125