Você está na página 1de 7

Aula 6º

Programação inteira

Prezados(as) alunos(as),
Nesta sexta aula, estudaremos um complemento dos
problemas clássicos de PL, que são os problemas que
necessitam de soluções com números inteiros. Também
focaremos no estudo do algoritmo que gera essa solução e por
fim, verificaremos como proceder para resolver esses casos
com o Excel Solver.
Bons estudos!

Objetivos de aprendizagem

Ao término desta aula, vocês serão capazes de:

•  aprender a modelar problemas que necessitem de resultados inteiros;


•  compreender o algoritmo branch-and-bound e como o utilizar;
•  entender como utilizar o Excel Solver para resolver problemas de programação inteira.
Pesquisa Operacional 50
o problema como se fosse um problema de programação
Seções de estudo linear e truncar os valores ótimos encontrados para cada uma
das variáveis de decisão que forem inteiras. Para problemas
de grande porte, isso geralmente resultará em uma solução
1 - Programação inteira
aceitável (próxima do ótimo real) sem a violação de nenhuma
2 - Algoritmo branch-and-bound
das restrições (LACHTERMACHER, 2016).
Para resolver problemas menores, esse tipo de problema
1 - Programação inteira geralmente leva a soluções inviáveis, às vezes longe do valor
ótimo.
De acordo com Lachtermacher (2016), a todo problema
Nesta aula, estudaremos problemas de programação de programação linear inteira está associado um problema
inteira, mostrando suas principais características e utilizações com a mesma função objetivo e as mesmas restrições, com
no mundo real. Apresentaremos ainda seus problemas com exceção da condição de variáveis inteiras. A esse problema
relação aos relatórios de análise de sensibilidade e possíveis dá-se o nome de problema relaxado (Figura 2).
erros de aproximação de resultados.
• Programação inteira e seus conceitos;
Figura 2 – Exemplo de problema relaxado.
• Resolução gráfica e suas limitações;
• Algoritmo branch-and-bound;
• Resolução de programação inteira utilizando o
Excel.

De acordo com Lachtermacher (2016), problemas de


programação inteira são aqueles de programação matemática
em que uma ou mais variáveis de decisão são representadas
apenas por valores inteiros. Esses problemas podem
apresentar dois tipos básicos:
• Programação inteira total: todas as variáveis de
decisão são do tipo inteiro;
Fonte: Lachtermacher (2016).
• Programação inteira mista: apenas uma parte das
variáveis é do tipo inteiro, enquanto as outras são Ainda segundo Lachtermacher (2016), quando o
do tipo real. problema envolve apenas duas variáveis de decisão, a solução
ótima de um problema de programação linear inteira total
Aqui, abordaremos os problemas de programação linear pode ser encontrada graficamente. O problema anterior
inteira (PLI), que são aqueles de programação matemática de programação linear inteira tem a solução relaxada (do
em que a função-objetivo e as restrições são lineares, porém problema relaxado) mostrada na Figura 3.
uma ou mais variáveis de decisão são representadas apenas
por valores inteiros. Podemos dizer que a diferença entre
Figura 3 – Solução do problema relaxado.
problemas de programação linear inteira e programação linear
é a inclusão de pelo menos uma restrição que limita o espectro
de variação de uma variável de decisão. Matematicamente, um
problema de programação linear inteira total pode ser descrito
como na Figura 1.

Figura 1 – Modelo genérico de programação inteira

Fonte: Lachtermacher (2016).

No caso do problema real, de programação linear inteira,


o conjunto de soluções viáveis não incluiria a solução do
problema relaxado, já que o valor de x2 na solução ótima é
Fonte: Lachtermacher (2016). igual a 1,5 (não inteiro). A Figura 4 mostra todas as possíveis
A primeira ideia que pode vir à mente é a de resolver soluções para o problema inteiro (pontos nos encontros das
retas tracejadas).
51
Figura 4 – Solução do problema inteiro limite superior para o valor ótimo da função-objetivo.

Figura 5 – Solução para o problema relaxado e inteiro

Fonte: Lachtermacher (2016).

Vale notar que a mesma técnica de resolução utilizada em


programação linear pode ser usada para descobrir a solução
do problema inteiro. Nesse caso, como mostrado na Figura 4,
a solução ótima do problema inteiro é múltipla ([2, 2], [3, 1] e
Fonte: Lachtermacher (2016).
[4, 0]) e o valor ótimo (I) é igual a 12. Nesse caso, a técnica de
truncamento da solução ótima do problema relaxado levaria
ao resultado correto, o que geralmente não é o caso. 2 - Algoritmo branch-and-bound
Observemos agora o problema de programação
linear inteira apresentado na Figura 5, que mostra a resolução
gráfica do problema relaxado e a solução do problema de O algoritmo branch-and-bound é o procedimento mais
programação inteira. utilizado atualmente na resolução de problemas do tipo
De acordo com Lachtermacher (2016), diversos programação linear inteira (PLI) ou programação linear inteira
problemas podem ocorrer com a utilização da técnica de mista (PLIM). Existem diversas variantes desse método
truncamento da solução do PL relaxado. Entre eles, podemos para tratamento de diversos tipos de problemas específicos.
citar: A ideia geral é dividir o conjunto de soluções viáveis em
• Nenhum ponto inteiro vizinho ao ponto ótimo subconjuntos sem interseções entre si, calculando os limites
relaxado é necessariamente viável; superior e inferior para cada subconjunto, e eliminar certos
• Mesmo que um dos vizinhos seja viável, ele pode subconjuntos de acordo com algumas regras preestabelecidas
não ser necessariamente o ponto ótimo inteiro. (LACHTERMACHER, 2016). Considere o problema a
seguir.
Uma ideia que pode resultar em uma solução para
um problema de programação inteira é enumerar todas as Problema 1:
possíveis soluções. De forma exaustiva, substituímos todos os Max 3x1 + 3x2
valores possíveis para a função-objetivo e é escolhido aquele Sujeito a:
que apresenta o maior valor, no caso de maximização, ou o x1 + 4x2 ≤ 12
menor valor, no caso de minimização. O problema está no 6x1 + 4x2 ≤ 24
fato de que ela só pode ser aplicada a problemas pequenos. O x1 e x2 ≥ 0
número de combinações possíveis de soluções viáveis cresce x1 e x2 são inteiros
de forma exponencial, isto é, de forma muito rápida. Um PLI
com 100 variáveis de decisão do tipo binária (variáveis que A Figura 6 apresenta a solução ótima (x1 = 2,4 e x2 = 2,4)
assumem os valores 0 ou 1) terá até 2100 soluções viáveis, isto do problema relaxado, que tem um valor ótimo igual a 72/5.
é, 1,27 × 1030 soluções possíveis, o que tornaria a resolução Por se tratar de um problema de maximização, esse valor impõe
por enumeração praticamente impossível. um limite superior (72/5) ao valor ótimo da função-objetivo
Em um problema de maximização, o valor ótimo da da PLI. Como o ponto x1 = 1, x2 = 2 faz parte do conjunto
função-objetivo do PL relaxado sempre representa um limite de soluções viáveis, ele impõe um limite inferior (9) ao valor
superior ao respectivo valor do problema inteiro. Em um ótimo da função-objetivo da PLI. Com essas observações,
problema de minimização, o valor ótimo da função-objetivo estabelecemos um intervalo para o valor ótimo da função-
de um PL relaxado sempre representa um limite inferior ao objetivo da PLI. 9 ≤ valor ótimo da função-objetivo ≤ 72/5
respectivo problema inteiro (LACHTERMACHER, 2016). Chamaremos 72/5 de LSA (limite superior atual) e 9 de LIA
Outra observação importante é que cada solução viável (limite inferior atual), e a solução do problema relaxado, x1 =
resulta em um problema de maximização, em um limite 2,4 e x2 = 2,4. Podemos representar essas condições como
inferior para o valor ótimo da função-objetivo. Em um ponto inicial do algoritmo, representado no círculo na parte
problema de minimização, cada solução viável resulta em um superior da Figura 6.
Pesquisa Operacional 52
Figura 6 – Solução do problema relaxado O próximo passo é verificar quais são as soluções para os
problemas relaxados 2 e 3 (Figura 9). As respostas podem ser
encontradas na Figura 10.

Figura 9 – Respostas para os problemas relaxados 2 e 3.

Fonte: Lachtermacher (2016).

Como sabemos que os valores de x1e x2 não podem Fonte: Lachtermacher (2016).
ser fracionários, podemos escolher um dos dois para tentar
torná-lo inteiro. Escolhendo a variável x1, estaremos dizendo Figura 10 – árvore de solução do algoritmo branch-and-
que seu valor deve ser menor ou igual a 2 ou, então, maior bound
ou igual a 3, já que nenhuma solução com valor de x1 nesse
intervalo faz parte do conjunto de soluções viáveis da PLI.
Podemos então dividir o Problema 1 em dois subproblemas
(problemas 2 e 3), como apresentado na Figura 7.

Figura 7 – Representação dos dois subproblemas

Fonte: Lachtermacher (2016).

Como em ambos os casos o valor ótimo do problema


relaxado é menor que o LSA, esse valor passa a ser o melhor
valor (ótimo) que a função-objetivo pode atingir. Com essas
observações, estabelecemos um intervalo para o valor ótimo
da função-objetivo.
Fonte: Lachtermacher (2016). 9 ≤ valor ótimo da função-objetivo ≤ 27/2
Vale observar que o valor de x2 ainda é fracionário nos
Isso representa a eliminação de uma das partes do dois casos (problemas 2 e 3). Portanto, podemos subdividir
conjunto de soluções viáveis do problema, apresentado na ambos os problemas em duas partes. O problema 2 pode ser
Figura 8. dividido nos problemas 4 e 5, como mostrado a seguir na
Figura 11.
Figura 8 – Parte eliminada do conjunto de soluções
viáveis. Figura 11 – Problemas 4 e 5

Fonte: Lachtermacher (2016)


. Fonte: Lachtermacher (2016).
53
O problema 3 pode ser dividido nos problemas 6 e 7, mostrada na Figura 15.
como mostra na Figura 12 a seguir.
Figura 15 – Árvore de soluções do algoritmo.
Figura 12 – Problemas 6 e7.

Fonte: Lachtermacher (2016).

Como podemos verificar, apenas um ramo da árvore


Fonte: Lachtermacher (2016).
ainda não tem uma solução definitiva. Portanto, devemos
dividir esse ramo (problema 6) em duas partes, isto é, nos
O próximo passo, portanto, é resolver esse conjunto problemas 8 e 9, como mostrado a seguir na Figura 16.
de problemas relaxados. A resposta para o problema 4 é
mostrada na figura 13. Figura 16 – Problemas 8 e 9

Figura 13 – Solução para o problema relaxado 4

Fonte: Lachtermacher (2016).


Fonte: Lachtermacher (2016).
Naturalmente, os problemas poderiam ser reduzidos.
Como a solução para o problema relaxado 4 é um Por exemplo: dizer que x1 ≥ 3 e x1 ≤ 3 é o mesmo que dizer
número inteiro, ele encerra esse ramo da árvore do algoritmo, que x1 = 3. Os problemas são mostrados dessa maneira para
já que ambos os valores de x1 e x2 são inteiros. Vale notar que ressaltar como o processo ocorre, sem nenhuma preocupação
o problema 5 tem apenas um ponto no conjunto de soluções com o desempenho. A solução para o problema 8 pode ser
viáveis, x1 = 0 e x2 = 3, sendo essa a solução ótima dele. vista na Figura 17. Vale notar que, como o valor de x1 tem de
ser igual a 3, o conjunto de soluções viáveis é o segmento de
Figura 14 – Solução do problema relaxado 6. reta perpendicular ao eixo das abscissas de x2 = 0 até x2 = 1.
A solução ótima é, portanto, o ponto x1 = 3 e x2 = 1. O valor
da função-objetivo nesse ponto é 12.

Figura 17 – Solução para o problema relaxado 8

Fonte: Lachtermacher (2016).

A resposta para o problema 6 é mostrada na Figura 14.


Também podemos observar nessa figura que o conjunto de
soluções viáveis do problema 7 é vazio, isto é, o problema é
Fonte: Lachtermacher (2016).
inviável. Essas soluções podem ser representadas pela árvore
Pesquisa Operacional 54
Esses resultados podem ser incorporados a árvore do
algoritmo, como mostra na Figura 18.
Figura 18 – Árvore de solução do algoritmo branch-and-
bound.

Fonte: Lachtermacher (2016).


Fonte: Lachtermacher (2016).

O problema 9 apresenta apenas um ponto no conjunto Comparada à PL correspondente, a PLI levará muito
de soluções viáveis. Portanto, esse ponto, x1 igual a 4 e x2 mais tempo para ser resolvida. Isso está ligado ao fato de
igual a 0, é a solução ótima do problema com valor ótimo de que mais de um (algumas vezes centenas) problema de PL é
12. resolvido para se obter a solução de um PLI.
Como podemos notar, todos os ramos da árvore Se o problema for interrompido no meio do processo,
apresentam soluções inteiras e/ou inviáveis. Isso, portanto, o valor do LIA será uma solução aproximada do problema
encerra o processo do algoritmo. Observando os anéis finais inteiro. A diferença entre LSA e LIA será o erro máximo que
de cada ramo, podemos notar que a solução para a PLI é nossa solução ótima do problema inteiro poderá apresentar.
múltipla, já que três ramos atingiram a mesma solução ótima A solução obtida em um problema de PLI ou PLIM
inteira. Caso uma das soluções finais dos ramos fosse maior contem menos informações do que o problema de PL
do que as outras, escolheríamos a maior solução inteira. As correspondente. Algumas diferenças são:
soluções ótimas do problema inteiro e do linear relaxado são • Inexistência de análises de sensibilidade;
mostradas na Figura 19. • Inexistência de preço sombra;

Figura 19 – Soluções do problema inteiro e relaxado Para avisar o Solver do Excel que uma ou mais variáveis
são inteiras, devemos adicionar uma restrição ao problema.
Para tal, quando estivermos adicionando restrições, a coluna
intermediaria deverá ter a opção nun (int) ou bin (bin) assinalada,
como mostram as figuras 21 e 22.

Figura 21 – Janela de adição de restrições de variáveis


inteiras.

Fonte: Lachtermacher (2016).

Independentemente da ordem em que os problemas


são resolvidos, isto é, como a árvore de soluções é percorrida
(Figura 20), a solução ótima achada será a mesma. Fonte: Elaborado pelo autor.

Figura 20 – Representação da forma de resolução de


uma PLI Figura 22 – Janela de adição de restrições de variáveis
binárias.

Fonte: Elaborado pelo autor.


55

Retomando a aula

Ao chegar ao final da sexta aula, vamos recordar o


que aprendemos:

1 - Programação inteira

Nessa sexta aula, focamos entender o conceito da


programação inteira e como resolver os problemas dessa
natureza.

2 - Algoritmo branch-and-bound

Vimos o algoritmo que gerou originalmente a solução


desses problemas e como devemos parametrizar o Excel
Solver para que ele identifique que estamos querendo uma
solução inteira para nossas modelagens.

Vale a pena

Vale a pena ler


Hillier, F.S. e Lieberman G.J., Introdução à Pesquisa
Operacional, 8ª. edição. São Paulo: McGraw-Hill, 2006.
Lachtermacher, G. Pesquisa operacional na tomada de
decisões, 5ª. edição. São Paulo: Prentice Hall, 2016.
Taha, H. A.. Pesquisa Operacional. 8ª edição. São Paulo:
Pearson, 2008.

Minhas anotações

Você também pode gostar