Estou tentando resolver esse problema de ramificação e limite, mas não consegui encontrar nenhuma função de custo aproximado que seja melhor que o custo.
Digamos é um gráfico de nós . Para uma permutação dos nós de , o peso de cada aresta será . O peso total deserá a soma dos pesos de suas arestas. Você pode pensar em como uma remarcação dos nós de , Onde é o novo rótulo do nó .
Estou tentando encontrar uma permutação que resulta em um peso total mínimo de .
Agora, tentando resolver isso, tudo o que pude encontrar é encontrar o custo aproximado que é a soma dos pesos de cada borda concluída até agora (para cada nó da árvore de retorno) e prosseguir a partir do nó de custo mínimo. Gostaria de saber se alguém pode me ajudar com uma melhor fórmula de aproximação.
fonte
Respostas:
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áriasxeu 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 custoce 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 usarf( 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.
fonte