Baixe Resolução de Sistemas Lineares por Método Simplex e outras Esquemas em PDF para Direito, somente na Docsity!
2 – O Método Simplex
! O método simplex é um algoritmo que procura pela solução ótima
de um PPL, realizando duas operações elementares sobre as linhas
do problema:
! Multiplicar todos os coeficientes de uma linha por uma
constante não-nula.
! Substituir uma linha por outra, obtida a partir de uma
combinação linear de duas linhas do problema.
! Estas operações elementares, quando são feitas sobre equações,
não alteram o conjunto de soluções factíveis do problema (ou seja,
não altera a solução do problema).
! Exemplo:
(a): 3x 1 – 7x 2 = - (b): x 1 + x 2 = 2 x 1 = 2 – x 2 3(2 – x 2 ) – 7x 2 = - -10x 2 = - x 2 = 27/ x 1 = 2 – 27/10 = -7/ 2(b) + (a): 5x 1 – 5x 2 = - 4(b): 4x 1 + 4x 2 = 8 x 1 = (8 – 4x 2 )/4 = 2 – x 2 5(2 – x 2 ) – 5x 2 = - -10x 2 = - x 2 = 27/ x 1 = 2 – 27/10 = -7/
! Mas, em geral, um PPL é um conjunto de inequações e, neste caso,
estas duas operações elementares, normalmente, alteram o
conjunto de soluções viáveis.
Exemplo:
! Portanto, para que as operações elementares possam ser feitas é
importante transformar o PPL em um sistema de equações.
Transformação do PPL para a Forma Padrão
! PPL na forma padrão: min { cx | Ax = b, x ≥ 0 }. Portanto, além de
transformar as inequações em equações, a forma padrão de um PPL
exige transformações para as seguintes situações:
(a): x 1 ≥ 0 (b): x 2 ≥ 0 (a) + 2(b): x 1 + 2x 2 ≥ 0 (b): x 2 ≥ 0 x 1 x 2 x 1 x 2 x 1 + 2x 2 = 0
Vamos supor que isto ocorre na i-ésima restrição:
ai1x 1 + a 12 x 2 + ... + ainxn = bi onde ai1 ≠ 0.
Logo, podemos escrever:
x 1 = (bi – ai2x 2 – ... – ainxn)/ai
e, portanto, x 1 pode ser eliminada do problema (substituída pelo
lado direito da equação). Isto é interessante porque reduz o
problema para (n – 1) variáveis e (m – 1) restrições (a i-ésima
restrição será eliminada). Se o lado direito da equação acima for
negativo (x 1 < 0), pode-se transformar o problema substituindo x 1
por –y 1 , y 1 > 0.
! Restrições com lados direitos negativos
Se existir restrição tal que bi < 0, multiplicar toda a restrição por -1.
! Função-objetivo
O primeiro passo é eliminar termos constantes da função-objetivo.
Isto não altera o conjunto de soluções ótimas do problema. Em
seguida, expressar a função-objetivo na forma de minimização:
max { cx } é equivalente a min { – cx }
! Com tais transformações,
um PPL na forma padrão
pode ser escrito como:
! Portanto, podemos representar um PPL padrão como uma tabela:
coeficientes de custo (função-objetivo) matriz de restrições variáveis do problema (incluindo as variáveis de folga) termos independentes
Min z = c j x j
j = 1
n
∑ (^ c^ j x^ j
j = 1
n
∑ −^ z^ =^0 )
s. a a
ij
x
j
= b
i
( i = 1 ,!, m )
j = 1
n
! Numa SVB:
! valores das variáveis não-básicas = zero
! vetores-coluna das variáveis básicas: matriz identidade
! Exemplo:
! Portanto, uma SVB é: x 1 = 0, x 2 = 0, x 3 = 6, x 4 = 6
! O valor da FO, neste caso, é: z = – x1 – x2 = 0
max x 1 + x 2
s.a x 1 + 2x 2 ≤ 6
2x 1 + x 2 ≤ 6
x 1 , x 2 ≥ 0
min - x 1 - x 2
s.a x 1 + 2x 2 + x 3 = 6
2x 1 + x 2 + x 4 = 6
x 1 , x 2 , x 3 , x 4 ≥ 0
forma padrão: x1 x2 x3 x4 -z b 1 2 1 0 0 6 2 1 0 1 0 6 -1 -1 0 0 1 0 variáveis não- básicas variáveis básicas valor de –z (negativo do valor da FO)
! Neste caso, é fácil obter a região viável graficamente:
! Método simplex: caminha pelos pontos extremos para encontrar a
solução ótima do problema.
! O problema na forma canônica também pode ser representado por
uma tabela (conhecida como tabela canônica):
x 1 x 2 2x 1 + x 2 = 6 x 1 + 2x 2 = 6 (0,0) (3,0) (0,3) (2,2)
Observe que o ponto
(x 1 , x 2 ) = (0, 0) é um
vértice da região viável.
Toda SVB corresponde a
um ponto extremo
(vértice) do conjunto de
soluções viáveis.
VB x 1 x 2 x 3 x 4 -z b x 3 1 2 1 0 0 6 x 4 2 1 0 1 0 6 -z -1 -1 0 0 1 0 variáveis básicas mais à frente, esta coluna ficará subentendida.
! Esta nova SVB pode ser obtida modificando-se a tabela da SVB 1 de
modo que os vetores-coluna da variáveis x 3 e x 1 formem uma matriz
identidade, ou seja, de forma que (x 3 , x 1 ) forme uma nova base.
SVB 1 :
! Como obter a nova SVB?
VB x 1 x 2 x 3 x 4 -z b x 3 1 2 1 0 0 6 x 4 2 1 0 1 0 6 -z -1 -1 0 0 1 0 Base atual: (x 3 , x 4 ) Nova base: (x 3 , x 1 ) Sai da base : variável x 4 Entra na base : variável x 1 Pivô : interseção da linha da variável que sai da base com a coluna da variável que entra na base. VB x 1 x 2 x 3 x 4 -z b x 3 0 3/2 1 -1/2 0 3 x 1 1 1/2 0 1/2 0 3 -z 0 -1/2 0 1/2 1 3 Notar que –z = 3, ou seja, z = -
! SVB 2 :
! Dá para diminuir ainda mais o valor da FO?
! Existe nesta SVB uma variável não-básica com custo negativo?
! Variável que entra na base: x 2
! Vamos admitir que x 3 sai da base. Por que esta escolha?
Temos:
Devemos, então:
! dividir a 1ª linha pelo valor do pivô = 3/
! substituir a 2ª linha por: (2ª linha) – (1/2)*(nova 1ª linha)
! substituir a 3ª linha por: (3ª linha) – (-1/2)*(nova 1ª linha)
VB x 1 x 2 x 3 x 4 -z b x 3 0 3/2 1 -1/2 0 3 x 1 1 1/2 0 1/2 0 3 -z 0 -1/2 0 1/2 1 3 VB x 1 x 2 x 3 x 4 -z b x 3 0 3/2 1 -1/2 0 3 x 1 1 1/2 0 1/2 0 3 -z 0 -1/2 0 1/2 1 3
! Algumas questões:
! Por que, na 1ª iteração, foi escolhida a variável não-básica x 1?
Poderia ter sido escolhida a variável não-básica x 2 , pois seu
custo também era negativo.
! Por que a variável x 1 substituiu a variável x 4 e não a variável x 3
na base?
! Por que, na 2ª iteração, a variável não-básica x 2 (a única
escolha possível) substituiu a variável x 3 e não a variável x 1 na
base?
! Estas questões podem ser resumidas como:
! Na forma canônica, os custos referentes às variáveis básicas devem
ser iguais a zero. Os demais valores da linha de custos são
denominados coeficientes de custo relativo. O termo "relativo" é
usado porque os valores desses coeficientes dependem do vetor-
base escolhido. Os valores desses coeficientes correspondem a
quanto é possível alterar o valor da FO, para cada alteração unitária
na variável não-básica correspondente, mantida a viabilidade.
Como escolher a variável (básica) que sai da base e como escolher a variável (não-básica) que entra na base?
Solução Ótima
! Como vimos, o critério de otimalidade do algoritmo simplex é:
! Observe, pela última linha da tabela, que:
Como todos os xj ≥ 0, se c'j ≥ 0, então FO ≥ z'. Logo, como o
problema é de minimização, z' é o valor da solução ótima.
Solução Ilimitada
! A solução de um problema será ilimitada (ou seja, diverge para –∞)
se, na tabela canônica correspondente a uma SVB existir uma
coluna s tal que:
A SVB atual é ótima se todos os coeficientes de custo relativo são
não-negativos.
VB x 1 ... xn -FO b c' 1 ... c'n 1 - z'
∑ c ʹ^ j x^ j −^ FO^ =^ − z ʹ
FO = z ʹ + ∑ c ʹ j x j
c's < 0 e a'is ≤ 0 (i = 1, ..., m)
! Então: x 1 = b' 1 – a'1sλ
xm = b'm – a'msλ
! Por outro lado: FO = z' + c'sλ e, portanto, como c's < 0 e λ ≥ 0,
FO ≤ z'. Assim, quanto maior for o λ escolhido, menor será o valor
da solução. Portanto, para um λ arbitrariamente grande, teremos
uma solução viável e o valor de FO irá divergir para –∞.
VB ... xs x 1 ... xm b x 1 a'1s 1 ... 0 b' 1 ... ... ... ... ... xm a'ms 0 ... 1 b'm -FO ... c's - z' € a 1 ʹ s λ + x 1 = b 1 ʹ ! a ʹ ms λ + xm = b ʹ m c ʹ s λ − FO = − z ʹ Como a'is ≤ 0 (i = 1, ..., m) e λ ≥ 0, então xi ≥ 0 (i = 1, ..., m), ou seja, esta é uma solução viável (não necessariamente um vértice da região viável).
Analogamente : um PPL cuja FO deve ser maximizada terá solução
ilimitada (diverge para +∞) se para uma SVB existir uma coluna s tal
que: c's > 0 e a'is ≤ 0 (i = 1, ..., m).
! Se nem o critério de otimalidade e nem o critério de solução
ilimitada são satisfeitos, o algoritmo simplex move-se de uma
solução viável x' para uma solução viável x" melhor (z(x") ≤ z(x'))
escolhendo uma variável não-básica para entrar na base.
! Toda variável não-básica xj tal que c'j < 0 é uma candidata a ser
selecionada.
! Quando várias escolhas são possíveis, um bom critério é escolher a
variável xk tal que:
c'k = mínimo { c'j } (j = 1, ..., n)
! Vamos imaginar que o vetor-base atual é (x 1 , ..., xm) e que a
variável não-básica xr foi escolhida para entrar na base. Neste caso,
podemos escrever:
Não existe uma justificativa teórica sustentando que esta regra resulte em um esforço computacional menor para resolver o problema (menor número de iterações). Existe apenas uma evidência empírica de que se trata de um bom critério.
! Uma vez escolhidas a variável que entra (xr) e a variável que sai (xs)
da base deve-se produzir uma nova tabela canônica relativa à nova
base. Para isso, devem ser efetuadas as seguintes operações:
! dividir a linha do pivô (linha s) pelo valor do pivô = a'sr
! substituir cada uma das demais linhas i ≠ s da tabela por:
(linha i atual) – a'ir * (nova linha do pivô)
Exemplo:
Tabela canônica:
max x 1 + 2x 2 + 3x 3 – x 4
s.a x 1 + 2x 2 + 3x 3 ≤ 15
2x 1 + x 2 + 5x 3 ≤ 20
x 1 + 2x 2 + x 3 + x 4 ≤ 10
x 1 , x 2 , x 3 , x 4 ≥ 0
min – x 1 – 2x 2 – 3x 3 + x 4
s.a x 1 + 2x 2 + 3x 3 + x 5 = 15
2x 1 + x 2 + 5x 3 + x 6 = 20
x 1 + 2x 2 + x 3 + x 4 + x 7 = 10
xi ≥ 0 (i = 1, ..., 7)
forma padrão VB x 1 x 2 x 3 x 4 x 5 x 6 x 7 b x 5 1 2 3 0 1 0 0 15 x 6 2 1 5 0 0 1 0 20 x 7 1 2 1 1 0 0 1 10 -FO -1 -2 -3 1 0 0 0 0
SVB 1 :
SVB 2 :
VB x 1 x 2 x 3 x 4 x 5 x 6 x 7 b razões x 5 1 2 3 0 1 0 0 15 15/3 = 5 x 6 2 1 5 0 0 1 0 20 20/5 = 4 x 7 1 2 1 1 0 0 1 10 10/1 = 10 -FO -1 -2 -3 1 0 0 0 0 variável que entra: coluna do pivô
variável que sai: linha do pivô
pivô = 5
VB x 1 x 2 x 3 x 4 x 5 x 6 x 7 b razões x 5 -1/5 7/5 0 0 1 -3/5 0 3 3/(7/5) = 15/ x 3 2/5 1/5 1 0 0 1/5 0 4 4/(1/5) = 20 x 7 3/5 9/5 0 1 0 -1/5 1 6 6/(9/5) = 30/ -FO 1/5 -7/5 0 1 0 3/5 0 12