XOR não é o nome correto, mas estou procurando algum tipo de comportamento exclusivo.
Atualmente, estou resolvendo um conjunto de problemas diferentes (de atribuição) modelando redes de fluxo e executando um algoritmo min-cost-max-flow. As redes de fluxo são bastante úteis, pois muitos problemas podem ser reduzidos a eles de maneira fácil e compreensível. No meu caso, essas são correspondências com algumas restrições adicionais. Como essas restrições estão se tornando mais complexas, fiquei me perguntando se existem algumas construções existentes para modelar comportamentos específicos.
Nesse caso, quero restringir o fluxo de saída de um nó a uma única borda.
Dado um gráfico , as capacidades integrais e os custos . Um nó arbitrário é chamado . vizinhos diretos são chamados . Podemos substituir as arestas (vermelho) por alguma construção para que apenas uma aresta possa receber fluxo ? O que significa que, se obtiver algum fluxo (por exemplo, ), nenhuma outra borda (vermelha) poderá receber fluxo.
Poderíamos adicionar nós / bordas intermediários e brincar com custos e capacidades. A capacidade total de nossa nova construção precisa permanecer a mesma e o custo das diferentes alternativas deve permanecer proporcional.
Então, minhas perguntas são:
- Existem construções como esta em geral? (Quaisquer palavras-chave, links, documentos)
- Você pode sugerir uma solução para o meu problema específico?
fonte
Respostas:
No geral, a resposta é não. Se colocarmos restrições do tipo XOR nas arestas externas de um vértice, podemos provar que encontrar um fluxo min-cut-max é NP-Hard. A técnica é reduzir o 3-SAT a ele.
Vamos supor que existemn variáveis x1,x2,...,xn no 3-SAT e m cláusulas c1,c2,...,cm . Criamos um gráficoG(V,E) codificando a instância do problema 3-SAT. Para cada variávelxi , criamos um vértice vi conectado à fonte s com uma borda de ∞ capacidade. Mais dois vérticesui,wi , que estão conectados a vi , são criados para representar xi assumindo o valor 0 ou 1 também com margens de capacidade ∞ .
Para cada uma das cláusulasci , criamos um vértice oi∈G correspondente a ele e oi está conectado às variáveis ou suas negações na cláusula com limites de capacidade 1 . Por exemplo, seci=(x3∨x4∨¬x5) , nós conectamos a u3,u4,w5 com bordas de capacidade. Todosoi estão conectados à pia com bordas de capacidade 1.
Desde axi e ¬xi não pode assumir o mesmo valor, colocamos a restrição XOR nas bordas (vi,ui) , (vi,wi) , ∀i=1,2,3,...,n . Pode-se provar que existe um fluxo máximo de tamanhom se e somente se a instância 3-SAT for satisfatória. Como o problema está trivialmenteNP e a redução é polinomial, concluímos que a versão de decisão do fluxo da rede de restrição XOR é NP-Complete.
fonte
Para sua primeira pergunta, não conheço técnicas ou regras gerais gerais que você possa usar para modelar restrições arbitrárias em redes de fluxo. A maioria dos exemplos que eu vi são geralmente baseados em alguma intuição sobre a natureza das restrições e, muitas vezes, a princípio parecem arbitrários.
Para o seu caso em particular, ainda estou com um bom mapeamento para o fluxo máximo. No entanto, posso sugerir uma solução alternativa simples (você já deve ter percebido isso): Profundidade da primeira pesquisa da fontes .
Como o fluxo é restrito a apenas uma borda de saída para cada vértice, o que você tem é um caminho da origem até o destino. Esse caminho satisfaz as duas propriedades em que ele pode transportar o fluxo máximo entre outros caminhos da origems marcar t , e que possui o menor custo dentre todos os caminhos que poderiam levar o mesmo fluxo de s para t .
Basicamente, você enumera todos os caminhos des para t usando o DFS e escolha aquele que atenda aos seus critérios de custo mínimo e fluxo máximo. O próprio DFS levaO(|E|) tempo, que é mais eficiente que um algoritmo de fluxo máximo.
fonte
Para basear-se na resposta de Paresh, se todas as capacidades máximas forem uma (e todo o resto for inteiro), você também poderá dividir cada nó em dois para que o nó (n-) tenha todas as arestas internas, o nó (n +) tenha toda a saída bordas e (n-) e (n +) estão conectadas com uma borda de capacidade máxima 1. Resolva essa nova rede de custo mínimo e pronto.
Se as capacidades máximas não são todas iguais, o problema é mais difícil. Você pode formular o problema como um MIP (Programa Inteiro Misto). As únicas restrições de número inteiro são as restrições de XOR.
Felizmente, eles podem ser modelados como Conjuntos Ordenados Especiais - tipo SOS1 (consulte http://en.wikipedia.org/wiki/Special_ordered_set ). A maioria dos solucionadores de MIP representa especificamente as restrições do SOS1 e as tratará com muito mais eficiência (às vezes você precisa contar, às vezes, isso é possível - verifique os documentos do solucionador).
Embora o MIP acabe convergindo para a resposta ideal, para modelos realmente grandes, talvez você não tenha tempo para esperar que ele termine. Obter MIPs grandes para convergir geralmente é mais arte do que engenharia.
A próxima sugestão é muito mais trabalhosa. Você pode usar um solucionador de rede de custo mínimo como uma sub-rotina e possui ramificação nas bordas do XOR usando técnicas SOS1. Por exemplo, em cada ramificação, desative a metade das extremidades externas menos usadas, resolva a rede de custo mínimo (muito rápido) e repita até que todas as restrições XOR sejam atendidas.
Você pode priorizar a sequência de ramificação por seus próprios critérios (volume de fluxo, volume X de custo, capacidade reservada, número de arestas possíveis, etc.). Ao orientar a pesquisa, você pode aprimorar as partes da solução mais importantes para você.
Você não indica se sempre sabe se o seu problema é viável ou não. Se for sempre possível, você poderá se safar de uma estratégia de ramificação "livre de retorno", ou seja, você a seguirá como uma heurística.
Se não for garantido que o problema seja viável, um PIM poderá desaparecer para sempre. Uma heurística com base no exposto acima ainda pode ser valiosa para encontrar uma solução rapidamente com um número relativamente baixo de violações.
fonte
Em geral, a resposta é desconhecida, não impossível!
concluímos que a versão de decisão do fluxo da rede de restrição XOR é NP-Complete. portanto (é possível, podemos fazer isso) se e somente se P = NP.
fonte