Dal ve sınır - Branch and bound

Dal ve sınır (BB, B & Bveya BnB) bir algoritma tasarım paradigması için ayrık ve kombinatoryal optimizasyon problemlerin yanı sıra matematiksel optimizasyon. Dal-ve-sınır algoritması, aday çözümlerin sistematik bir şekilde sıralanmasından oluşur. durum alanı araması: aday çözümler dizisi, bir köklü ağaç tam set kökte. Algoritma araştırıyor şubeler çözüm kümesinin alt kümelerini temsil eden bu ağacın. Bir şubenin aday çözümleri sıralanmadan önce, şube, alt ve üst tahmini ile karşılaştırılır. sınırlar en uygun çözüme bağlıdır ve algoritma tarafından şimdiye kadar bulunan en iyisinden daha iyi bir çözüm üretemezse atılır.

Algoritma, arama uzayının bölgelerinin / dallarının alt ve üst sınırlarının verimli bir şekilde tahmin edilmesine bağlıdır. Hiçbir sınır yoksa, algoritma kapsamlı bir aramaya dönüşür.

Yöntem ilk olarak tarafından önerildi Ailsa Land ve Alison Doig araştırma yaparken Londra Ekonomi Okulu sponsorluğunda İngiliz Petrol[1][2] 1960'da ayrık programlama ve çözmek için en yaygın kullanılan araç haline geldi NP-zor optimizasyon problemleri.[3] "Dal ve sınır" adı ilk olarak Little'ın çalışmasında ortaya çıktı. et al. üzerinde seyyar satıcı sorunu.[4][5]

Genel Bakış

Dal-ve-sınırlama algoritmasının amacı bir değer bulmaktır x gerçek değerli bir fonksiyonun değerini maksimize eden veya en aza indiren f(x), bazı setler arasında nesnel işlev olarak adlandırılır S kabul edilebilir veya aday çözümler. Set S arama alanı olarak adlandırılır veya Uygulanabilir bölge. Bu bölümün geri kalanında, f(x) arzulandı; bu varsayım geliyor genelliği kaybetmeden maksimum değeri bulabileceğinden f(x) minimum olanı bularak g(x) = −f(x). B & B algoritması iki ilkeye göre çalışır:

  • Arama alanını yinelemeli olarak daha küçük alanlara böler, ardından en aza indirir. f(x) bu daha küçük alanlarda; bölünmeye denir dallanma.
  • Tek başına dallanma, kaba kuvvet aday çözümlerin numaralandırılması ve hepsinin test edilmesi. Kaba kuvvet aramasının performansını iyileştirmek için bir B & B algoritması şunları izler: sınırlar bulmaya çalıştığı minimum düzeyde ve bu sınırları "kuru erik "kanıtlayabileceği aday çözümleri ortadan kaldıran arama alanı, optimal bir çözüm içermeyecektir.

Bu ilkeleri belirli bir optimizasyon problemi için somut bir algoritmaya dönüştürmek, bir tür veri yapısı aday çözüm kümelerini temsil eder. Böyle bir temsile bir örnek problemin. Bir örneğin aday çözüm kümesini belirtin ben tarafından Sben. Örnek temsilinin üç işlemle gelmesi gerekir:

  • şube (ben) her biri bir alt kümesini temsil eden iki veya daha fazla örnek üretir Sben. (Tipik olarak, alt kümeler ayrık algoritmanın aynı aday çözümü iki kez ziyaret etmesini önlemek için, ancak bu gerekli değildir. Bununla birlikte, aşağıdakiler arasında en uygun çözüm Sben alt kümelerin en az birinde yer almalıdır.[6])
  • ciltli(ben) temsil ettiği alandaki herhangi bir aday çözümün değeri için daha düşük bir sınır hesaplar ben, yani, ciltli(ben) ≤ f(x) hepsi için x içinde Sben.
  • çözüm(ben) olup olmadığını belirlemek ben tek bir aday çözümü temsil eder. (İsteğe bağlı olarak, yoksa, operasyon, aralarında uygun bir çözüm bulmayı seçebilir. Sben.[6]) Eğer çözüm(ben) bir çözüm döndürür sonra f(çözüm(ben)) Tüm uygulanabilir çözümler alanı üzerinde optimal objektif değer için bir üst sınır sağlar.

Bu işlemleri kullanarak, bir B&B algoritması, yukarıdan aşağıya yinelemeli bir arama gerçekleştirir. ağaç şube işlemi tarafından oluşturulan örneklerin sayısı. Bir örneği ziyaret ettiğinizde benolup olmadığını kontrol eder ciltli(ben) şimdiye kadar bulunan bir üst sınırdan daha büyük; Öyleyse, ben güvenli bir şekilde aramadan çıkarılabilir ve özyineleme durur. Bu budama adımı genellikle o ana kadar incelenen tüm örnekler arasında görülen minimum üst sınırı kaydeden bir genel değişkenin sürdürülmesiyle gerçekleştirilir.

Genel sürüm

Aşağıda, keyfi bir amaç fonksiyonunu en aza indirmek için genel bir dal ve sınır algoritmasının iskeleti verilmiştir. f.[3] Bundan gerçek bir algoritma elde etmek için, bir sınırlama işlevi gerekir ciltli, alt sınırlarını hesaplayan f arama ağacının düğümlerinde ve probleme özgü dallanma kuralı. Bu nedenle, burada sunulan genel algoritma bir yüksek dereceli fonksiyon.

  1. Bir sezgisel, bir çözüm bul xh optimizasyon problemine. Değerini saklayın, B = f(xh). (Buluşsal yöntem yoksa, B sonsuzluğa.) B şimdiye kadar bulunan en iyi çözümü gösterecek ve aday çözümlerde üst sınır olarak kullanılacaktır.
  2. Sorunun değişkenlerinin hiçbirinin atanmadığı kısmi bir çözümü tutmak için bir kuyruğu başlatın.
  3. Sıra boşalana kadar döngü yapın:
    1. Bir düğüm alın N sıra dışı.
    2. Eğer N tek bir aday çözümü temsil eder x ve f(x) < B, sonra x şimdiye kadarki en iyi çözüm. Kaydedin ve ayarlayın Bf(x).
    3. Başka, şube açık N yeni düğümler üretmek Nben. Bunların her biri için:
      1. Eğer ciltli(Nben) > B, hiçbir şey yapma; Bu düğümdeki alt sınır, problemin üst sınırından daha büyük olduğu için, hiçbir zaman en uygun çözüme götürmez ve atılabilir.
      2. Başka, sakla Nben kuyrukta.

Birkaç farklı kuyruk veri yapıları kullanılabilir. Bu FIFO kuyruğu tabanlı uygulama, bir enine arama. Bir yığın (LIFO kuyruğu) bir önce derinlik algoritması. Bir en iyi dallanma ve sınır algoritması, bir öncelik sırası bu, düğümleri alt sınırlarında sıralar.[3] Bu öncül ile en iyi ilk arama algoritmalarına örnekler: Dijkstra algoritması ve onun soyundan gelen Arama. Önce derinlik varyantı, bir ilk çözüm üretmek için iyi bir buluşsal yöntem olmadığında önerilir, çünkü hızlı bir şekilde tam çözümleri ve dolayısıyla üst sınırları üretir.[7]

Sözde kod

Bir C ++ Yukarıdakine benzer sözde kod uygulaması şudur:

 1 // C ++ - Branch and bound uygulamasına benzer,  2 // f hedef fonksiyonunun en aza indirilmesi gerektiğini varsayarsak 3 Kombinatoryal Çözüm branch_and_bound_solve( 4     Kombinatoryal Problem sorun,  5     Amaç fonksiyonu amaç fonksiyonu / * f * /, 6     Sınırlama Fonksiyonu alt_bound_function /*ciltli*/)  7 { 8     // Yukarıdaki 1. Adım 9     çift problem_upper_bound = std::sayısal_sınırlar<çift>::sonsuzluk; // = B10     Kombinatoryal Çözüm heuristic_solution = heuristic_solve(sorun); // x_h11     problem_upper_bound = amaç fonksiyonu(heuristic_solution); // B = f (x_h)12     Kombinatoryal Çözüm current_optimum = heuristic_solution;13     // Yukarıdaki 2. Adım14     kuyruk<CandidateSolutionTree> candidate_queue;15     // soruna özgü kuyruk başlatma16     candidate_queue = populate_candidates(sorun);17     süre (!candidate_queue.boş()) { // Yukarıdaki 3. Adım18         // Adım 3.119         CandidateSolutionTree düğüm = candidate_queue.pop();20         // "düğüm" yukarıdaki N'yi temsil eder21         Eğer (düğüm.temsil_single_candidate()) { // Adım 3.222             Eğer (amaç fonksiyonu(düğüm.aday()) < problem_upper_bound) {23                 current_optimum = düğüm.aday();24                 problem_upper_bound = amaç fonksiyonu(current_optimum);25             }26             // aksi takdirde, düğüm optimum olmayan tek bir adaydır27         }28         Başka { // Adım 3.3: düğüm, aday çözümlerin bir dalını temsil eder29             // "child_branch", yukarıdaki N_i'yi temsil eder30             için (Oto&& çocuk dalı : düğüm.aday_odlar) {31                 Eğer (alt_bound_function(çocuk dalı) <= problem_upper_bound) {32                     candidate_queue.sıraya almak(çocuk dalı); // Adım 3.3.233                 }34                 // aksi takdirde, bağlı (N_i)> B böylece dalı buduyoruz; adım 3.3.135             }36         }37     }38     dönüş current_optimum;39 }

Yukarıdaki sözde kodda, işlevler heuristic_solve ve populate_candidates alt yordamlar olarak adlandırılan, soruna uygun şekilde sağlanmalıdır. Fonksiyonlar f (amaç fonksiyonu) ve ciltli (alt_bound_function) olarak kabul edilir fonksiyon nesneleri yazıldığı gibi ve karşılık gelebilir lambda ifadeleri, işlev işaretçileri veya functors C ++ programlama dilinde, diğer türlerin yanı sıra çağrılabilir nesneler.

İyileştirmeler

Ne zaman bir vektör dal ve sınır algoritmaları ile birleştirilebilir aralık analizi[8] ve müteahhit küresel minimumda garantili muhafazalar sağlamak için teknikler.[9][10]

Başvurular

Bu yaklaşım, bir dizi NP-zor sorunlar

Dal-ve-sınır aynı zamanda çeşitli Sezgisel. Örneğin, üst ve alt sınırlar arasındaki boşluk belirli bir eşikten daha küçük hale geldiğinde dallanmanın durdurulması istenebilir. Bu, çözüm "pratik amaçlar için yeterince iyi" olduğunda kullanılır ve gerekli hesaplamaları büyük ölçüde azaltabilir. Bu tür bir çözüm, özellikle kullanılan maliyet işlevi gürültülü veya sonucudur istatistiksel tahminler ve bu nedenle kesin olarak bilinmemektedir, daha ziyade yalnızca belirli bir değer aralığına sahip olduğu bilinmektedir. olasılık.[kaynak belirtilmeli ]

Diğer algoritmalarla ilişki

Nau et al. şube ve sınır genellemesini sunarak, A *, B * ve Alfa beta arama algoritmaları yapay zeka.[16]

Dış bağlantılar

  • LiPS - Doğrusal, tamsayı ve hedef programlama problemlerini çözmek için tasarlanmış, kullanımı kolay ücretsiz GUI programı.
  • Cbc - (Coin-or branch and cut), C ++ ile yazılmış açık kaynaklı bir karma tamsayı programlama çözücüdür.

Ayrıca bakınız

Referanslar

  1. ^ A. H. Land ve A. G. Doig (1960). "Ayrık programlama problemlerini çözmenin otomatik bir yöntemi". Ekonometrik. 28 (3). s. 497–520. doi:10.2307/1910129.
  2. ^ "Personel Haberleri". www.lse.ac.uk. Alındı 2018-10-08.
  3. ^ a b c Clausen, Jens (1999). Dal ve Sınır Algoritmaları - İlkeler ve Örnekler (PDF) (Teknik rapor). Kopenhag Üniversitesi. Arşivlenen orijinal (PDF) 2015-09-23 tarihinde. Alındı 2014-08-13.
  4. ^ a b Küçük, John D. C .; Murty, Katta G .; Sweeney, Dura W .; Karel, Caroline (1963). "Gezgin satıcı problemi için bir algoritma" (PDF). Yöneylem Araştırması. 11 (6): 972–989. doi:10.1287 / opre.11.6.972.
  5. ^ Balas, Egon; Toth, Paolo (1983). Gezgin satıcı problemi için şube ve sınır yöntemleri (PDF) (Bildiri). Carnegie Mellon Üniversitesi Endüstri Yönetimi Enstitüsü. Arşivlenen orijinal (PDF) 20 Ekim 2012 tarihinde.
  6. ^ a b Bader, David A .; Hart, William E .; Phillips, Cynthia A. (2004). "Dal ve Sınır İçin Paralel Algoritma Tasarımı" (PDF). Greenberg, H. J. (ed.). Yöneylem Araştırmasında Ortaya Çıkan Metodolojiler ve Uygulamalar Üzerine Öğreticiler. Kluwer Academic Press. Arşivlenen orijinal (PDF) 2017-08-13 tarihinde. Alındı 2015-09-16.
  7. ^ Mehlhorn, Kurt; Sanders, Peter (2008). Algoritmalar ve Veri Yapıları: Temel Araç Kutusu (PDF). Springer. s. 249.
  8. ^ Moore, R. E. (1966). Aralık Analizi. Englewood Kayalığı, New Jersey: Prentice-Hall. ISBN  0-13-476853-1.
  9. ^ Jaulin, L .; Kieffer, M .; Didrit, O .; Walter, E. (2001). Uygulamalı Aralık Analizi. Berlin: Springer. ISBN  1-85233-219-0.
  10. ^ Hansen, E.R. (1992). Aralık Analizi kullanarak Global Optimizasyon. New York: Marcel Dekker.
  11. ^ Conway, Richard Walter; Maxwell, William L .; Miller, Louis W. (2003). Çizelgeleme Teorisi. Courier Dover Yayınları. pp.56–61.
  12. ^ Fukunaga, Keinosuke; Narendra, Patrenahallı M. (1975). "Bilgi işlem için bir dal ve sınır algoritması k-en yakın komşular ". Bilgisayarlarda IEEE İşlemleri: 750–753. doi:10.1109 / t-c.1975.224297.
  13. ^ Narendra, Patrenahallı M .; Fukunaga, K. (1977). "Özellik alt kümesi seçimi için bir dal ve sınır algoritması" (PDF). Bilgisayarlarda IEEE İşlemleri. C-26 (9): 917–922. doi:10.1109 / TC.1977.1674939.
  14. ^ Hazimeh, Hüseyin; Mazumder, Rahul; Saab Ali (2020). "Ölçekte Seyrek Regresyon: Birinci Derece Optimizasyonda Köklenen Dal-ve-Sınır". arXiv:2004.06152.
  15. ^ Nowozin, Sebastian; Lampert, Christoph H. (2011). "Bilgisayarla Görmede Yapılandırılmış Öğrenme ve Tahmin". Bilgisayar Grafiği ve Görüntüde Temeller ve Eğilimler. 6 (3–4): 185–365. CiteSeerX  10.1.1.636.2651. doi:10.1561/0600000033. ISBN  978-1-60198-457-9.
  16. ^ Nau, Dana S .; Kumar, Vipin; Kanal, Laveen (1984). "Genel dal ve sınır ve bunun A ∗ ve AO ∗ ile ilişkisi" (PDF). Yapay zeka. 23 (1): 29–58. doi:10.1016/0004-3702(84)90004-3.