Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.