Você está na página 1de 23

MS428 - Programação Linear

MS428-Programação Linear

Professora: Kelly Cristina Poldi


kellypoldi@ime.unicamp.br

Departamento de Matemática Aplicada - DMA


Instituto de Matemática, Estatística e Computação Científica - IMECC
Universidade Estadual de Campinas - UNICAMP

setembro de 2015

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Determinar uma solução básica inicial factível

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Base inicial
Para começarmos o método simplex, precisamos determinar
uma solução básica inicial factível.
Em alguns casos, isso é direto. Por exemplo, considere o caso
em que o problema envolve restrições da forma Ax ≤ b, onde
b ≥ 0.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Base inicial
Para começarmos o método simplex, precisamos determinar
uma solução básica inicial factível.
Em alguns casos, isso é direto. Por exemplo, considere o caso
em que o problema envolve restrições da forma Ax ≤ b, onde
b ≥ 0.
Nesse caso, introduzimos variáveis de folga não negativas s e
reescrevemos as restrições como Ax + s = b.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Base inicial
Para começarmos o método simplex, precisamos determinar
uma solução básica inicial factível.
Em alguns casos, isso é direto. Por exemplo, considere o caso
em que o problema envolve restrições da forma Ax ≤ b, onde
b ≥ 0.
Nesse caso, introduzimos variáveis de folga não negativas s e
reescrevemos as restrições como Ax + s = b.
O vetor (x, s) dado por x = 0 e s = b é uma solução básica
factível e a matriz básica correspondente é a identidade.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Base inicial
Para começarmos o método simplex, precisamos determinar
uma solução básica inicial factível.
Em alguns casos, isso é direto. Por exemplo, considere o caso
em que o problema envolve restrições da forma Ax ≤ b, onde
b ≥ 0.
Nesse caso, introduzimos variáveis de folga não negativas s e
reescrevemos as restrições como Ax + s = b.
O vetor (x, s) dado por x = 0 e s = b é uma solução básica
factível e a matriz básica correspondente é a identidade.
Porém, em geral, encontrar uma base inicial factível não é
fácil e requer a solução de um problema auxiliar.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Suponha agora que as restrições são, originalmente, de


igualdade:
minimizar f (x) = ct x
sujeito a: Ax = b
x ≥ 0,
Precisamos encontrar uma partição básica factível de A, isto
é, uma partição da forma:

A = [B N]
tal que existe B−1 e xb = B−1 b ≥ 0.
Multiplicando-se algumas das restrições (de igualdade) por −1,
podemos supor, sem perda de generalidade, que b ≥ 0.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Quantas partições existem?


Tome A10×20
Precisamos identifica dez colunas LI de A para formar a
matriz B, e o sistema BxB = b, deve ter xB ≥ 0.

Ideia de procedimento:
1 Escolher m (dez) colunas
2 Verificar se o xB resultante é ≥ 0
3 Se não, escolher outras dez colunas e retornar ao passo 2.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Quantas partições existem?

Se formos testar partição a partição, teríamos de fazer, nesse


caso, 184756 testes:

20 20!
C10 = = 184756
10!(20 − 10)!
O que é impraticável!

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Introduzindo novas variáveis de folga

Quando tínhamos variáveis de folga, funcionava, pois:

Ax ≤ b Ax + s = b
x ≥ 0 equivalente a x ≥ 0, s ≥ 0
naturalmente aparecia uma partição [I N] onde as variáveis
de folga começavam como variáveis básicas.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Introduzindo novas variáveis de folga

Quando tínhamos variáveis de folga, funcionava, pois:

Ax ≤ b Ax + s = b
x ≥ 0 equivalente a x ≥ 0, s ≥ 0
naturalmente aparecia uma partição [I N] onde as variáveis
de folga começavam como variáveis básicas.

Se não for o caso, podemos “forçar”variáveis “de folga”:

Ax + y = b
x≥0
y≥0

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Assim, introduzimos um vetor y ∈ Rm de variáveis artificiais e


criamos um problema auxiliar:
minimizar y1 + y2 + . . . + ym
sujeito a: Ax + y = b
x ≥ 0, y ≥ 0,
e usamos o método simplex para resolver esse problema de
programação linear.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Assim, introduzimos um vetor y ∈ Rm de variáveis artificiais e


criamos um problema auxiliar:
minimizar y1 + y2 + . . . + ym
sujeito a: Ax + y = b
x ≥ 0, y ≥ 0,
e usamos o método simplex para resolver esse problema de
programação linear.

Esse problema auxiliar tem solução básica inicial facilmente


encontrada, dada por: x = 0 e y = b, com a matriz básica
correspondente sendo a identidade.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Assim, introduzimos um vetor y ∈ Rm de variáveis artificiais e


criamos um problema auxiliar:
minimizar y1 + y2 + . . . + ym
sujeito a: Ax + y = b
x ≥ 0, y ≥ 0,
e usamos o método simplex para resolver esse problema de
programação linear.

Esse problema auxiliar tem solução básica inicial facilmente


encontrada, dada por: x = 0 e y = b, com a matriz básica
correspondente sendo a identidade.

Note que as variáveis y não podem aparecer na solução final (pois


são artificiais).

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

m
X
minimizar f (x, y) = yi
i=1
sujeito a: Ax + y = b
x ≥ 0, y ≥ 0

Se x é uma solução factível para o problema original, essa


escolha de x, junto com y = 0, fornece uma solução de custo
zero para o problema auxiliar.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

m
X
minimizar f (x, y) = yi
i=1
sujeito a: Ax + y = b
x ≥ 0, y ≥ 0

Se x é uma solução factível para o problema original, essa


escolha de x, junto com y = 0, fornece uma solução de custo
zero para o problema auxiliar.

Portanto, se o valor ótimo do problema auxiliar for diferente


de zero, concluímos que o problema original é infactível.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

m
X
minimizar f (x, y) = yi
i=1
sujeito a: Ax + y = b
x ≥ 0, y ≥ 0

Se x é uma solução factível para o problema original, essa


escolha de x, junto com y = 0, fornece uma solução de custo
zero para o problema auxiliar.

Portanto, se o valor ótimo do problema auxiliar for diferente


de zero, concluímos que o problema original é infactível.

Por outro lado, quando obtemos uma solução de valor zero


para o problema auxiliar, ela deve satisfazer y = 0 e x é uma
solução factível para o problema original.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Assim, temos um método que: detecta a infactibilidade do


problema ou encontra uma solução básica factível para o problema
original.

Para iniciarmos o método simplex para o problema original,


precisamos de uma solução básica factível e de sua correspondente
matriz básica B. Isso é direto se o método simplex1 , aplicado ao
problema artificial, terminar com uma matriz básica B que
contenha exclusivamente colunas da matriz A.

Nesse caso, simplesmente retiramos as colunas correspondentes às


variáveis artificiais e continuamos o método simplex para o
problema original, usando B como base inicial.

1
pode não acontecer em caso de degeneração
MS428 - Programação Linear
MS428 - Programação Linear
Fase I

Método simplex duas fases


Fase I:
1 Modifique o problema tal que b ≥ 0, fazendo a multiplicação
de linhas por −1, se necessário.
2 Introduza as variáveis artificiais y1 , . . . , ym , se necessário, e
aplique o método simplex ao problema auxiliar com custo
m
X
yi .
i=1
3 Se o valor ótimo do problema auxiliar é positivo, o problema
original é infactível e o algoritmo termina.
4 Se o valor ótimo do problema auxiliar é zero, uma solução
factível para o problema original foi encontrada. Se nenhuma
variável artificial estiver na base final, as variáveis artificiais e
suas respectivas colunas são removidas, e assim, temos
disponível uma base factível para o problema original.
MS428 - Programação Linear
MS428 - Programação Linear
Fase I

Método simplex duas fases

Fase II:
1 Seja a base final da Fase I, a base inicial para a Fase II.
2 Aplique o método simplex ao problema original.

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Exercício

Resolver:

minimizar f (x) = −x1 + 2x2


sujeito a: x1 + x2 ≥2
−x1 + x2 ≥1
x1 ≥ 0, x2 ≥ 0

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Introduzindo as variáveis de folga, temos:

minimizar f (x) = −x1 + 2x2


sujeito a: x1 + x2 − x3 =2
−x1 + x2 − x4 =1
xj ≥ 0, j = 1, . . . , 4

MS428 - Programação Linear


MS428 - Programação Linear
Fase I

Problema auxiliar:

minimizar f (x, y) = y1 + y2
sujeito a: x1 + x2 − x3 + y1 =2
−x1 + x2 − x4 + y2 =1
xj ≥ 0, j = 1, . . . , 4
yi ≥ 0, i = 1, 2

MS428 - Programação Linear

Você também pode gostar