A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Problemas de Fluxo Máximo

Apresentações semelhantes


Apresentação em tema: "Problemas de Fluxo Máximo"— Transcrição da apresentação:

1 Problemas de Fluxo Máximo
Objecto de Aprendizagem 2010

2 Problemas de Fluxo Máximo
Definição: Dada uma rede, com um nó de entrada e um nó de saída, com capacidades associadas a cada ramo, pretende-se saber qual é o fluxo máximo, de um certo bem, que se pode enviar da entrada para a saída. Modelo: xij – fluxo que passa no ramo (i, j), de i para j cij – capacidade do ramo (i, j) Nó 1 – nó de entrada Nó t – nó de saída Sujeito a: (equilíbrio de fluxos nos nós) (restrições de capacidade)

3 Exemplo de um problema de Fluxo Máximo
Nó de entrada = nó 1 Nó de saída = nó 4 Capacidades totais dos ramos: Ramo 1  2 = 9 Ramo 1  3 = 8 2 Ramo 2  3 = 3 Ramo 2  4 = 7 (9) (7) Ramo 3  4 = 9 1 (3) 4 (8) (9) 3

4 Algoritmo de fluxo máximo
1. Injectar um fluxo nulo (f = 0) no nó de entrada; 2. Fixar as capacidades utilizadas dos ramos em 0 (zero); 3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução óptima;. 4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado; 5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o fluxo injectado; Capacidade total do ramo Capacidade utilizada do ramo Caminho 1: capacidade = 7 6. Voltar ao ponto 3. 2 Caminho 2: capacidade = 3 (0, 7) (7) Vamos, por exemplo, seleccionar o caminho não saturado 1 3  4, com capacidade disponível = min (8; 9) = 8 (0, 9) (9) Caminho: conjunto de ramos unindo o nó de entrada ao nó de saída, e que não passa duas vezes pelo mesmo nó. f = 0+8 = 8 f = 0 1 (3) (0, 3) 4 f = 0+8 = 8 f = 0 Capacidade de um caminho: menor capacidade disponível de entre todos os ramos que fazem parte do caminho. (0, 8) (8, 8) (8) (0, 9) (8, 9) (9) 3 Caminho 3: capacidade = 8 Caminho saturado: caminho com capacidade disponível nula

5 Algoritmo de fluxo máximo (cont.)
3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução óptima;. 4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado; 5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o fluxo injectado; 6. Voltar ao ponto 3. Vamos seleccionar o caminho não saturado 1 2  3  4, com capacidade disponível = min (9; 7) = 7 2 (7, 9) (0, 9) (0, 7) (7, 7) f = 8+7 = 15 f = 8 1 (0, 3) 4 f = 8+7= 15 f = 8 (8, 8) (8, 9) 3

6 Algoritmo de fluxo máximo (cont.)
3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução óptima;. 4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado; 5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o fluxo injectado; 6. Voltar ao ponto 3. Vamos, seleccionar o caminho não saturado 1 2  3  4 Não existe nenhum caminho não saturado. Logo, foi encontrada a solução óptima 2 Capacidades disponíveis dos ramos deste caminho: (8, 9) (7, 9) (7, 7) ramo 1  2: capacidade = 9 – 7 = 2 ramo 2  3: capacidade = 3 – 0 = 3 ramo 3  4: capacidade = 9 – 8 = 1 f = 15+1 = 16 f = 15 f = 16 1 (1, 3) (0, 3) 4 f = 16 f =15+1=16 f = 15 Capacidade disponível do caminho 1 2 3  4 = min (2; 3; 1) =1 (8, 8) (9, 9) (8, 9) 3

7 Algoritmo de fluxo máximo (cont.)
Vamos agora saturar os caminhos por uma ordem diferente. O que acontecerá? 1. Injectar um fluxo nulo (f = 0) no nó de entrada; 2. Fixar as capacidades utilizadas dos ramos em 0 (zero); 3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução óptima;. 4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado; 5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o fluxo injectado; 6. Voltar ao ponto 3. 2 (0, 7) (7) (3, 9) (0, 9) (9) f = 0+3 = 3 f = 0 1 (0, 3) (3, 3) (3) 4 f = 0+3 = 3 f = 0 Vamos seleccionar o caminho não saturado 1 2  3  4, com capacidade disponível = min (9; 3; 9) = 3 (0, 8) (8) (0, 9) (3, 9) (9) 3

8 Algoritmo de fluxo máximo (cont.)
3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução óptima;. 4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado; 5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o fluxo injectado; 6. Voltar ao ponto 3. Vamos seleccionar, por exemplo, o caminho não saturado 1 2  4 2 (6, 7) (0, 7) (7) (0, 9) (9, 9) (3, 9) (9) Capacidades disponíveis dos ramos deste caminho: ramo 1  2: capacidade = 9 – 3 = 6 ramo 2  4: capacidade = 7 – 0 = 7 f = 3+6 = 9 f = 3 1 (3, 3) (3) (0, 3) 4 f = 3+6= 9 f = 3 Capacidade disponível do caminho 1 2 4 = min (6; 7) = 6 (0, 8) (8) (3, 9) (0, 9) (9) 3

9 Algoritmo de fluxo máximo (cont.)
3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução óptima;. Aparentemente não há nenhum caminho não saturado, mas o fluxo máximo agora obtido (f = 15) é menor do que no caso anterior (f = 16). Como é que isto é possível , já que o algoritmo é de optimização? 2 (6, 7) (0, 7) (7) (0, 9) (9, 9) (3, 9) (9) f = 15 1 (3) (0, 3) (3, 3) 4 f =15 f = 9 (6, 8) (0, 8) (8) (9, 9) (0, 9) (3, 9) (9) 3

10 Algoritmo de fluxo máximo (cont.)
De facto, o exemplo anterior não está completamente resolvido (até à optimalidade) porque existe ainda um caminho não saturado. Para se encontrar esse caminho não saturado é necessário considerar o conceito de “fluxo negativo", isto é, fluxo que atravessa os ramos no sentido contrário à sua orientação. Uma das restrições apresentadas no modelo do problema de fluxo máximo impunha que todos os fluxos fossem positivos ou nulos (xij  0). E de facto, na solução final, tal terá sempre que acontecer. No entanto, essa solução final obtém-se pela adição dos vários fluxos que vamos injectando na rede. Alguns desses fluxos poderão atravessar algum ramo no sentido contrário ao indicado, devendo nesse caso ser contabilizados como negativos. O resultado final (soma de todos os fluxos que foram injectados nesse ramo) é que terá que ser positivo ou nulo. No fundo, um “fluxo negativo" mais não é do que deixar de fazer passar fluxo por esse ramo. Observando a rede deste ponto de vista, verifica-se que o caminho 1  3  2  4 não está saturado, pois: 2  o ramo 1  3 tem uma capacidade de 2 = (8 – 6). (6, 7) (0, 9) (3, 9) (9, 9) (9)  o ramo 2  3 está saturado no sentido do nó 2 para o nó 3; mas no sentido do nó 3 para o nó 2 tem uma capacidade de 3 (igual à capacidade que está a ser utilizada no sentido do nó 2 para o nó 3) isto é, podemos deixar de fazer passar, do nó 2 para o nó 3, até 3 unidades (que é fluxo actual). f = 15 1 (3, 3) 4 f =15 f = 9 (6, 8) (9, 9) (3, 9) (0, 9) (9)  o ramo 2  4 tem uma capacidade de 1 = (7 – 6). 3 Logo, a capacidade do caminho 1  3  2  4 é de 1 = min (2; 3, 1)

11 Vejamos com maior detalhe o que realmente se passa nesta iteração
Algoritmo de fluxo máximo (cont.) 3. Seleccionar um caminho não saturado (caminho com capacidade  0) entre o nó de entrada e o nó de saída. Se não existir nenhum, foi encontrada a solução óptima;. 4. Somar ao fluxo de entrada um fluxo igual à capacidade do caminho seleccionado; 5. Alterar as capacidades utilizadas dos ramos do caminho seleccionado, somando-lhes o fluxo injectado; 6. Voltar ao ponto 3. Seleccionamos então o caminho não saturado 1  3  2  4 (com capacidade = 1) 2 (7, 7) (6, 7) (0, 9) (3, 9) (9, 9) (9) f = 15+1 =16 f = 15 1 (2, 3) (3, 3) 4 f =15+1=16 f =15 Vejamos com maior detalhe o que realmente se passa nesta iteração (7, 8) (6, 8) (0, 9) (9, 9) (3, 9) (9) 3

12 Algoritmo de fluxo máximo (cont.)
Como se viu antes, a capacidade do caminho 1  3  2  4 é de 1 unidade. Vai-se então enviar uma unidade por esse caminho: 1º Enviar 1 unidade do nó 1 para o nó 3. Essa unidade enviada do nó 1 para o nó 3, não pode depois ser enviada pelo ramo 3  4, pois este ramo está saturado neste sentido. Então que fazer? A única forma de ultrapassar este problema é fazer com que uma das unidades que é presentemente enviada por 2  3  4, passe a ser enviada por 2  4, de forma a libertar uma unidade da capacidade do ramo 3  4. Corrigindo as capacidades utilizadas dos ramos obtém-se: 2 Utiliza-se depois essa unidade, assim libertada (da capacidade do ramo 3  4), para fazer fluir do nó 3 para o nó 4 a unidade que enviamos antes do nó 1 para o nó 3. (6, 7) (7, 7) (9, 9) (0, 9) (3, 9) (9) f = 15+1=16 f = 15 1 (2, 3) (3, 3) 4 f =15 f = 9 O procedimento descrito é equivalente a: 2º Enviar 1 unidade do nó 3 para o nó 2. (7, 8) (6, 8) (9, 9) (8, 9) (9, 9) 3 3º Enviar 1 unidade do nó 2 para o nó 4.

13 Teorema do Fluxo Máximo – Corte Mínimo:
Como saber se a rede está na situação de fluxo máximo? (ou seja, se a solução em presença é óptima) através do Teorema do Fluxo Máximo – Corte Mínimo: Uma rede está na situação de fluxo máximo se existir um corte mínimo, isto é, que separa a entrada da saída da rede, e que só atravessa: ramos orientados da entrada para a saída saturados, e ramos orientados da saída para a entrada com fluxo nulo O fluxo máximo é, nestas condições, igual à capacidade do corte mínimo Ver conceitos Capacidade do corte mínimo = = 16 2 (6, 7) (7, 7) (9, 9) (0, 9) (3, 9) (9) Como a capacidade do corte mínimo (16) é igual ao fluxo actual (f =16) a solução é óptima f = 16 1 (3, 3) (2, 3) 4 f = 16 (6, 8) (7, 8) (9, 9) (8, 9) (9, 9) 3 corte mínimo

14 Conceitos Corte: Um corte numa rede com nó de entrada S e nó de saída T é um conjunto de arcos cuja remoção separa a rede em duas partes X e Y, uma contendo S e outra contendo T. Capacidade de um corte: É a soma das capacidades dos arcos do corte, que estão dirigidos de X para Y. Corte mínimo: É um corte com a menor capacidade possível. X Y S T Valor de qualquer fluxo  Capacidade de qualquer corte Valor do fluxo máximo  Capacidade de qualquer corte Valor de fluxo máximo  Capacidade de um corte mínimo Fechar

15 Ver explicação detalhada
Teorema do Fluxo Máximo – Corte Mínimo Se analisarmos a solução anterior à óptima (com f = 15), podemos verificar que é impossível definir um corte mínimo Note-se que o corte abaixo representado, não é um corte mínimo, pois o fluxo do nó 2 para o nó 3 não é nulo. Ver explicação detalhada 2 (0, 7) (6, 7) (7) (9, 9) (3, 9) (0, 9) (9) f = 15 1 (3, 3) (0, 3) (3) 4 f = 15 (6, 8) (0, 8) (8) (9, 9) (0, 9) (3, 9) (9) 3

16 Conceitos Corte mínimo: É um corte com a menor capacidade possível, ou
Corte: Um corte numa rede com nó de entrada S e nó de saída T é um conjunto de arcos cuja remoção separa a rede em duas partes X e Y, uma contendo S e outra contendo T. Capacidade de um corte: É a soma das capacidades dos arcos do corte, que estão dirigidos de X para Y. Corte mínimo: É um corte com a menor capacidade possível, ou é um corte que separa a entrada da saída da rede, e que só atravessa ramos orientados da entrada para a saída saturados, e ramos orientados da saída para a entrada com fluxo nulo X Y S T 2 (0, 7) (6, 7) (7) (3, 9) (9, 9) (0, 9) (9) 1 (0, 3) (3, 3) (3) 4 (6, 8) (0, 8) (8) (9, 9) (0, 9) (3, 9) (9) O corte representado não é um corte mínimo, pois o fluxo do nó 2 para o nó 3 (de Y para X) não é nulo. 3 Fechar


Carregar ppt "Problemas de Fluxo Máximo"

Apresentações semelhantes


Anúncios Google