Sei sulla pagina 1di 23

Programação Linear

Fernando Nogueira Programação Linear 1


Exemplo Típico
Uma industria produz 2 produtos, I e II, sendo que cada produto
consome um certo número de horas em 3 máquinas A, B e C para ser
produzido, conforme a tabela:
Produto Tempo Máquina A Tempo Máquina B Tempo Máquina C

I 2 1 4
II 2 2 2

O tempo de funcionamento máximo disponível das máquinas é:


Máquina Máximo tempo disponível
A 160
B 120
C 280

O lucro obtido por cada produto I é $1,00 e por cada produto II é $1,50.
Quanto fabricar de cada produto de modo que seja obedecida a
capacidade operativa das máquinas com o maior lucro possível ?

Fernando Nogueira Programação Linear 2


Modelagem Matemática

 x1 a quantidade do produto I a ser fabricada


 x2 a quantidade do produto II a ser fabricada
Função Objetivo Em notação matricial
Max lucro(x , x ) = Z = x + 1.5x
1 2 1 2
Função Objetivo
x 
Restrições 1
Z = c x ⇒ Z = [1 1.5]. 
1 1 2 2 1
1

2 x + 2x ≤ 160 Máquina A x  2
1 2
 Restrições
x + 2 x ≤ 120
1 2
Máquina B
 2 2  160 
4 x + 2x ≤ 280 Máquina C
x  
A x ≤ b ⇒ 1 2.  ≤ 120 
 
1 2

x , x ≥ 0
1

Prod. não negativa 3 2 2 1 3 1


x 

1 2

4 2 280


2

Fernando Nogueira Programação Linear 3


Interpretação Geométrica

A região fechada formada pelas restrições é sempre convexa e contém


todas as soluções possíveis ou viáveis: região das restrições.
Teorema Fundamental da Programação Linear
Uma vez que todas as equações e/ou inequações envolvidas são lineares,
o valor ótimo da função-objetivo Z só pode ocorrer em um dos vértices
da região das restrições.
Fernando Nogueira Programação Linear 4
O Método Simplex (Dantzig, 1948)
Considerações Iniciais
O Método Simplex é um algoritmo que sistematiza a solução de
problemas de P.L. de maneira eficiente computacionalmente (não é
força-bruta).
Seja m o número de equações e/ou inequações de restrição e n o número
de variáveis (incógnitas), tem-se:
1 Z1 =1 c n n x1 m A n n x1 ≤ m b1
2 problemas ocorrem na resolução de m A n n x1 ≤ m b1
1)A existência de desigualdades (≤, <, ≥ ou > ) implica que a solução é
geralmente um conjunto e não única.
2)A não necessariamente possui inversa ⇒ geralmente A não é quadrada
(m de
.obs: o fato ) ser quadrada não garante a existência de inversa.
≠ nA

Fernando Nogueira Programação Linear 5


Solução do Problema 1
Transformar as desigualdades em igualdades através da introdução de
variáveis de folga (slack variables). Exemplo:
2 x1 + 2 x 2 ≤ 160 ⇔ 2 x1 + 2 x 2 + u1 = 160 Tem-se então um sistema com
 m equações e (n + m)
x1 + 2 x 2 ≤ 120 ⇔ x1 + 2 x 2 + u 2 = 120
4 x + 2 x ≤ 280 ⇔ 4 x + 2 x + u = 280 incógnitas:
 1 2 1 2 3
m A ( n + m ) ( n + m ) x 1 = m b1
com x1 , x 2 , u1 , u 2 , u 3 ≥ 0

Solução do Problema 2
Anular n variáveis. Uma vez que (n + m) é sempre maior que m,
sempre tem-se mais incógnitas de que equações, assim o sistema é sub-
determinado ⇒ infinitas soluções. No entanto, anulando n variáveis, o
sistema fica: m A m m x1 = m b1
Quais n variáveis deve-se anular para obter solução ótima ???
Fernando Nogueira Programação Linear 6
O Método
Reescrevendo a função-objetivo e as inequações como equações:
 Z − x1 − 1.5x 2 − 0u1 − 0u 2 − 0u 3 = 0

 2 x1 + 2x 2 + u1 + 0u 2 + 0u 3 = 160

 x1 + 2x 2 + 0u1 + u 2 + 0u 3 = 120
 4 x1 + 2x 2 + 0u1 + 0u 2 + u3 = 280
Deve-se achar uma solução inicial viável qualquer. A maneira mais
simples para isto é “zerar” as variáveis de controle (x1 = x2 = 0). Com
isso, as variáveis de folga assumem valores máximos (u1 = 160, u2 = 120
e u3 = 280). Esta é uma solução viável (nenhuma restrição foi violada),
porém é a pior possível, pois Z = 0.
Pode-se classificar as variáveis do problema como:
Variáveis Básicas: variáveis que compõem a solução em cada iteração.
Variáveis Não-Básicas: variáveis que foram anuladas.
Fernando Nogueira Programação Linear 7
Partindo de uma solução inicial qualquer, o Método Simplex verifica se
existe uma outra solução que seja melhor que a solução atual. Isto se dá
através da análise da função-objetivo: Z − x1 − 1.5x 2 − 0u1 − 0u 2 − 0u 3 = 0
Fazendo Z = x1 + 1.5x 2 + 0u1 + 0u 2 + 0u 3 , as derivadas parciais de Z em
relação as variáveis (de controle e de folga) fornecem a taxa de
crescimento de Z nas direções destas variáveis.
∂Z ∂Z ∂Z ∂Z ∂Z
=1 = 1.5 =0 =0 =0
∂x1 ∂x 2 ∂u1 ∂u 2 ∂u 3
O fato acima permite deduzir que enquanto houver variáveis não-básicas
com coeficientes negativos em Z − x1 − 1.5x 2 − 0u1 − 0u 2 − 0u 3 = 0 a solução
poderá ser melhorada. Uma vez que o objetivo é maximizar Z, deve-se
escolher dentre as variáveis não-básicas, aquela que possuir maior taxa
de variação (coeficiente mais negativo) para compor as variáveis básicas,
no caso x2. Para isso, alguma variável básica terá que deixar a base para
compor as variáveis não-básicas. Qual variável deve deixar a base, ou
seja, mudar do grupo das variáveis básicas para o grupo das variáveis
não-básicas ?
Fernando Nogueira Programação Linear 8
A medida que x2 (a variável que era não-básica e agora é variável básica)
aumenta, deve-se diminuir cada variável básica corrente correspondente
a uma linha na qual x2 tenha coeficiente positivo. Assim, quanto x2 pode
crescer antes que uma das variáveis básicas corrente atinja seu limite
inferior 0 (não viole nenhum restrição) ?
Z − x1 − 1.5x2 − 0u1 − 0u2 − 0u3 = 0
 2x1 + + + 0u2 + 0u3 = 160 Para u1 = 0 ⇒ x2 = 80
 2x2 u1

 x1 + 2x2 + 0u1 + u2 + 0u3 = 120 Para u2 = 0 ⇒ x2 = 60
 4x1 + 2x2 + 0u1 + 0u2 + u3 = 280 Para u3 = 0 ⇒ x2 = 140
obs: x1 = 0, pois é variável não− básica

Com isso, conclui-se que quando x2 = 60, u2 = 0, e portanto, poderá ir


para o grupo das variáveis não-básicas.
Antes Agora
Variáveis básicas u1,u2,u3 u1,x2,u3
Variáveis não-básicas x1,x2 x1,u2
Fernando Nogueira Programação Linear 9
Uma vez que x2 “entrou” na base e u2 “saíu” da base, faz-se necessário
então alterar os valores dos coeficientes do sistema de equações de
maneira equivalente. Este processo é obtido através do Método de
Gauss-Jordan. Retomando o problema ao ponto inicial, pode-se montar a
seguinte tabela (Tabela Simplex):
x 1 x 2 u 1 u 2 u 3 b

}
2 2 1 0 0 160
1 2 0 1 0 120 Restrições
4 2 0 0 1 280
− 1 − 1 .5 0 0 0 0 } função-objetivo
Se o vetor [2 2 2 –1.5]t (correspondente a coluna de x2) transformar-se no
vetor [0 1 0 0]t (correspondente a coluna de u2), x2 estará pertencendo a
base e u2 sairá da base. Para realizar o Método de Gauss-Jordan é
necessário escolher o elemento pivô, o qual é obtido pela interseção da
coluna pivô com a linha pivô.
Fernando Nogueira Programação Linear 10
A coluna pivô é a coluna correspondente à variável que vai entrar na base
(x2 no caso) e a linha pivô é a linha na qual a interseção com a coluna
correspondente à variável que vai sair da base é igual a 1 (no caso a
interseção da 2 linha com a coluna correspondente a u2).
Realizando o Método de Gauss-Jordan a Tabela Simplex fica:
x 1 x 2 u 1 u 2 u 3 b

}
1 0 1 − 1 0 40
1 2 1 0 1 2 0 60 Restrições
3 0 0 − 1 1 160
− 1 4 0 0 3 4 0 90 } função-objetivo
Esta tabela refere-se ao seguinte sistema:
Z − 1 4 x1 − 0x2 − 0u1 + 3 4 u2 − 0u3 = 90 } função-objetivo

 + + − u2 + =

}
x1 0x2 u1 0u3 40

 1 2 x1 + x2 + 0u1 + 1 2 u2 + 0u3 = 60 Restrições
 3x1 + 0x2 + 0u1 − u2 + u3 = 160
Fernando Nogueira Programação Linear 11
A Tabela Simplex anterior fornece a seguinte solução:
x1 = 0, x2 = 60, u1 = 40, u2 = 0, u3 = 160 e Z = 90.
Uma vez que x1 é uma variável não-básica e possui coeficiente negativo,
esta deverá entrar base e conseqüentemente u1 deverá sair da base. Com
esta alteração, a Tabela Simplex após o Método de Gauss-Jordan fica:
x 1 x 2 u 1 u 2 u 3 b

}
1 0 1 − 1 0 40
0 1 − 1 2 1 0 40 Restrições
0 0 − 3 2 1 40
0 0 1 4 1 2 0 100 } função-objetivo
que corresponde ao seguinte sistema:
Z − 0x1 − 0x2 + 1 4 u1 + 1 2 u2 − 0u3 = 100} função-objetivo

 + + − u2 + =

}
x1 0x2 u1 0u3 40

 0x1 + x2 + −1 2 u1 + u2 + 0u3 = 40 Restrições
 0x1 + 0x2 + − 3u1 + 2u2 + u3 = 40
Fernando Nogueira Programação Linear 12
A Tabela Simplex anterior fornece a seguinte solução:
x1 = 40, x2 = 40, u1 = 0, u2 = 0, u3 = 40 e Z = 100.
Uma vez que não existe variáveis não-básicas com coeficiente negativo a
solução não poderá mais ser melhorada, portanto, está solução é ótima.
Conclusão
 (n + m )
Em P.L. existe   maneiras de combinar n variáveis iguais a zero.
 m 
No exemplo, n = 2 e m = 3, que resulta em 10 soluções possíveis, o que
implica que seria necessário resolver 10 sistemas de equações (força-
bruta). No entanto, o Método Simplex resolveu apenas 2 sistemas de
equações (neste caso) e alcançou a solução ótima.
x x!
obs:   = ⇒ combinação
 y  y!(x − y )!

Fernando Nogueira Programação Linear 13


Solução de um Modelo Geral de P.L. pelo Método Simplex
Até o momento

}
Função-Objetivo deve ser maximizada
Variáveis de controle não negativa Simplex exige essas
3 características
Apresentam uma solução básica inicial
Quando uma ou mais dessas características não são satisfeitas, faz-se
necessário determinar uma forma equivalente ⇒ mudar o modelo e não o
algoritmo.
1.Minimização
Se a função-objetivo é de minimização deve-se multiplica-lá por –1.
Min Z = 3x1 − 4 x 2 + x 3 ⇒ Max − Z = −3x1 + 4 x 2 − x 3
obs: restrições não são alteradas.

Fernando Nogueira Programação Linear 14


2.Variável Livre ou Negativa
Substituir a variável livre pela diferença de 2 outras não-negativas.
Substituir a variável negativa por uma outra positiva com coeficiente -1.
Max Z = x1 + 2x 2 + x 3
Fazendo Max Z = x1 + 2x 4 − 2x 5 − x 6
x1 + x 2 + x 3 ≤ 10
2 x + 3x ≤ 20 x2 = x4 − x5 x1 + x 4 − x 5 − x 6 ≤ 10
 1 2
x3 = −x 6 
x 1 ≥ 0 2x1 + 3x 4 − 3x 5 ≤ 20
x ⇒ livre x , x , x , x ≥ 0
 1 4 5 6
 2
x 3 ≤ 0 x3 negativa

3.Solução Básica Inicial


Se a restrição é do tipo faz-se necessário acrescentar uma variável de folga negativa.
x1 ≥ 10 ⇒ x1 − u1 = 10, com u1 ≥ 0
Se a restrição é do tipo =, já tem-se um equação e, portanto, não é preciso acrescentar
variável de folga. No entanto, quando estes 2 casos ocorrem não é formada uma sub-
matriz identidade automaticamente e, portanto, não origina uma solução básica inicial.
Exemplo:

Fernando Nogueira Programação Linear 15


Max Z = x1 + x 2 + x 3 Z − x 1 − x2 − x3 − 0u1 − 0u 2 = 0
2 x1 + x 2 − x 3 ≤ 10 
 2 x1 + x2 − x3 + u1 + 0u 2 = 10
x + x + 2 x ≥ 20 
 1 x1 + x2 + 2x 3 + 0u1 − u2 = 20

2 3
 ⇒
2 x1 + x 2 + 3x 3 = 60  2 x1 + x2 + 3x 3 + 0u1 + 0u 2 = 60
x1 , x 2 , x 3 ≥ 0

A Tabela Simplex fica:


x 1 x 2 x 3 u 1 u 2 b
2
1
2
1
1
1
− 1
2
3
1
0
0
0
− 1
0
10
20
60
} Restrições

− 1 − 1 − 1 0 0 0 } função-objetivo
Nota-se na Tabela Simplex que não existe uma sub-matriz identidade. Neste caso,
acrescenta-se Variáveis Artificiais (Auxiliares) nas linhas cujas as restrições são do tipo
≥ ou = . O sistema fica:

Fernando Nogueira Programação Linear 16


Z − x 1 − x2 − x3 − 0u1 − 0u 2 − 0a 2 − 0a 3 = 0
 + x2 − + u1 + 0u 2 + 0a 2 + 0a 3 = 10
 2 x1 x3

 x1 + x2 + 2x 3 + 0u1 − u2 + a2 + 0a 3 = 20
 2 x1 + x2 + 3x 3 + 0u1 + 0u 2 + 0a 2 + a3 = 60
com
x1 , x 2 , x 3 , u1 , u 2 , u 3 , a 2 , a 3 ≥ 0
A Tabela Simplex fica:
x 1 x 2 x 3 u 1 u 2 a 2 a 3 b
2
1
2
1
1
1
− 1
2
3
1
0
0
0
− 1
0
0
1
0
0
0
1
10

60
}
20 Restrições

− 1 − 1 − 1 0 0 0 0 }
0 função-objetivo
Agora tem-se uma sub-matriz identidade, porém a2= 20 e a3 = 60.
O retorno ao modelo original deve ser feito com a eliminação das Variáveis Artificiais.
Isto é realizado através do Método do M Grande ou do Método da Função-Objetivo
Auxiliar.
Fernando Nogueira Programação Linear 17
Método da Função-Objetivo Auxiliar
Este método consiste em utilizar uma função-objetivo auxiliar W(a1,a2,...,ar) formada
pela soma das r Variáveis Artificiais ⇒ W(a1,a2,...,ar) = a1 + a2 + ... + ar .
Uma vez que as Variáveis Artificiais podem ser escritas em função das Variáveis de
Controle e de Folga, pode-se sempre minimizar W(a1,a2,...,ar) até W(a1,a2,...,ar) = 0, o
que corresponde a a1= a2 = ... = ar = 0, fazendo então as Variáveis Artificiais
pertencerem ao grupo das Variáveis Não-Básicas. Com isso, obtém-se uma solução
viável para o problema podendo-se então abandonar a Função-Objetivo Auxiliar e as
Variáveis Artificiais. Exemplo:
Max Z = x1 + x 2 + x 3  Z − x1 − x2 − x3 − 0u 1 − 0u 2 − 0a 2 − 0a 3 = 0

 1
2 x + x − x ≤ 10  2 x1 + x2 − x3 + u1 + 0u 2 + 0a 2 + 0a 3 = 10
2 3
x + x + 2 x ≥ 20 
 x1 + x2 + 2x 3 + 0u 1 − u2 + a2 + 0a 3 = 20
 1 2 3
 ⇒  2 x1 + x2 + 3x 3 + 0u 1 + 0u 2 + 0a 2 + a3 = 60
2
 1 x + x 2 + 3x 3 = 60
 com
x 1 , x 2 , x 3 ≥ 0
x1 , x 2 , x 3 , u1 , u 2 , u 3 , a 2 , a 3 ≥ 0
Função-Objetivo Auxiliar
W(a2,a3) = a2 + a3 Dá 2o restrição Dá 3o restrição
a2 = – x1 – x2 – 2x3 + u2 + 20 a3 = – 2x1 – x2 – 3x3 + 60
Fernando Nogueira Programação Linear 18
Substituindo a2 e a3 em W(a2,a3), fica:
Min W(a2,a3) = Max – W(a2,a3) = 3x1 + 2x2 + 5x3 – u2 – 80 = 0
que na forma de equação é – W(a2,a3) – 3x1 – 2x2 – 5x3 + u2 = – 80
A Tabela Simplex fica:
x 1 x 2 x 3 u 1 u 2 a 2 a 3 b
2
1
2
− 1
1
1
1
− 1
− 1
2
3
− 1
1
0
0
0
0
0
0
− 1
0
1
0
0
0
0
1
0
10
20
60
0
} Restrições

} função-objetivo
− 3 − 2 − 5 0 1 0 0 − 80 } função-objetivo
auxiliar
Após 2 iterações (neste exemplo) do Método Simplex, a Tabela Simplex fica:
x 1 x 2 x 3 u 1 u 2 a 2 a 3 b

}
16 4 0 1 0 0 1 30
6 3 3
2 1 1 0 0 0 1 20 Restrições
3 3 3
1 − 1 0 0 1 − 1 2 20
3 3 3
− 1
3
− 2
3
0 0 0 0 1
3
20 } função-objetivo
0 0 0 0 0 1 1 0} função-objetivo
Fernando Nogueira Programação Linear 19
auxiliar
A Tabela Simplex agora apresenta uma solução cuja as Variáveis Artificiais são
Variáveis Não-Básicas (portanto, iguais a zero) e podem então ser desprezadas e o
Método Simplex pode continuar sendo utilizado a fim de encontrar a solução ótima.
Considerações Finais
1.Problema de Degeneração
A saída de uma V.B. com valor nulo provoca o aparecimento de uma outra V.B. nula
na próxima solução sem alteração do valor da Função-Objetivo. Neste caso a solução
é denominada degenerada, indicando que existe, no mínimo, uma restrição
redundante. Se os coeficientes da Função-Objetivo retornam não negativos em alguma
iteração, o caso não apresenta dificuldade. O problema surge quando as iterações
levam a circuitos, sem caracterizar a solução ótima. Neste caso faz-se necessário
utilizar regras mais complexas, as quais não serão abordadas neste curso. Tal problema
é bastante raro em aplicações práticas.
Exemplo em que a degeneração não acarretou em circuito:
Max Z = 3x1 + 9x 2
2 iteração
x1 + 4x 2 ≤ 8 1 iteração
 x1 x2 u1 u2 b x1 x2 u1 u2 b x1 x2 u1 u2 b
x1 + 2x 2 ≤ 4 1 1 1 −1
1 4 1 0 8 1 0 2 0 1 2
x , x ≥ 0 4 4 2 2
 1 2 1 2 0 1 4 1 0 −1 1 0 1 0 −1 2 0
2 2
−3 −9 0 0 0 −3 9 0 0 3 3 18
0 0 18 2 2
4 4
Fernando Nogueira Programação Linear 20
Exemplo em que a degeneração ocorreu temporariamente:
1 iteração
Max Z = 3x1 + 2x 2 x1 x 2 u1 u 2 u 3 b x1 x2 u1 u2 u3 b
4 x 1 − x 2 ≤ 8 4 −1 1 0 0 8 1 −1
4
1
4
0 0 2
4x + 3x ≤ 12 4 3 0 1 0 12 0 4 −1 1 0 4
 1 2
 4 1 0 0 1 8 0 2 −1 0 1 0
4 x 1 + x 2 ≤ 8 −3 −2 0 0 0 0 0 − 11 3 0 0 6
x1 , x 2 ≥ 0 4 4
2 iteração 3 iteração
x1 x2 u1 u2 u3 b x1 x2 u1 u2 u3 b
1 0 1 0 1 2 1 0 0 −1 3 3
8 8 8 8 2
0 0 1 1 −2 4 0 0 1 1 −2 4
0 1 −1 0 1 0 0 1 0 1 −1 2
2 2 2 2
0 0 −5 0 11 6 0 0 0 5 1 17
8 8 8 8 2
2.Solução Ilimitada
Ocorre quando a variável que entra na base não possui em sua coluna nenhum
coeficiente positivo, não sendo portanto possível determinar a linha pivô. Exemplo:
Max Z = x1 + 0x 2
x1 + x 2 ≥ 40

− x 1 + x 2 ≤ 0
x , x ≥ 0
 1 2
Fernando Nogueira Programação Linear 21
3.Soluções Múltiplas
Se na solução ótima o coeficiente de um V.N.B. é zero, esta variável poderá entrar na
base sem alterar o valor da função objetivo, gerando outra solução ótima. Neste caso
qualquer combinação linear dessas 2 soluções também será ótima. Exemplo:
Max Z = 4x1 + 10x 2
4x1 + 3x 2 ≤ 12

2x1 + 5x 2 ≤ 10
x , x ≥ 0
 1 2

4.Soluções Inviável
Se o problema de P.L. não possuir nenhuma solução viável, então o Método da Função-
Objetivo Auxiliar (ou do M Grande) irá fornecer na solução final no mínimo uma
variável artificial com valor diferente de zero, caso contrário, todas variáveis artificiais
serão nulas. Exemplo: Max Z = x + x
1 2

 x1 − x 2 ≥ 1

− x 1 + x 2 ≥ 1
x , x ≥ 0
 1 2

Fernando Nogueira Programação Linear 22


5.Lado Direito das Restrições Negativas
 x 1 + x 2 ≤ −1  x1 + x2 + u1 + 0u 2 = −1
 
2x1 + 5x 2 ≤ −10 ⇒ 2 x1 + 5x 2 + 0u 1 + u 2 = − 10
x , x ≥ 0 x , x2, u1 , u2 ≥ 0
 1 2  1
Solução Inicial: x1 = x2 = 0, u1 = -1 e u2 = -10 ⇒ Inviável, pois u1 e u2 são negativos.
Sempre que houver restrições cujo lado direito são negativos deve-se multiplicar ambos
os lados destas restrições por –1.
 x 1 + x 2 ≤ −1 − x 1 − x 2 ≥ 1
 
 1
2 x + 5 x 2 ≤ − 10 ⇒ − 2x1 − 5x 2 ≥ 10 ⇒
x , x ≥ 0 x , x ≥ 0
 1 2  1 2
 − x1 − x2 − u1 − 0u 2 + a1 + 0a 2 = 1

− 2 x 1 − 5x 2 − 0u1 − u2 + 0a 1 + a2 = 10
 x, x 2 , u1 , u 2 , a1 , a 2 ≥ 0
 1
Solução Inicial: x1 = x2 = u1 = u2 = 0, a1= 1, a2 = 10 ⇒ Viável.

Fernando Nogueira Programação Linear 23

Potrebbero piacerti anche