Branch and bound (metodo)
Il metodo dei rami e dei limiti (in inglese Branch and Bound, abbreviato B&B o BnB) è un paradigma generale per la costruzione di algoritmi esatti per la risoluzione di problemi di ottimizzazione discreta e combinatoria, in particolare di problemi NP-difficili[1]. Il metodo rappresenta una strategia di enumerazione guidata, in cui l'intero insieme delle soluzioni ammissibili viene suddiviso sequenzialmente in sottoinsiemi (ramificazione), e per ciascuno di essi vengono calcolate stime (limiti) del valore della funzione obiettivo. Queste stime consentono di scartare (potare) quei sottoinsiemi che non possono certamente contenere soluzioni ottimali, riducendo in modo sostanziale lo spazio di ricerca[2].
Il metodo fu proposto per la prima volta da A. Land e A. Doig nel 1960 per la risoluzione di problemi di programmazione intera[3]. Da allora è diventato uno degli approcci più fondamentali nella ricerca operativa e nell'informatica. La caratteristica chiave del metodo è la sua flessibilità: non si tratta di un algoritmo specifico, bensì di uno schema strategico di alto livello (framework), adattivo alla struttura del problema da risolvere.
Componenti chiave del metodo
Il metodo si basa su tre operazioni fondamentali, applicate ai sottoinsiemi dello spazio delle soluzioni, organizzati sotto forma di albero di ricerca.
- Ramificazione (in inglese Branching) — è il processo di suddivisione ricorsiva dell'insieme corrente di soluzioni ammissibili in diversi sottoinsiemi più piccoli, generalmente disgiunti . Ciascun sottoinsieme corrisponde a un nuovo sottoproblema ed è rappresentato come nodo figlio nell'albero di ricerca. Ad esempio, nei problemi di programmazione intera la ramificazione viene spesso effettuata sulla variabile che assume un valore frazionario nella soluzione della rilassazione LP.
- Calcolo dei limiti (in inglese Bounding) — per ogni nodo dell'albero di ricerca (cioè per ogni sottoproblema) viene calcolata una stima del valore della funzione obiettivo. Per un problema di minimizzazione, questa è il limite inferiore (lower bound), che costituisce una stima garantita dal basso per qualsiasi soluzione del sottoinsieme dato. Nella maggior parte dei casi questa stima si ottiene risolvendo la rilassazione del sottoproblema originale — una versione semplificata in cui alcuni vincoli complessi (ad esempio, l'integrità) vengono temporaneamente ignorati. La più comune è la rilassazione LP.
- Potatura (in inglese Pruning) — è il processo di esclusione dalla considerazione di nodi (e dei sottoalberi a essi corrispondenti) che certamente non possono contenere la soluzione ottimale. Un nodo viene potato in uno dei seguenti casi:
- Potatura per limite: Il limite inferiore per il nodo dato risulta non migliore (cioè maggiore o uguale, nel caso di minimizzazione) rispetto al valore della migliore soluzione ammissibile trovata fino a quel momento, denominata incumbent (incumbent).
- Potatura per ammissibilità: La soluzione della rilassazione del nodo è ammissibile per il problema originale (ad esempio, tutte le variabili sono intere). Tale soluzione viene confrontata con l'incumbent corrente e, se è migliore, l'incumbent viene aggiornato. Non è necessaria alcuna ulteriore ramificazione da questo nodo.
- Potatura per inammissibilità: Il sottoproblema corrispondente al nodo non ha soluzioni ammissibili.
Algoritmo generale
L'algoritmo generalizzato del metodo dei rami e dei limiti per un problema di minimizzazione può essere descritto nei seguenti passi:
- Inizializzazione: Trovare una soluzione ammissibile iniziale (ad esempio, tramite un'euristica) e impostare il suo valore come limite superiore iniziale (incumbent) . Creare la coda dei nodi attivi , contenente il nodo radice (il problema originale).
- Ciclo principale: Finché la coda non è vuota:
- Selezionare un nodo da in accordo con la strategia di ricerca (ad esempio, ricerca in profondità o per migliore stima).
- Risolvere la rilassazione per questo nodo, ottenendo il limite inferiore .
- Potare il nodo se .
- Se la soluzione della rilassazione è ammissibile per il problema originale, aggiornare l'incumbent: .
- Se il nodo non è stato potato e la soluzione non è ammissibile, eseguire la ramificazione, suddividendolo in nodi figli, e aggiungerli alla coda .
- Terminazione: Quando la coda diventa vuota, l'algoritmo termina. La soluzione trovata, corrispondente all'incumbent , è globalmente ottimale.
Proprietà chiave e teoremi
- Correttezza e convergenza: L'algoritmo garantisce di trovare la soluzione globalmente ottimale in un numero finito di passi, a condizione che l'insieme delle soluzioni ammissibili sia finito e che la procedura di ramificazione sia convergente (ovvero che, nella suddivisione ricorsiva, i sottoinsiemi si «contraggano» verso dei punti)[4].
- Strategia di ricerca: L'efficienza dell'algoritmo dipende fortemente dalla strategia di scelta del prossimo nodo da ramificare (ad esempio, ricerca in profondità, ricerca in ampiezza, ricerca per migliore stima) e dalla scelta della variabile di ramificazione. I moderni solver utilizzano spesso strategie ibride[5].
Esempi
- Problema di programmazione intera: Applicazione classica del metodo. Come rilassazione si utilizza la programmazione lineare. La ramificazione avviene sulla variabile frazionaria , creando due sottoproblemi con vincoli aggiuntivi e .
- Problema del commesso viaggiatore: Lo spazio delle soluzioni è costituito da tutti i possibili cicli hamiltoniani nel grafo. La ramificazione può essere effettuata sugli archi (includere/escludere un arco dal percorso). Come limiti inferiori possono essere utilizzate le soluzioni di problemi più semplici, come il problema di assegnamento o la costruzione dell'albero di copertura minimo[6].
Concetti correlati e applicazioni
- Metodo dei rami e dei tagli (Branch-and-Cut): Metodo ibrido che combina B&B con il metodo dei piani di taglio. In ogni nodo dell'albero di ricerca, oltre alla soluzione della rilassazione, vengono generate disuguaglianze aggiuntive (tagli) che rafforzano il limite inferiore, portando a una potatura più efficiente dei rami.
- Ricerca con backtracking (Backtracking): Il metodo dei rami e dei limiti può essere considerato una generalizzazione di questo algoritmo per problemi di ottimizzazione.
- Potatura alfa-beta: Analogia concettuale utilizzata negli alberi di gioco per potare i rami sicuramente perdenti.
Vedi anche
- Programmazione intera
- Ottimizzazione combinatoria
- Problema del commesso viaggiatore
- Problema NP-difficile
- Metodo del simplesso
Note
[1] [2] [3] [4] [5] [6] </references>
- ↑ 1.0 1.1 Wikipedia contributors. (2025). Branch and bound. In Wikipedia, The Free Encyclopedia. Retrieved 2025-10-26, from https://en.wikipedia.org/wiki/Branch_and_bound
- ↑ 2.0 2.1 Wikipedia contributors. (2023). Метод ветвей и границ. In Русская Википедия. Retrieved 2025-10-26, from https://ru.wikipedia.org/wiki/Метод_ветвей_и_границ
- ↑ 3.0 3.1 Land, A. H.; Doig, A. G. (1960). An automatic method of solving discrete programming problems. Econometrica, 28(3), 497–520. DOI: 10.2307/1910129. URL: https://www.jstor.org/stable/1910129
- ↑ 4.0 4.1 Conitzer, V. (2008). Solving (mixed) integer programs using branch and bound. Duke University, Department of Computer Science. URL: https://courses.cs.duke.edu/spring08/cps296.2/branch_and_bound.pdf
- ↑ 5.0 5.1 Maudet, G.; Danoy, G. (2024). Search Strategy Generation for Branch and Bound Using Genetic Programming. arXiv preprint arXiv:2412.09444. DOI: 10.48550/arXiv.2412.09444. URL: https://arxiv.org/abs/2412.09444
- ↑ 6.0 6.1 Little, J. D. C.; Murty, K. G.; Sweeney, D. W.; Karel, C. (1963). An Algorithm for the Traveling Salesman Problem. Operations Research, 11(6), 972–989. DOI: 10.1287/opre.11.6.972. URL: https://dspace.mit.edu/bitstream/handle/1721.1/46907/branchboundmetho00litt.pdf