J'ai un test sur la branche et l' algorithme lié . Je comprends théoriquement le fonctionnement de cet algorithme mais je n'ai pas trouvé d'exemples qui illustrent comment cet algorithme peut être implémenté pratiquement.
J'ai trouvé quelques exemples comme celui-ci mais je suis toujours confus à ce sujet. J'ai aussi cherché un problème de vendeur ambulant et je ne pouvais pas le comprendre.
J'ai besoin de quelques problèmes et comment ces problèmes peuvent-ils être résolus en utilisant branch et bound.
Réponses:
Appliquons Branch and Bound à Knapsack , j'espère que cela clarifiera le concept pour vous.
Nous avons éléments, étiquetés de 1 à n . v i est la valeur du i ème élément, et w i son poids. Nous essayons de les insérer dans un sac à dos pouvant contenir jusqu'à T poids au total, et nous essayons de maximiser la somme des valeurs de l'article que nous mettons dans le sac à dos.n 1 n vi i wi T
Notez que cela s'appelle ' Bounding ' car il implique généralement une sorte de limite inférieure ou supérieure: pour le critère ' même si je mets tous les éléments restants, la valeur des éléments que j'ai mis ne dépassera pas la meilleure configuration J'ai trouvé jusqu'à présent ', la valeur de votre meilleure configuration jusqu'à présent est une limite inférieure sur la meilleure configuration, donc tout ce qui ne dépassera jamais cette limite inférieure est voué à l'échec.
Vous pouvez rendre la partie «délimitation» aussi complexe que vous le souhaitez. Par exemple, les problèmes de programmation entiers sont souvent résolus à l'aide de relaxations: vous relaxez votre programme en un programme linéaire, que vous pouvez résoudre en temps polynomial, puis vous pouvez jeter beaucoup de cas pour vos variables binaires qui ne fonctionneront jamais de toute façon. Vous branchez ensuite sur les options restantes.
Notez que Branch and Bound ne vous donne généralement qu'une augmentation de la vitesse en pratique, mais pas en théorie: il est difficile de dire exactement quelle partie de l'arbre de recherche est découpée à l'aide de votre heuristique. Ceci est attesté par le nombre d'heuristiques différentes utilisées en pratique sur de tels problèmes. Si vous n'avez pas de chance, l'arborescence de recherche restante reste énorme même avec beaucoup de limites.
la source
Considérez la planification , la tâche d'affecter des tâches avec certaines durées et délais aux machines. Nous supposons un temps discret. Beaucoup de ces problèmes sont de niveau NP (O).
La version de décision de ce problème est NP-hard; cela peut être vu par réduction de 3PARTITION .
Chose intéressante, si nous autorisons la préemption , c'est-à-dire la permutation des travaux actifs, le problème peut être résolu en temps quadratique par la première heuristique de la première échéance (aux dates d'échéance modifiées). Il est facile de voir que la solution optimale de cette variante ne peut pas être pire que la solution optimale du problème d'origine.
Maintenant, afin d'appliquer Branch & Bound à ce problème, nous devons corriger certains paramètres:
Vous devez le faire pour chaque application de B&B.
Pour un exemple concret, considérons cette instance de :1∣ri∣Lmax
avec les délais de traitement des travaux, les dates de sortie et les dates d'échéance.r i d ipi ri di
En exécutant B&B comme spécifié ci-dessus, cela se produit:
Ce GIF ne fait pas de boucle. Rechargez- le dans un nouvel onglet pour voir depuis le début.
[ source ] [ version statique ]
Notez que sur 41 nœuds, seuls quatre sont visités correctement et seulement pour dix les bornes inférieures sont calculées.
la source