Escolar Documentos
Profissional Documentos
Cultura Documentos
Flávio K. Miyazawa
2022-09-27
• Reduza o problema para o problema de fluxo máximo/corte mínimo. Sugestão: Suponha que a
partição dos vértices seja dada pelos conjuntos X e Y . Acrescente dois vértices s e t e coloque
arcos de s para X com pesos dados pelo vértice em X. Oriente as arestas de X para Y colocando
peso infinito nos arcos. Coloque arcos de Y para t, colocando o peso nos arcos igual ao dos
vértices de Y. Mostre a relação do corte mínimo com cobertura mínima.
Um caminho que seja cortado apenas uma vez, em x->y, na direção reversa ao fluxo, é
impossível.
Qualquer corte mínimo C, portanto, passa por pelo menos uma das arestas (s,x) e (y,t),
para todo caminho de s a t. Como toda aresta do grafo original está em um desses
caminhos, pode-se dizer que 𝐶' = {𝑥 ∈ 𝑋 : (𝑠, 𝑥) ∈ 𝐶 } ∪ {𝑦 ∈ 𝑌: (𝑦, 𝑡) ∈ 𝐶 } é uma
cobertura do grafo original. Arestas x->y que estiverem no corte são direcionadas na
direção reversa do fluxo e não interferem no peso do corte. Portanto, o algoritmo do fluxo
máximo / corte mínimo garante que a cobertura equivalente também é mínima.
• Formule o problema como programação linear inteira e relaxe as variáveis. Mostre que o
poliedro associado é inteiro.
𝑥𝑣,𝑒 = 1 if e incides on v,
0 otherwise
∑ 𝑝𝑣𝑥𝑣,𝑒 ≥ 1 ∀𝑒 ∈ 𝐸
𝑣∈𝑉
i.
𝑚𝑎𝑥 ∆(𝑠)
s.a. 0 ≤ 𝑥𝑒 ≤ 𝑐𝑒
∆(𝑣) = 0 ∀ 𝑣 ∈ 𝑉 / {𝑠, 𝑡}
ii. Para cada arco não-orientado, transforme-o em dois arcos orientados entre os mesmos
vértices, com a mesma capacidade, mas em sentidos opostos. Aplique o mesmo algoritmo
que em (i). Alternativamente: fixe a direção arbitrariamente (por exemplo, do nó de menor
índice ao nó de maior índice), mas permita fluxo negativo:− 𝑐𝑒 ≤ 𝑥𝑒 ≤ 𝑐𝑒.
iii. seja f(i) a fonte do arco i e s(i) o sorvedouro do arco i, x fixo. Resolva o PLI:
𝑚𝑖𝑛 ∑ 𝑥𝑎𝑦𝑎
𝑎 ∈𝑉
s.a. 0 ≤ 𝑦𝑎 ≤ 1 ∀ 𝑎 ∈ 𝐴 𝑦𝑎 = 1 ⇔ 𝑎 está no corte
0 ≤ 𝑧𝑣 ≤ 1 ∀ 𝑣 ∈ 𝑉 𝑧𝑣 = 1 ⇔ 𝑣 está em K
𝑧𝑣 − 𝑧𝑢 − 𝑦(𝑣,𝑢) = 0 ∀ (𝑣, 𝑢) ∈ 𝐴
Seja 𝐶(𝐾) o custo do tipo de carne 𝐾 por quilo, 𝑋(𝐾) a variável da quantidade e
𝑀 = {𝐴𝐵 : (𝐴, 𝐵) ∈ {𝐻, 𝐵, 𝐹} × {𝐹, 𝐷, 𝑁}} (cada variedade de carne e processamento).
s.a. 𝐻𝐹 + 𝐻𝐷 + 𝐻𝑁 = 480
𝐵𝐹 + 𝐵𝐷 + 𝐵𝑁 = 400
𝑃𝐹 + 𝑃𝐷 + 𝑃𝑁 = 230
𝐻𝐷 + 𝐵𝐷 + 𝑃𝐷 ≤ 420
𝐻𝑁 + 𝐵𝑁 + 𝑃𝑁 ≤ 250
𝐾 ≥ 0∀𝐾 ∈ 𝑀
Queremos provar que 𝑧 ∈ 𝑐𝑜𝑛𝑣(𝑆). Sejam 𝐼 = {𝑖1, 𝑖2,..., 𝑖𝑛} os vértices de 𝑐𝑜𝑛𝑣(𝑆).
𝑛 𝑛
𝑑
𝐼: 𝑎 ∈ 𝑐𝑜𝑛𝑣(𝑆) ⇔ ∃(𝑏1,..., 𝑏𝑛) : 𝑎 = ∑ 𝑏𝑖𝑖𝑖 , ∑ 𝑏𝑖 = 1, 𝑎 ∈ 𝑅 , 𝑏 ∈ 𝑅+ .
𝑖=1 𝑖=1
𝐼𝐼: 𝑧 ∈ 𝑐𝑜𝑛𝑣(𝑥, 𝑦) ⇔ ∃𝑡 : 𝑧 = 𝑡𝑥 + (1 − 𝑡)𝑦, 𝑡 ∈ [0, 1].
Expandindo I em II:
𝑛 𝑛 𝑛
𝑧 = ∑ 𝑡𝑏𝑖𝑖𝑖 + (1 − 𝑡)𝑐𝑖𝑖𝑖 = ∑ (𝑡(𝑏𝑖 − 𝑐𝑖) + 𝑐𝑖 )𝑖𝑖 = ∑ 𝑑𝑖𝑖𝑖
𝑖=1 𝑖=1 ,𝑖=1
𝑛
Se ∑ 𝑑𝑖 = 1, 𝑧 se conforma a I.
𝑖=1
𝑛 𝑛 𝑛 𝑛
∑ 𝑑𝑖 = 𝑡 ∑ 𝑏𝑖 + ∑ 𝑐𝑖 − 𝑡 ∑ 𝑐𝑖 = 𝑡(1) + 1 − 𝑡(1) = 1. //
𝑖=1 𝑖=1 𝑖=1 𝑖=1
Indução.
Base: uma matriz coluna nx1 onde todos os elementos pertencem a {-1,0,1} é TU,
pois todas suas submatrizes quadradas são 1x1 com determinante em
{-1,0,1}.
Hipótese: A propriedade do enunciado vale para matriz de tamanho nxk', k' < k.
Passo: Pela hipótese, todas as submatrizes quadradas são TU. Vamos adicionar uma
coluna c com no máximo um 1, no máximo um -1 e o restante 0.
Todas as novas submatrizes quadradas A' incluem um subvetor c' de c.
Para cada nova submatriz:
(i) se alguma coluna = 0, |A'| = 0.
(ii) se A' contém alguma coluna com exatamente 1 elemento 𝑎 ∈ {− 1, 1},
aplicar Laplace nessa coluna. 0s zeros cancelam o valor de |Ai,j | e o
𝑖+𝑗 𝑖,𝑗
determinante será |𝐴'| = 𝑎(− 1) |𝐴 | ∈ {− 1, 0, 1}.
(iii) se todas as colunas contém 1 e -1, a soma de suas linhas vale zero e o
determinante é 0.
A possui colunas no formato da questão (a). Transformando alguns elementos não nulos
em 0, as sub-matrizes quadradas afetadas vão do caso (iii) da indução para o caso (ii), ou do
caso (ii) para o caso (i), e portanto ainda tem determinantes -1, 0 ou 1.
∑ − 𝑥𝑎 + ∑ 𝑥𝑎 = 0 ∀𝑛 ∈ 𝑁
+ −
𝑎∈δ (𝑛) 𝑎∈δ (𝑛)
A matriz formada pela restrição acima contém colunas com exatamente uma ocorrência de 1 e
uma de -1, sendo assim TU. Pelo mesmo argumento de (b), podemos zerar alguns elementos
nã0-nulos e manter a unimodularidade.
Na linha de S, zeramos os valores relacionados aos arcos que entram em S, e fazemos os que
saem de S somar a 1.
Na linha de T, zeramos os valores relacionados aos arcos que saem de T, e fazemos os que entram
somarem a 1.
Adicionamos uma matriz identidade para zerar os arcos que entram em S e saem de T.
Removemos as linhas restantes.
A matriz ainda é unimodular, e, como a única fonte e sorvedouro são S e T, os únicos caminhos
possíveis são caminhos de S a T.
Um algoritmo guloso:
Ordene os subconjuntos por lucro individual. (bj - soma dos custos dos integrantes). O(m*n + m
log m)
Enquanto houver lucro positivo: O(m) times
adicione o conjunto à solução O(n)
desconte os custos dos subconjuntos que tiverem itens em comum. O(m*n)
Reordene. O(m log m)
𝑚 𝑛
𝑚𝑎𝑥 ∑ 𝑦𝑗𝑏𝑗 − ∑ 𝑥𝑖𝑐𝑖
𝑗=1 𝑖=1
s.a.
|𝑆𝑗|
∑ 𝑥𝑖 − |𝑆𝑗|𝑦𝑗 + 1 = 1
𝑖∈𝑆𝑗
|𝑁|
𝑚𝑎𝑥 ∑ 𝑥𝑖𝑤𝑖
𝑖=1
s.a.
𝑥𝑖 − 𝑥𝑗 ≤ 0 ∀ (𝑖, 𝑗) ∈ 𝐴 Se há uma aresta de i para j, ou ambos estão dentro
do conjunto fechado, ou ambos estão fora, ou j está
fora e i está dentro.
Atribuir capacidade 1 para todas as arestas, executar st-path. o fluxo máximo é o número de
caminhos disjuntos (que não compartilham aresta). A matriz de incidência é TU (grafo
direcionado), PLI polinomial
Mesma formulação de (a): se há K caminhos disjuntos, precisamos remover pelo menos 1 aresta
de cada. Se não utilizar caminhos residuais, usar BFS a partir de s, não atravessar arestas
saturadas, o corte equivale ao caminho.
Abrir arestas:
w w
a —------- b => a —------> b
←—-----
w
Formulação de (a).
Juntando (c) e (b), mas quando remover uma aresta, remover também seu par criado em (c).
𝑚𝑖𝑛 ∑ 𝑥𝑒𝑐𝑒
𝑐∈𝐸
∑ 𝑥𝑒 − ∑ 𝑥𝑒 = 1 if v = s,
+ −
𝑒∈δ (𝑣) 𝑒∈δ (𝑣)
-1 if v = t,
0 otherwise
𝑥𝑒 ∈ [0, 1].
𝑚𝑖𝑛 ∑ 𝑥𝑒𝑐𝑒
𝑒∈𝐸
s.a. ∑ 𝑥𝑒 − ∑ 𝑥𝑒 = k if v = s,
+ −
𝑒∈δ (𝑣) 𝑒∈δ (𝑣)
-k if v = t,
0 otherwise
𝑥𝑒 ∈ [0, 1]
𝑚𝑎𝑥 ∑ 𝑝𝑖𝑗𝑥𝑖,𝑗
fluxo máximo, s->a = ai, b->t = bi, a->b = xij/inf, max xij*cij
sum ai - sum bi = 0
fluxo máximo, s->a = ai, b->t = bi, a->b = xij/uij, min xij*cij
sum ai - sum bi = 0
fluxo máximo, s->a = ai, b->t = bi, a->b = xij/uij, min xij*cij
adicionar novo consumidor com arestas infinitas e custo zero
sum ai - sum bi = 0
1 . . . 1 . . . . . … (2 por linha)
1 . 1 . . . . . . .
. . 1 . . . 1 . . .
emparelhamento (dual):
max sum (i, j in e) xe
sum (e in delta(v)) <= 1 for all v in V
o <= xe <= 1
1 . . 1 . . . . 1 . … (2 por coluna)
1 . . . . 1 . . . .
. . . . . 1 . . 1 .
. . . 1 . . . . . .
s.a.
1. min sum(v in V) wv xv
s.a.
xi + xj >= 1 for all i, j in E -> 2 per line -> TU
xv in {0,1}
min sum (e in E) we xe
s.a.
sum (for e in delta (v)) >= 1 for all v in V -> 2 per column (one in A, one in B) -> TU
xe in {0,1}
max sum (ij in nxm) pij * xij
s.a.
Variante 1:
separar camarotes em m*|D|camarote-dias.
fluxo: cap(s->p) = di, cap(p->cd) = xijk of 1, cap (cd->t) = dj
max (ijk in E) xijk
grafo direcionado -> TU
Variante 2:
separar pessoas em pessoas*dia.
fluxo: cap(s->pd) = 1, cap(pd->cd) = xijk of 1, cap(cd->t)=dj
max (ijk in E) xijk
grafo direcionado -> TU
http://thejavamathematician.blogspot.com/2015/02/the-n-queens-puzzle-and-0-1-integer.html
Versión melhorada:
(http://math.ucdenver.edu/~sborgwardt/wiki/index.php/An_Integer_Linear_Programming_Approa
ch_to_Graph_Coloring)