Você está na página 1de 52

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/358582117

Introdução à Programação Linear

Preprint · February 2022


DOI: 10.13140/RG.2.2.15357.64483

CITATIONS READS

0 985

1 author:

Alexandre L M Levada
Universidade Federal de São Carlos
115 PUBLICATIONS   344 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Double Noise Filtering in CT: Pre- and Post-Reconstruction View project

Unsupervised metric learning View project

All content following this page was uploaded by Alexandre L M Levada on 14 February 2022.

The user has requested enhancement of the downloaded file.


Departamento de Computação
Centro de Ciências Exatas e Tecnologia
Universidade Federal de São Carlos

Introdução a Programação Linear


Apostila com exercícios práticos e soluções

Prof. Alexandre Luis Magalhães Levada


Email: alexandre.levada@ufscar.br
Sumário

Modelos de programação linear 3


Programação linear e seus teoremas 5
Problema de Programação Linear (PPL) – Resolução gráfica 7
Resolução analítica de um PPL 9
O Simplex tabular 12
Sobre a convergência do Simplex 16
Problemas de minimização 17
Problemas com restrição de maior ou igual 18
Problemas com restrição de igualdade 22
O problema dual 24
O algoritmo dual-simplex 32
O algoritmo simplex generalizado 36
Programação linear inteira (PLI) 38
O algoritmo Branch and Bound 43
Branch and Bound para o PLI binário 44
Branch and Bound para o PLI misto 48
Modelos de programação linear

A empresa Reddy Mikks produz tintas para interiores e exteriores com base em 2 matérias-primas:
M1 e M2. A tabela a seguir fornece as quantidades necessárias para o processo de produção.

Algumas observações importantes sobre o problema:


1) Sabe-se que a demanda diária de tintas para interiores não pode ultrapassar a de tintas para
exteriores por mais de 1 tonelada.
2) A demanda máxima diária de tintas para interiores é de 2 toneladas.

Diante das informações, pergunta-se: qual é o mix ótimo de tintas que maximiza o lucro?

Denotando de x 1 e x 2 as quantidades de tinta para exteriores e interiores, respectivamente,


podemos modelar o problema como um problema de programação linear (PPL), dado por:
max Z =5 x 1 +4 x2 , sujeito as restrições
6 x 1+ 4 x 2≤24
x 1 +2 x2 ≤6
−x 1 + x 2≤1
x2 ≤2
x 1 , x 2≥0

Note que a região delimitada por todas as restrições é o espaço de soluções, que representa o
conjunto de todas as soluções viáveis para o problema. O objetivo aqui é encontrar a solução
ótima, ou seja, aquela que maximiza o valor de Z. Uma característica importante da solução ótima
é que ela sempre está relacionada com um ponto extremo da região de soluções.
A determinação da solução ótima requer identificar a direção na qual a função lucro
Z =5 x 1 +4 x2 aumenta. Podemos fazer isso atribuindo valores arbitrários a Z. Por exemplo, usar
Z = 10 e Z = 15 equivaleria a representar em gráfico as duas retas, 5 x1 + 4 x 2=10 e
5 x1 + 4 x 2=15 . Assim, a direção do aumento de Z é mostrada na figura a seguir.

A observação de que a solução ótima em um PPL está sempre associada a um ponto extremo
significa que a solução ótima pode ser encontrada pela simples enumeração de todos os pontos
extremos, como mostra a tabela a seguir.
Programação linear e seus teoremas

Para enfatizar os pontos mais importantes em um PPL, enunciamos 3 teoremas que definem fatos
comuns a todos os PPL’s.

Teorema 1: O conjunto de todas as soluções viáveis de um modelo de PL é um conjunto convexo

Teorema 2: Toda solução de um modelo de PL é um ponto extremo do conjunto de soluções viáveis

Teorema 3: Se uma função objetivo possui um único ponto ótimo finito, então esse é um ponto
extremo do conjunto convexo de soluções

Modelo de um PL na forma canônica

Um problema de PL está na forma canônica se for de maximização e todas as restrições forem de


menor e igual ou se for de minimização e todas as restrições forem de maior e igual.
max Z =c 1 x 1 +c 2 x 2 +...+c n x n s.r. min Z=c 1 x 1+ c 2 x 2+ ...+ c n x n s.r.
a 11 x 1 +a 12 x 2+...+ a1 n x n≤b 1 a 11 x 1 +a 12 x 2+...+ a1 n x n≥b 1
a21 x 1 +a 22 x 2+...+ a2 n x n≤b2 a21 x 1 +a 22 x 2+...+ a2 n x n≥b2
... ...
am 1 x 1+ am 2 x 2 +...+a mn x n≤b m am 1 x 1+ am 2 x 2 +...+a mn x n≥b m
x j ≥0, j=1,. .. ,n x j ≥0, j=1,. .. ,n

Formas e equivalências

1) max Z = min -Z: maximizar Z é equivalente a minimizar -Z

2) restrição ≥ para restrição ≤ : basta multiplicar por -1

ai 1 x1 +a i 2 x 2+ ...+ ai n x n ≥b ⇔−ai 1 x 1−ai 2 x 2−...−ai n x n ≤−b (são equivalentes)

3) variável de folga

ai 1 x1 +a i 2 x 2+ ...+ ai n x n ≤b ⇔ai 1 x1 + ai 2 x 2+ ...+ ai n x n+ x k =b (são equivalentes)

4) variável de excesso

ai 1 x1 +a i 2 x 2+ ...+ ai n x n ≥b ⇔ai 1 x1 + ai 2 x 2+ ...+ ai n x n−x k =b (são equivalentes)

Teorema Fundamental da Programação Linear

Uma função objetivo linear f (⃗x )=⃗c T ⃗x =c 1 x 1+ c 2 x 2+...+ c k x k atinge seu mínimo sobre um
poliedro limitado P em um ponto extremo de P.

Prova (Luenberger, 1973):

Sejam ⃗x 1 , ⃗x 2, ..., ⃗x k os pontos extremos de P. Como P é finito e convexo, todo ponto x∈ P


pode ser expresso como uma combinação convexa dos pontos extremos:

⃗x =α 1 ⃗x 1+ α2 ⃗x 2+...+ αk ⃗x k

com αi ≥0 para i=1,... , k e α1 + α 2+ ...+ αk =1 .

T i
Logo, f (⃗x )=⃗c T ⃗x = α1 ( ⃗c T ⃗x 1)+ α 2 ( ⃗ T 2
c ⃗x )+...+ αk ( ⃗
T k
c ⃗x ) . Seja z=min {⃗c ⃗x ,i=1,. .. , k } . Então:

T T 1 T 2 T k
c ⃗x =α1 ( ⃗c ⃗x )+ α2 ( ⃗c ⃗x )+...+ α k ( ⃗c ⃗x )≥ α1 z+ α2 z +...+ α k z =( α 1+ ... α k ) z=z

T T
o que implica em z≤⃗c ⃗x e portanto o mínimo de f (⃗x )=⃗c ⃗x sobre P é z (extremo).
Problema de Programação Linear (PPL) – Resolução gráfica

Considere o seguinte PPL:

max Z =5 x 1 +2 x 2 s.r.
x 1≤3
x2 ≤4
x 1+2 x 2≤9
x 1, x 2≥0

O primeiro passo consiste em estabelecer os eixos e desenhar as retas limites das inequações.

Como discutido anteriormente, um procedimento simples porém não muito eficiente, consiste em
atribuir valores a Z, tornando a função objetivo uma equação da reta. Por um processo de tentativa
e erro podemos chegar a um valor ótimo (força bruta). Nesse caso, o máximo valor de Z é igual a
21 em uma solução ótima x 1=3 e x 2=3 .
Em alguns casos, existem restrições em um PPL que são redundantes. Isso significa que elas podem
ser removidas, pois não participam da determinação do conjunto de soluções viáveis.

min Z=6 x1 +10 x 2 s.r.

−x 1+ x 2≤2
x 1 +2 x2≥1
x 1≤5
x 2≤6
3 x 1+ 5 x 2≥15
5 x1 + 4 x 2≥20
x 1, x 2≥0

Um PPL também pode apresentar mais de uma solução ótima.

min Z=6 x1 +10 x 2 s.r.

−x 1+ x 2≤2
x 1≤5
x 2≤6
3 x 1+ 5 x 2≥15
5 x1 + 4 x 2≥20
x 1, x 2≥0

Note que a inclinação da reta que define o limite inferior da região viável ( 3 x1 +5 x 2=15 )
coincide com a mesma inclinação da reta definida pela função objetivo.
Outro problema que pode ocorrer é a região viável ser ilimitada. Considere o caso anterior, a
menos da restrição x 1≤5 . Note que o espaço das soluções viáveis torna-se infinito. Além disso,
em outras situações, pode-se ter o oposto, uma região viável vazia.

max Z =x 1+ x 2 s.r.
x 1+ x 2≤12
x 1+ x 2≥20
x 1, x 2≥0

Resolução analítica de um PPL

O método gráfico só pode ser empregado quando existem duas ou no máximo três variáveis.
Quando esse limite é ultrapassado, precisamos recorrer ao método analítico. O processo consiste
em partir de uma solução viável inicial (subótima) e buscar a cada iteração uma solução adjacente
melhor, conforme ilustra o diagrama de blocos a seguir.
Considere o seguinte PPL:

max Z =5 x 1 +2 x 2 s.r.
x 1≤3
x2 ≤4
x 1+2 x 2≤9
x 1, x 2≥0

Note o o problema encontra-se na forma canônica. O primeiro passo consiste em transformar o


conjunto de restrições num conjunto de equações equivalentes. Isso é feito a partir da introdução
de variáveis de folga, que representam a diferença entre o lado direito (RHS – right hand side) e do
lado esquerdo (LHS – left hand side). Assim, temos o que se chama de dicionário inicial:

x 3=3−x 1
x 4=4−x 2
x 5=9−x1 −2 x 2
Z=5 x 1 +2 x 2

satisfazendo a condição de não negatividade x 1 , x 2 , x 3 , x 4 , x5 ≥0 . As variáveis que aparecem a


esquerda no dicionário são chamadas de variáveis básicas: x 3 , x 4 , x5 , Z . As que aparecem do
lado direito são chamadas de variáveis não básicas: x 1 , x 2 . A solução óbvia inicial é então
obtida, atribuindo-se valor zero para as variáveis não básicas:
x 1=0, x2=0, x 3=3, x 4 =4, x5 =9, Z=0 .

O próximo passo consiste em escolher qual a variável não básica que deve entrar na base. A regra
é: escolher a primeira variável com coeficiente positivo em Z. Neste caso, será x 1 . Em seguida,
devemos escolher a variável que sairá da base (dará lugar a x 1 ). Para isso, basta olhar para as
restrições (considerando x 2=0 ) e verificar qual delas impõe a maior limitação para o
crescimento de x 1 ). Neste caso temos as seguintes informações:
x 3=3−x1 ≥0⇒ x 1≤3
x 4 =4
x 5=9−x1 ≥0⇒ x 1≤9

Assim, quem sairá da base é a variável x 3 . Para que o novo dicionário seja consistente, é preciso
eliminar a variável x 1 do lado direito das equações. Para isso, devemos expressar x 1 como
função de x 3 e substituir seu valor nos lados direitos das equações.

x 3=3−x1 ⇒ x 1=3−x3
x 5=9−(3−x 3)−2 x 2 ⇒ x5 =6−2 x 2 + x 3
Z=5 (3−x 3 )+2 x 2 ⇒ Z=15+ 2 x 2−5 x 3

Desse modo, o novo dicionário após a primeira iteração é dado por:

x 1=3−x 3
x 4=4− x2
x 5=6−2 x 2 +x 3
Z =15+2 x 2−5 x 3

e a solução óbvia (obtida zerando x 2 e x 3 ) fica: x 1=3, x 2=0, x 3=0, x 4 =4, x5 =6, Z=15 .
Note que após a primeira iteração, ainda é possível melhorar Z aumentando x 2 . Assim, x 2
deve entrar na base. Olhando para as restrições com x 3=0 temos:

x 1=3
x 4=4−x2 ≥0⇒ x 2≤4
x 5=6−2 x 2≥0 ⇒ x2 ≤3

A variável que sai da base é x 5 . Devemos eliminar x 2 do lado direito das equações (virou
básica), expressando as variáveis básicas como função de x 5 .
1 1
x5 =6−2 x 2 + x 3 ⇒ x 2=3+ x 3− x 5
2 2
1 1 1 1
( 2 2 )
x 4 =4− 3+ x 3− x 5 ⇒ x 4 =1− x 3+ x 5
2 2
1 1
( )
Z =15+2 3+ x 3− x 5 −5 x 3 ⇒ Z=21−4 x 3−x 5
2 2

Portanto, o dicionário após a segunda iteração é dado por:

x 1=3−x3
1 1
x 2=3+ x 3− x 5
2 2
1 1
x 4=1− x3 + x 5
2 2
Z=21−4 x 3−x 5
cuja solução óbvia (obtida zerando x 3 e x 5 ) é: x 1=3, x 2=3, x 3=0, x 4=1, x 5=0, Z =21 .
Como não há mais como melhorar Z (coeficientes positivos), a solução é ótima. Repare que cada
solução óbvia calculada pelo algoritmo é um ponto extremo do conjunto de soluções viáveis!)

O método Simplex tabular

O procedimento apresentado na seção anterior é chamado de método Simplex analítico. Quando


estivermos resolvendo um PPL manualmente, será conveniente utilizar a forma tabular do método
Simplex, uma vez que ao invés de empregar dicionários usamos um quadro informativo para
registrar apenas as informações essenciais. A ideia é simplificar a forma de um dicionário, gerando
um quadro equivalente. Considere o seguinte exemplo:

max Z =5 x 1 +2 x 2 s.r.
x 1≤3
x2 ≤4
x 1+2 x 2≤9
x 1, x 2≥0

O PPL está na forma canônica. O primeiro passo consiste na introdução das variáveis de folga.

max Z =5 x 1 +2 x 2 s.r.
x 3=3−x 1
x 4=4−x 2
x 5=9−x1 −2 x 2

E assim, chegamos ao dicionário inicial modificado (com a função objetivo na forma = 0 e


restrições na forma de sistema linear de equações)

Z −5 x 1−2 x 2=0
x 1+ x3 =3
x 2 + x 4=4
x 1+2 x 2+ x5 =9

Dessa forma, podemos montar o seguinte quadro inicial:

V.B. no eq. Z x1 x2 x3 x4 x5 const.


Z 0 1 -5 -2 0 0 0 0
x3 1 0 1 0 1 0 0 3
x4 2 0 0 1 0 1 0 4
x5 3 0 1 2 0 0 1 9

Note que as variáveis básicas iniciais são x 3 , x4 e x5 . Devemos aprender a ler a solução do quadro.
Nesse caso temos a solução óbvia dada por x 1=0, x 2=0, x 3=3, x 4=4, x 5 =9, Z=0 , da mesma
forma que no método anterior. O próximo passo consiste em determinar se a solução obtida é
ótima ou pode ser melhorada. Para isso, basta observar os sinais dos coeficientes da linha zero (Z).
Como ainda existem coeficientes negativos, a solução ótima ainda não foi obtida. Da mesma
forma que no método dos dicionários, devemos escolher uma variável para entrar na base. Uma
regra é escolher a primeira variável não básica com coeficiente negativo, no caso x 1 (-5). Essa é a
coluna pivô. Em seguida devemos escolher a variável que deve sair da base. Para isso devemos
calcular a menor razão positiva entre o valor da coluna constante e o correspondente elemento na
coluna pivô:

3/1 = 3 → menor razão, portanto quem sai da base é x3 (essa é a linha pivô)
4/ 0 = ∞
9/1 = 9

O elemento na intersecção da linha e da coluna pivô é chamado de número pivô. Devemos agora
atualizar o quadro do simplex. A primeira coisa a fazer é começar pela nova linha pivô, que agora
será x1 .

Nova Linha Pivô ← Linha Pivô / Número Pivô

V.B. no eq. Z x1 x2 x3 x4 x5 const.


Z 0 1 0 -2 5 0 0 15
x1 1 0 1 0 1 0 0 3
x4 2 0 0 1 0 1 0 4
x5 3 0 0 2 -1 0 1 6

De posse da nova linha pivô, podemos computar as demais linhas, fazendo:

0) Nova Linha 0 ← Antiga Linha 0 – Coef. Da Linha 0 na coluna pivô * Nova Linha Pivô
Nesse caso, teríamos: L0 ← L0 - (-5) * LP (Lp na tabela nova)
L0 ← L0 + 5*LP (Lp na tabela nova)
2) Nova Linha 2 ← Antiga Linha 2 – Coef. Da Linha 2 na coluna pivô * Nova Linha Pivô
Nesse caso, teríamos: L2 ← L2 - (0) * LP (Lp na tabela nova)
L2 ← L2
2) Nova Linha 3 ← Antiga Linha 3 – Coef. Da Linha 3 na coluna pivô * Nova Linha Pivô
Nesse caso, teríamos: L3 ← L3 - 1 * LP (Lp na tabela nova)
L3 ← L3 – LP (Lp na tabela nova)
A solução agora é: x 1=3, x 2=0, x 3=0, x 4 =4, x5 =6, Z=15 . Como ainda existem coeficientes
negativos na linha zero (Z) a solução não é ótima. Devemos repetir o processo.

As razões são dadas por:

3/0= ∞
4/1=4
6/2=3 → menor razão, portanto quem sai da base é x5 (essa é a linha pivô)
V.B. no eq. Z x1 x2 x3 x4 x5 const.
Z 0 1 0 0 4 0 1 21
x1 1 0 1 0 1 0 0 3
x4 2 0 0 1 1/2 1 -1/2 1
x2 3 0 0 1 -1/2 0 1/2 3

Lp ← Lp / 2

0) L0 ← L0 - (-2)*Lp => L0 ← L0 + 2*Lp

1) L1 ← L1 – 0*Lp => L1 ← L1

2) L2 ← L2 – 1*Lp => L2 ← L2 - Lp

Como não há mais coeficientes negativos na linha zero (Z), temos que a solução ótima é dada por:
x 1=3, x 2=3, x 3=0, x 4=1, x 5=0, Z =21 , como era esperado.

Resumo do Simplex

Etapa 1: Determine uma solução básica inicial viável

Etapa 2: Selecione uma variável para entrar na base usando a condição de otimalidade (coeficiente
mais negativo de Z). Pare se não houver nenhuma variável para entrar na base: a última solução
obtida é ótima. Caso contrário siga para a etapa 3.

Etapa 3: Selecione uma variável para sair da base usando a condição de viabilidade (menor razão
não negativa).

Etapa 4: Determine a nova solução básica usando as operações de Gauss-Jordan. Vá para a etapa 2.

Operações de linha por Gauss-Jordan

1. Linha Pivô
a) Substitua a variável que sai da base pela variável que entra na base
b) Nova Linha Pivô = Linha Pivô Atual / Número Pivô
2. Todas as outras linhas, incluindo Z
Nova Linha = Linha Atual – Coef. da Coluna Pivô * Nova Linha Pivô

Desempates no método Simplex

1) Empate para variável básica que entra: escolha arbitrária (z – 3x 1 – 3 x2 = 0)

2) Empate para variável básica que sai: pode levar a problemas em alguns casos como
a) Z permanece inalterado
b) Loop infinito (dependendo da sequência de eventos)
3) Nenhuma variável básica saindo: Z ilimitado (coeficientes da coluna pivô são negativos ou zero)
Exercício: max Z =4 x 1 +3 x 2 s.r.
x1 +3 x 2≤7
2 x 1 +2 x 2≤8
x1 + x 2≤3
x 2≤2
x 1, x 2≥0

Ex: max Z =4 x 1 +8 x 2 s.r. Z −4 x 1−8 x 2=0 s.r.


3 x1 +2 x 2≤18 3 x 1+2 x 2 +x3 =18
x1 +x 2≤5 x 1 + x 2 + x 4=5
x 1≤4 x1 + x 5=4
x 1, x 2≥0 x 1 , x 2 , x 3 , x 4 , x 5≥0

V.B. no eq. Z x1 x2 x3 x4 x5 const.


Z 0 1 -4 -8 0 0 0 0
x3 1 0 3 2 1 0 0 18
x4 2 0 1 1 0 1 0 5
x5 3 0 1 0 0 0 1 4
Lp ← Lp / 1 L0 ← L0 + 4 L p L1 ← L1 – 3 L p L2 ← L2 - Lp

V.B. no eq. Z x1 x2 x3 x4 x5 const.


Z 0 1 0 -8 0 0 4 16
x3 1 0 0 2 1 0 -3 6
x4 2 0 0 1 0 1 -1 1
x1 3 0 1 0 0 0 1 4
Lp ← Lp / 1 L0 ← L0 + 8 L p L1 ← L1 – 2 L p L3 ← L3

V.B. no eq. Z x1 x2 x3 x4 x5 const.


Z 0 1 0 0 0 8 -4 24
x3 1 0 0 0 1 -2 -1 4
x2 2 0 0 1 0 1 -1 1
x1 3 0 1 0 0 0 1 4
Lp ← Lp / 1 L0 ← L0 + 4 L p L1 ← L1 + Lp L2 ← L2 + Lp

V.B. no eq. Z x1 x2 x3 x4 x5 const.


Z 0 1 4 0 0 8 0 40
x3 1 0 1 0 1 -2 0 8
x2 2 0 1 1 0 1 0 5
x5 3 0 1 0 0 0 1 4

Como não há mais coeficientes negativos na linha zero (Z), a solução é ótima.
x 1=0, x2=5, x 3=8, x 4=0, x 5=4, Z=40

Pode-se notar que o algoritmo levou algumas iterações para convergir. Há uma heurística que nos
ajuda a diminuir o número de passos necessários para a convergência do Simplex: escolher para
entrar na base a variável com o coeficiente mais negativo na linha zero (Z). Essa é a chamada
condição de otimalidade.

Exercício: Refaça o exercício anterior, utilizando a condição de otimalidade. Quantas iterações são
necessárias para se atingir a solução ótima?

Sobre a convergência do simplex

Os resultados listados a seguir asseguram que as iterações definidas pelo método simplex
garantem a obtenção da solução ótima, sob certas condições de regularidade.

Teorema O: Condição de otimalidade

Seja um PPL de maximização na forma canônica. Se em uma iteração do simplex c j ≥0 para


todo j=1, 2 ,... , n , então o máximo valor de Z foi obtido e o algoritmo convergiu. Caso
contrário, a variável não básica que entra na base deve satisfazer:

x k =min {c j : c j <0 }
xj

Ou seja, deve ser a variável associada à coluna com o coeficiente c de menor valor negativo.

Teorema V: Condição de viabilidade

Seja um PPL de maximização na forma canônica. Se em uma iteração do simples existe k tal que
c k <0 e para todo i aik ≤0 , então Z é ilimitado superiormente, ou seja, z →∞ e o
algoritmo deve parar. Caso contrário, a variável básica que deve sair da base deve satisfazer:

bs bi
asp
=min
{
aa
:1≤i≤m , aip > 0
ip
}
em que p é o índice da coluna pivô (menor razão não negativa).

Teorema P: Pivoteamento

Seja um PPL de maximização na forma canônica. Após a definição de qual variável entra e qual
variável sai da base (Teoremas O e V), as operações de Gauss-Jordan modificam o valor da função
objetivo de modo que:

bs
Z ' =Z−c j
a sp
bs
Como temos que bi >0 para todo i e a sp> 0 , então > 0 . Além disso, como c j <0 ,
asp
então −c j >0 . Portanto, podemos concluir que Z ' é estritamente maior que Z .
Lema: Em um PPL de maximização na forma canônica, a cada iteração do simplex, o valor de Z
aumenta. Isso implica que o simplex nunca revisita uma solução obtida anteriormente (*), ou seja,
a cada passo vamos para uma solução viável inédita.

(*) OBS: Em casos raros em que o PPL é degenerado, pode ocorrer ciclagem. Geralmente, quando
bi=0 , após o pivoteamento (Teorema P) o valor de Z não se altera.

Teorema M: Máximo número de passos até convergência

Seja um PPL de maximização na forma canônica em que n denota o número total de variáveis
(básicas + não básicas) e m denota o número de restrições (que deve ser igual ao número de
variáveis básicas). Então, de acordo com os teoremas anteriores, o simplex converge em no
máximo

n!
(mn )= m!( n−m)!
Esse é exatamente o número total de bases de m variáveis que podemos montar a partir das n
variáveis do problema de otimização.

Teorema I: Máximo ilimitado

Seja um PPL de maximização na forma canônica. Se em uma iteração do simplex existe k tal que
c j <0 e aik ≤0 para todo i, então a função objetivo Z é ilimitada superiormente, ou seja, não
há solução ótima viável e o algoritmo deve parar.

Problemas de minimização

Nem todos os PPL estão na forma canônica, isto é, são problemas de maximização com todas as
restrições de menor ou igual. Nesses casos em que o formato não é o padrão, devemos empregar
algumas equivalências antes de empregar o algoritmo Simplex. No caso de um problema de
minimização com todas restrições do tipo menor ou igual, vale a seguinte equivalência:

min Z = max −Z

Ex: min Z=3 x 1−5 x 2 s.r. max W =−Z=−3 x1 +5 x 2 s.r.


x 1≤4 x 1≤4
2 x 2≤12 2 x 2≤12
3 x1 +2 x 2≤18 3 x1 +2 x 2≤18
x 1, x 2≥0 x 1, x 2≥0
Dicionário inicial Dicionário inicial modificado
W =−3 x 1 +5 x 2 W +3 x 1−5 x 2=0
x3 =4−x 1 x 1+ x 3=4
x 4 =12−2 x 2 2 x 2+ x 4=12
x 5=18−3 x 1−2 x 2 3 x 1 +2 x 2 + x 5=18
x 1, x 2 , x 3 , x 4 , x 5≥0 x 1, x 2 , x 3 , x 4 , x 5≥0

V.B. no eq. W x1 x2 x3 x4 x5 const.


W 0 1 3 -5 0 0 0 0
x3 1 0 1 0 1 0 0 4
x4 2 0 0 2 0 1 0 12
x5 3 0 3 2 0 0 1 18

Lp ← Lp / 2 L0 ← L0 + 5 L p L1 ← L1 L3 ← L3 -2 Lp

V.B. no eq. W x1 x2 x3 x4 x5 const.


W 0 1 3 0 0 5/2 0 30
x3 1 0 1 0 1 0 0 4
x2 2 0 0 1 0 1/2 0 6
x5 3 0 3 0 0 -1 1 6

Como não há mais coeficientes negativos na linha zero (Z), a solução é ótima.

x 1=0, x2=6, x 3=4, x 4 =0, x 5=6, W =30, Z =−30

Problemas com restrição de maior ou igual

Nos casos de restrições do tipo maior ou igual, o procedimento para o método da “função objetivo
artificial” consiste em introduzir uma variável de excesso (com coeficiente -1) e uma variável
artificial (com coeficiente +1) no lado esquerdo da restrição, criando o dicionário artificial e
encontrando sua solução óbvia. O segundo passo do método seria resolver o problema alterado,
representado pelo dicionário artificial inicial. Caso encontremos uma solução ótima, em que a
variável artificial seja igual a zero, encontraremos a solução inicial do problema original. Caso na
solução ótima do problema alterado a variável artificial apresente valor diferente de zero, isso
significa que o problema original não tem solução viável.
No caso do problema alterado, nosso objetivo é levar a variável (ou as variáveis) artificial
introduzida no problema para zero. Isso equivale a minimizar o somatório dessas variáveis. Se as
variáveis forem simultaneamente para zero na solução ótima, nossa função objetivo artificial terá o
valor zero. Esse método é também conhecido como o método das duas fases, já que está dividido
em duas partes. Na primeira, ao resolver o problema alterado, apenas encontramos uma solução
viável inicial para o problema original, e, na segunda, efetivamente o resolvemos.
Ex: max Z =3 x1−5 x 2 s.r.
x 1≤4 Z−3 x 1+5 x 2=0
2 x 2≤12 x1 +x 3=4
3 x1 +2 x 2≥18 2 x 2+ x 4 =12
x 1, x 2≥0 3 x1 +2 x 2−x 5=18

Note que com as variáveis de folga não há problema algum (sinal é positivo), mas com as variáveis
de excesso, devido ao sinal negativo, a solução óbvia não seria viável pois x 5 teria valor -18. Por
essa razão, toda variável de excesso deve vir acompanhada de uma variável artificial.

Z−3 x 1+5 x 2=0


x1 + x 3=4
2 x 2+ x 4 =12
3 x1 +2 x 2−x 5+ A 1=18

Fazendo as variáveis de excesso serem nulas, a solução óbvia passaria a ser:

x 1=0 , x2 =0 , x 3=4 , x 4=12, x 5=0 , A1=18 , Z=0

e não teríamos problema pois todas as variáveis seriam não negativas

x 1 , x 2 , x 3 , x 4 , x 5 , A1≥0

Se conseguirmos resolver esse problema com A 1=0 , temos uma solução viável para o
problema original. Para isso devemos, na fase 1, modificar a função objetivo do problema:

min W = A 1 ⇔max −W =−A 1 ⇒−W + A 1=0

No lugar de Z, deve entrar a nova função objetivo: -W + A1 = 0. Assim, o PPL se torna:

−W + A 1=0
x1 + x 3=4
2 x 2+ x 4 =12
3 x1 +2 x 2−x 5+ A 1=18

FASE 1 – Resolver problema alterado

V.B. no eq. -W x1 x2 x3 x4 x5 A1 const.


-W 0 1 0 0 0 0 0 1 0
x3 1 0 1 0 1 0 0 0 4
x4 2 0 0 2 0 1 0 0 12
A1 3 0 3 2 0 0 -1 1 18

Inconsistência: colunas (x3 , x4 , A1) não formam uma base (tem 2 ‘s 1 na coluna A1)

L0 ← L0 - L3
V.B. no eq. -W x1 x2 x3 x4 x5 A1 const.
-W 0 1 -3 -2 0 0 1 0 -18
x3 1 0 1 0 1 0 0 0 4
x4 2 0 0 2 0 1 0 0 12
A1 3 0 3 2 0 0 -1 1 18

Lp ← Lp / 1 L0 ← L0 +3 Lp L2 ← L2 L3 ← L3 - 3 Lp

V.B. no eq. -W x1 x2 x3 x4 x5 A1 const.


-W 0 1 0 -2 3 0 1 0 -6
x1 1 0 1 0 1 0 0 0 4
x4 2 0 0 2 0 1 0 0 12
A1 3 0 0 2 -3 0 -1 1 6

Lp ← Lp / 2 L0 ← L0 + 2 L p L1 ← L1 L2 ← L2 - 2 L p

V.B. no eq. -W x1 x2 x3 x4 x5 A1 const.


-W 0 1 0 0 0 0 0 1 0
x1 1 0 1 0 1 0 0 0 4
x4 2 0 0 0 3 1 1 -1 6
x2 3 0 0 1 -3/2 0 -1/2 1/2 3

Chegamos a uma solução ótima pois não existem coeficientes negativos na linha zero (Z). Note que
tanto o valor da função objetivo quanto a variável artificial A1 são nulos, portanto existe solução
viável para o problema original (temos uma solução inicial viável)

x 1=4 , x 2=3 , x 3=0 , x 4=6 , x 5=0 , A1 =0 , Z=0

FASE 2 – Resolver problema original (partindo da solução inicial obtida anteriormente)


a) Remover coluna referente a variável artificial A1
b) Retornar a função objetivo original

V.B. no eq. Z x1 x2 x3 x4 x5 const.


Z 0 1 -3 5 0 0 0 0
x1 1 0 1 0 1 0 0 4
x4 2 0 0 0 3 1 1 6
x2 3 0 0 1 -3/2 0 -1/2 3

Inconsistência: colunas (x1 , x2 , x4) não formam uma base

L0 ← L0 + 3 L 1 – 5 L 3
V.B. no eq. Z x1 x2 x3 x4 x5 const.
Z 0 1 0 0 21/2 0 5/2 -3
x1 1 0 1 0 1 0 0 4
x4 2 0 0 0 3 1 1 6
x2 3 0 0 1 -3/2 0 -1/2 3

Como não há elementos negativos na linha zero (Z), a solução viável é ótima (se houvesse
coeficientes negativos procederíamos com o Simplex normalmente)

x 1=4 , x 2=3 , x 3=0 , x 4=6 , x 5=0 , Z=−3

Resumo: O método das 2 fases

Fase 1: Expresse o PPL na forma de equações e adicione as variáveis artificiais para garantir uma
solução básica inicial. Ache uma solução básica com as equações resultantes que sempre deve
minimizar a soma das variáveis artificiais. Se o valor mínimo da soma for maior que zero, o PPL não
tem solução viável (fim, pois variável artificial positiva significa que uma restrição não foi satisfeita)

Fase 2: Use a solução viável da Fase 1 como uma solução básica viável inicial para o problema
original
a) Remover colunas das variáveis artificiais da tabela
b) Retornar coluna zero original (função objetivo original)

Problemas com restrição de igualdade

Basicamente, devemos seguir os seguintes passos:

1. Introduzir uma variável artificial para cada restrição de igualdade


2. Substituir a função objetivo original pela minimização do somatório das variáveis artificiais

Ex: max Z =3 x1−5 x 2 s.r.


Z−3 x 1+ 5 x 2=0
x 1≤4
x 1+ x 3=4
2 x 2=12
2 x 2 + A1 =12
3 x1 +2 x 2=18
3 x 1 +2 x2 + A2 =18
x 1, x 2≥0
x 1 , x 2 , x 3 , A1 , A 2≥0

Definindo o problema modificado:

min W = A 1+ A 2 ⇔ max −W =−A 1− A2 ⇒−W + A 1+ A 2=0

No lugar de Z, deve entrar a nova função objetivo: -W + A1 + A2 = 0. Assim, o PPL se torna:


−W + A1 + A2 =0
x 1 + x 3=4
2 x 2+ A 1=12
3 x1 +2 x 2+ A 2=18

FASE 1 – Resolver o problema modificado

V.B. no eq. -W x1 x2 x3 A1 A2 const.


-W 0 1 0 0 0 1 1 0
x3 1 0 1 0 1 0 0 4
A1 2 0 0 2 0 1 0 12
A2 3 0 3 2 0 0 1 18

inconsistência: colunas (x3 , A1 , A2) não formam uma base: L0 ← L0 - L1 – L3

V.B. no eq. -W x1 x2 x3 A1 A2 const.


-W 0 1 -3 -4 0 0 0 -30
x3 1 0 1 0 1 0 0 4
A1 2 0 0 2 0 1 0 12
A2 3 0 3 2 0 0 1 18

Lp ← Lp / 2 L0 ← L0 + 4 L p L1 ← L1 L2 ← L2 - 2 L p

V.B. no eq. -W x1 x2 x3 A1 A2 const.


-W 0 1 -3 0 0 2 0 -6
x3 1 0 1 0 1 0 0 4
x2 2 0 0 1 0 1/2 0 6
A2 3 0 3 0 0 -1 1 6

Lp ← Lp / 2 L0 ← L0 + 3 L p L1 ← L1 - Lp L2 ← L2

V.B. no eq. -W x1 x2 x3 A1 A2 const.


-W 0 1 0 0 0 1 1 0
x3 1 0 0 0 1 1/3 -1/3 2
x2 2 0 0 1 0 1/2 0 6
x1 3 0 1 0 0 -1/3 1/3 2

Como não há mais coeficientes negativos na linha zero (-W), a solução é ótima. Além disso, nessa
solução ótima, A1 = A2 = 0, o que significa que existe solução viável para o problema original.
FASE 2 – Resolver o problema original partindo dessa solução viável

Iremos substituir a função objetivo pela original e remover as colunas de A 1 e A2

V. B. no eq. Z x1 x2 x3 const.
Z 0 1 -3 5 0 0
x3 1 0 0 0 1 2
x2 2 0 0 1 0 6
x1 3 0 1 0 0 2

Inconsistência: colunas (x3 , x1 , x2) não formam uma base.

L0 ← L0 + 3 L3 –5 L2

V. B. no eq. Z x1 x2 x3 const.
Z 0 1 0 0 0 -24
x3 1 0 0 0 1 2
x2 2 0 0 1 0 6
x1 3 0 1 0 0 2

Como não existe mais coeficientes negativos na linha zero (Z), a solução é ótima.

x 1=2 , x 2=6 , x 3=2 , Z=−24

Quadro resumo das operações para resolver PPL

Problema Operação

1. Função objetivo de minimização Min Z = Max – Z

2. Restrição de menor e igual Inserir variável de folga

3. Restrição de maior ou igual Inserir variável de excesso e artificial

4. Restrição de igualdade Inserir variável artificial

O problema dual

Num problema de maximização como o abaixo,

max Z =5 x 1 +2 x 2 s.r.
x 1≤3
x2 ≤4
x 1+2 x 2≤9
x 1, x 2≥0

quando descobrimos uma solução viável fica automaticamente estabelecido um limite inferior
para a função objetivo (é garantido que Z não ficará abaixo desse valor). Assim, a soloução ótima é
dada pelo maior limite inferior.

Ex: solução (x1=2, x2=2) → Z = 14 (então sei que sol. ótima é maior ou igual a 14)
solução (x1=1, x2=3) → Z = 11 (então sei que sol. ótima é maior ou igual a 11)
solução (x1=3, x2=2) → Z = 19 (então sei que sol. ótima é maior ou igual a 19)

Queremos tentar estabelecer um limite superior para Z.

Note que no problema em questão, se multiplicarmos a terceira restrição por 5 temos:

5 x1 +10 x 2≤45

Comparando com a função objetivo, vemos que os coeficientes de x 1 são iguais (5 = 5) e os


coeficientes de x2 são diferentes (10 > 2). Como x 1 , x 2≥0 temos que:

Z =5 x 1 +2 x2≤5 x 1 +10 x2 ≤45

para quaisquer valores de x1 e x2.

Um outro limite superior pode ser obtido multiplicando a primeira restrição por 6, a segunda por 3
e somando os resultados, para obter:

6 x 1+3 x 2≤30

Note que 6 >= 5 e 3 >= 2. Então, estabelecemos outro limite superior para Z:

Z =5 x 1 +2 x2 ≤6 x1 +3 x 2≤30

De forma genérica, temos:

y 1 x 1 + y 2 x 2 + y 3 ( x 1+ 2 x 2 )≤3 y 1+ 4 y 2 +9 y 3

o que implica em

( y 1 + y 3) x 1+( y 2 +2 y 3) x 2≤3 y 1+ 4 y 2 +9 y 3 (*)

O próximo passo consiste em garantir que os coeficientes da inequação resultante sejam


respectivamente maiores ou iguais aos coeficientes da função objetivo, o que pode ser traduzido
por:

( y 1 + y 3)≥5 e ( y 2 +2 y 3)≥2 (**)


Se encontrarmos { y 1 , y 2 , y 3 } que satisfaça as inequações (**) podemos substituir no lado
esquerdo da inequação (*) e estabelecer um limite superior para o problema .

Isso define o problema dual


Solução ótima = menor valor possível para limite superior (estratégia do problema dual)

A figura anterior ilustra duas propriedades fundamentais do problema dual:


a) propriedade fraca: Z ≤D
b) propriedade forte: Z *=D * (solução ótima produz mesmo valor em Z e em D)

Existe uma relação entre os problemas primal e dual.

max Z =c 1 x 1+ c 2 x 2+ ...+ c n x n min D=b 1 y 1 +b 2 y 2 +...+b m y m


s.r. s.r.
a 11 x 1 +a 12 x 2+...+ a1 n x n≤b 1 a11 y 1+ a21 y2 +...+ am 1 y m ≥c 1
a21 x 1 +a 22 x 2+...+ a2 n x n≤b2 a12 y 1+ a22 y 2 +...+a m 2 y m ≥b2
... ...
am 1 x 1+ am 2 x 2 +...+a mn x n≤b m a1 n y 1+ a2 n x 2 +...+a mn y n ≥bm
x j ≥0, j=1,. .. ,n y i≥0, i=1,. .. ,m

Relações entre primal e dual:

1. Termos constantes das restrições do dual são os coeficientes da função objetivo do primal

2. Os coeficientes das variáveis da função objetivo do dual são os termos constantes das restrições
do primal

3. As restrições do dual são de maior ou igual ao passo que as do primal são menor ou igual (na
forma canônica)

4. Número de variáveis do dual é igual ao número de restrições do primal

5. Número de restrições do dual é igual ao número de variáveis do primal


6. A matriz de coeficientes das restrições do dual (A T) é a transposta da matriz de coeficientes das
restrições do primal (A)

Primal x Dual

Dependendo do número de restrições e variáveis as vezes é mais eficiente resolver o dual (custo
computacional menor). Além disso, existem interpretações econômicas para o problema dual).

Ex: Primal
max Z =5 x 1 +2 x 2 s.r. c =[5, 2]

x 1≤3
1 0 3
x2 ≤4
x 1+2 x 2≤9
x 1, x 2≥0
[ ] []
A= 0 1
1 2

b= 4
9

Dual
min D=3 y 1 +4 y 2+ 9 y3 s.r. c =[3, 4, 9]

y 1+ y 3≥5
1 0 1
y 2+ 2 y 3 ≥2
y 1, y 2 , y 3≥0
A =
T
[ 0 1 2 ] b= 5

[]
2

Use esse problema para verificar que o dual do dual é o primal.

Ex:
min Z=4 x 1 +5 x 2 s.r. min Z=4 x 1 +5 x 2 s.r.
2 x1 + x 2≥20 2 x 1 + x 2≥20
2 x 1 +3 x 2=40 → forma canônica 2 x 1 +3 x 2=40
x 1+ 2 x 2≤30 −x 1−2 x 2≥−30
x 1, x 2≥0 x 1, x 2≥0

Primeiramente, devemos colocar o problema na forma canônica. Como se trata de um problema


de minimização, as restrições devem ser do tipo maior ou igual.

Na forma matricial

c =[4,5 ]

2 1 20
A= 2
[ ] [ ]
−1 −2
3 ⃗
b= 40
−30

Obs:

Restrições ⇔ Variáveis
Restrição de igualdade ⇔ variável livre (sem restrições de valores)
Dual

max Z =20 y 1+ 40 y 2−30 y 3 s.r. c =[20, 40,−30]



2 y 1+2 y 2− y 3 ≤4
2 2 −1
y 1 +3 y 2−2 y 3≤5
y 1≥0, y 2 ∈R , y 3≥0
A= [ 1 3 −2 ] b= 4

5[]
Ex:
max Z =5 x 1 + 4 x 2+3 x 3 s.r. max Z =5 x 1 + 4 x 2+3 x 3 s.r.
4 x1 +2 x 2−x 3≤50 4 x 1 +2 x2 −x3 ≤50
2 x 1 +3 x 2−4 x 3 ≥40 −2 x 1−3 x 2+ 4 x 3≤40
→ forma canônica
x 1 +2 x2 −2 x 3≤30 x 1 +2 x 2−2 x 3≤30
x1, x 2≥0, x 3∈ R x 1, x 2≥0, x3 ∈R

Forma matricial

c =[5, 4, 3]

4 2 −1 50

1 [
A= −2 −3 4
2 −2 ] [ ]

b= −40
30

Dual

min D=50 y 1−40 y 2+30 y 3 s.r. c =[50,−40, 30]



4 y 1−2 y 2 + y 3≥5
4 −2 1 5
2 y1 −3 y 2+2 y 3≥4
− y1 +4 y 2−2 y 3=3
y 1 , y 2 , y 3≥0
[
A= 2 −3 2
−1 4 −2 ] []⃗
b= 4
3

Ex: Primal

max Z =3 x1 +5 x 2 s.r.
x 1≤4
x 2≤6
3 x1 +2 x 2=18
x 1≥0, x 2 ∈R

a) Resolva o problema primal pelo método do simplex


Devemos adicionar 2 variáveis de excesso (restrições 1 e 2) e uma artificial (restrição 3). Na forma
de equações temos:
Z−3 x 1−5 x 2=0
x 1 + x 3=4
x 2 + x 4=6
3 x 1+2 x 2+ A 1=18
x 1≥0, x2 ∈ R , x 3≥0, x 4 ≥0, x5 ≥0, A 1≥0

Devemos aplicar o método das 2 fases

Fase 1: Substituir a função objetivo pela soma das variáveis artificiais -W + A 1 = 0

min W = A 1 ⇔max −W =−A 1 ⇒−W + A 1=0

−W + A1 =0
x 1 + x 3=4
x 2 + x 4=6
3 x 1+2 x 2+ A 1=18
x 1≥0, x2 ∈ R , x 3≥0, x 4 ≥0, x5 ≥0, A 1≥0

V.B. no eq. -W x1 x2 x3 x4 A1 const.


-W 0 1 0 0 0 0 1 0
x3 1 0 1 0 1 0 0 4
x4 2 0 0 1 0 1 0 6
A1 3 0 3 2 0 0 1 18

inconsistência: (x3 , x4 , A1) não formam uma base L 0 ← L0 - L3

V.B. no eq. -W x1 x2 x3 x4 A1 const.


-W 0 1 -3 -2 0 0 0 -18
x3 1 0 1 0 1 0 0 4
x4 2 0 0 1 0 1 0 6
A1 3 0 3 2 0 0 1 18

Lp ← Lp L0 ← L0 + 3 L p L2 ← L2 L3 ← L3 - 3Lp

V.B. no eq. -W x1 x2 x3 x4 A1 const.


-W 0 1 0 -2 3 0 0 -6
x1 1 0 1 0 1 0 0 4
x4 2 0 0 1 0 1 0 6
A1 3 0 0 2 -3 0 1 6

Lp ← Lp / 2 L0 ← L0 + 2 L p L1 ← L1 L2 ← L2 - Lp
V.B. no eq. -W x1 x2 x3 x4 A1 const.
-W 0 1 0 0 0 0 1 0
x1 1 0 1 0 1 0 0 4
x4 2 0 0 0 3/2 1 -1/2 3
x2 3 0 0 1 -3/2 0 1/2 3

Note que A1 = 0 e não há coeficiente negativo na linha zero (-W) então existe solução viável para o
problema original. Vamos usá-la como inicial.

x 1=4 , x 2=3 , x 3=0 , x 4=3 , x 5=0 , Z=0 (sol. inicial)

Fase 2: Resolver problema original (volta função objetivo inicial e remove var. Artificial)

V.B. no eq. Z x1 x2 x3 x4 const.


Z 0 1 -3 -5 0 0 0
x1 1 0 1 0 1 0 4
x4 2 0 0 0 3/2 1 3
x2 3 0 0 1 -3/2 0 3

inconsistência: (x3 , x4 , A1) não formam uma base L0 ← L0 + 3L1 + 5L3

V.B. no eq. Z x1 x2 x3 x4 const.


Z 0 1 0 0 -9/2 0 27
x1 1 0 1 0 1 0 4
x4 2 0 0 0 3/2 1 3
x2 3 0 0 1 -3/2 0 3

Lp ← Lp / (3/2) L0 ← L0 + 9/2 Lp L1 ← L1 - Lp L2 ← L2 + 3/2 Lp

V.B. no eq. Z x1 x2 x3 x4 const.


Z 0 1 0 0 0 3 36
x1 1 0 1 0 0 -2/3 2
x3 2 0 0 0 1 2/3 2
x2 3 0 0 1 0 1 6

Como não há mais coeficientes negativos na linha zero (Z), a solução é ótima:

x 1=2 , x 2=6 , Z=36


b) Escreva o problema na forma dual e resolva-o com o método simplex. Compare os valor de Z
obtido no item anterior com o de D obtido nesse item.

min D=4 y 1+ 6 y 2+ 18 y3 s.r. max −D=−4 y1 −6 y 2−18 y 3 s.r.


y 1 +3 y 3≥3 y 1 +3 y 3≥3
y 2+2 y 3=5 → y 2+2 y 3=5
y 1 , y 2≥0 , y 3 ∈R y 1 , y 2≥0 , y 3 ∈R

Devemos adicionar 1 variável de excesso (restrição 1) e 2 artificiais (restrições 1 e 2). Na forma de


equações temos:

−D+ 4 y 1 +6 y 2 +18 y 3=0


y 1+3 y 3− y 4 + A1=3
y 2 +2 y 3+ A 2=5
y 1 , y 2, A 1 , A 2≥0 , y 3 ∈R

Devemos aplicar o método das 2 fases

Fase 1: Substituir a função objetivo pela soma das variáveis artificiais -W + A 1 + A2 = 0

min W = A 1+ A 2 ⇔ max −W =−A 1− A2 ⇒−W + A 1+ A 2=0

−W + A 1 + A2=0
y 1+3 y3 − y 4 + A 1=3
y 2 +2 y 3 + A 2=5
y 1 , y 2, A1 , A 2≥0 , y 3 ∈R

V.B. no eq. -W y1 y2 y3 y4 A1 A2 const.


-W 0 1 0 0 0 0 1 1 0
A1 1 0 1 0 3 -1 1 0 3
A2 2 0 0 1 2 0 0 1 5
inconsistência: (A1 , A2) não formam uma base L 0 ← L0 – L1 – L2

V.B. no eq. -W y1 y2 y3 y4 A1 A2 const.


-W 0 1 -1 -1 -5 1 0 0 -8
A1 1 0 1 0 3 -1 1 0 3
A2 2 0 0 1 2 0 0 1 5
Lp ← Lp / 3 L0 ← L0 + 5 L p L2 ← L2 - 2 L p

V.B. no eq. -W y1 y2 y3 y4 A1 A2 const.


-W 0 1 2/3 -1 0 -2/3 5/3 0 -3
y3 1 0 1/3 0 1 -1/3 1/3 0 1
A2 2 0 -2/3 1 0 2/3 -2/3 1 3
Lp ← Lp L0 ← L0 + Lp L1 ← L1
V.B. no eq. -W y1 y2 y3 y4 A1 A2 const.
-W 0 1 0 0 0 0 1 1 0
y3 1 0 1/3 0 1 -1/3 1/3 0 1
y2 2 0 -2/3 1 0 2/3 -2/3 1 3

Como não há mais coeficientes negativos na linha zero, existe solução viável para o problema
original uma vez que A1 = A2 = 0.

Fase 2: Resolver o problema original

V.B. no eq. -D y1 y2 y3 y4 const.


-D 0 1 4 6 18 0 0
y3 1 0 1/3 0 1 -1/3 1
y2 2 0 -2/3 1 0 2/3 3

inconsistência: (y2 , y3) não formam uma base L0 ← L0 – 18 L1 – 6 L2

V.B. no eq. -D y1 y2 y3 y4 const.


-D 0 1 2 0 0 2 -36
y3 1 0 1/3 0 1 -1/3 1
y2 2 0 -2/3 1 0 2/3 3

Como não há mais coeficientes negativos na linha zero, temos a solução ótima. Note que -D = -36,
então D = Z = 36, como era de se esperar.

y 1=1 , y 2=3 , D=36

Exercícios

Determine o dual dos seguinte problemas:

a) max Z =6 x1 +10 x 2 s.r. b) min Z=2 x 1 +5 x2 s.r.


3 x 1 + 4 x2 ≤68
−8 x 1 +2 x2 ≥−16
2 x1−x 2≥20
3 x 1 +12 x 2≥400
4 x 1 +2 x2 ≤200
x 1 , x 2≥0
x1 , x2 ≥0

c) max Z =5 x 1 + 4 x 2 s.r. d) min Z=2 x 1 +5 x2 s.r.


3 x1 + 4 x 2≤68 2 x 1+ 2 x 2≥120
2 x1 −x2 ≥20 3 x 1−4 x 2≤60
4 x 1 +2 x 2≤200 4 x 1 +3 x 2≥240
x1 , x 2≥0 x 1≥0 , x2 ∈R
Ex: O exemplo a seguir mostra que algumas vezes é possível encontrar a solução ótima de um PPL
apenas pela inspeção do dual. Resolva o problema a seguir sem executar o método simplex.

min Z=10 x 1 +4 x2 +5 x 3
5 x1−7 x 2 +3 x 3≥50
x 1 , x 2 , x 3≥0

O algoritmo dual-simplex

O algoritmo simplex padrão tem a viabilidade da solução e a cada passo busca pela otimalidade,
ou seja, começa com a solução inicial viável mas não ótima e busca recuperar a otimalidade.

O algoritmo dual-simplex tem a otimalidade da solução e a cada passo busca pela viabilidade, ou
seja, começa com uma solução melhor que ótima mas inviável e busca recuperar a viabilidade.

Obs: aplicar o algoritmo dual-simplex é diferente de encontrar o dual e aplicar simplex (embora o
resultado seja o mesmo)

Principais diferenças entre simplex e dual-simplex:

Como definir como as variáveis entram e saem da base

Def: Condição de viabilidade dual


A variável que sai da base, x r , é a variável que tem o valor mais negativo em b. Se todas as
variáveis básicas forem não negativas, o algoritmo termina.

Def: Condição de otimalidade dual


Dado que x r é a variável que sai da base, sejam c j o custo da variável não básica x j e
αrj o coeficiente de restrição da linha x r e a coluna x j da tabela simplex. A variável que
entra na base é a variável não básica com αrj <0 que corresponde a:

cj
{| |
min α , αrj <0
rj } para x j varíavel não básica

Se αrj ≥0 para todas as variáveis não básicas x j , o problema não tem solução viável.

Obs: Para que um PPL inicie com solução ótima e inviável, é necessário cumprir 2 requisitos:

1) A função objetivo deve satisfazer a condição de otimalidade do método simplex padrão


a) num problema de MAX, todos os elementos da linha Z são positivos
b) num problema de MIN, todos os elementos da linha Z são negativos

2) Todas as restrições devem ser do tipo “menor ou igual” ( ≤ )

Ex: min Z=3 x 1 +2 x2 + x 3 s.r.


3 x 1 + x 2+ x3 ≥3 −3 x 1−x 2−x 3≤−3
−3 x 1 +3 x2 + x 3≥6 3 x 1−3 x 2−x 3≤−6

x 1 + x 2+ x3 ≤3 x1 + x 2 + x 3≤3
x 1 , x2 ≥0 x1 , x 2≥0

Escrevendo o PPL na forma de equações temos:

Z−3 x 1−2 x 2−x 3=0


−3 x1 −x2 −x3 + x 4 =−3
3 x 1−3 x2 −x3 + x 5=−6
x 1 + x 2+ x 3 + x 6=3

Montando o quadro inicial do dual-simplex temos:

V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.


Z 0 1 -3 -2 -1 0 0 0 0
x4 1 0 -3 -1 -1 1 0 0 -3
x5 2 0 3 -3 -1 0 1 0 -6
x6 3 0 1 1 1 0 0 1 3

Note que a tabela simples inicial é inviável pois ao menos uma das variáveis básicas é negativa (x 4 e
x5 possuem coeficientes negativos na coluna const.). Note também que a tabela simplex é ótima
pois temos um problema de minimização com todos coeficientes negativos na linha Z. Portanto, é
uma condição ideal para a aplicação do dual-simplex.

A variável que sai da base é x5 pois é a com coeficiente mais negativo na linha const. (b). Para
verificar quem entra na base, calculamos o seguinte quadro:

j=1 j=2 j=3


cj -3 -2 -1
α2 j 3 -3 -1

|αc |
j
2j
--- 2/3 1

O próximo passo é computar a nova linha pivô da próxima tabela (referente a entrada de x 2) e
aplicar as operações de Gauss-Jordan para zerar os elementos da coluna pivô (x 2 está na base).

V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.


Z 0 1 -5 0 -1/3 0 -2/3 0 4
x4 1 0 -4 0 -2/3 1 -1/3 0 -1
x2 2 0 -1 1 1/3 0 -1/3 0 2
x6 3 0 2 0 2/3 0 1/3 1 1
Lp ← Lp / (-3) L0 ← L0 + 2 L p L1 ← L1 + Lp L3 ← L3 - Lp
Note que a solução ainda não é viável pois x4 tem coeficiente negativo na coluna const. (b)
A variável que sai da base é x 4 e a variável que entra na base é obtida pelo critério de minimização
das razões, conforme ilustra a tabela a seguir.

j=1 j=3 j=5


cj -5 -1/3 -2/3
α2 j -4 -2/3 -1/3

|αc |
j
2j
5/4 1/2 2

Assim, a variável que sai da base entra na base é x3.

Computando a nova linha pivô e aplicando as operações de Gauss-Jordan chegamos na tabela


final.

V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.


Z 0 1 -3 0 0 -1/2 -1/2 0 9/2
x3 1 0 6 0 1 -3/2 1/2 0 3/2
x2 2 0 -3 1 0 1/2 -1/2 0 3/2
x6 3 0 -2 0 0 1 0 1 0

Lp ← Lp / (-2/3) L0 ← L0 + 1/3 Lp L2 ← L2 - 1/3 Lp L3 ← L3 - 2/3 Lp

Note que ao fim dessa iteração a condição de viabilidade foi restaurada (todos elementos da
coluna const. são positivos) e a condição de otimalidade foi mantida (todos elementos da linha Z
são negativos em um problema de minimização). Portanto, a solução ótima é:

3 3 9
x 1=0, x 2= , x 3= , Z=
2 2 2

Ex: max Z =−4 x 1−3 x 2−2 x 3 s.r.


x 1−x 3≤−1
−x 1−x 2≤−2
x 1−x 2−2 x 3≤0
x 1 , x2 , x3 ≥0

Z + 4 x 1+3 x 2 +2 x3 =0
x 1−x 3 + x 4 =−1
−x1−x 2 + x 5=−2
x 1−x 2−2 x3 + x 6=0

Note que a condição de otimalidade dual é satisfeita e a condição de viabilidade dual falhou, então
temos um PPL pronto para ser resolvido pelo dual-simplex. A seguir é apresentada a tabela inicial
do dual-simplex.
V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.
Z 0 1 4 3 2 0 0 0 0
x4 1 0 1 0 -1 1 0 0 -1
x5 2 0 -1 -1 0 0 1 0 -2
x6 3 0 1 -1 -2 0 0 1 0

A variável que sai da base é x5 e a variável que entra é decidida pelo quadro a seguir:

j=1 j=2 j=3


cj 4 3 2
α2 j -1 -1 0

|αc |
j
2j
4 3 ---

Aplicando as operações de Gauss-Jordan geramos o quadro a seguir:

V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.


Z 0 1 1 0 2 0 3 0 -6
x4 1 0 1 0 -1 1 0 0 -1
x2 2 0 1 1 0 0 -1 0 2
x6 3 0 2 0 -2 0 -1 1 2
Lp ← Lp / (-1) L0 ← L0 - 3 L p L1 ← L1 - 0 L p L3 ← L3 + Lp

A solução ainda é inviável pois há coeficiente negativo para x 4 na linha const., e assim ela deve sair
da base. O cálculo da variável que entra na base é apresentado na tabela a seguir:

j=1 j=3 j=5


cj 1 2 3
α2 j 1 -1 0

|αc |
j
2j
--- 2 ---

Aplicando novamente as operações de Gauss-Jordan chegamos ao quadro a seguir:

V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.


Z 0 1 3 0 0 2 3 0 -8
x3 1 0 -1 0 1 -1 0 0 1
x2 2 0 1 1 0 0 -1 0 2
x6 3 0 0 0 0 -2 -1 1 4
Lp ← Lp / (-1) L0 ← L0 - 2 L p L2 ← L2 - 0 L p L3 ← L3 + 2 L p
Note que chegamos em uma solução viável e ótima (não há coeficiente negativo na linha Z):

x 1=0, x 2=2, x 3=1, Z =−8

O algoritmo simplex generalizado

Em alguns casos, o PPL inicialmente pode não satisfazer nem a condição de otimalidade nem a
condição de viabilidade, ou seja, a tabela inicial do simplex não é viável nem ótima. Nesses casos,
podemos aplicar o algoritmo generalizado, que na verdade consiste na combinação dos algoritmos
simplex padrão e dual-simplex. O procedimento deve ser o seguinte:

1) Primeiramente, aplicar iterações para restaurar a viabilidade com o dual-simplex


2) Após atingir a viabilidade, aplicar iterações do simplex padrão para restaurar a otimalidade.

Dessa forma, o simplex generalizado é nada mais que uma combinação dos métodos já estudados
para resolver PPL’s em que a solução inicial não é ótima nem viável.

Ex: max Z =2 x 3 s.r. Na forma de equações temos:


−x 1+2 x 2−2 x3 ≥8 x 1−2 x 2 +2 x3 ≤−8 Z−2 x 3=0
x1 + x 2 + x3 ≤6 → x1 + x 2 + x 3≤6 x 1−2 x 2 +2 x3 ≤−8
2 x 1−x 2+ 4 x 3≤10 2 x 1−x 2+ 4 x 3≤10 x1 +x 2 +x 3≤6
x 1 , x 2 , x 3≥0 x 1 , x 2 , x 3≥0 2 x 1−x 2+4 x 3≤10

O quadro simplex correspondente é dado por:

V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.


Z 0 1 0 0 -2 0 0 0 0
x4 1 0 1 -2 2 1 0 0 -8
x5 2 0 1 1 1 0 1 0 6
x6 3 0 2 -1 4 0 0 1 10

Note que a tabela simplex inicial não é ótima (há coef. negativo na linha Z) e nem viável (há coefs.
negativos na coluna const.).

1a iteração: a abordagem consiste em primeiramente recuperar a condição de viabilidade. Para isso


aplicamos uma iteração do algoritmo dual-simplex.

Note que x4 sai da base e x2 entra na base pois:

j=1 j=2 j=3


cj 0 0 -2
α2 j 1 -2 2

|αc |
j
2j
X 0 X
Aplicando as operações de Gauss-Jordan chegamos em:

V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.


Z 0 1 0 0 -2 0 0 0 0
x2 1 0 -1/2 1 -1 -1/2 0 0 4
x5 2 0 3/2 0 2 1/2 1 0 2
x6 3 0 3/2 0 3 -1/2 0 1 14

Lp ← Lp / (-2) L0 ← L0 L2 ← L2 + 1/2 Lp L3 ← L3 - 1/2 Lp

Observando a tabela do dual-simplex notamos que a solução atual é viável, pois todos os
elementos da coluna const. são positivos, mas não é ótima.

2a iteração: Recuperar a otimalidade. Para isso devemos aplicar uma iteração do simplex.

Nessa iteração, a variável que entra na base é x 3 e a variável que sai da base é x 5 pois é a linha que
obtém a menor razão não negativa.

Aplicando as operações de Gauss-Jordan, temos:

V.B. no eq. Z x1 x2 x3 x4 x5 x6 const.


Z 0 1 3/2 0 0 1/2 1 0 2
x2 1 0 1/4 1 0 -1/4 1/2 0 5
x5 2 0 3/4 0 1 1/4 1/2 0 1
x6 3 0 -3/4 0 0 -5/4 -3/2 1 11

Lp ← Lp / 2 L0 ← L0 + Lp L1 ← L1 + 1/2 Lp L3 ← L3 - 3/2 Lp

Note que a solução atual é ótima e viável, portanto ao algoritmo convergiu para:

x 1=0 , x2 =5 , x 3=1 , Z=2


Programação Linear Inteira

Problemas de programação inteira são computacionalmente muito mais custosos que PPL’s
padrão.

1 PLI = N PPL’s padrão

Para contornar esse problema, adota-se a abordagem “dividir para conquistar” para particionar um
PLI em subproblemas menores de PL padrão

Em geral, algoritmos de PLI envolvem 3 etapas:

1. Relaxar a região da PLI eliminando a restrição inteira imposta as variáveis


2. Resolver o PPL padrão e obter a solução ótima contínua
3. Adicionar restrições especiais que modificam iterativamente a região de soluções de maneira a
excluir regiões proibidas.

Além disso, pode-se mostrar que problemas de programação inteira são NP-Hard.

O algoritmo Branch and Bound

Estratégia baseada em dividir para conquistar:

- Divisão - Branching (ramificação): conjunto de de soluções viáveis é dividido em subproblemas


menores

- Conquista: é realizada em 2 passos

a) ir para melhor solução do subconjunto (bound)

b) descartar subconjunto se o limite (bound) indica que não pode conter uma solução ótima

Veremos a seguir um simples exemplo ilustrativo da aplicação do método Branch and Bound na
solução de um PLI puro (todas as variáveis inteiras).

Ex: max Z =5 x 1 +8 x 2 s.r


x 1+x 2≤6
5 x1 +9 x 2≤45 (soluções devem ser inteiros positivos)
x 1 , x 2 ∈Z +

A figura a seguir ilustra a região de interesse e os pontos do interior que representam soluções
inteiras para o PLI.
Pelo método de resolução gráfica, podemos perceber que ao escolher um valor arbitrário para Z,
por exemplo 20, definimos uma reta que está indicada na figura a seguir. Isso significa que a
solução ótima é definida pelo ponto de encontro entre as retas das restrições.

Se a solução do problema relaxado for inteira, então devemos parar o algoritmo. No exemplo
anterior, a solução ótima não é inteira x 1=2.25, x 2=3.75, Z=41.25 então não serve para o PLI.
O valor da solução ótima relaxada é um limite superior (upper bound) para o valor ótimo do
problema inteiro, ou seja, sabemos não não vamos encontrar nenhuma solução inteira de
qualidade superior a essa. Prosseguindo, devemos iniciar o processo de ramificação (branching)
particionando a região viável da solução relaxada. Para isso, devemos escolher uma variável que
possui valor fracionado na solução ótima relaxada. Optando por x 2 observe que cada ponto inteiro
viável deve ter x 2≤3 ou x 2≥4 . Com isso em mente podemos criar 2 novos subproblemas
adicionando restrições novas:
Subproblema 1 Subproblema 2
max Z =5 x 1 +8 x 2 s.r max Z =5 x 1 +8 x 2 s.r
x 1+x 2≤6 x 1+x 2≤6
5 x1 +9 x 2≤45 5 x1 +9 x 2≤45
x 2≤3 x 2≥4
x1 , x2 ≥0 x1 , x2 ≥0

Devemos resolver cada um dos subproblemas. Note que a solução original não será repetida pois a
região em que ela está definida não é mais viável.

Resolvendo cada um dos subproblemas graficamente, obtemos novas soluções, conforme indica a
figura a seguir. Note que a etapa de ramificação gera uma árvore de subproblemas, que é um
histórico da resolução do problema global.

O subproblema S1 tem como solução x 1=3, x 2=3, Z=39 , que representa uma solução válida
para o PLI (pois as variáveis são inteiras). Essa é a primeira solução válida que obtemos para o
problema, portanto ela é chamada de solução incumbente, e define um limite inferior para o valor
de Z. Esse valor de Z é o nosso ótimo por enquanto e por isso denotamos o valor de Z da solução
incumbente de Z*.

A solução do subproblema S2 não é valida para o PLI pois a variável x 1 não é inteira. Observando
que o valor de Z = 41, isto é ele é maior que o Z* = 39 da solução incumbente, esse nó da árvore
deve ser ramificado em outros dois novos subproblemas: S3 e S4. Se o valor de Z em S2 fosse
menor que o da solução incumbente não faria sentido explorar o nó de S2.
A ramificação de S1 não faz sentido uma vez que não trará nenhuma informação útil ao problema.
Note também que nesse ponto da ramificação temos que o limitante superior não é mais 41.25 e
sim 41, devido ao subproblema S2.

A deia é continuar com as restrições já existentes em S2 e adicionar mais uma em cada


subproblema S3 e S4: x 1≤1 em S3 e x 1≥2 em S4
Subproblema 3 Subproblema 4
max Z =5 x 1 +8 x 2 s.r max Z =5 x 1 +8 x 2 s.r
x 1+ x 2≤6 x 1+ x 2≤6
5 x1 +9 x 2≤45 5 x1 +9 x 2≤45
x 2≥4 x 2≥4
x 1≤1 x 1≥2
x1 , x2 ≥0 x1 , x2 ≥0

Assim as novas regiões ficam definidas como ilustra a figura a seguir.

A região viável do subproblema S3 é indicada na figura como a área em azul. A solução ótima de S3
é dada por x 1=1, x 2=4.44, Z=40.55 . O subproblema S4 não tem região viável uma vez que a
adição da restrição x 1≥2 torna o problema infactível.

Dessa forma, nossa árvore atual fica como ilustrada na figura a seguir.
Um ponto importante a ser notado é que nesse momento, o limitante superior foi atualizado para
o valor de Z = 40.55, o que significa que houve um decréscimo no melhor valor que podemos
obter. Observando que o valor do limite superior ainda é maior que o valor de Z* = 39 da solução
incumbente, devemos ramificar o subproblema S3 em x2 gerando os subproblemas S5 e S6 a
seguir.

Subproblema 5 Subproblema 6
max Z =5 x 1 +8 x 2 s.r max Z =5 x 1 +8 x 2 s.r
x 1+ x 2≤6 x 1+ x 2≤6
5 x1 +9 x 2≤45 5 x1 +9 x 2≤45
x 2≥4 x 2≥4
x 1≤1 x 1≥2
x 2≤4 x 2≥5
x1 , x2 ≥0 x1 , x2 ≥0

Note porém, que no subproblema S5 podemos substituir as duas restrições x 2≤4 e x 2≥4
por uma única restrição x 2=4 . De maneira similar, o subproblema S6 possui uma restrição
redundante x 2≥4 , uma vez que temos x 2≥5 . Assim, os subproblemas ficam:

Subproblema 5 Subproblema 6
max Z =5 x 1 +8 x 2 s.r max Z =5 x 1 +8 x 2 s.r
x 1+ x 2≤6 x 1+ x 2≤6
5 x1 +9 x 2≤45 5 x1 +9 x 2≤45
x 2=4 x 1≥2
x 1≤1 x 2≥5
x 1≥0 x1 , x2 ≥0

As regiões viáveis dos subproblemas S5 e S6 são ilustradas na figura a seguir. Note que para S5,
temos apenas uma semi-reta horizontal em x 2=4 de 0 a 1 e para S6 a região viável é composta
por um único ponto.
A solução ótima de S5 é dada por x 1=1, x 2=4, Z=37 . Note que ela é uma solução inteira mas
com valor de Z = 37, inferior ao valor Z* da solução incumbente, portanto esse nó deve ser
descartado. Não deveríamos ramificar esse nó mesmo que a solução fosse contínua. A solução
ótima de S6 á dada por x 1=0, x2=5, Z=40 , que é uma solução com valor de Z maior que Z* da
solução incumbente, portanto ela é a nova solução incumbente.

Note que não existem mais nesse nível da árvore e nem em outro nível superior da árvore, algum
subproblema que ainda não tenha sido resolvido.

Algoritmo Branch and Bound

Considere um PLI de maximização. Então o algoritmo Branch and Bound pode ser definido pela
seguinte sequência lógica de passos.

Inicie com Z *=−∞ e X *=∅ (incumbente inicial)


Enquanto existir subproblema para ser investidado
1. Resolva um subproblema pelo método simplex
1.1 Se problema for infactível, descarte-o
1.2 Para uma solução X * de inteiros
1.2.1 Se valor Z de X * for menor ou igual a Z * , descarte subproblema
1.2.2 Senão, faça Z *=Z e X * é a nova incumbente
1.2.3 Os demais subproblemas com Z < Z * são descartados
1.3 Se solução não for inteira
1.3.1 Se valor Z de X * for menor ou igual a Z * , descarte subproblema
1.3.2 Senão,
a) Escolha um x i qualquer que tenha valor não inteiro na solução
b) Crie dois novos subproblemas adicionando uma restrição com
* *
x i≤⌊ x i ⌋ (piso) no primeiro e xi≥⌈x i ⌉ (teto) no segundo

Retorne a solução incumbente ao final das ramificações


Estratégias de busca para Branch and Bound

Durante a exploração dos subproblemas na árvore de decisão, podemos adotar 2 estratégias


básicas:

- Busca em Largura: inicia no nó raiz, visita todos os nós de profundidade 1, todos os nós de
profundidade 2, todos os nós de profundidade 3, …

- Busca em Profundidade: inicia no nó raiz, visita primeiro nó de profundidade 1, primeiro nó de


profundidade 2, primeiro nó de profundidade 3, …

Branch and Bound para o PLI binário

Nesse caso, as variáveis x i do modelo são todas binárias, ou seja, x i=0 (ausente) ou
x i=1 (presente). O algoritmo Branch and Bound é praticamente idêntico, trocando apenas as
expressões “solução inteira” por “solução binária” e modificando o passo 1.3.2 para:

1.3.2 Senão
a) Escolha um x i qualquer que tenha valor não binário na solução
b) Crie dois novos subproblemas adicionando uma restrição com x i=0 no
primeiro e x i=1 no segundo
Ex: max Z =9 x 1+5 x 2 +6 x 3+ 4 x 4 s.r.
6 x 1+3 x 2 +5 x3 +2 x 4≤10
x 3 + x 4≤1
−x 1+ x3 ≤0
−x 2+x 4≤0
x j binária , j=1,2,3,4

Iremos chamar o problema original de S1. O primeiro passo consiste na resolução da versão
relaxada de S1, em que a condição de variáveis binárias é substituída por variáveis contínuas no
intervalo [0,1], ou seja:

max Z =9 x 1+5 x 2 +6 x 3+ 4 x 4 s.r.


6 x 1+3 x 2 +5 x3 +2 x 4≤10
x 3 + x 4≤1
−x 1+ x3 ≤0
−x 2+ x 4≤0
0≤x j≤1, j=1,2,3,4

A resolução de S1 nos leva a solução x 1=5/6, x2 =1, x 3=0, x 4 =1, Z=16.5 , o que não é uma
solução binária. Devemos assim, ramificar esse nó da árvore gerando os subproblemas S2 e S3.
Nesse caso, não temos escolha, e a variável a ser ramificada é x 1 . Em S2, adicionamos a
restrição x 1=0 e em S3 adicionamos a restrição x 1=1 .

Subproblema 2 Subproblema 3
max Z =5 x 2 +6 x 3 +4 x 4 s.r. max Z =9+5 x 2+ 6 x3 + 4 x 4 s.r.
3 x 2+ 5 x 3 +2 x 4≤10 3 x2 +5 x 3+ 2 x 4 ≤4
x 3 + x 4≤1 x 3 + x 4≤1
x3 ≤0 x 3≤1
−x 2+ x 4≤0 −x 2+ x 4≤0
x j binária , j=2,3,4 x j binária , j=2,3,4

Para resolver S2 e S3 devemos relaxar as restrições de variáveis binárias, gerando:

S2 relaxado S3 relaxado
max Z =5 x 2 +6 x 3 +4 x 4 s.r. max Z =9+5 x 2+ 6 x3 + 4 x 4 s.r.
3 x 2 +5 x3 +2 x 4≤10 3 x2 +5 x 3+ 2 x 4 ≤4
x 3 + x 4 ≤1 x 3 + x 4≤1
x 3≤0 x 3≤1
−x 2+ x 4≤0 −x 2+ x 4≤0
x 1≤0 e 0≤x j≤1, j=1,2,3,4 x 1≥1 e 0≤x j≤1, j=1,2,3,4

Computando a solução de S2 e S3 relaxados temos a seguinte árvore de soluções:


Note que a solução incumbente é x 1=0, x2=1, x 3=0, x 4=1, Z=9 . Assim, Z = 9 é o limite inferior.
O limite superior também foi atualizado e agora passa a ser 16.2. Como 16.2 > 9 (valor da
incumbente) devemos ramificar o subproblema S3 em x 2 criando S4 e S5.

Subproblema 4 Subproblema 5
max Z =9+6 x 3 +4 x 4 s.r. max Z =14+6 x 3 +4 x 4 s.r.
5 x 3 +2 x 4≤10 5 x 3 +2 x 4≤1
x 3 + x 4≤1 x 3 + x 4≤1
x 3≤1 x 3≤1
x 4 ≤0 x 4≤1
x j binária , j=3,4 x j binária , j=3,4

Para resolver S4 e S5 devemos relaxar as restrições de variáveis binárias, gerando:

max Z =5 x 2 +6 x 3 +4 x 4 s.r. max Z =14+6 x 3 +4 x 4 s.r.


5 x3 +2 x 4≤10 5 x 3 +2 x 4≤1
x3 + x 4 ≤1 x 3 + x 4 ≤1
x 3≤1 x 3≤1
x 4≤0 x 4≤1
x 1≥1, x 2≤0 e 0≤x j≤1, j=1,2,3,4 x 1≥1, x 2≥1 e 0≤x j≤1, j=1,2,3,4

Computando a solução de S4 e S5 relaxados temos a seguinte árvore de soluções:


Note que a solução incumbente ainda é a mesma. Assim, Z = 9 continua sendo o limite inferior. O
limite superior foi atualizado e agora passa a ser 16. Nesse ponto há duas opções: podemos
ramificar S4 ou S5. Como o valor de Z é maior em S5, escolheremos ramificar S5 em x 4, gerando S6
e S7.

Subproblema 6 Subproblema 7
max Z =14+6 x 3 max Z =18+6 x 3
5 x3 ≤1 5 x 3≤−1
x3 ≤1 x 3≤0
x 3 binária x 3 binária

Observando o subproblema S6 pode-se perceber claramente que a solução é trivialmente dada


por x 3=0 . No caso do subproblema S7, devido a primeira restrição, temos que ele é infactível,
ou seja, não tem solução viável.

Computando a solução de S6 e S7 temos a árvore de soluções ilustrada na figura a seguir.

Note que como a solução incumbente tem valor de Z = 14, que é maior que 13.8, não é necessário
ramificar o subproblema S4 e o algoritmo para nesse ponto, com a solução ótima sendo dada por
x 1=1, x 2=1, x 3=0, x 4=0, Z=14 .
Branch and Bound para o PLI misto

Idêntico ao Branch and Bound para o PLI puro, mas para as variáveis contínuas não são criados
novos subproblemas (não há ramificação).

O problema da mochila

Consiste na escolha de itens de um conjunto S segundo um limite de capacidade do sistema b


(capacidade máxima da mochila), usualmente dado por peso ou tamanho. Cada item possui um
peso w i e um valor c i . O objetivo é preencher a mochila de forma a obter o máximo valor de
utilidade. Esse problema tem inúmeras aplicações em problemas do mundo real que vão desde
corte e empacotamento até criptografia de chave pública.

Formulação matemática

n
max Z =∑ c i x i s.r.
i=1

∑ wi x i≤b com x i∈{0,1}


i=1
Em outras palavras, desejamos maximizar o retorno (valor) respeitando apenas uma restrição, que
é justamente a restrição de capacidade (não pode exceder o limite máximo pois cada vez que
adiciono um objeto na mochila ele tem um valor e um peso associados). Note que as variáveis
x i são binárias e indicam a presença ou ausência de cada item na mochila. Temos portanto um
PLI binário.

Ex: Considere uma mochila com capacidade para 15 kg.

Item Valor Peso


A 8 5
B 11 7
C 6 4
D 4 3

Deseja maximizar a soma dos valores dos itens adicionados na mochila

max Z =8 x1 +11 x 2+ 6 x3 + 4 x 4 s.r.


5 x1 +7 x 2+ 4 x 3 +3 x 4≤15
x 1 , x 2 , x 3 , x 4 ∈{0,1}

Como resolver o problema? Simplex? Problema NP-Hard.


Número de execuções do simplex cresce exponencialmente com número de itens na mochila.
Branch and Bound constrói árvore binária de soluções que no pior caso terá 2 n+1 folhas!
Em caso de n itens, ⃗x ∈{0,1 }n ou seja, número de pontos extremos chega a n+1. Branch and
Bound pode demorar para convergir no pior caso: O(2n+1). Como se trata de um PLI binário teremos
muitas execuções do simplex!

Força bruta x algoritmo guloso

→ Algoritmo de força bruta: compara todas as possibilidades de preenchimento da mochila que


não violem a restrição de capacidade e retorna a melhor solução. Problema: ordem exponencial,
O(2n) de complexidade computacional. Praticamente inviável para quando n cresce
indefinidamente.

Quantidade de itens em S Configurações possíveis


5 32
20 1.048.576
50 1.125.899.906.842.624

→ Algoritmo guloso: para que heurística tenha um bom desempenho, calcula-se o valor de
utilidade de cada objeto do conjunto S como ui=ci /w i (valor dividido pelo peso). Prioriza
objetos leves e de grande valor.

Enquanto existir objeto em S que caiba na mochila


Escolha o objeto de maior valor de utilidade

Ex:

Item Valor Peso Valor de utilidade


A 4 12 0.333
B 2 2 1
C 1 1 1
D 2 1 2
E 10 4 2.5

Mochila com 15kg de capacidade.

1a escolha: E - capacidade = 15 – 4 = 11
2a escolha: D - capacidade = 11 – 1 = 10
3a escolha: C - capacidade = 10 – 1 = 9
4a escolha: B - capacidade = 9 – 2 = 7
Não há mais espaço suficiente
Ex:

Item Valor Peso Utilidade


A 60 10 6
B 100 20 5
C 120 30 4

Mochila com capacidade de 50kg

Estratégia gulosa Estratégia ótima


1a escolha: A – capacidade = 50 – 10 = 40 1a escolha: C – capacidade = 50 – 30 = 20
2a escolha: B – capacidade = 40 – 20 = 20 2a escolha: B – capacidade = 20 -20 = 0
Não há mais espaço suficiente Não há mais espaço suficiente
Total = 160 Total = 220

Vantagens:
- Simples e de fácil implementação
- Rapidamente encontra uma solução viável, se existir

Desvantagens:
- Nem sempre retorna a solução ótima! Pode falhar mesmo em casos extremamente simples
- Nunca reconsideram decisões tomadas (não faz trocas de itens da mochila)

Bibliografia

Taha, H. A.; Pesquisa Operacional. Pearson Addison Wesley, 8ª Edição, 2008.

Lachtermacher, G.; Pesquisa Operacional na Tomada de Decisões - 3ª Edição. Ed. Campus, 2007.

Luenberger, D. L., Ye, Y.; Linear and Nonlinear Programming, 3a ed., Springer, 2008.

Hillier, F. S., Lieberman, G. J.; Introdução a Pesquisa Operacional, 8 a ed., McGraw Hill, 2006.

Yanasse, H. H., Arenales, M., Morabito, R., Armentano, V. A.; Pesquisa Operacional, 2nd ed.,
Elsevier, 2015.

J.Nocedal, S.J.Wright, “Numerical Optimization, Second Edition”, Springer, 2006.

S.Boyd, L.Vandenberghe “Convex Optimization”, Cambridge University Press, 2009.

Curso de Engenharia de Produção Univesp – Disciplina Pesquisa Operacional I – Aulas virtuais do


Professor José Roberto Dale Luche. Disponível no Youtube em:
https://www.youtube.com/watch?v=cq5DKvDEBzE

“The real voyage of discovery consists not in seeking new landscapes, but in having new eyes.”
(Marcel Proust)

View publication stats

Você também pode gostar