• Nenhum resultado encontrado

Algoritmo Simplex Para Redes arbitrárias

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

O algoritmo Simplex Para Redes (= Network Simplex), resolve qualquer instância do problema do fluxo de custo mínimo (problema 5.1), sem impor qualquer restrição sobre as capacidades dos arcos. Esse algoritmo é uma generalização previsível do algoritmo Simplex Para Transbordo discutido na seção anterior. É como se tivéssemos

duas cópias do Simplex Para Transbordo trabalhando simultâneamente: uma cópia “normal”, idêntica à discutida na seção anterior, que cuida da restrição x ≥ 0, e uma cópia “invertida”, que cuida de x ≤ u.

Como no início do capítulo, um fluxo numa rede (G, b, u) é viável se satisfaz b e res- peita u. Em relação a um fluxo viável x, diremos que um arco e está vazio se xe = 0 e

está cheio se xe = ue.

Começamos por estender algumas das definições da seção anterior. Como lá, vamos supor que os digrafos em estudo são conexos.

Tripartições viáveis

Uma tripartição (T, L, U ) do conjunto de arcos de uma rede (G, b, u) é arbórea se T é uma árvore de G. Uma tripartição arbórea (T, L, U ) é viável se algum fluxo viável deixa todos os arcos de L vazios e todos os arcos de U cheios.

A seguinte proposição mostra porquê podemos nos dar ao luxo de trocar fluxos viáveis por tripartições viáveis:

Proposição 5.10 Para qualquer tripartição viável (T, L, U ), existe apenas um fluxo viá- vel x que deixa vazios os arcos de L e cheios os arcos de U .

Dizemos que o único fluxo viável a que se refere a proposição é induzido por (T, L, U ). Se o fluxo induzido deixa algum arco de T vazio ou cheio, dizemos que a tripartição (T, L, U )é degenerada.

Como estamos supondo que G é conexo, podemos dizer que um fluxo é induzido por uma tripartição arbórea se e somente se todo circuito de G tem um arco vazio ou um arco cheio.

Exercícios

5.38 Prove a proposição5.10. Dê um algoritmo que receba uma tripartição arbórea (T, L, U ) de uma rede (G, b, u), decida se a tripartição é viável, e em caso afirmativo calcule o fluxo induzido. Dê condições necessárias e suficientes para que uma tripartição arbórea (T, L, U ) seja viável.

5.39 Seja x um fluxo viável numa rede (G, b, u). Suponha que todo circuito (dirigido ou não) em G tem um arco vazio ou um arco cheio. Mostre que x é induzido por alguma tripartição arbórea.

5.40 Fluxo viável implica fluxo induzido. Prove as seguintes proposições: Se uma rede (G, b, u) tem um fluxo viável então também tem um fluxo viável que é induzido por uma tripartição arbórea. Se uma rede (G, b, u, c) tem um fluxo ótimo então também tem um fluxo ótimo que é induzido. (Sugestão: Dê um algoritmo que converta qualquer fluxo viável num fluxo induzido equivalente.)

Circuitos fundamentais e seus custos

Seja (T, L, U ) uma tripartição arbórea do conjunto de arcos de uma rede (G, b, u). Para cada e em L, o circuito fundamental de T + e é o único circuito em T + e no qual e é um arco direto. Para cada e em U , o circuito fundamental de T + e é o único circuito em T + e no qual e é um arco inverso.

Numa rede (G, c), um potencial y é induzido por uma tripartição arbórea (T, L, U ) se yv + cvw = yw para cada arco vw de T . Esse potencial está intimamente relacionado

com o custo dos circuitos fundamentais:

Proposição 5.11 Seja (T, L, U ) uma tripartição arbórea de uma rede (G, b, u, c). Seja y um potencial induzido pela tripartição e ¯co custo reduzido associado a y. Para todo e em T , ¯ce = 0. Para todo e em L, ¯ce = c(C), sendo C o circuito fundamental de T + e.

Para todo e em U , ¯ce= −c(C), sendo C o circuito fundamental de T + e.

Exercícios

5.41 ? Prove a proposição5.11.

Simplex Para Redes arbitrárias

Ao receber uma rede (G, b, u, c), o algoritmo Simplex Para Redes produz uma triparti- ção viável (T, L, U ) e um potencial y que satisfazem as condições de otimalidade:

¯

ce= 0para e em T e ¯ce≥ 0 para e em L e ¯ce ≤ 0 para e em U ,

sendo ¯co custo reduzido associado a y. Portanto, o fluxo x induzido por (T, L, U ) é ótimo, de acordo com teorema5.2.

NETWORKSIMPLEX(G, b, u, c)  G conexo 01 (T, L, U ) ← TRIPARTIÇÃOVIÁVEL(G, b, u) 02 se (T, L, U ) é indefinida

03 então pare  rede inviável 04 repita

05 seja x o fluxo induzido por (T, L, U ) 06 seja y um potencial induzido por (T, L, U ) 07 seja ¯co custo reduzido associado a y

08 se ¯ce ≥ 0 para todo e ∈ L e ¯ce ≤ 0 para todo e ∈ U

09 então devolva (T, L, U ) e y e pare  fluxo ótimo 10 escolha e em L tal que ¯ce < 0ou e em U tal que ¯ce> 0

11 seja C o circuito fundamental de T + e 12 ε1 ← min  xh : h ∈ `E(C)  13 ε2 ← min  uh− xh : h ∈ ´E(C)  14 ε ← min (ε1, ε2) 15 se ε = ∞

16 então pare  rede ilimitada

17 escolha h em `E(C)tal que xh = εou h em ´E(C)tal que uh− xh = ε

18 T ← T + e − h

19 se e ∈ L então L ← L − e senão U ← U − e 20 se h ∈ `E(C)então L ← L + h senão U ← U + h

A rotina TRIPARTIÇÃOVIÁVEL(G, b, u)produz uma tripartição viável (T, L, U ) e o fluxo x induzido pela tripartição. Se tal tripartição não existe, x fica indefinido. Nesse caso, a rede é inviável (conforme o exercício 5.40). A rotina pode ser implementada da seguinte maneira: calcule um fluxo viável x; aplique o algoritmo sugerido pelo exercício5.40; escolha uma tripartição viável (T, L, U ) (veja exercício5.39).

No fim da linha 20, (T, L, U ) é uma tripartição viável.

EXEMPLO10. Considere a rede (G, b, u, c) descrita a seguir. (Faça uma figura.) O grafo G é dado por sua matriz de adjacências. A função-demanda b e os custos c dos arcos são dadas nas tabelas.

p v w q b p − 1 1 − −4 v − − 1 1 0 w − − − 1 +2 q − − − − +2 pv pw vw vq wq u ∞ ∞ 1 ∞ ∞ c +10 +20 +8 +20 +20

Suponha que a primeira iteração começa com a tripartição viável (T, L, U ) indicada abaixo. Os arcos de T estão indicados em negrito, os arcos de L estão sublinhados, e U é vazio. Veja na tabela o fluxo x e o potencial y induzidos pela tripartição.

pv pw vw vq wq x 2 2 0 2 0 ¯ c 0 0 −2 0 +10 y p 0 v +10 w +20 q +30

O algoritmo escolhe o arco vw e envia 1 unidades de fluxo ao longo do circuito (v, w, p, v). O arco vwfica cheio e é transferido de L para U . A tripartição (T, L, U ) não se altera. O novo fluxo terá custo cx = 100 − 2 × 1 = 98.

A segunda iteração começa com a tripartição arbórea (T, L, U ) indicada abaixo com uma barra acima dos arcos de U . O fluxo tem custo cx = 98.

pv pw vw vq wq x 3 1 1 2 0 ¯ c 0 0 −2 0 +10 y p 0 v +10 w +20 q +30

Como ¯ce ≥ 0 para todo e em L e ¯ce ≤ 0 para todo e em U , o fluxo x é ótimo e a execução do

algoritmo termina.

Por via dúvidas, convém verificar que cx = yb + zu. (Essa é uma boa maneira de detetar eventuais erros aritméticos cometido durante a execução do algoritmo.) O vetor ze= min(0, ¯ce)está indicado

abaixo:

pv pw vw vq wq z 0 0 −2 0 0 Portanto, cx = 98 = 100 − 2 = yb + zu, como deveria ser.

Número de iterações. Tal como o TRANSSHIPMENTSIMPLEX, o algoritmo NETWORK- SIMPLEX pode executar um número infinito de iterações (embora esse evento seja muito raro na prática). Para evitar isso, basta fazer o seguinte: (1) antes de iniciar a execução do algoritmo, escolha um nó r como raiz; (2) adote yr = 0em todas as itera-

ções, (3) tome providências para que no início de cada iteração a tripartição (T, L, U ) seja fortemente viável no início de cada iteração. Uma tripartição viável (T, L, U ) é fortemente viável se o fluxo induzido pela tripartição tem a seguinte propriedade: cada arco ij de T que está vazio “aponta para longe da raiz” (ou seja, ij é um arco de Pj), e cada arco ij de T que está cheio “aponta na direção da raiz” (ou seja, ij é um

arco de Pi).

Exercícios

5.42 ? É possível ter h = e na linha 17 do NETWORKSIMPLEX? Como o algoritmo se comporta nesse caso?

5.43 Suponha que numa certa iteração do NETWORKSIMPLEXescolhemos (na linha 10) um arco e em U . Seja C o circuito fundamental de T + e. Prove que c(C) < 0.

5.44 Mostre que ε = ∞ na linha 15 do NETWORKSIMPLEXse e somente se `E(C) = ∅e uh = ∞para

todo h ∈ ´E(C). É verdade que isso só acontece se e ∈ L?

5.45 Tripartição arbórea inicial. Eis uma maneira feia mas efetiva de calcular a tripartição (T, L, U ) inicial na linha 01. Antes de invocar o algoritmo, acrescente um novo nó r e novos arcos: para cada v tal que bv < 0, acrescente um arco vr com custo M e capacidade ∞; para cada v tal que bv > 0,

acrescente um arco rv com custo M e capacidade ∞. Esses arcos todos são chamados artificiais. O primeiro grupo é A+e o segundo é A. A constante M deve ser positiva e muito grande. Seja

T a árvore cujos são todos os arcos novos da forma vr, cada um com fluxo xvr = −bv, e todos

os arcos novos da forma rv, cada um com fluxo xrv = bv. Faça L igual ao conjunto dos arcos

originais e U = ∅. A tripartição é fortemente viável se tomarmos r como raiz. Como o custo M é muito alto, nenhum dos arcos artificiais estará na árvore final produzida pelo algoritmo.

Cortes não-dirigidos mínimos

Este capítulo trata de cortes em grafos não-dirigidos. Um corte mínimo entre dois dados nós de um grafo pode ser calculado por qualquer algoritmo de fluxo máximo e corte mínimo, como o algoritmo de Ford-Fulkerson e Edmonds-Karp da seção 3.6, página 38. Portanto, para encontrar uma coleção “completa” de cortes mínimos — um corte para cada par de nós — num grafo com n nós basta invocar o algoritmo n(n − 1)/2vezes. R.E. Gomory e T.C. Hu descobriram (em 1961) que n − 1 invocações do algoritmo são suficientes, pois uma coleção “completa” de cortes mínimos tem a estrutura de uma árvore.

6.1

Submodularidade

Os capítulos anteriores trataram de digrafos; este trata apenas de grafos. Embora um grafo seja essencialmente um tipo especial de digrafo, é apropriado adaptar algumas convenções de notação e terminologia. As adaptações consistem, essencialmente, em substituir “arco” por “aresta” e ignorar a distinção entre ∂+

e ∂−

. Assim, se R é um conjunto de nós de um grafo, denotamos por ∂(R) o conjunto de todas as arestas que têm uma das pontas em R e a outra em R. É claro que ∂(R) = ∂(R); essa é a propriedade que distingue cortes em grafos de cortes em digrafos.

Um corte num grafo é qualquer conjunto da forma ∂(R). Os conjuntos R e R são as duas margens do corte. Um conjunto R de nós separa dois nós se um está em R e o outro em R. Se R separa r de s, dizemos também que ∂(R) separa r de s. Por vezes, é mais cômodo dizer que ∂(R) está entre r de s.

Uma função-capacidade para um grafo G é qualquer função u que atribui um número ue ≥ 0 a cada aresta e do grafo. Um grafo é capacitado se for dotado de uma função-

capacidade. A capacidade de um corte C é o número u(C) := P (ue : e ∈ C). Se R é

uma margem do corte, ou seja, se C = ∂(R), usaremos a abreviatura u(R) := u(C). Em qualquer grafo capacitado, as capacidades dos cortes satisfazem a seguinte desi- gualdade:

Proposição 6.1 (desigualdade submodular) Para quaisquer conjuntos A e B de nós de um grafo capacitado (G, u) tem-se

u(A ∩ B) + u(A ∪ B) ≤ u(A) + u(B) . (1) PROVA: Como u ≥ 0, basta examinar a contribuição que cada aresta dá para cada lado da desigualdade. Uma aresta e que tem uma ponta em A∩B e outra em A∩B contribui uetanto para o lado esquerdo quanto para o lado direito da desigualdade.

A A

• •

B B

• •

Uma aresta e de A ∩ B para A ∩ B contribui ue para o lado esquerdo e uepara o lado

direito. Uma aresta e de A ∩ B para A ∩ B contribui ue para cada lado. Uma aresta e

de A ∩ B para A ∩ B contribui ue para cada lado. Uma aresta e de A ∩ B para A ∩ B

contribui 2uepara cada lado. Finalmente, uma aresta e de A ∩ B para A ∩ B contribui 0

para o lado esquerdo e 2uepara o lado direito da desigualdade.

Como u(R) = u(R) para qualquer R, a desigualdade submodular (1) pode ser reescrita em termos de interseções apenas: u(A ∩ B) + u(A ∩ B) ≤ u(A) + u(B).

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