Explicação de ramificação e limite

9

Eu tenho um teste sobre o algoritmo de ramificação e limite . Entendo teoricamente como esse algoritmo funciona, mas não consegui encontrar exemplos que ilustrem como esse algoritmo pode ser implementado praticamente.

Encontrei alguns exemplos como este, mas ainda estou confuso. Também procurei o problema do vendedor ambulante e não consegui entender.

O que eu preciso é de alguns problemas e como esses problemas podem ser resolvidos usando branch e bound.

MR.NASS
fonte
11
O que foi difícil de entender? você tentou voltar atrás antes?
Sim, eu tentei. O problema com o B&B é que, se eu tiver um problema que possa ser resolvido com o B&B, não sei como obter o limite inferior para cada nó e também como obter a função objetivo. Além disso, qual é o primeiro valor do melhor que eu comparo com cada limite inferior?
MR.NASS
2
@ MR.NASS Não tenho certeza do que exatamente você está dizendo em seu último comentário. Deixe-me tentar explicar. B&B é um método para podar a árvore de pesquisa. Pode ser aplicado a problemas que precisam otimizar uma função objetiva. Geralmente é aplicado a problemas de otimização discretos ou combinatórios. Em cada etapa, você tenta encontrar um limite inferior da função objetivo para todas as soluções possíveis restantes. Se o limite inferior for maior que a melhor solução atual, você poderá interromper a pesquisa e voltar atrás (removendo a árvore de pesquisa), pois não pode haver solução com uma pontuação mais baixa.
George
2
Geralmente, a pessoa resolve uma versão relaxada do problema para obter um limite inferior. Para Programas Inteiros Mistos, esse geralmente é o relaxamento da Programação Linear.
Opte
2
@ MR.NASS Depende da função objetivo. Como Sid disse, você normalmente resolve uma versão relaxada do problema em questão. Geralmente, se deseja usar uma versão relaxada, que ofereça uma boa aproximação do problema inicial e possa ser resolvida com eficiência. Observe que a versão relaxada deve fornecer um limite inferior que seja no máximo tão alto quanto o limite inferior verdadeiro para funcionar corretamente. Outro exemplo: suponha que você queira resolver o MAXSAT com um método B&B. Para uma determinada atribuição parcial de verdade, você pode calcular facilmente o número de cláusulas satisfeitas. Um limite superior (uma vez que este é um problema de maximização) ... #
George

Respostas:

10

Vamos aplicar o Branch and Bound ao Knapsack , espero que isso torne o conceito claro para você.

Temos itens, rotulados de a . é o valor do ésimo item e seu peso. Tentamos encaixá-los em uma mochila que pode conter até peso no total, e tentamos maximizar a soma dos valores do item que colocamos na mochila.1 n v i i w i Tn1nviiwiT

A abordagem comum de retorno é a nossa base. Primeiro colocamos no pacote e depois resolvemos o problema para os itens restantes com recursão. Em seguida, removemos a do pacote e resolvemos o problema para os itens restantes novamente e retornamos a melhor configuração que encontramos. n - 1 v 1 n - 1v1n1v1n1

Esse retorno é a parte 'Ramificação' de Ramificação e limite. Você ramifica (no caso da mochila) dois casos: 'item faz parte da solução' e 'item não faz parte da solução'. Você pode visualizar isso como uma árvore binária, onde o filho esquerdo é um caso e o filho direito é o outro caso. Essa árvore é a árvore de pesquisa (ou espaço de pesquisa ): sua profundidade é e, portanto, possui nós. O algoritmo, portanto, tem um tempo de execução exponencial no número de itens.i n O ( 2 N )iinO(2n)

Agora chegamos à parte 'Limite': tentamos encontrar critérios para que possamos dizer 'essa configuração nunca funciona, então é melhor não nos incomodarmos em computar isso'. Um exemplo desse critério é 'o peso dos itens que já colocamos na mochila excede ': se adicionamos, digamos, os primeiros itens à mochila e, portanto, ela já está cheia, não há não adianta tentar colocar os itens até na mochila também, mas também não adianta tentar ajustar qualquer subconjunto de até na mochila, pois ela já está cheia, então economizamos cerca de casos. Outro exemplo é 'n / 2 nTn/2n n / 2 + 1 n 2 n / 2n/2+1nn/2+1n2n/2mesmo se eu colocar todos os itens restantes, o valor dos itens que eu coloquei não excederá a melhor configuração que encontrei até agora '.

Esses critérios essencialmente cortam partes da árvore de pesquisa: em algum nó, você diz, por exemplo, 'a subárvore esquerda não me dará uma configuração melhor, porque X', então você esquece essa subárvore e não a explora. Uma subárvore de profundidade que você cortou dessa maneira economiza nós, que podem aumentar bastante a velocidade se você tiver sorte.O ( 2 d )dO(2d)

Observe que isso se chama ' Limite ' porque geralmente envolve algum tipo de limite inferior ou superior: para o critério ' mesmo que eu coloque todos os itens restantes, o valor dos itens que eu coloquei não excederá a melhor configuração Eu descobri até agora ', o valor da sua melhor configuração até agora é um limite inferior para a melhor configuração; portanto, qualquer coisa que nunca ultrapasse esse limite inferior está fadada ao fracasso.

Você pode tornar a parte 'Limite' a mais complexa possível. Por exemplo, problemas de programação inteira geralmente são resolvidos usando relaxações: você relaxa seu programa para um programa linear, que pode ser resolvido em tempo polinomial, e então pode jogar fora muitos casos de suas variáveis ​​binárias que nunca funcionarão de qualquer maneira. Em seguida, você ramifica nas opções restantes.

Observe que Branch and Bound geralmente apenas aumentam a velocidade na prática, mas não na teoria: é difícil dizer exatamente quanto da árvore de pesquisa é cortada usando suas heurísticas. Isso é testemunhado pelo número de heurísticas diferentes usadas na prática em tais problemas. Se você não tiver sorte, a árvore de pesquisa restante permanece enorme, mesmo com muitos limites.

Alex ten Brink
fonte
4

Considere a programação , a tarefa de atribuir tarefas com determinadas durações e prazos às máquinas. Assumimos tempo discreto. Muitos desses problemas são NP (O) -hard.

Em particular, esta resposta falará sobre , que é o cronograma1riLmax

  • em uma máquina
  • problemas com datas de lançamento e nós
  • minimizar o atraso máximo , que é a diferença máxima entre o prazo final e o tempo de conclusão em todos os trabalhos.Lmax

A versão de decisão deste problema é NP-difícil; isso pode ser visto pela redução de 3PARTITION .

É interessante notar que , se permitirmos a preempção , que é a troca de trabalhos ativos, o problema pode ser resolvido em tempo quadrático pela heurística da Data de vencimento mais antiga (nas datas de vencimento modificadas). É fácil ver que a solução ideal dessa variante não pode ser pior do que a solução ideal do problema original.

Agora, para aplicar Branch & Bound a esse problema, precisamos corrigir alguns parâmetros:

  • Calculamos limites inferiores, permitindo a preempção e usando o EDD.
  • Ramificamos fixando todos os trabalhos não programados como o próximo.
  • Primeiro vamos à criança com o limite inferior menor.

Você precisa fazer isso para todas as aplicações do B&B.


Para um exemplo concreto, considere esta instância de :1riLmax

i1234pi4265ri0135di8121110

com os tempos de processamento dos trabalhos, as datas de lançamento e as datas de vencimento.piridi

Executando o B&B conforme especificado acima, isso acontece:

algoritmo
Este GIF não faz loop. Recarregue -o em uma nova guia para ver desde o início.
[ fonte ] [ versão estática ]

Observe que dos 41 nós, apenas quatro são visitados adequadamente e apenas dez são computados limites inferiores.

Rafael
fonte