Uma das melhores soluções é provavelmente baseada em um relaxamento de programação linear ou programação . Para o último, a ramificação e o retorno serão implícitos, e você não precisará gerenciá-lo.
Eu já vi isso resolvido de duas maneiras usando essa técnica. Também podemos melhorar um pouco o seu algoritmo de delimitação.
O método do livro didático
Usando variáveis binárias xeu j representando f( i ) = j, você pode definir variáveis contínuas f( i ) =∑nj = 1jxeu j
Adicionar restrições ∑Euxeu j= 1 e ∑jxEuj= 1 representando que uma posição recebe um e apenas um nó.
Para cada borda, o custo ce tem duas restrições: ce≥ f( I ) - f( J ) e ce≥ f( J ) - f( I )e você deseja minimizar ∑ece
Você pode dar esse problema a um solucionador de programação inteiro, que ficará feliz em fazer o retorno para você e muito mais - ou você pode resolver o relaxamento da programação linear a cada vez (apenas se quiser aprender, o solucionador o otimiza internamente).
Outro relaxamento
Em vez de usar as posições como variáveis binárias, você pode usar f( I ) < f( J ) ie nó Eu vai antes do nó j. Isso é mais adaptado se você deseja fazer a ramificação por conta própria e não especificar essas variáveis explicitamente.
Com essa abordagem, às vezes você pode ter um problema mais rápido para resolver em cada nó - aqui ele pode ser resolvido como um problema mais simples de fluxo de custo mínimo, como mostra este documento . Eu não recomendo, a menos que você esteja disposto a investigar muito tempo e pesquisar seu problema.
Outras técnicas
Para ramificação e limite, qualquer limite inferior na sua função de custo será suficiente. Para pequenos problemas, sua abordagem delimitadora é perfeitamente adequada.
Você poderia torná-lo mais rígido: para cada aresta com um nó não colocado, escolha a melhor etiquetagem livre possível para estimar seu custo. Várias arestas podem usar o mesmo posicionamento para nós diferentes, mas isso será melhor do que estimar o custo como 0.
Há muitas variações possíveis nesse esquema: escolha a melhor etiqueta livre para cada nó não rotulado (independentemente de sobreposições) ou considere sobreposições apenas dentro de pequenos grupos de nós.