Anda di halaman 1dari 11

Pesquisa operacional

Métodos Simplex

Solução através do método Simplex do Problema seguinte:

Maximizar Z = f(x,y) = 3x + 2y
sujeita às restrições: 2x + y ≤ 18
2x + 3y ≤ 42
3x + y ≤ 24
x≥0,y≥0

Consideram-se as seguintes fases:

1. Realizar uma mudança de variáveis e normalizar o sinal dos termos


independentes.

Realiza-se uma mudança na nomenclatura das variáveis. Estabelecendo a


seguinte correspondência:

 x passa a ser X1

 y passa a ser X2

Como os termos independentes de todas as restrições são positivos


não é necessário fazer nada. Caso contrário, se deverá multiplicar por "-1"
ambos os lados da inequação (considerando que esta operação também
afeta o tipo de restrição).

Normalizar as restrições.

As inequações são transformadas em equação adicionando variáveis de


folga, de excesso e artificiais, conforme a tabela a seguir:

Tipo de
Tipo de variável que aparece
desigualdade
≥ - excesso + artificial
= + artificial
≤ + folga

Neste caso, deve-se introduzir uma variável de folga (X3, X4 e X5) em


cada uma das restrições do tipo ≤, para convertê-las em igualdades,
resultando o sistema de equações lineares:

2·X1 + X2 + X3 = 18
2·X1 + 3·X2 + X4 = 42
3·X1 + X2 + X5 = 24

Igualar a função objetivo à zero.

Z - 3·X1 - 2·X2 - 0·X3 - 0·X4 - 0·X5 = 0

Escrever a tabela inicial do método Simplex.

A tabela inicial do método Simplex é composta por todos os coeficientes


das variáveis de decisão do problema original e as de folga, excesso e
artificiais adicionadas no passo 2 (nas colunas, sendo P0 o termo
independente e o resto das variáveis Pi coincidem com Xi), e as restrições
(das linhas). A coluna Cb contém os coeficientes das variáveis que estão na
base.

A primeira linha é formada pelos coeficientes da função objetivo,


enquanto que a última linha contém o valor da função objetivo e os custos
reduzidos Zj - Cj.

A última linha é calculada da seguinte forma: Zj = Σ(Cbi·Pj) para i =


1..m, onde se j = 0, P0 = bi e C0 = 0, e caso contrário Pj = aij. Embora seja a
primeira tabela do método Simplex e que todos os Cb sejam nulos, pode-se
simplificar o cálculo, e assim termos Zj = -Cj.

Tabela I . Iteração 1
3 2 0 0 0
Base Cb P0 P1 P2 P3 P4 P5
P3 0 18 2 1 1 0 0
P4 0 42 2 3 0 1 0
P5 0 24 3 1 0 0 1
Z 0 -3 -2 0 0 0

Critério de parada.

Se o objetivo é maximizar, quando na última linha (linha indicadora) não


exista nenhum valor negativo entre os custos reduzidos (colunas P1 em
diante) a condição de parada é alcançada.

Neste caso, o algoritmo chega ao final, porque já não existe


possibilidade de melhoria. O valor de Z (coluna P0) é a solução ótima do
problema.

Outra possibilidade é que na coluna da variável de entrada à base,


todos os valores são negativos ou nulos. Isto indica que o problema não se
encontra delimitado e sua solução sempre poderá ser melhorada. Neste
caso, não será necessário continuar realizando iterações indefinidas e
pode-se finalizar o algoritmo.

Caso contrário, as seguintes etapas são executadas de forma iterativa.


Escolha da variável de entrada e saída da base.

Em primeiro lugar, determina-se a variável que entra na base. Para isto é


escolhida a coluna em que o valor da linha Z seja o menor entre todos os
negativos. Neste caso seria a variável X1 (P1) de coeficiente -3.

Se houver dois ou mais coeficientes iguais que satisfazem a condição


anterior (caso de empate), então se optará pela variável que seja básica.

A coluna da variável que entra na base chama-se coluna pivô (na


cor verde).

Depois de obter-se a variável que entra na base, determina-se qual


será a variável que sairá da mesma. A decisão é baseada em um cálculo
simples: dividir cada termo independente (coluna P0) entre o elemento
correspondente da coluna pivô, desde que ambos elementos sejam
estritamente positivos (maior que zero). É escolhida a linha cujo resultado é
mínimo.

Se houver algum elemento menor ou igual a zero não se realiza tal


cálculo. Caso todos os elementos da coluna pivô tenham esta condição, o
critério de parada seria satisfeito e o problema teria uma solução não
delimitada (ver teoria do método Simplex).

Neste exemplo: 18/2 [=9] , 42/2 [=21] y 24/3 [=8]

O termo da coluna pivô que na divisão anterior deu lugar ao menor


quociente positivo, indica a linha de variável de folga que sai da base.
Neste caso, resulta ser X5 (P5), de coeficiente 3. Esta linha chama-se linha
pivô (na cor verde).

Se ao realizar o cálculo dos quocientes, dois ou mais resultados


satisfaçam o critério para a escolha do elemento de saída da base (caso de
empate), é escolhida a variável não-básica (sempre que possível).

A intersecção da linha pivô e coluna pivô marca o elemento pivô, neste


caso o 3.

Atualizar a tabela.

Os novo valores da tabela devem ser calculados como é explicado a seguir:

 Na linha do elemento pivô cada novo elemento é calculado como:

Novo Elemento Linha Pivô = Elemento Anterior Linha Pivô / Pivô

 Nas demais linhas, cada elemento é calculado como:

Novo Elemento Linha = Elemento Anterior Linha - (Elemento Anterior


Linha na Coluna Pivô * Novo Elemento Linha Pivô)

Com isto se normaliza o elemento pivô e seu valor torna-se 1,


enquanto que os demais elementos da coluna pivô são anulados (análogo
ao método de Gauss-Jordan).
A seguir, mostra-se os cálculos da linha P4:

Anterior Linha P4 42 2 3 0 1 0
- - - - - -
Elemento Anterior Linha na Coluna Pivô 2 2 2 2 2 2
x x x x x x
Nova Linha Pivô 8 1 1/3 0 0 1/3
= = = = = =
Nova Linha P4 26 0 7/3 0 1 -2/3

A tabela correspondente a esta segunda iteração é:

Tabela II . Iteração 2
3 2 0 0 0
Base Cb P0 P1 P2 P3 P4 P5
P3 0 2 0 1/3 1 0 -2/3
P4 0 26 0 7/3 0 1 -2/3
P1 3 8 1 1/3 0 0 1/3
Z 24 0 -1 0 0 1

Ao verificar o critério de parada observado não é cumprido, já que entre os


elementos da última linha há o valor de um negativo, -1. Neste caso, novamente
realiza-se a iteração nos passos 6 e 7.

 6.1. A variável que entra na base é X2 (P2), pois é a variável que


corresponde à coluna em que se encontra o coeficiente -1.

 6.2. Para calcular a variável de saída, dividem-se os termos da


coluna P0 entre os termos correspondentes da nova coluna pivô: 2 /
1/3 [=6] , 26 / 7/3 [=78/7] e 8 / 1/3 [=24]. Como o menor quociente
positivo é 6, a variável que sai da base é X3 (P3).

 6.3. O elemento pivô é 1/3.

 7. Atualizando novamente os valores da tabela se obtém:

Tabela III . Iteração 3


3 2 0 0 0
Base Cb P0 P1 P2 P3 P4 P5
P2 2 6 0 1 3 0 -2
P4 0 12 0 0 -7 1 4
P1 3 6 1 0 -1 0 1
Z 30 0 0 3 0 -1
Uma nova verificação do critério de parada revela que entre os elementos da linha
indicadora, novamente temos um negativo, -1. Significa que ainda não se chegou à
solução ótima e é preciso continuar iterando (passos 6 e 7):

 6.1. A variável que entra na base é X5 (P5), pois é a variável que


corresponde ao coeficiente -1.

 6.2. A variável de saída é escolhida realizando o cálculo do


quociente dos termos da coluna de termos independentes e os
termos correspondentes da nova coluna pivô: 6/(-2) [=-3] , 12/4 [=3],
e 6/1 [=6]. Nesta ocasião é X4 (P4).

 6.3. O elemento pivô é 4.

 7. Depois de atualizar todas as linhas, tem-se a seguinte tabela:

Tabela IV . Iteração 4
3 2 0 0 0
Base Cb P0 P1 P2 P3 P4 P5
P2 2 12 0 1 -1/2 1/2 0
P5 0 3 0 0 -7/4 1/4 1
P1 3 3 1 0 3/4 -1/4 0
Z 33 0 0 5/4 1/4 0

Fim do algoritmo.

Observa-se que na última linha, todos os coeficientes são positivos,


satisfazendo assim o critério de parada.

A solução ótima é dada pelo valor de Z na coluna dos termos


independentes (P0), neste exemplo: 33. Na mesma coluna, pode-se ver o
ponto em que é atingido, observando as linhas correspondentes das
variáveis de decisão que entraram na base: X1 = 3 e X2 = 12.

Desfazendo a mudança de variáveis é obtido x = 3 e y = 12.

Aplicações da programação linear:

O problema geral de programação linear é utilizado para otimizar (maximizar ou


minimizar) uma função linear de variáveis, chamada de função objetivo, sujeita a uma série
de equações (ou inequações) lineares, chamadas restrições.
A formulação do problema a ser resolvido segue três pontos básicos:

 Definição do objetivo do problema


 Definição das variáveis de decisão envolvidas
 Conhecimento das restrições a que está sujeito o problema
O problema geral de programação linear é utilizado para otimizar (maximizar ou
minimizar) uma função linear de variáveis, chamada de função objetivo, sujeita a uma série
de equações (ou inequações) lineares, chamadas restrições.
A formulação do problema a ser resolvido segue três pontos básicos:

 Definição do objetivo do problema


 Definição das variáveis de decisão envolvidas
 Conhecimento das restrições a que está sujeito o problema

O que é Programação Linear?


Suponha que uma empresa produza quatro modelos diferentes de brinquedos. Cada um
deles gera uma quantidade de lucro diferente ao ser vendida. O brinquedo 1 gera $10 de
lucro, o 2 gera $8, o 3 gera $9 e o 4 gera $7. A função que determina o lucro da empresa
é:

Assumindo que as variáveis são a quantidade de cada brinquedo que é vendida.


Esta é uma função linear, pois cada um dos termos da equação que a forma é uma
constante ou um produto entre uma constante e um valor variável. Suponha agora que nós
estamos interessados em descobrir qual é o maior lucro possível para esta empresa
assumindo que o número máximo de vendas do brinquedo 1 é 100, do brinquedo 2 é 60,
do brinquedo 3 é 40 e do brinquedo 4 é 70. Podemos então expressar este problema da
seguinte forma:

O que temos acima é um modelo de Programação Linear. Ele é formado sempre por uma
função linear (que é a função objetivo) e por um conjunto de ineqüações lineares
(restrições do problema). No exemplo acima, desejamos obter o maior lucro possível
(maior valor de Z). O objetivo da programação linear é justamente fornecer ferramentas
para resolver o desafio de encontrar o maior ou o menor valor possível em uma função
linear cujas variáveis possuem restrições.
Assim, o problema geral de programação linear pode ser definido por:
Maximizar (ou minimizar) a função objetivo:
sujeita às restrições:

considerando que todas as variáveis de decisão assumem valores positivos:

Solução Gráfica[editar | editar código-fonte]


Um problema que contenha duas variáveis pode ser resolvido graficamente.

Traça-se um gráfico com os seus eixos sendo as variáveis e .


A partir deste gráfico traçam-se as restrições do problema e delimita-se a região viável.
Após isso, traça-se uma reta com a inclinação da função objetivo, buscando retas
paralelas a ela que forneçam a solução para o problema.

A História da Programação Linear


O desenvolvimento de técnicas algébricas para se lidar com inequações lineares é algo
bastante antigo. Durante o século XVIII, o matemático e físico Jean-Baptiste Joseph
Fourier desenvolveu vários métodos inovadores para se resolver sistemas de ineqüações.
Um dos principais algoritmos desenvolvido por Fourier foi o Método de Eliminação de
Fourier–Motzkin.
Durante a Segunda Guerra Mundial, novas tecnologias bélicas levaram à criação de
grupos acadêmicos com o objetivo de resolver problemas como o uso eficiente de radares,
canhões antiaéreos, escoltas navais, etc. O objetivo era sempre reduzir custos militares e
buscar maximizar as baixas inimigas. Para resolver estes problemas, a Programação
Linear mostrou-se extremamente útil. Os grupos acadêmicos que a utilizavam eram
sempre mantidos secretos até o ano de 1947, após o término da guerra. Foi quando a
Programação Linear passou a ser muito usada em empresas com o objetivo de reduzir
despesas e maximizar lucros.
Também no ano de 1947, o matemático George Dantzig desenvolveu o Algoritmo
Simplex, a maneira mais eficiente conhecida de se resolver modelos de Programação
Linear. No mesmo ano, John von Neumann desenvolveu a teoria da dualidade e Leonid
Kantorovich foi a primeira pessoa a aplicar a Programação Linear à Economia.
Em 1979, Leonid Khachiyan desenvolveu um novo algoritmo para resolver modelos de
programação linear: o Algoritmo Elipsóide. O seu algoritmo foi o primeiro criado que era
capaz de resolver problemas em tempo polinomial. Apesar disso, era mais lento que o já
conhecido Algoritmo Simplex, tanto na teoria como na prática.
Em 1984, surge mais um método de se resolver problemas de pesquisa operacional: o
Algoritmo do Ponto Interior, criado por Narendra Karmarkar. Assim como o Algoritmo
Elipsóide, ele era polinomial. A diferença é que ele era bem mais rápido e conseguia
competir com o Algoritmo Simplex.

A Criação de Modelos
O conceito de modelos é de importância fundamental ao estudarmos pesquisa
operacional. Um modelo é uma representação simplificada da realidade. Para criarmos um
modelo de programação linear, precisamos identificar em um problema qual é a função
objetivo, as restrições e o tipo de otimização que desejamos (queremos achar o máximo
ou o mínimo da função-objetivo?). Veja o exemplo abaixo:
Uma empresa fabrica mesas e cadeiras. O quadro abaixo mostra os recursos consumidos
por unidade de cada produto e os seus lucros.Quantas mesas e cadeiras podem ser
fabricados para se maximizar o lucro?

A nossa função objetivo é o total de lucro da venda de mesas (M) e cadeiras (C).
Queremos descobrir qual o valor máximo possível de lucro que podemos obter. Logo,
nossa função objetivo é:

Agora precisamos analisar as restrições. Temos uma quantidade máxima de madeira


disponível (310) e cada mesa e cada cadeira gastam uma certa quantidade deste material
(30 e 20). Logo, temos uma restrição:

Da mesma forma, existe uma quantidade limitada de metais, o que nos dá a segunda
restrição:

Além disso, sabemos que não podemos fabricar uma quantidade negativa de cadeiras ou
mesas:

Pronto! Terminamos de construir este modelo.


Solução Gráfica
Muito bem! Já sabemos como criar os modelos de Programação Linear. Mas... Como
podemos resolvê-los? Como usar todos aqueles algoritmos comentados na seção sobre a
história da Programação Linear? Bem, vamos com calma. Vamos ver primeiro uma das
formas mais simples de se resolver este problema (embora não seja computacionalmente
eficiente). Vamos fazer um gráfico analisando o Domínio da função-objetivo mostrada no
exempo acima:

As linhas mais finas representam o eixo X e Y, os quais representam respectivamente o


número de mesas (M) e cadeiras (C). Todos os pontos dentro ou abaixo àquela reta
grossa mais inclinada representam pontos que satisfazem a Restrição 2. Todos os pontos
dentro ou abaixo àquela reta grossa menos inclinada satisfazem a Restrição 1. Pontos à
direita da reta Y e acima do eixo X satisfazem a exigência de que não podemos fabricar
um número negativo de objetos. Quanto mais restrições um ponto no gráfico acima
satisfaz, mais escuro ele aparece. A única região onde todas as restrições são satisfeitas é
aquele triângulo escuro localizado próximo ao centro do gráfico. Os vértices do triângulo
são os pontos (0,0), (0,10) e (5,0).
No ponto (0,0), o nosso lucro é nulo, pois não fabricamos nenhum produto. No ponto
(0,10), nosso lucro é $80. No ponto (5,0), nosso lucro é $30. No exemplo dado acima, a
forma de obter o maior lucro possível é abandonar completamente a fabricação de mesas
e se dedicar apenas às cadeiras. E devemos produzir exatamente 10 cadeiras para termos
o maior lucro possível.
Perceba que no exemplo acima, o Domínio da função-objetivo era uma região triangular.
Como estamos sempre lidando com eqüações e ineqüações lineares, o domínio sempre
será um polígono. Nunca conseguiremos obter curvas no gráfico do Domínio da função-
objetivo. Outra coisa interessante é que o ponto ótimo que estávamos buscando coincidiu
com um dos vértices do polígono. No caso de modelos de programação linear, isso
sempre será verdade.
Sabendo disso, você já cohece a forma mais rudimentar de encontrarmos a solução de um
modelo de programação Linear. Basta fazermos o gráfico do Domínio da função-objetivo e
checarmos os valores da função em todos os seus vértices. Entretanto, essa não é a
melhor forma de resolver este tipo de problema. No exemplo acima, haviam apenas duas
variáveis (M e C). Mas e se houvessem mais? Como esboçar o gráfico do Domínio? E se o
nosso Domínio fôsse representado por um polígono com 300 vértices? Seria trabalhoso
demais calcular o valor da função em 300 pontos diferentes!
Bem, veremos métodos melhores de se resolver este tipo de problemas nos próximos
capítulos.
Exercícios
1. Um vendedor ambulante sabe preparar pastéis e cachorros-quentes. Um cachorro-
quente custa o dobro do preço de um pastel. Ele nunca consegue vender mais do que três
pastéis e mais do que quatro cachorros-quentes em um mesmo dia. Um pastel vem com
uma pitada de mostarda e um cachorro-quente com duas pitadas. Ele só tem disponível
nove pitadas de mostarda para gastar em um único dia. Quantos pastéis e cachorros-
quentes ele deve produzir em um único dia para ter o máximo possível de lucro? Resolva
construindo um modelo de programação linear.
1. A função-objetivo é:

Máx (P=Pastel, C=Cachorro-Quente, Z=lucro)


As restrições são:

O gráfico do Domínio é:

O polígono mais escuro que representa os pontos que atendem à todas as restrições
possui como vértices os pontos (0,0), (3,0), (3,3), (1,4) e (0,4). O lucro em (0,0) é $0, em
(3,0) é $3, em (3,3) é $9, em (1,4) é $9 e em (0,4) é $8. Neste exemplo, não existe apenas
um único ponto que representa o máximo da função - existem infinitos pontos. Todos
aqueles que pertencem ao Domínio e estão na reta que liga (3,3) e (1,4) são o máximo da
função e representam a quantidade ideal de produção de pastéis e cachorros-quentes
para o vendedor ambulante. Como o vendedor ambulante não pode fazer um número
fracionário de pastéis e cachorros, quentes, a resposta é: 3 pastéis e 3 cachorros-quentes
ou então 1 pastel e 4 cachorros-quente.
2. Estamos durante a Segunda Guerra Mundial. Temos à nossa disposição tanques e
bombardeiros para atacar nossos inimigos. Sabemos que um tanque causa em média 20
baixas inimigas e um bombardeiro causa 50 baixas. Temos apenas 4 tanques à nossa
disposição. Um bombardeiro requer 1 soldado para pilotá-lo e um tanque requer 2 (e não
cabem soldados adicionais no veículo). Temos a obrigação de enviar no mínimo 9
soldados para o ataque para colaborar com as tropas aliadas que também atacarão. Com
quantos tanques e bombardeiros devemos atacar para causar o maior número de baixas?

<<< reveja essa restrição, não pode ser >= 9... tem que ser <= 9 ... a
solução do problema ficou errada, não tem como usar 4 tanques e 5 bombardeiros, sendo
que só no tanque gastaria 8 soldados, e mais 5 no bombardeiro.. temos um limite de 9

Perceba que não é possível resolver este modelo. Não existe nenhuma informação que
limite superiormente o número de bombardeiros que temos disponíveis. Logo, podemos
simplesmente dizer que o melhor é atacar com infinitos bombardeiros. Isso é um absurdo.
É uma solução inconcebível. Modelos com solução infinita costumam ocorrer quando
algum tipo de restrição é omitida do modelo.

Anda mungkin juga menyukai