SIMPLEX ANÁLISE COMPLETA - Podre
SIMPLEX ANÁLISE COMPLETA - Podre
SIMPLEX ANÁLISE COMPLETA - Podre
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>SIMPLEX</strong><br />
<strong>ANÁLISE</strong> <strong>COMPLETA</strong><br />
ANDERSON BESTETTI 1 , EDUARDO RIGHES 1 , EVERTON FONTOURA 2 ,<br />
GUILHERME LAZZARI 3 , RODRIGO SCHRAMM 3 , ROGERIO MARTINS 4<br />
1 {anderson.bestetti,eduardo.righes}@terra.com.br<br />
2 everton@bage.unisinos.br<br />
3 {guila,schramm}@exatas.unisinos.br<br />
4 rsmm@netu.unisinos.br<br />
UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS<br />
CENTRO DE CIENCIAS E TECNOLOGICAS<br />
PROGRAMAÇÃO EM PESQUISA OPERACIONAL<br />
PROFESSOR: ARTHUR TORGO GOMEZ<br />
Resumo<br />
Neste artigo apresentamos o algoritmo Simplex para resolução de<br />
problemas de programação linear. Este algoritmo encontra a solução<br />
ótima e não possui a limitação de duas variáveis, que era o caso da<br />
resolução gráfica. Fazemos uma análise completa abordando problemas<br />
triviais com exemplos. Por fim segue uma análise de alguns casos<br />
especiais considerados pelos autores quanto ao Simplex.<br />
1. SOLUÇÃO EXATA PARA OS MODELOS DE<br />
PROGRAMAÇÃO LINEAR<br />
O modelo de programação linear (PL) reduz um sistema real a um conjunto<br />
de equações ou inequações onde pretendemos otimizar uma função objetivo. Este<br />
conjunto deverá ser, em principio, um conjunto indeterminado, de forma que o<br />
número das soluções ditas viáveis e infinito. Apesar de a solução ótima estar em um<br />
ponto extremo do conjunto de soluções viáveis, muitas vezes existem muitos<br />
extremos ou vértices, em numero exponencial.<br />
Como obter soluções viáveis básicas do sistema de equações<br />
Como evitar o teste de todas as soluções viáveis básicas possíveis para<br />
garantir a otimização do sistema<br />
Nesse contexto que o algoritmo simplex se encaixa. Uma das grandes<br />
contribuições à programação matemática, o simplex e um algoritmo geral<br />
extremamente eficiente para a solução de sistemas lineares e adaptáveis ao calculo<br />
computacional.<br />
O Simplex e um algoritmo que se utiliza um ferramental baseado na Álgebra<br />
Linear para determinar, por um método iterativo, a solução ótima de um problema<br />
de PL. O algoritmo parte de uma solução viável do sistema de equações que<br />
constituem as restrições do problema, solução essa normalmente extrema (vértice).
A partir dessa solução inicial vai identificando novas soluções viáveis de valor igual<br />
ou melhor que a corrente. Tem assim um critério de escolha, que permite encontrar<br />
sempre novos e melhores vértices da envoltória convexa do problema, e um outro<br />
critério que consegue determinar se o vértice escolhido e ou não um vértice ótimo.<br />
Teorema: O conjunto C das soluções de um problema de PL e um conjunto convexo.<br />
2. O ALGORITMO PRIMAL <strong>SIMPLEX</strong><br />
O algoritmo descreve uma seqüência de passos para a solução de sistemas<br />
de equações lineares sujeitos a uma função objetivo. Dispõe de três situações a<br />
principio:<br />
O método de inversão da matriz básica m x m deduzida a partir de A, uma<br />
matriz de restrições m x n.<br />
As regras de troca de variáveis dentro da matriz básica, para que exista<br />
garantia de uma continua melhoria da solução ao longo do<br />
desenvolvimento dos passos do algoritmo.<br />
As regras de parada do algoritmo e a interpretação dessa situação final.<br />
O método sugerido na literatura para a resolução do primeiro aspecto e usar<br />
operações elementares. Permite-se com o uso dessa técnica que o esforço de<br />
inversão já gasto anteriormente seja aproveitado a cada passo do algoritmo.<br />
O segundo critério aborda a escolha da variável com maior contribuição imediata,<br />
que varia conforme o caso (maximização ou minimização).<br />
O terceiro critério abrange o teste de parada que inclui a identificação das condições<br />
em que não existe mais a possibilidade de que uma troca de variáveis na base<br />
possa melhorar o critério de otimização.<br />
Para problemas simples de PL (duas variáveis) a resposta pode ser obtida<br />
através de resolução gráfica, onde teríamos no eixo no eixo das abscissas a<br />
variável x1 e no eixo das ordenadas x2, por exemplo. Traçam-se as restrições e a<br />
função objetivo e pode-se concluir a solução do problema.<br />
Infelizmente, os problemas de PL na maioria das vezes possuem mais do que duas<br />
variáveis. Uma forma de encontrar eficiente o ponto extremo em que a solução<br />
ótima da função objetivo ocorra tem sido motivo de grande esforço e pesquisa.<br />
Nesse sentido que a contribuição do simplex e tão importante.<br />
2.1 O QUADRO <strong>SIMPLEX</strong> (TABLEAU)<br />
O uso de um formato tabular para o desenvolvimento do algoritmo simplex<br />
facilita a execução de cálculos manuais.<br />
O algoritmo Simplex pode ser definido como formado por uma entidade<br />
geométrica convexa com n-dimensões (região viável) e um teste de otimalidade. De<br />
modo resumido pode-se ilustrar sua dinâmica através dos seguintes passos:<br />
1. Definir o Simplex, através de um conjunto de restrições ;<br />
2. Escolher um dos vértices do Simplex como ponto inicial (qualquer ponto é uma<br />
solução viável);<br />
3. Mover o ponto ao longo dos vértices adjacentes de modo a encontrar o melhor<br />
vértice vizinho ( uma solução melhor do que a atual);<br />
4. Critério de parada: quando não existir nenhum ponto vizinho que leve a uma
solução melhor do que a atual.<br />
Para aplicar o Simplex a um problema de P.L. é necessário que este esteja<br />
formulado em forma restrita e normal. Estar formulado na forma normal significa que<br />
todas as restrições técnicas são expressas na forma de igualdades: não existem<br />
operadores relacionais >= ou f 1 = 2<br />
f 2 = 8 + 3 x 1 - 4 x 2 se x 1 e x 2 = 0 => f 2 = 8<br />
x 1, x 2, f 1 e f 2 >= 0<br />
A seguir é descrito o formato de preenchimento do "tableau":<br />
Na primeira linha são representadas as variáveis de decisão do problema (x j ).<br />
No caso do exemplo x 1 e x 2 ;<br />
Na segunda linha são colocados o valor da função objetivo e dos pesos
correspondentes às variáveis de decisão ( c j );<br />
Nas demais linhas são representadas as restrições técnicas no formato<br />
sugerido anteriormente.<br />
z 0 2 -4<br />
f 1 2 -6 1<br />
f 2 8 3 -4<br />
É importante observar que o "tableau" representa uma solução básica viável<br />
onde as variáveis da base tem valor zero ( x 1 e x 2 ) e as variáveis não básicas ( f 1 e f 2<br />
) tem seus valores definidos na coluna à direita ( 2 e 8, respectivamente).<br />
2.1.1 Mudança de Base<br />
Como o objetivo é maximizar a função objetivo, deve-se escolher qual<br />
variável deve sair da base de modo a aumentar o valor da função. Em outras<br />
palavras, deve-se avaliar qual a contribuição de cada variável de decisão na função<br />
objetivo perseguindo-se o critério de otimalidade.<br />
2.1.2 Escolha da Variável que Saí da Base<br />
Analisando as variáveis de decisão, na função objetivo, observa-se que<br />
somente x 1 pode contribuir para a maximização, pois é a única que possui<br />
coeficiente positivo. Caso houvesse mais de uma variável positiva seria escolhida a<br />
de maior coeficiente. Caso todos os coeficientes fossem negativos, não seria<br />
possível melhorar o valor da função objetivo e o "tableau" estaria representando a<br />
solução ótima.<br />
2.1.3 Escolha da Variável que Entra na Base<br />
Para continuar a resolução pelo Simplex, deve-se analisar a coluna<br />
correspondente a variável que vai sair da base para avaliar, em relação as<br />
restrições, o quanto está variável pode ter seu valor aumentado, sem tornar<br />
nenhuma outra variável negativa. Em outras palavras, o quanto se pode aumentar o<br />
valor da variável, sem sair da região viável.<br />
Valores positivos, nessa coluna, não impõem restrições, devendo ser<br />
ignorados ( no exemplo o valor 3, da interseção de x 1 com f 2 ). Aumentar o valor de<br />
x 1, na segunda restrição, aumenta o valor de f 2 , não havendo limite de quanto x 1<br />
pode ser aumentado. Se todos os valores dos coeficientes fossem positivos, o<br />
problema não teria uma solução finita. No entanto, valores negativos impõem<br />
restrições. No exemplo, o valor -6 da interseção de x 1 com f 1 significa que x 1 pode<br />
crescer até o valor de 1/3 sem violar a primeira restrição. Neste caso, a contribuição<br />
de x 1 na função objetivo seria de 2/3 ( 2 x 1 = 2.1/3). Caso existir mais de um valor<br />
negativo, escolhe-se aquele que mais contribui para o aumento da função objetivo<br />
sem violar nenhuma das restrições do problema.<br />
O valor escolhido portanto é -6, sendo denominado de pivô. O passo<br />
seguinte é fazer a operação de pivotamento que consiste em tirar da base a variável<br />
escolhida ( x 1 ) e colocar em seu lugar a variável não básica pertencente a linha do<br />
x 1<br />
x 2
pivô ( f 1 ).<br />
z 0 2 -4<br />
f 1 2 -6 1<br />
f 2 8 3 -4<br />
Este procedimento consiste em aumentar o valor da variável que vai sair da<br />
base até que o valor do pivô fique igual a zero. Isto é feito reescrevendo-se todas as<br />
equações do "tableau" em relação as novas variáveis da base ( no exemplo f 1 e x 2 ).<br />
f 1 = 2 – 6x 1 + x 2 => x 1 = (1/3) + (1/6)x 2 – (1/6)f 1<br />
Observa-se que x 1 pode ter seu valor aumentado de zero até 1/3. O novo<br />
valor de x 1 deve ser substituido nas demais restrições e na função objetivo.<br />
Nas restricões: f 2 = 8 + 3 x 1 – 4 x 2<br />
= 8 + 3( (1/3) + (1/6)x 2 – (1/6)f 1 ) – 4 x 2<br />
= 9 - (7/2) x 2 - (1/2) f 1<br />
Na função objetivo: z = 2 x 1 – 4 x 2<br />
= 2((1/3) + (1/6)x 2 – (1/6)f 1 ) – 4 x 2<br />
= 2/3 – (11/3) x 2 – (1/3) f 1<br />
As equações acima formam o novo “tableau”:<br />
f 1<br />
2/3 -1/3 -11/3<br />
x 1 1/3 -1/6 1/6<br />
f 2 9 -1/2 -7/2<br />
Esta sequência de operações referenta a mudança de base é repetida até<br />
que a segunda linha do “tableau” contenha apenas valores negativos associados as<br />
variáveis da base. Isto significa que não é mais possível melhorar o valor da função<br />
objetivo. O “tableau” acima, portanto, representa o valor ótimo que corresponde a: x 1<br />
= 1/3 , x 2 = 0, f 1 = 0 , f 2 = 9 e z = 2/3.<br />
x 1<br />
x 2<br />
x 2
2.2 Solução geral<br />
2.2.1 Base viável inicial não está disponível<br />
Um problema de PL pode ter restrições com a desigualdade >= com o termo<br />
da direita positivo. Uma forma de resolver este problema é usar o método do M-<br />
Grande ou a função objetivo auxiliar.<br />
Maximizar Z = x + x + x 1 2 3<br />
Sujeito a 2 x + x - x 1 2 3 = 20<br />
2 x1 + x2 + 3 x3 = 60<br />
x1, x2 e x3 >= 0<br />
Acrescentado as variáveis de folga, obtem-se:<br />
2 x 1 + x 2 - x 3 + f 1 = 10<br />
x 1 + x 2 + 2 x 3 - f 2 = 20<br />
2 x 1 + x 2 + 3 x 3 = 60<br />
Não foi obtida uma solução básica inicial devido a Segunda e a terceira<br />
restrições, neste caso serão adicionadas variáveis auxiliares w 1 e w 2 para termos<br />
uma solução na forma restrita.<br />
2 x 1 + x 2 - x 3 + f 1 = 10<br />
x 1 + x 2 + 2 x 3 - f 2 + w 1 = 20<br />
2 x 1 + x 2 + 3 x 3 + w 2 = 60<br />
A solução básica obtida é f 1 = 10, w 1 = 20, w 2 = 60 e as demais variáveis<br />
tem valor zero. Para aplicar o método Simplex as variáveis auxiliares devem sser<br />
eliminadas e a solução básica deve ser mantida. Isto pode ser feito através dos<br />
métodos do M Grande ou da Função Objetivo Auxiliar.<br />
2.2.2 Método do M-Grande<br />
As variáveis auxiliares são incluídas na função objetivo com coeficientes negativos<br />
M 1 e M 2 . Durante o Simplex, a medida que a função objetivo é maximizada as<br />
variáveis de folga deixam a base, devido ao alto valor associado as variáveis<br />
auxiliares.
Maximizar Z = x 1 + x 2 + x 3 – M 1 w 1 – M 2 w 2<br />
Sujeito a 2 x 1 + x 2 - x 3 + f 1 = 10<br />
1. tableau<br />
x 1 + x 2 + 2 x 3 - f 2 + w 1<br />
2 x 1 + x 2 + 3 x 3 + w 2<br />
x 1, x 2, x 3, f 1 , f 2, w 1 e w 2 >= 0<br />
= 20<br />
= 60<br />
x 1 x 2 x 3 f 2 w 1 w 2<br />
z 0 1 1 1 0 -M 1 -M 2<br />
f 1 10 -2 -1 1 0 0 0<br />
w 1 20 -1 -1 -2 1 0 0<br />
w 2 60 -2 -1 -3 0 0 0<br />
x 1 = 0 , x 2 = 0 , x 3 = 0 , f 1 = 10 , f 2 = 0 , w 1 = 20 e w 2 = 60 e z = 0<br />
2. tableau<br />
x 1 x 2 f 2 w 1 w 2<br />
10 1/2 1/2 1/2 - M 1 - M 2<br />
f 1 20 -5/2 -3/2 1/2 -1/2 0<br />
x 3 10 -1/2 -1/2 1/2 -1/2 0<br />
w 2 30 -1/2 1/2 -3/2 3/2 0<br />
x 1 = 0 , x 2 = 0 , x 3 = 10 , f 1 = 20 , f 2 = 0 , w 1 = 0 e w 2 = 30 e z = 10<br />
3. tableau<br />
x 1 x 2 w 1 w 2<br />
z 20 1/3 2/3 -M 1 -M 2<br />
f 1 30 -8/3 -4/3 0 -1/3<br />
x 3 20 -2/3 -1/3 0 -1/3<br />
f 2 20 -1/3 1/3 1 -2/3<br />
x 1 = 0 , x 2 = 0 , x 3 = 20 , f 1 = 30 , f 2 = 20 , w 1 = 0 e w 2 = 0 e z = 20<br />
As variáveis auxiliares tem valor zero, portanto podem ser abandonadas.
4. tableau<br />
x 1<br />
35 -1 -1/2<br />
x 2 45/2 -2 -3/4<br />
x 3 25/2 0 1/4<br />
f 2 55/2 -1 -1/4<br />
x 1 = 0 , x 2 = 45/2 , x 3 = 25/2 , f 1 = 0 , f 2 = 55/2 e z = 35<br />
Pode ocorrer uma situação, em um problema de maximização, em que todos<br />
os coeficientes associados às variáveis da função objetivos são negativos e<br />
existe(m) variável(is) auxiliares pertencentes a solução básica.<br />
x 1 x 2 w 2<br />
z 100 -4 -5 -6<br />
x 3 20 -1 -2 -12<br />
f 1 10 0 -1 1<br />
w 1 30 -1 -5 -4<br />
x 1 w 1 w 2<br />
z 70 - 19/6 4 1<br />
x 3 6 -2/3 2/5 -52/5<br />
f 1 10 0 -1 1<br />
x 2 6 -1/6 -1/5 -4/5<br />
Se não for possível retirar a variável auxiliar da base, o problema não tem<br />
solução.<br />
2.2.1 Método da Função Objetivo Auxiliar<br />
Como no método anterior são acrescentadas variáveis de folga e auxiliares<br />
para a obtenção de uma solução básica inicial. É construída, então, uma função<br />
objetivo auxiliar W, formada pelas variáveis auxiliares que comporá o novo objetivo<br />
a ser otimizado. Quando as variáveis auxiliares forem não básicas, o valor da<br />
função objetivo auxiliar é zero e poder-se-á voltar ao cálculo da função objetivo<br />
original.<br />
f 1
Maximizar Z = x1 + x2 + x3 Sujeito a 2 x + x - x 1 2 3 = 20<br />
2 x + x + 3 x 1 2 3 = 60<br />
x x e x 1, 2 3<br />
>= 0<br />
Acrescentado as variáveis de folga e auxiliares, obtem-se:<br />
2 x 1 + x 2 - x 3 + f 1 = 10<br />
x 1 + x 2 + 2 x 3 - f 2 + w 1 = 20<br />
2 x 1 + x 2 + 3 x 3 + w 2 = 60<br />
Colocando-se em evidência as variáveis auxiliares nas restrições obtem-se:<br />
1. tableau<br />
2. tableau<br />
w 1 = 20 - x 1 - x 2 - 2 x 3 + f 2<br />
w 2 = 60 - 2 x 1 - x 2 - 3 x 3<br />
W = - w 1 - w 2 = - 80 + 3x 1 + 2x 2 + 5 x 3 - f 2<br />
x 1 x 2 x 3 f 2<br />
- W -80 3 2 5 -1<br />
f 1 10 -2 1 1 0<br />
w 1 20 1 1 -2 -1<br />
w 2 60 -2 -1 -3 0<br />
z 0 1 1 1 0<br />
x 1 x 2 w 1 f 2<br />
- W -30 1/2 -1/2 -5/2 3/2<br />
f 1 20 -5/2 -3/2 -1/2 1/2<br />
x 3 10 -1/2 -1/2 -1/2 1/2<br />
w 2 30 -1/2 1/2 3/2 -3/2<br />
z 10 1/2 1/2 -1/2 1/2
3. tableau<br />
- W 0 -1 0 -1 0<br />
30 -8/3 -4/3 0 -1/3<br />
20 -2/3 -1/3 0 -1/3<br />
20 -1/3 1/3 1 -2/3<br />
z 20 1/3 2/3 0 -1/3<br />
Dado que as variáveis auxiliares são nulas podemos abandoná-las e continuar a<br />
resolução do problema com a função objetivo inicial.<br />
4. tableau<br />
z 20 1/3 2/3<br />
f 1 30 -8/3 -4/3<br />
x 3 20 -2/3 -1/3<br />
f 2 20 -1/3 1/3<br />
x 1 = 0 , x 2 = 0 , x 3 = 20 , f 1 = 30 , f 2 = 20 , w 1 = 0 e w 2 = 0 e z = 20<br />
5. tableau<br />
z 35 -1 -1/2<br />
x 2 45/2 -2 -3/4<br />
x 3 25/2 0 1/4<br />
f 2 55/2 -1 -1/4<br />
x 1 = 0 , x 2 = 45/2 , x 3 = 25/2 , f 1 = 0 , f 2 = 55/2 e z = 35<br />
2.3 CASOS ESPECIAIS<br />
2.3.1 Degeneração e Ciclagem<br />
Ciclagem é a condição que ocorre quando o método simplex fica "confuso"<br />
se encontra repetindo sempre nos mesmos vértices. Enquanto este comportamento<br />
específico é muito raro na prática, ele é muito comum para o algorítmo atingir um<br />
x 1<br />
x 1<br />
x 2<br />
f 1
ponto onde ele temporariamente pára na busca da melhoria da função objetivo. Isto<br />
é chamado degeneração e é causado por uma ou mais variáveis básicas pegando o<br />
limite mais baixo ou mais alto. Em muitos casos, o algoritmo vai funcionar mesmo<br />
tendo vários vértices coincidindo. Entretanto, em casos extremos de degeneração,<br />
ela pode ser tão intensa que pode ser considerada cíclica. Isto, portanto, caracteriza<br />
a ciclagem.<br />
Como evitar a ciclagem/degeneração no Simplex?<br />
Uma alternativa para resolver este problema, é ficar alternando a busca do ponto<br />
ótimo alternando o algoritmo primal e dual do simplex. Isto pode mover a solução do<br />
ponto onde está ocorrendo a degeneração.<br />
Múltiplas soluções ótimas<br />
Resumidamente, a função objetio pode estar paralela a uma das restricões.<br />
Neste caso, as soluções ótimas estarão contidas em um segmento de reta desta<br />
restrição paralela. Qualquer ponto nesta reta será a solução ótima.<br />
REFERÊNCIAS BIBLIOGRÁFICAS<br />
GOLDGARG, M. C. Otimização Combinatória e Programação Linear. 4. ed. Rio de<br />
Janeiro: Campus, 2000. 649 p.<br />
HILLIER, F. S. ; LIEBERMAN, G. J. Introduction to operations research. 6. ed. New<br />
York: McGraw-Hill, 1997. 998 p.<br />
WINSTON, W. L. Operations research, applications and algorithms. 3. ed. Duxbury:<br />
Duxbury Press, 1997. 1372 p.