18.04.2013 Views

SIMPLEX ANÁLISE COMPLETA - Podre

SIMPLEX ANÁLISE COMPLETA - Podre

SIMPLEX ANÁLISE COMPLETA - Podre

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!