Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
sujeito a
n
∑a x
j=1
ij j ≤ bi para i = 1,2,..., m
xj ∈Ζ para j = 1,2,..., p (≤ n )
xj ≥ 0 para j = p + 1,..., n
Fernando Nogueira Programação Inteira 2
Exemplos de Aplicações:
1) Utilização de Equipamentos ⇒ xj representa a quantidade de equipamentos. Por
exemplo, xj = 2.33 navios petroleiros pode não ter significado prático.
2) Tamanhos de Lotes ⇒ Em algumas situações de planejamento de produção, faz-
se necessário que xj = 0 ou xj > Lj, onde xj representa a quantidade de produtos
produzidos e Lj uma quantidade mínima de produtos xj para compor um lote.
Esta situação é um exemplo de restrição “ou-ou” (ou faz um mínimo ou não faz
nada).
3) Decisões “Sim-ou-Não” ⇒ xj = 1 ou xj = 0 representando decisões sim ou não
(também uma situação de “ou-ou”). Por exemplo, xj = 1 representa construir
uma nova fábrica.
4) Otimização Combinatória ⇒ lida com problemas de decisão de seqüências,
programas e itinerários. Exemplos clássicos são:
-Problema do Caixeiro Viajante ⇒ Para n cidades, existem (n-1)! diferentes
percursos (ex: n = 50, 6x1062 percursos diferentes).
-Problema de Programação de Máquinas ⇒ Para n itens a serem fabricados em
cada uma de k máquinas existem (n!)k seqüências possíveis (ex: n = k = 10,
4x1065 seqüências diferentes).
Fernando Nogueira Programação Inteira 3
Problemas de Programação Inteira (conjunto solução discreto) são geralmente
muito mais difíceis de serem resolvidos quando comparados aos Problemas de
Programação Linear ordinários (conjunto solução contínuo).
Max 21x1 + 11x 2
sujeito a
⎧7 x1 + 4 x 2 ≤ 13
⎨
⎩x1 , x 2 ≥ 0 ∈ Ζ
A solução ótima é x1 = 0 e x2 = 3 (o que pode ser verificado por enumeração
exaustiva).
Uma maneira de resolver este exemplo seria, por exemplo, desconsiderar a
restrição das variáveis serem inteiras e resolver utilizando o algoritmo Simplex
normalmente. A solução ótima neste caso é x1 = 13/7 e x2 = 0.
A solução arredondada é x1 = 2 e x2 = 0, que é inviável.
A solução arredondada “para baixo” é x1 = 1 e x2 = 0, que é viável, porém longe
de ser a ótima.
A regra de arredondar a solução não funciona muito bem, e portanto, não é um
procedimento robusto para solucionar problemas de Programação Inteira.
Fernando Nogueira Programação Inteira 4
Uma dificuldade ainda mais séria é que não existe maneira fácil de verificar se
uma solução viável é ótima. Este fato representa uma importante diferença entre a
Programação Linear e a Programação Inteira.
Como exemplo, suponha que se queira testar se a solução x1 = 1 e x2 = 1 é ótima.
Assim, examinando se a solução representa um ótimo local, no sentido que a
função-objetivo não melhora em qualquer ponto inteiro vizinho viável x1 = 1+a e
x2 = 1+b, onde a,b = -1,0,1. Os pontos vizinhos neste caso são: (x1,x2) = (0,0),
(0,1), (0,2), (1,0).
A solução (1,1) é a melhor entre todas de sua vizinhança, porém não é a ótima.
Com isso, um ponto pode ser ótimo localmente entre pontos vizinhos e ainda não
ser ótimo global, apesar do modelo ser linear.
O histórico das iterações pode ser exposto por meio de um diagrama em árvore. Cada
nó na árvore representa um problema na Lista-Mestra. Note que, para o problema 5, o
ramo está terminado, embora a solução ótima não tenha valor inteiro. A razão é que,
quando atinge-se o problema 5 em t = 11 e Z = 13, já existe uma solução inteira com Z
= 13 obtida no problema 11. Portanto, ramificar o problema 5 irá impor restrições mais
fortes, ocasionando então valores menores de Z para os problemas descendentes do
problema 5, o que justifica então, o fim da busca na árvore.
∑x
i =1
ij =1 j = 1,2,..., n
u i − u j + nx ij ≤ n − 1, i = 2,3,..., n; j = 2,3,..., n; i≠ j
x ij = {0,1} (i = 1,..., n; j = 1,..., n )
Fernando Nogueira Programação Inteira 19