Você está na página 1de 80

UNIVERSIDADE FEDERAL DA PARAÍBA

CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA DE PRODUÇÃO

Pesquisa Operacional I
Prof.: Hugo Kramer
 Método gráfico:
Utilizado apenas para problemas com duas variáveis para
fins didáticos.
Não aplicável na prática onde os problemas podem conter
um número muito grande de variáveis e restrições.

 Enumeração de pontos extremos:


O número de soluções básicas viáveis pode ser muito
grande, tornando a enumeração e avaliação de todas
impraticável.
É preciso resolver um sistema linear para encontrar cada
solução básica
 O simplex se baseia na ideia de melhorias sucessivas.

 Ao se encontrar uma solução viável, deve-se buscar uma


outra solução que tenha valor de função objetivo mais
favorável.

 O número de soluções viáveis de um PPL é infinito.

 Porém, deseja-se que o número de iterações seja finito


até que a solução ótima seja encontrada.
 Uma solução básica viável é um ponto extremo ou
vértice do poliedro definido pelas restrições do
problema. Logo, o número de soluções básicas viáveis é
finito e o número de iterações será finito.

 Então, o método consiste em passar de uma solução


básica viável (ponto extremo) para outra até encontrar
uma solução básica viável ótima.

 A solução ótima é encontrada quando a troca de uma


solução básica para outra implicar em uma piora no
valor da função objetivo.
 Enumeração de pontos extremos:
O número de soluções básicas viáveis pode ser muito
grande, tornando a enumeração e avaliação de todas
impraticável.
É preciso resolver um sistema linear completo para
encontrar cada solução básica

 Método Simplex
Na prática, um número relativamente pequeno de
soluções básicas viáveis é avaliado.
Ao passar de uma solução básica viável para outra, não é
necessária a resolução de um sistema linear completo.
 Um dicionário é uma forma de reescrever um PPL onde:
 as variáveis não-básicas e os termos constantes
estão do lado direito;
 as variáveis básicas estão isoladas do lado esquerdo.

 Dado que as variáveis não-básicas têm valor zero em


uma solução básica, os dicionários são convenientes
para se encontrar uma solução básica sem resolver um
sistema.
 Para sair de uma solução básica viável para outra:
 Escolha a variável não básica com maior coeficiente

positivo na linha da função objetivo do dicionário


atual para entrar na base;
 Escolha a variável básica que mais restringe o

crescimento da variável escolhida para entrar na base


como a variável que sairá da base.
 Considere o seguinte PPL:
 O PPL tem a seguinte região de soluções viáveis:
 Adicionam-se variáveis de folga para obter a forma
padrão:
 Inicialização:
Deve ser montado um dicionário inicial.
As variáveis de folga formam uma base que é uma matriz
identidade.
 Inicialização:
Deve ser montado um dicionário inicial.
As variáveis de folga formam uma base que é uma matriz
identidade.
 Inicialização:
Deve ser montado um dicionário inicial.
As variáveis de folga formam uma base que é uma matriz
identidade.

Assim, a base será formada pelas variáveis de folga.


 Inicialização:
Na notação matricial:
𝑥3 1 0 0
𝑥𝐵 = 𝑥4 𝐵= 0 1 0
𝑥5 0 0 1
 Inicialização:
As partições na notação matricial são:
𝑥3 1 0 0
𝑥𝐵 = 𝑥4 𝐵= 0 1 0
𝑥5 0 0 1

𝑥1 1 0
𝑥𝑁 = 𝑥 𝑁= 0 2
2
2 3
 Inicialização:
Na notação matricial, as restrições são da forma:

𝐴𝑥 = 𝑏

Usando as partições de 𝐴 e 𝑥, teremos:

𝐵𝑥𝐵 + 𝑁𝑥𝑁 = 𝑏

𝐵𝑥𝐵 = 𝑏 − 𝑁𝑥𝑁

𝑥𝐵 = 𝐵−1 𝑏 − 𝐵−1 𝑁𝑥𝑁 3


 Inicialização:
Ao desenvolver 𝑥𝐵 = 𝐵−1 𝑏 − 𝐵−1 𝑁𝑥𝑁 no exemplo,
encontraremos:
 Inicialização:
Relembrando – parte 1:

Um dicionário é uma forma de reescrever um PPL


onde:
 as variáveis não-básicas e os termos constantes
estão do lado direito;
 as variáveis básicas estão isoladas do lado

esquerdo.
 Inicialização:
Com isso, o dicionário inicial é escrito da seguinte forma:
 Inicialização:
Com isso, o dicionário inicial é escrito da seguinte forma:

𝑥3 , 𝑥4 𝑒 𝑥5 são as variáveis básicas e


ficam isoladas no lado esquerdo.
 Inicialização:
Com isso, o dicionário inicial é escrito da seguinte forma:

𝑥1 𝑒 𝑥2 são as variáveis não-básicas


e ficam isoladas no lado direito.
 Inicialização:
Com isso, o dicionário inicial é escrito da seguinte forma:
 Encontrar a solução básica do dicionário atual:
 Encontrar a solução básica do dicionário atual:
Relembrando – parte 2:

Dado que as variáveis não-básicas têm valor zero em


uma solução básica, os dicionários são convenientes
para se encontrar uma solução básica sem resolver um
sistema.
 Encontrar a solução básica do dicionário atual:

Basta fazer as variáveis não-básicas (𝑥1 e 𝑥2 )


assumirem valor igual a zero.
 Encontrar a solução básica do dicionário atual:

Basta fazer as
variáveis não-
básicas (𝑥1 e 𝑥2 )
assumirem valor
igual a zero.

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 0 𝑧=0
𝑥2 = 0
𝑥3 = 4
𝑥4 = 12
𝑥5 = 18
 Encontrar a solução básica do dicionário atual:

Basta fazer as
variáveis não-
básicas (𝑥1 e 𝑥2 )
assumirem valor
igual a zero.

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 0 𝑧=0
𝑥2 = 0
𝑥3 = 4
𝑥4 = 12
𝑥5 = 18 4
 Encontrar uma solução básica melhor:
Relembrando – parte 3:

O simplex se baseia na ideia de melhorias


sucessivas.

Ao se encontrar uma solução viável, deve-se buscar


uma outra solução que tenha valor de função objetivo
mais favorável.
 Encontrar uma solução básica melhor:
Primeiramente, é possível que exista uma solução melhor
que a atual?
 Encontrar uma solução básica melhor:
Primeiramente, é possível que exista uma solução melhor
que a atual?

A resposta está “escondida” na linha da função objetivo do


dicionário atual:
 Encontrar uma solução básica melhor:
Primeiramente, é possível que exista uma solução melhor
que a atual?

A resposta está “escondida” na linha da função objetivo do


dicionário atual:
 Encontrar uma solução básica melhor:
Primeiramente, é possível que exista uma solução melhor
que a atual?

A resposta está “escondida” na linha da função objetivo do


dicionário atual:
Olhando para a linha da
FO, observa-se que:
A cada incremento de 1
unidade no valor de 𝑥1 , a
função objetivo terá um
incremento de 3 unidades
 Encontrar uma solução básica melhor:
Primeiramente, é possível que exista uma solução melhor
que a atual?

A resposta está “escondida” na linha da função objetivo do


dicionário atual:
Olhando para a linha da
FO, observa-se que:
A cada incremento de 1
unidade no valor de 𝑥2 , a
função objetivo terá um
incremento de 5 unidades
 Encontrar uma solução básica melhor:
Primeiramente, é possível que exista uma solução melhor
que a atual?

A resposta está “escondida” na linha da função objetivo do


dicionário atual:
Resposta: Sim!
Se 𝑥1 e/ou 𝑥2 assumirem
valores maiores que zero, a
FO poderá ter um valor maior
que o da solução atual.
 Encontrar uma solução básica melhor:
1º passo: escolher uma das variáveis não-básicas (𝑥1 ou
𝑥2 ) para entrar na base.
 Encontrar uma solução básica melhor:
1º passo: escolher uma das variáveis não-básicas (𝑥1 ou
𝑥2 ) para entrar na base.
Como o problema é de maximização, a variável escolhida
deve ser aquela com maior coeficiente positivo na linha da
função objetivo do dicionário atual.
 Encontrar uma solução básica melhor:
1º passo: escolher uma das variáveis não-básicas (𝑥1 ou
𝑥2 ) para entrar na base.
Como o problema é de maximização, a variável escolhida
deve ser aquela com maior coeficiente positivo na linha da
função objetivo do dicionário atual.
 Encontrar uma solução básica melhor:
1º passo: escolher uma das variáveis não-básicas (𝑥1 ou
𝑥2 ) para entrar na base.
Como o problema é de maximização, a variável escolhida
deve ser aquela com maior coeficiente positivo na linha da
função objetivo do dicionário atual.
𝑥2 é a variável não-básica
escolhida para entrar na
base
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

Cada restrição deve ser


verificada para encontrar a
variável que sairá da base
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

Cada restrição deve ser


verificada para encontrar a
variável que sairá da base

5
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

Cada restrição deve ser


verificada para encontrar a
variável que sairá da base

5
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

Cada restrição deve ser


verificada para encontrar a
variável que sairá da base

5
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

De maneira mais simples, a


variável que mais limita o
crescimento é determinada
pelo método da razão
mínima
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

Para cada linha de restrição


do dicionário, divide-se o
termo constante pelo
coeficiente da variável
escolhida para entrar na base
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

4 12 18
𝑥2 = 𝑚𝑖𝑛 , ,
0 2 2
𝑥2 = 𝑚𝑖𝑛 ∞, 6,9
𝑥2 = 6
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

4 12 18
𝑥2 = 𝑚𝑖𝑛 , ,
0 2 2
𝑥2 = 𝑚𝑖𝑛 ∞, 𝟔, 9
𝑥2 = 6
 Encontrar uma solução básica melhor:
2º passo: escolher uma das variáveis básicas (𝑥3 , 𝑥4 ou 𝑥5 )
para sair da base.
A variável escolhida deve ser aquela que mais limita o
crescimento da variável escolhida para entrar na base.

𝑥4 é a variável escolhida para


sair da base
 Encontrar uma solução básica melhor:
3º passo: atualizar o dicionário.
 Encontrar uma solução básica melhor:
3º passo: atualizar o dicionário.
Na linha da variável que sairá da base, tranfere-se a
variável que entrará na base (𝑥2 ) para o lado esquerdo e a
que sairá (𝑥4 ) para o lado direito.
 Encontrar uma solução básica melhor:
3º passo: atualizar o dicionário.
Na linha da variável que sairá da base, tranfere-se a
variável que entrará na base (𝑥2 ) para o lado esquerdo e a
que sairá (𝑥4 ) para o lado direito.
 Encontrar uma solução básica melhor:
3º passo: atualizar o dicionário.
Na linha da variável que sairá da base, tranfere-se a
variável que entrará na base (𝑥2 ) para o lado esquerdo e a
que sairá (𝑥4 ) para o lado direito.
 Encontrar uma solução básica melhor:
3º passo: atualizar o dicionário.
A expressão encontrada para 𝑥2 deve ser utilizada para
atualizar as linhas restantes do dicionário.

6
 Encontrar uma solução básica melhor:
3º passo: atualizar o dicionário.
A expressão encontrada para 𝑥2 deve ser utilizada para
atualizar as linhas restantes do dicionário.

Após as substituições, é
encontrado o novo dicionário.
 Encontrar uma solução básica melhor:
4º passo: encontrar a nova solução básica.
 Encontrar uma solução básica melhor:
4º passo: encontrar a nova solução básica.
Com o dicionário atualizado, encontrar a nova solução
básica é trivial.

Basta fazer as variáveis não-básicas (𝑥1 e 𝑥4 )


assumirem valor igual a zero.
 Encontrar uma solução básica melhor :

Basta fazer as
variáveis não-
básicas (𝑥1 e 𝑥4 )
assumirem valor
igual a zero.

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 0 𝑧 = 30
𝑥2 = 6
𝑥3 = 4
𝑥4 = 0
𝑥5 = 6
 Encontrar uma solução básica melhor :

Basta fazer as
variáveis não-
básicas (𝑥1 e 𝑥4 )
assumirem valor
igual a zero.

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 0 𝑧 = 30
𝑥2 = 6
𝑥3 = 4
𝑥4 = 0
𝑥5 = 6
 É possível que exista uma solução melhor?

Olhando para a linha da


FO, observa-se que sim!
A cada incremento de 1
unidade no valor de 𝑥1 , a
função objetivo terá um
incremento de 3 unidades
 É possível que exista uma solução melhor?

Como 𝑥1 é a única variável


não-básica com coeficiente
positivo na FO, ela deverá
ser escolhida para entrar na
base
 É possível que exista uma solução melhor?

E se incrementarmos o valor
de 𝑥4 ?
 Encontrando uma nova solução:

Aplicando o método da razão


mínima, qual variável deverá
sair da base?

7
 Encontrando uma nova solução:

Aplicando o método da razão


mínima, vemos que a
variável 𝑥5 deverá sair da
base.
 Encontrando uma nova solução:

Atualizando o dicionário:
𝑥1 passa para o lado
esquerdo (vira básica) e 𝑥5
passa para o lado direito (vira
não-básica).
 Encontrando uma nova solução:

Atualizando o dicionário:
Na terceira linha, 𝑥1 passa
para o lado esquerdo (vira
básica) e 𝑥5 passa para o
lado direito (vira não-básica).
 Encontrando uma nova solução:

Atualizando o dicionário:
Utilizando a nova expressão
para 𝑥1 e substituindo nas
linhas restantes, encontra-se
o novo dicionário.
 Encontrando uma nova solução:

Atualizando o dicionário:
Utilizando a nova expressão
para 𝑥1 e substituindo nas
linhas restantes, encontra-se
o novo dicionário.
 Encontrando uma nova solução:

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 2 𝑧 = 36
𝑥2 = 6
𝑥3 = 2
𝑥4 = 0
𝑥5 = 0
 Encontrando uma nova solução:

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 2 𝑧 = 36
𝑥2 = 6
𝑥3 = 2
𝑥4 = 0
𝑥5 = 0
 Encontrando uma nova solução:

O que a linha da
FO do dicionário
atual nos diz?

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 2 𝑧 = 36
𝑥2 = 6
𝑥3 = 2
𝑥4 = 0
𝑥5 = 0
 Encontrando uma nova solução:

Resposta:
Não é possível
melhorar a solução
atual para o
problema

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 2 𝑧 = 36
𝑥2 = 6
𝑥3 = 2
𝑥4 = 0
𝑥5 = 0
 Encontrando uma nova solução:

Portanto, a
solução atual é
ótima!

Assim, a solução básica associada ao


dicionário é:
𝑥1 = 2 𝑧 = 36
𝑥2 = 6
𝑥3 = 2
𝑥4 = 0
𝑥5 = 0
1. Montar um dicionário inicial a partir do PPL na forma padrão;
2. Determinar a solução associada ao dicionário fazendo as
variáveis do lado direito (não-básicas) iguais a zero e depois
calculando os valores das variáveis do lado esquerdo
(básicas);
3. Olhando a linha da FO, escolher a variável com maior
coeficiente positivo para entrar na base. A variável será
chamada de 𝑥𝑒𝑛𝑡𝑟𝑎 . Se não houver variável com coeficiente
positivo, a solução atual é ótima. Pare.
4. Calcular o maior valor que 𝑥𝑒𝑛𝑡𝑟𝑎 pode assumir. A variável da
base que mais limitou o crescimento de 𝑥𝑒𝑛𝑡𝑟𝑎 será a variável
que sairá da base, 𝑥𝑠𝑎𝑖 .
5. Atualize o dicionário levando 𝑥𝑒𝑛𝑡𝑟𝑎 ao lado esquerdo e 𝑥𝑠𝑎𝑖
ao lado direito. Volte ao passo 2.
 Tipos de problemas podem ser encontrados na
execução do simplex:
 Inicialização: Em geral escolhem-se as variáveis de

folga como básicas no dicionário inicial. Se nem todos


os valores de lado direito das restrições forem não-
negativos, o dicionário inicial montado dessa forma
poderá ser inviável.
 Tipos de problemas podem ser encontrados na
execução do simplex:
 Degenerescência: Ao se trocar de solução básica nos

passos 3 e 4 do simplex, pode ser que a variável que


sai da base seja tão restritiva a ponto de a variável
que entra tomar valor zero na solução seguinte.
Assim a solução será básica degenerada e o valor da
FO não será melhorado.
 Tipos de problemas podem ser encontrados na
execução do simplex:
 Ciclagem: Quando um mesmo dicionário for

encontrado em duas iterações distintas, a sequência


de iterações que levam ao mesmo dicionário se
repetirá infinitamente e o método não terminará.
 Resolva o seguinte problema através do método Simplex:

Você também pode gostar