Você está na página 1de 13

Métodos de Apoio à Decisão

The Cutting Plane Algorithm

João Pedro Pedroso

2019/2020
Problema do Caixeiro Viajante Assimétrico
Miller-Tucker–Zemlin (potential) formulation
X
minimize cij xij
i6=j
X
subject to xij = 1 i = 1, · · · , n
j:j6=i
X
xji = 1 i = 1, · · · , n
j:j6=i

(n − 1)xij + ui ≤ uj + (n − 2) i = 1, · · · , n
j = 2, · · · , n : i 6= j (1)
1 ≤ ui ≤ n − 1 ∀i = 2, · · · , n
xij ∈ {0, 1} ∀i 6= j

I Restrições (1) implicam que ui + 1 ≤ uj sempre que xij = 1


I Somando (1) para todos os arcos incluídos num dado circuito
não incluindo o nodo 1, obtém-se |C | ≤ 0, o que é uma
contradição
I isso mostra que uma solução admissível de MTZ não pode
conter subcircuitos.
Problema do Caixeiro Viajante
Modelo de Dantzig-Fulkerson-Johnson
X
minimizar de xe (2)
e∈E
X
sujeito a: xe = 2 ∀v ∈ V (3)
e∈δ({v })
X
xe ≥ 2 ∀S ⊂ V , S 6= ∅ (4)
e∈δ(S)

xe ∈ {0, 1} ∀e ∈ E (5)

δ(S) arestas incidentes no conjunto de vértices S


(3) degree constraints
(4) subtour elimination constraints
Relaxação de Held e Karp: 0 ≤ xe ≤ 1
I subproblema fica “fácil” de resolver com o simplex
I utilizado branch-and-bound e este modelo é uma das formas
mais eficazes de resolver o TSP
I ver http://www.math.uwaterloo.ca/tsp/concorde.html
Algoritmo dos planos de corte

I problemas lineares com variáveis inteiras: algoritmo de


pesquisa em árvore (aulas anteriores)
I outro método: algoritmo dos planos de corte
I método proposto por Ralph Gomory em 1958
I ideia: adicionar uma restrição que remova a solução atual
(fracionária) da região admissível da relaxação linear, e voltar a
resolver, até que a solução seja inteira

Nota: o algoritmo requer que todos os coeficientes das variáveis


nas restrições, e todos os termos independentes, sejam inteiros.
Planos de corte: exemplo

maximizar z =8x1 + 5x2


sujeito a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x1 , x2 ≥ 0 e inteiros

z x1 x2 s1 s2 rhs
1 0 0 1.25 0.75 41.25
Quadro ótimo do simplex:
0 0 1 2.25 -0.25 2.25
0 1 0 -1.25 0.25 3.75
Planos de corte: exemplo
Planos de corte: cortes válidos

Corte válido: desigualdade que se adiciona tal que:


1. a solução da relaxação linear passa a ficar fora da região
admissível;
2. todas as soluções inteiras do problema original continuam na
região admissível.
Planos de corte: exemplo (cont).

maximizar z =8x1 + 5x2


sujeito a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x1 , x2 ≥ 0 e inteiros

z x1 x2 s1 s2 rhs
1 0 0 1.25 0.75 41.25
Quadro ótimo do simplex:
0 0 1 2.25 -0.25 2.25
0 1 0 -1.25 0.25 3.75
Planos de corte: exemplo (cont).

I escolher linha no quadro do simplex com variável básica


fracionária; seja:
x1 − 1.25s1 + 0.25s2 = 3.75 ⇔
x1 − 2s1 + 0.75s1 + 0s2 + 0.25s2 = 3 + 0.75
I colocando à esquerda coeficientes inteiros e à direita
fracionários:
x1 − 2s1 + 0s2 − 3 = 0.75 − 0.75s1 − 0.25s2
I x1 , s1 , s2 só podem assumir valores inteiros (porquê?)
I lado esquerdo é inteiro
I portanto, lado direito também, e será no máximo 0.75
I arredondando para baixo:
I plano de corte: lado direito ≤ 0, ou seja, adiciona-se a
restrição:
0.75 − 0.75s1 − 0.25s2 ≤ 0
Propriedades dos cortes de Gomory
1. qualquer solução admissível para o problema inteiro satisfaz o
corte
I seja uma solução x1 , x2 admissível para o problema inteiro
I x1 , x2 são inteiras e satisfazem todas as restrições da relaxação
linear
I qualquer solução admissível deverá ter s1 ≥ 0, s2 ≥ 0
I naquela linha, como 0.75 < 1, qualquer solução admissível
inteira deverá ter o lado direito < 1
I ou seja, deverá satisfazer 0.75 − 0.75s1 − 0.25s2 ≤ 0
I para qualquer solução inteira, x1 − 2s1 + 0s2 − 3 é inteiro
I portanto 0.75 − 0.75s1 − 0.25s2 deverá ser um inteiro menor
que 1
I ou seja, o corte não remove nenhuma solução inteira admissível
2. a solução atual (no quadro do simplex) não satisfaz o corte
I nesta solução, s1 = s2 = 0; não satisfaz
0.75 − 0.75s1 − 0.25s2 ≤ 0
I isto resulta porque a parte fracionária (= 0.75 > 0)
I podemos escolher qualquer restrição cujo lado direito no
quadro ótimo do simplex seja fracionário, e “cortar” essa
solução
Planos de corte: exemplo (cont.)

z x1 x2 s1 s2 rhs
1 0 0 1.25 0.75 41.25
Quadro anterior do simplex:
0 0 1 2.25 -0.25 2.25
0 1 0 -1.25 0.25 3.75
Plano de corte a adicionar:

0.75 − 0.75s1 − 0.25s2 ≤ 0 ⇔ −0.75s1 − 0.25s2 + s3 = −0.75

z x1 x2 s1 s2 s3 rhs
1 0 0 1.25 0.75 0 41.25
Novo quadro do simplex: 0 0 1 2.25 -0.25 0 2.25
0 1 0 -1.25 0.25 0 3.75
0 0 0 -0.75 -0.25 1 -0.75
Algoritmo dos cortes de Gomory

I se todas as variáveis forem inteiras, a solução é ótima ⇒ parar


I se houver variáveis fracionárias: gerar corte
(caso haja várias: heurística: escolher a que tiver o valor mais
próximo de 1/2)
I resolver com o método do simplex (dual), e recomeçar
Gomory mostrou que com este algoritmo se obtém uma solução
inteira com um número finito de cortes.
Próxima aula

I Introdução à programação por restrições

Você também pode gostar