Escolar Documentos
Profissional Documentos
Cultura Documentos
net/publication/358582117
CITATIONS
1 author:
Alexandre L M Levada
Universidade Federal de São Carlos
115 PUBLICATIONS 343 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Alexandre L M Levada on 14 February 2022.
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.
Diante das informações, pergunta-se: qual é o mix ótimo de tintas que maximiza o lucro?
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 3: Se uma função objetivo possui um único ponto ótimo finito, então esse é um ponto
extremo do conjunto convexo de soluções
Formas e equivalências
3) variável de folga
4) variável de excesso
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.
⃗x =α 1 ⃗x 1+ α2 ⃗x 2+...+ αk ⃗x k
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
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.
−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
−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
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
x 3=3−x 1
x 4=4−x 2
x 5=9−x1 −2 x 2
Z=5 x 1 +2 x 2
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
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
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!)
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
Z −5 x 1−2 x 2=0
x 1+ x3 =3
x 2 + x 4=4
x 1+2 x 2+ x5 =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 .
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.
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
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 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.
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ô
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
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?
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.
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.
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.
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.
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
Lp ← Lp / 2 L0 ← L0 + 5 L p L1 ← L1 L3 ← L3 -2 Lp
Como não há mais coeficientes negativos na linha zero (Z), a solução é ótima.
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.
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:
−W + A 1=0
x1 + x 3=4
2 x 2+ x 4 =12
3 x1 +2 x 2−x 5+ A 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
Lp ← Lp / 2 L0 ← L0 + 2 L p L1 ← L1 L2 ← L2 - 2 L p
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)
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)
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)
Lp ← Lp / 2 L0 ← L0 + 4 L p L1 ← L1 L2 ← L2 - 2 L p
Lp ← Lp / 2 L0 ← L0 + 3 L p L1 ← L1 - Lp L2 ← L2
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
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
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.
Problema Operação
O problema dual
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)
5 x1 +10 x 2≤45
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
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
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)
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
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
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
Forma matricial
c =[5, 4, 3]
⃗
4 2 −1 50
1 [
A= −2 −3 4
2 −2 ] [ ]
⃗
b= −40
30
Dual
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
−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
Lp ← Lp L0 ← L0 + 3 L p L2 ← L2 L3 ← L3 - 3Lp
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.
Fase 2: Resolver problema original (volta função objetivo inicial e remove var. Artificial)
Como não há mais coeficientes negativos na linha zero (Z), a solução é ótima:
−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
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.
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.
Exercícios
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)
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:
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:
|α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).
|αc |
j
2j
5/4 1/2 2
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
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:
|αc |
j
2j
4 3 ---
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:
|αc |
j
2j
--- 2 ---
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:
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.
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.).
|αc |
j
2j
X 0 X
Aplicando as operações de Gauss-Jordan chegamos em:
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.
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:
Problemas de programação inteira são computacionalmente muito mais custosos que 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
Além disso, pode-se mostrar que problemas de programação inteira são NP-Hard.
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).
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 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.
Considere um PLI de maximização. Então o algoritmo Branch and Bound pode ser definido pela
seguinte sequência lógica de passos.
- 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, …
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:
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
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
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
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
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
Formulação matemática
n
max Z =∑ c i x i s.r.
i=1
→ 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.
Ex:
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:
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
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.
“The real voyage of discovery consists not in seeking new landscapes, but in having new eyes.”
(Marcel Proust)