Uma extensão clássica do problema de fluxo máximo é o problema de "fluxo máximo ao longo do tempo": você recebe um dígrafo, dois nós distintos como fonte e coletor, onde cada arco tem dois parâmetros, uma capacidade por -unidade e um atraso. Você também é dado um horizonte de tempo . O objetivo é calcular um fluxo ao longo do tempo que recebe a quantidade máxima de material a partir da fonte para a pia pelo tempo . Um fluxo de valor máximo pode ser calculado em tempo polinomial por uma redução clássica inteligente para fluxo máximo de custo mínimo.
Estou interessado em uma extensão para este modelo em que as bordas têm um terceiro parâmetro "vida útil". Se um arco tem vida útil , e é a primeira vez que um fluxo positivo é enviado através do arco, destruímos o arco no momento . Você pode pensar nisso como as plataformas de Super Mario Brothers que caem / são destruídas logo após você pisar nelas, ou você pode pensar nelas como baterias necessárias para alimentar as bordas, que não podem ser desligadas depois de serem ligadas . ( Editar :) O problema de decisão é, quando também é fornecido um limite inferior do valor do fluxo , se é possível agendar um fluxo que atenda ao limite superior do horizonte de tempo e ao limite inferior do valor do fluxo.
Até agora, vejo que esse problema é fortemente NP-difícil (via 3-partições). Mas, na verdade, não sei se está no NP: existe alguma garantia de uma maneira de expressar uma solução de forma compacta? Na versão clássica, algum tipo especial de fluxo ideal é usado para contornar esse problema.
Nota: o modelo acima é um pouco subespecificado, pois você pode permitir ou não permitir o armazenamento de fluxo nos nós, e você pode ter um modelo de tempo discreto ou contínuo. Resolver a pergunta para qualquer um desses modelos seria excelente.
Respostas:
Já faz muito tempo, mas tenho certeza de que esse problema está em P.
Escrevi minha tese de doutorado sobre isso em 1995. Consulte "Algoritmos de fluxo de redes dinâmicos eficientes", de Bruce Hoppe, enviado ao departamento de CS da Cornell. Online em http://dspace.library.cornell.edu/bitstream/1813/7181/1/95-1524.pdf
Consulte o capítulo 8, "Extensões", seção 8.1, sobre "arestas mortais".
fonte
EDIT: a resposta está errada. Fiz a suposição (boba) implícita de que quando um fluxo de caminho começa no tempo se termina no tempo te passa pela borda e, ele bloqueia a borda e por esse período. No entanto, isso não é verdade. Vejo *.
Nota: Talvez essa abordagem seja desnecessariamente complicada ou incorreta. Embora eu tenha tentado verificar e anotá-la com cuidado - não gastei muito tempo nele.
Assumindo que 'empilhamento' não é permitido, por exemplo, o fluxo deve ser transferido imediatamente. Seja o número de arestas e o comprimento de entrada. Não especifiquei tempo contínuo ou discreto, pois não o levei em consideração. Deveria funcionar para um pensamento discreto, para contínuo, tenho certeza.m N
Em seguida, podemos descrever a solução como um conjunto de "caminhos-fluxos" da origem para a pia. Um fluxo de caminho é um quádruplo que consiste no seguinte: Um caminho simples da fonte para a pia; Hora de início do caminho-fluxo ; Quantidade de fluxo através do caminho ; Taxa de transferência .( P, s , a , r ) P s uma r
Deixe uma solução ser dada por um conjunto de fluxos de caminho. Podemos verificar se a solução dada por esses fluxos de caminho está correta no polinômio no tempo eme :F | F| N
Agora, nós 'apenas' necessidade de mostrar que o número de caminho-flui é polinomial em .N
Para uma determinada solução, podemos determinar o tempo em que algum fluxo passou por uma borda e quando a borda foi destruída. Converta isso em um problema com uma solução equivalente: há limites rígidos em cada extremidade quando ela pode ser usada e quando não - um horário de início e de término. Vamos denotar o conjunto de todos esses momentos.{ t1 1, . . . , tk}
Considere alguma solução não compacta e (inicialmente) um conjunto vazio de fluxos de caminho. A idéia é que, iterativamente, encontremos um caminho de fluxo na solução não compacta, removamos e armazenemos em nosso conjunto de caminhos de fluxo.
Encontre fluxos de caminhos que começam e terminam entre e , mas não terminam entre e modo que . Deixe denotar o conjunto de fluxos de caminho entre e com as propriedades conforme descrito acima.tEu tj eu < j tp tq [ tp, tq] ⊆ [ tEu, tj] Fi , j tj tj
Suponha que já removemos todos os fluxos de caminho por intervalos menores que . Encontre avidamente fluxos de caminhos que começam e terminam em[ i , j ] [ tEu, tj] . Quando encontrarmos um, remova esse fluxo da solução e ajuste as taxas de transferência dos vértices de acordo com a quantidade de fluxo enviada da fonte para a fonte também. Para esse fluxo de caminho, maximizamos a taxa de transferência. Isso significa que, pelo menos em uma borda, atingimos sua taxa máxima de transferência ou, após a remoção desse fluxo de caminho, não há mais fluxo sobre essa borda. Observe que isso vale para o período [ ti + 1, tj - 1] . Nos dois casos, não há mais fluxo passando por essa margem e podemos concluir que .| Fs , t| ≤m
(*) Por que a afirmação anterior é verdadeira? Bem, todos os outros caminhos de fluxo em começam antes de t i + 1 e terminam após t j - 1 . Portanto, eles devem se sobrepor no tempo em que usam uma certa aresta. Como a taxa de transferência é maximizada para o fluxo do caminho, deve haver uma borda em que seja estanque.FtEu, tj ti + 1 tj - 1
Daí resulta que para alguma constante c e a alegação de que está em NP segue.∑i , j ∈ [ k ]| Fi , j| ≤c m3 c
fonte
Pelo que entendi, você precisaria armazenar apenas um número por arco, representando o instante em que o fluxo começa a ser enviado através do arco. Isso pressupõe que, depois disso, o arco seja inutilizado. Se, caso contrário, o arco puder ser usado novamente depois que parar de ser usado, ele deverá ter soluções arbitrariamente próximas das soluções para o fluxo máximo ao longo do tempo (já que o fluxo pode parar de ser enviado por um período arbitrariamente pequeno e começar a ser bombeado novamente) )
fonte