• Nenhum resultado encontrado

O problema de Gale

No documento Curso de Otimização Combinatória (páginas 55-58)

Suponha que (G, u) é uma rede capacitada. Dado um número bv para cada nó v,

queremos encontrar um fluxo que respeite as capacidades dos arcos e tenha excesso exatamente bv em cada v. Em que condições o problema tem solução?

Uma função-demanda em um digrafo G é qualquer função que associa um número bv ∈ Q a cada nó v. Um fluxo x satisfaz uma função-demanda b se x+−(v) = bv para

cada nó v. (Portanto, os nós v que têm bvnegativo são “produtores de fluxo” e os nós v

que têm bv positivo são “consumidores de fluxo”.)

Nosso problema: Dada uma rede (G, b, u) em que u é uma função-capacidade e b uma função-demanda, encontrar um fluxo que satisfaça b e respeite u.

EXEMPLO 1: Seja G o digrafo com nós p i j q descrito abaixo por sua matriz de adjacências. (Faça uma figura.) À direita da matriz, temos uma função-demanda b. Mais à direita, uma função- capacidade u. p i j q b p − 1 1 − +2 i − − − 1 −2 j − 1 − 1 +1 q 1 − − − −1 pi pj iq ji jq qp u 6 4 3 1 2 3 x 0 1 2 0 0 3 Abaixo de u na tabela temos um fluxo viável x na rede (G, b, u).

Para simplificar o palavreado, podemos dizer que um fluxo é viável se satisfaz b e respeita u. É fácil verificar que as seguintes condições são necessárias para a existência de um fluxo viável:

Proposição 4.6 Se existe um fluxo viável então b(V ) = 0 e b(A) ≤ u+

(A) para todo subconjunto A do conjunto V de nós da rede.

Assim, para tornar evidente que não existe fluxo viável basta mostrar que b(V ) 6= 0 ou exibir um conjunto A tal que b(A) > u+(A)

. As condições necessárias descritas na proposição são conhecidas como condições de Gale, em referência a D. Gale, que mostrou (1957) que as condições são também suficientes:

Teorema 4.7 (Gale) Em qualquer rede (G, b, u), se b(V ) = 0 e b(A) ≤ u+(A) para

todo subconjunto A de V := V (G) então existe um fluxo viável. Ademais, se b e u são inteiros, essas mesmas condições garantem a existência de um fluxo viável inteiro. PROVA: Suponha que a rede (G, b, u) satisfaz as condições de Gale; vamos mostrar que existe um fluxo viável. Seja P o conjunto dos nós para os quais b é negativo e Q o conjunto dos nós para os quais b é positivo. Seja (G0, u0, r, s)a rede de fluxo definida

da seguinte maneira. O conjunto de nós de G0 é V ∪ {r, s}, sendo r e s dois novos nós. Para cada p em P , há um arco rp com capacidade u0rp = −bp em G0; para cada q em Q,

há um arco qs com capacidade u0

qs = bqem G0; para cada arco vw de G, há um arco vw

em G0 com capacidade u0vw = uvw.

Seja R um conjunto que separa r de s em G0. Seja B := R r {r}. Considere o corte em G0 cuja margem negativa é R. A capacidade desse corte na rede (G0, u0, r, s)é a soma de três parcelas: as capacidades dos arcos que vão de r a P r B, as capacidades dos arcos que vão de Q ∩ B a s, e as capacidades dos arcos de G que saem de B. Logo,

u0− (R) = −b(P r B) + b(Q ∩ B) + u− (B) = −b(P r B) + b(Q ∩ B) + u+ (V r B) ≥ −b(P r B) + b(Q ∩ B) + b(V r B) = −b(P r B) + b(Q ∩ B) + b(P r B) + b(Q r B) = b(Q ∩ B) + b(Q r B) = b(Q) .

Concluímos assim que todo corte entre r e s na rede (G0, u0, r, s) tem capacidade não inferior a b(Q). Segue daí, pelo teorema MFMC (teorema 3.8), que existe um fluxo viável x0 tal que int(x) ≥ b(Q). Logo, x0qs = u

0

qs para todo q em Q, ou seja, x 0

satura todos os arcos que entram em s. Como b(P ) = b(V ) − b(Q) = −b(Q), o fluxo x0também satura todos os arcos que saem de r. Portanto a restrição x de x0 à rede original é um

fluxo que satisfaz b e respeita u.

A segunda parte da prova segue do teorema MFMC inteiro (teorema3.10).

É útil observar que as condições de Gale são equivalentes às seguintes: b(V ) = 0 e b(A) ≥ −u−

(A) para todo subconjunto A de V .

EXEMPLO 2: Para a rede (G, b, u) do exemplo 1, veja a rede (G0, u0, r, s) construída na prova do teorema4.7: r p i j q s r − − 1 − 1 − p − − 1 1 − 1 i − − − − 1 − j − − 1 − 1 1 q − 1 − − − − s − − − − − − ri rq pi pj iq ji jq qp ps js u0 2 1 6 4 3 1 2 3 2 1 x0 2 1 0 1 2 0 0 3 2 1

A tabela à direita também mostra um fluxo viável x0de r a s na rede (G0, u0, r, s).

EXEMPLO3: Seja (G, b, u) a rede definida abaixo (igual à do exemplo 1 exceto pelo valor de uqp).

p i j q b p − 1 1 − +2 i − − − 1 −2 j − 1 − 1 +1 q 1 − − − −1 pi pj iq ji jq qp u 6 4 3 1 2 2

Essa rede não tem fluxo viável porque o conjunto A := {p, j} não satisfaz a condição b(A) ≤ u+(A).

Exercícios

4.13 ? Condições necessárias. Prove a proposição4.6.

4.14 Encontre um fluxo viável na rede (G, b, u) descrita a seguir. Os nós são r a b c d s e as tabelas definem as funções b e u:

r a b c d s b +3 +2 +2 −1 −3 −3

ra rb ac bd cs ds sr u 8 7 6 5 7 8 6

4.15 ? Árvores. Seja (T, b) uma rede em que T é uma árvore (veja a seção1.1) e b uma função-demanda. Dê condições necessárias e suficientes para que (T, b) tenha um fluxo que satisfaz b. Estabeleça a relação entre essas condições e as condições de Gale. Descreva informalmente um algoritmo que receba T e b e calcule um fluxo em T que satisfaça b ou decida que um tal fluxo não existe. 4.16 Seja r um nó de um digrafo G com n nós. Seja b uma função-demanda tal que br = −n + 1e

bv = +1para cada v 6= r. Seja u a função-capacidade que atribui ∞ a cada arco. Dê condições

necessárias e suficientes para que a rede (G, b, u) tenha um fluxo viável. Se x é um fluxo viável e todas as componentes de x estão em {0, 1}, que aparência tem o conjunto de arcos {e : xe= 1}?

4.17 Formule o problema de Gale como um programa linear inteiro. Maximize a função-objetivo 0x. Escreva o dual da relaxação linear do pl. Repita com função-objetivo 1x. Repita com “minimize” no lugar de “maximize”.

4.18 Versão simétrica das condições de Gale. Mostre que as condições de Gale são equivalentes às seguin- tes: −u−(A) ≤ b(A) ≤ u+(A)para todo A ⊆ V .

4.19 ? Teorema de Gale no caso de capacidades infinitas. Seja b uma função-capacidade em um digrafo G := (V, E). Mostre que a rede (G, b) tem um fluxo que satisfaz b se e somente se b(V ) = 0 e b(A) ≤ 0 para todo A ⊆ V tal que ∂+(A) = ∅.

4.20 Deduza o teorema MFMC (teorema3.8) do teorema de Gale (teorema4.7).

4.21 É dado um grafo bipartido e um custo cepara cada aresta do grafo. Queremos encontrar um em-

parelhamento de custo máximo. Formule o problema como um pl e calcule o seu dual. Descreva o dual como um problema sobre redes.

4.22 É dado um grafo bipartido e um peso bv para cada nó do grafo. Queremos encontrar uma co-

bertura de peso mínimo. Formule o problema como um pl e calcule o seu dual. Descreva o dual como um problema sobre um rede.[CCPS 3.17]

4.23 Subgrafo bipartido com prescrição de graus. É dado um inteiro não-negativo dvpara cada nó v de um

grafo não-dirigido bipartido G. Queremos encontrar E0⊆ E(G) tal que tal que o grau de cada nó vem (V (G), E0)seja dv. Descreva um bom algoritmo para o problema. Dê condições necessárias

e suficientes para que o problema tenha solução. Discuta o caso particular do problema em que dv= kpara cada v.[CCPS 3.18]

4.24 Síntese de digrafo bipartido. Suponha dados números inteiros não-negativos a1, . . , an e b1, . . , bn.

Queremos construir um digrafo bipartido com bipartição ({v1, . . , vn}, {w1, . . , wn}) tal que cada

nó vitem grau de saída aie cada nó witem grau de entrada bi. Mostre como resolver o problema.

[AMO 8.13]

4.25 Digrafo euleriano.2 Dado um digrafo G, encontrar um conjunto de arcos cuja inversão (isto é, troca de vw por wv) resulte em um digrafo G0 = (V (G), E0)tal que |∂0+(v)| = |∂0−(v)|

para cada nó v. Dê condições necessárias e suficientes para que o problema tenha solução.[CCPS 4.5]

4.26 Orientação de grafo não-dirigido. Seja H := (V, E) um grafo e a uma função de V em Z+. Queremos

uma orientação G de H tal que o grau de entrada de todo nó v seja av. Mostre que o problema tem

solução se e somente se iH(X) ≤ a(X) ≤ eH(X)para todo X ⊆ V . Aqui, eH(X)é o número de

arestas de H com pelo menos uma ponta em X e iH(X)o número de arestas de H com ambas as

pontas em X. (A letra “i” sugere “internas” e a letra “e” sugere “externas”.) Mostre também que as condições para existência de solução podem ser formuladas assim: a(V ) = |E| e iH(X) ≤ a(X)

para todo X ⊆ V .[CCPS 3.34]

4.27 Torneio viável. Imagine um torneio de tênis com n participantes. Suponha que cada participante joga exatamente uma partida com cada um dos outros e suponha que não há empates. Seja dio

número de derrotas do tenista i. Como é possível saber se um dado vetor (d1, . . . , dn)representa

um torneio? Dê uma boa caracterização e um bom algoritmo.[CCPS 3.35]

No documento Curso de Otimização Combinatória (páginas 55-58)