# Pesquisa operacional/Método Simplex

O Método Simplex é um algoritmo bastante popular para resolver problemas numéricos de Programação Linear. O jornal Computing in Science and Engineering o considerou um dos 10 mais importantes algoritmos descobertos no século.
Através dele, podemos obter a solução ótima de um problema de Programação Linear de forma eficiente.

## A Forma Padrão da Programação Linear

O primeiro passo para se resolver um problema de acordo com o algoritmo Simplex é escrevendo o problema na forma padrão:
Máx/Mín $Z=c_{1}x_{1}+c_{2}x_{2}+...+c_{n}x_{n}$ sujeito à:
$a_{11}x_{1}+a_{12}x_{2}+...+a_{1n}x_{n}=b_{1}$
$a_{21}x_{1}+a_{22}x_{2}+...+a_{2n}x_{n}=b_{2}$
$a_{m1}x_{1}+a_{m2}x_{2}+...+a_{mn}x_{n}=b_{m}$
$x_{1}\geq 0,x_{2}\geq 0,...,x_{n}\geq 0$
Perceba que a forma padrão que estamos mostrando agora é diferente dos modelos de programação linear vistos no capítulo anterior. Na forma padrão, temos um conjunto de equações, e não apenas uma. A única inequação permitida é aquela que atesta a não negatividade das variáveis de decisão (ou seja, podem ser positivas ou nulas).

## Transformando um Modelo de Programação Linear na Forma Padrão

Normalmente, os modelos que criamos não estão na forma padrão. Temos que fazer algumas manipulações algébricas para resolver este problema. Veja os exemplos abaixo:

### Exemplo 1: O Modelo tem Desigualdade do Tipo Menor ou Igual

Tome o seguinte modelo:
Máx $Z=x_{1}+x_{2}$
$x_{1}\leq 3$
$x_{1}\geq 0,x_{2}\geq 0$
Como deixar este modelo na forma padrão? É muito simples! Basta adicionar uma variável de folga chamada $x_{3}$ e transformar o modelo acima em:
Máx $Z=x_{1}+x_{2}$
$x_{1}+x_{3}=3$
$x_{1}\geq 0,x_{2}\geq 0,x_{3}\geq 0$

### Exemplo 2: O Modelo tem Desigualdade do Tipo Maior ou Igual

Vamos agora tomar um modelo semelhante ao anterior:
Máx $Z=x_{1}+x_{2}$
$x_{1}\geq 3$
$x_{1}\geq 0,x_{2}\geq 0$
Para deixar este exemplo na forma padrão, fazemos algo parecido com o que fizemos no Exemplo 1. Inserimos variáveis de excesso:
Máx $Z=x_{1}+x_{2}$
$x_{1}-x_{3}=3$
$x_{1}\geq 0,x_{2}\geq 0,x_{3}\geq 0$

### Exemplo 3: O Modelo possui Variáveis sem Restrição de Sinal

Mais um exemplo semelhante:
Máx $Z=x_{1}+x_{2}$
$x_{1}\leq 3$
$x_{2}\geq 0$
Perceba que desta vez, a variável $x_{1}$ não possui restrição de sinal. Ela pode ser tanto positiva como negativa. Para resolver isso, precisamos eliminar a variável incômoda. Podemos simplesmente substituí-la por uma operação de subtração entre duas variáveis não negativas:
Máx $Z=(x_{a}-x_{b})+x_{2}$
$(x_{a}-x_{b})\leq 3$
$x_{a}\geq 0,x_{b}\geq 0,x_{2}\geq 0$
Agora é só colocar uma variável de excesso da mesma forma que fizemos no Exemplo 2 e este modelo estará na forma padrão.

### Exemplo 4: Uma Equação ou Inequação possui o Lado Direito Negativo

Para que um modelo esteja na forma padrão, o valor à direita de uma equação ou inequação deve ser sempre não-negativo. Então, caso haja equações do tipo:
$x+y=-7$
$x+2y\leq -7$
A primeira coisa que devemos fazer é multiplicar os dois lados da equação e inequação por (-1):
$-x-y=7$
$-x-2y\geq 7$

### Exemplo 5: Um Modelo mais Complexo

Tome o seguinte modelo de Programação Linear:
MÁX $Z=5x_{1}+10x_{2}-x_{3}$ sujeito às restrições:
$x_{1}-3x_{2}-x_{3}\leq 1$
$x_{1}+x_{2}+x_{3}\geq -4$
$20x_{1}-12x_{2}+16x_{3}=-7$
$x_{1},x_{3}\geq 0$
A primeira coisa que deve-se notar é que a variável $x_{2}$ não possui nenhuma restrição de sinal. Ela pode ser tanto negativa como positiva ou nula. Teremos que nos livrar desta variável incômoda assim como no Exemplo 3:
MÁX $Z=5x_{1}+10(x_{a}-x_{b})-x_{3}$ sujeito às restrições:
$x_{1}-3(x_{a}-x_{b})-x_{3}\leq 1$
$x_{1}+(x_{a}-x_{b})+x_{3}\geq -4$
$20x_{1}-12(x_{a}-x_{b})+16x_{3}=-7$
$x_{1},x_{a},x_{b},x_{3}\geq 0$
Agora vamos inserir uma variável de folga chamada $x_{4}$ na primeira inequação e uma variável de excesso chamada $x_{5}$ na segunda inequação:
MÁX $Z=5x_{1}+10(x_{a}-x_{b})-x_{3}$ sujeito às restrições:
$x_{1}-3(x_{a}-x_{b})-x_{3}+x_{4}=1$
$x_{1}+x_{a}-x_{b}+x_{3}-x_{5}=-4$
$20x_{1}-12x_{a}+12x_{b}+16x_{3}=-7$
$x_{1},x_{a},x_{b},x_{3}\geq 0$
Agora o único inconveniente são a inequação 2 e a equação 3 que possuem o lado direito negativo. Vamos multiplicá-los por (-1);
MÁX $Z=5x_{1}+10(x_{a}-x_{b})-x_{3}$ sujeito às restrições:
$x_{1}-3(x_{a}-x_{b})-x_{3}+x_{4}=1$
$-x_{1}-x_{a}+x_{b}-x_{3}+x_{5}=4$
$-20x_{1}+12(x_{a}+x_{b})-16x_{3}=7$
$x_{1},x_{a},x_{b},x_{3}\geq 0$
Voilá! O modelo já está na forma padrão!

## Algumas Definições Úteis

Antes de prosseguirmos, é importante que você se acostume com algumas definições que serão usadas nos futuros exemplos e explicações:
* Função Objetivo: A função inicial que deve ser otimizada em um problema de Programação Linear.
* Região factível: Conjunto de todas as soluções possíveis para um problema de Programação Linear. Se for um conjunto vazio, o programa linear é dito impossível ou inviável.
* Solução Básica: Uma solução obtida quando assumimos que um número igual à diferença entre o número de variáveis e o número de equações corresponde à quantidade de variáveis iguais a 0.
* Solução Factível: É qualquer solução encontrada que satisfaça as equações e inequações do modelo padrão de um problema de Programação Linear.
* Solução ilimitada: Solução na qual a Solução Ótima tende à infinito.
* Solução Ótima: Solução para as equações que otimiza o valor da função objetivo.

## Referências

* ↑ Ver Guest Editors' Introduction: The Top 10 Algorithms Jack Dongarra and Francis Sullivan, Comput. Sci. Eng. 2, 22 (2000). Disponível no site do jornal