VinBR

PO - 01/11/2012

May 28th, 2013
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.84 KB | None | 0 0
  1. # # # # # # # # # # # # #
  2. # Pesquisa Operacional #
  3. # Prof. Alexandre Cunha #
  4. # notasdogarcia.blog.com #
  5. # # # # # # # # # # # # #
  6.  
  7. Hoje vamos continuar a falar de Fluxo em Redes.
  8.  
  9. Vamos falar do problema do caminho mínimo em uma rede.
  10.  
  11. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  12.  
  13. REVISÃO:
  14. Qual a diferença do problema do Transbordo para o problema do Transporte?
  15.  
  16. Transbordo tem vertices intermediarios (que recebem e ofertam 0)
  17. Transporte tem um método bonitinho de solução (a tabela)
  18.  
  19. É possível resolver o problema do transbordo por meio de um algoritmo para o prob. do transporte?
  20.  
  21. Sim, basta substituir os vertices intermediários por arestas ligando seus arcos incidentes nos arcos de saída.
  22.  
  23. Assim teriamos os ofertantes, os demandantes e os intermediarios seriam convertidos em arcos.
  24.  
  25. Assim voce pode resolver o problema do Transbordo através do problema do Transporte.
  26.  
  27. Só resta uma dúvida, precisamos encontrar o caminho minímo entre um ofertante e um demandante para saber
  28. quais serão as arestas que substituirão os vertices intermediários.
  29.  
  30. Afinal fazer arestas com custo maior do que o mínimo obviamente não é ótimo.
  31.  
  32. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  33.  
  34. Problema do Caminho mínimo
  35.  
  36. Nos já conhecemos o Dikstra. Ele é um método que encontra todos os caminhos mínimos.
  37.  
  38. Qual a primeira requisição do Dikstra para funcionar?
  39. Pesos dos arcos não negativos.
  40.  
  41. Vamos definir uma variável di = distancia da origem 's' (de Source) até um vertice i qualquer.
  42.  
  43. E ð*(i) é o conjunto de arcos da rede que partem de (i).
  44.  
  45. Inicialização do método:
  46.  
  47. A distancia do vertice s para a origem 's' é inicializada como: ds = 0, obviamente.
  48.  
  49. Para qualquer outro vértice i:
  50.  
  51. di = infinito
  52.  
  53. di=inf i€V | {s} L <- {s}
  54.  
  55. enquanto (L!=ø)
  56.  
  57. k € argmin(dj:j€L)
  58.  
  59. Para todo nó adjacente a k
  60.  
  61. eu caminho recursivamente se dv (v de vizinho) for maior que do dk+ckv (custo de k para v)
  62. substituo dv por dk + ckv
  63.  
  64. Então é muito simples eu caminho por todos os vertices recursivamente e em largura sem nunca caminhar duas vezes sobre o mesmo.
  65.  
  66. PARTE IMPORTANTE: dk é determinado definitivamente quando abandonamos dk.
  67. Em outras palavras depois que examinamos todos os vizinhos de dk, se não encontramos um nó que nos leve a origem s, em um acminho menor.
  68. isso implica que o caminho que fizemos para chegar em k é o melhor caminho possível.
  69. Em outras palavras um caminho ótimo é composto por sub-caminhos ótimos.
  70.  
  71. Isso é uma sub-estrutura ótima.
  72. ==> Podemos fazer um algoritmo guloso.
  73.  
  74. A propriedade principal portanto é: dj <= dk + ckj
  75. ou seja, a distancia de j até a origem deve ser sempre menor do que
  76. a distancia de um vizinho somado com a distancia entre e esse vizinho.
  77. Se não for, devemos atualizar dj, para esse novo valor.
  78.  
  79. Agora vamos supor que podemos ter distancias negativas.
  80. Qual o problema disso? A principio nenhum.
  81. Porém se houver um ciclo onde a distancia seja < 0, o nosso algoritmo de distancia mínima = -infinito,
  82. porque ele vai ficar andando nesse caminho infinitamente e ficando cada vez mais com um caminho menor
  83. e isso em termos de caminho e distancia não faz sentido nenhum.
  84. Em PPLs esse caso poderia ser descrito como um problema ilimitado.
  85.  
  86. Existe também outro conjunto de algoritmos que se chamam: "Algoritmos de Atualização de Distancia"
  87. A vantagem desses algoritmos é que eles conseguem descobrir esses ciclos. Se voce visitar um mesmo nó n+1 vezes significa que há um ciclo negativo.
  88.  
  89. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  90.  
  91. Vamos imaginar o problema, menor distancia entre os vertices s e t em um grafo direcionado.
  92.  
  93. Tem como modelar esse problema como um problema do transbordo?
  94.  
  95. Basta dizer que s oferta 1, e t demanda 1.
  96.  
  97. Formalmente:
  98.  
  99. min sum((i,j) € A) cij xij
  100. { 1 se i = s
  101. sum ((i,j) € ð+(i)) xij - sum ((j,i) € ð-(i)) xji = { 0 se i != s
  102.  
  103. Modelando o dual:
  104.  
  105. max ys - yt
  106.  
  107. yi - yj <= cij para todo (i,j) € A
  108.  
  109. y irrestrito.
  110.  
  111. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  112.  
  113. Agora que sabemos modelar isso com o simplex.
  114. Temos como descobrir ciclos.
  115.  
  116. Para descobrir isso basta verificar que seu dual é inviável.
  117. Motivo: Se o dual é inviável, seu problema é ou inviável também, ou ilimitado.
  118. E como não é da natureza do problema ser inviável (já que o grafo é conexo) então a inviabilidade do dual
  119. garante que seu problema é ilimitado.
  120.  
  121. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  122.  
  123. Vamos fazer o método reverso:
  124.  
  125. partindo de t queremos chegar em s.
  126.  
  127. Inicializando o método:
  128.  
  129. yt = 0 (yi é diferente de di porque di é a distancia da origem s ate o i e yi é a distancia de s a t passando por i)
  130. yi = inf para todo i != t.
  131.  
  132. Enquanto existir um arco que satisfaça a propriedade:
  133.  
  134. yi - yj > cij
  135.  
  136. Atualizamos o custo yi para cij + yj
  137.  
  138. // Aposto que isso é o pivoteamento.
  139.  
  140. Critério de parada:
  141.  
  142. yi - yj <= cij para todo (i,j) € A
  143.  
  144. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  145.  
  146. Suponha que tenhamos um arco.
  147.  
  148. E queremos saber se existe um caminho mínimo qualquer que inclua esse arco.
  149.  
  150. E eu já tenho o conjunto básico mínimo do problema.
  151.  
  152. Para saber disso basta verificar se Xij da variável dual associada for igual à 0.
  153. Formalmente:
  154.  
  155. (cij + yj - yi) xij = 0
  156.  
  157. Se for diferente não está.
  158. Se for igual pode estar ou não.
  159.  
  160. Ela estará se o coeficiente for 0.
  161. Ela não estará se o motivo de ser = 0 é porque xij = 0.
  162.  
  163. Quando os coeficientes são 0 significa que os custos reduzidos são 0, e portanto voce pode coloca-los na solução.
  164.  
  165. Como descobrir quais coeficientes se habilitam para essa última parte?
  166.  
  167. Pra começar rode o algoritmo até a sol. ótima e depois retire do grafo todas as arestas onde xij do dual não são = 0.
  168.  
  169. A partir do grafo que sobrar encontre todos os caminhos sem ciclos que leve de s até t.
  170.  
  171. Ao fim disso todos os caminho que voce passou são ótimos, porque voce só deixou sobrar arestas possívelmente ótimas.
  172. E as arestas pelas quais voce não passou tem distancias boas, mas não levam de s até t, logo não resolvem meu problema.
  173.  
  174. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  175.  
  176. O professor começou um exercicio para exemplificar:
  177.  
  178. Seja o grafo:
  179.  
  180. Arcos: (2,1), (3,1), (4,1), (5,1), (2,3), (3,2), (3,4), (4,3), (4,5), (5,4), (2,7), (7,2), (7,3), (6,4), (6,5), (8,7), (8,6), (8,5).
  181. Pesos: 7 4 2 4 3 3 1 1 1 1 1 1 5 5 3 1 4 6
  182.  
  183. O professor mostrou a iteração.
  184.  
  185. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  186.  
  187. // Fim da aula!
Advertisement
Add Comment
Please, Sign In to add comment