Şube ve Sınır açıklaması


9

Şube ve bağlı algoritma hakkında bir testim var. Teorik olarak bu algoritmanın nasıl çalıştığını anlıyorum, ancak bu algoritmanın pratik olarak nasıl uygulanabileceğini gösteren örnekler bulamadım.

Ben gibi bazı örnekler bulduk bu bir ama hala bu konuda kafam karıştı. Seyahat eden satıcı problemini de aradım ve anlayamadım.

İhtiyacım olan bazı problemler ve bu problemlerin şube ve sınır kullanılarak nasıl çözülebileceğidir.


1
Anlaması zor olan neydi? daha önce geri izlemeyi denedin mi?

Evet, denedim. B & B ile sorun B & B ile çözülebilecek bir sorun alırsanız, nasıl her düğüm için alt sınır alabilir ve ayrıca nasıl objektif işlevi alabilirsiniz bilmiyorum. Ayrıca, her alt sınır ile karşılaştırdığım en iyinin ilk değeri nedir?
MR.NASS

2
@ MR.NASS Son yorumunuzda tam olarak ne söylediğinizden emin değilim. Anlatmaya çalışayım. B & B, arama ağacını budama için bir yöntemdir. Nesnel bir işlevi optimize etmek zorunda olan problemlere uygulanabilir. Genellikle ayrık veya kombinatoryal optimizasyon problemlerine uygulanır. Her adımda, kalan tüm olası çözümler için objektif fonksiyonun alt sınırını bulmaya çalışırsınız. Alt sınır geçerli en iyi çözümden daha yüksekse, daha düşük puanlı bir çözüm bulunamayacağından, aramayı ve geri izlemeyi (arama ağacını budama) durdurabilirsiniz.
George

2
Genellikle bir alt sınır elde etmek için sorunun rahat bir sürümünü çözer. Karma Tamsayı Programları için bu genellikle Doğrusal Programlama gevşemesidir.
Opt

2
@ MR.NASS Bu, nesnel fonksiyona bağlıdır. Sid'in söylediği gibi, genellikle verilen sorunun rahat bir sürümünü çözersiniz. Genellikle, ilk sorunun iyi bir tahminini veren ve verimli bir şekilde çözülebilen rahat bir versiyon kullanmak ister. Rahat sürümün, düzgün çalışması için gerçek alt sınır kadar yüksek bir alt sınır vermesi gerektiğini unutmayın. Başka bir örnek: Diyelim ki MAXSAT'ı bir B & B yöntemiyle çözmek istiyorsunuz. Belirli bir kısmi hakikat ataması için, memnun cümlelerin sayısını kolayca hesaplayabilirsiniz. Bir üst sınır (bu bir maksimizasyon problemi olduğu için) ...
George

Yanıtlar:


10

Şube ve Sınır'ı Knapsack'e uygulayalım , umarım bu konsepti sizin için netleştirir.

Sahibiz n etiketli ürünler 1 -den n. vben değeri beninci madde ve wbenağırlığı. Onları en çok içerebilecek bir sırt çantasına sığdırmaya çalışıyoruzT toplam ağırlık ve sırt çantasına koyduğumuz öğenin değerlerinin toplamını en üst düzeye çıkarmaya çalışıyoruz.

Sıradan backtrack yaklaşımı temelimizdir. Önce koydukv1 ve ardından kalan sorun için n-1özyineleme ile öğeler. Sonra kaldırıyoruzv1 paketten ve kalan için sorunu çözmek n-1 öğeleri ve tekrar bulduğumuz en iyi yapılandırmayı döndürüyoruz.

Bu geri izleme Şube ve Bağlı'nın 'Şube' kısmıdır. (Sırt çantası söz konusu olduğunda) iki davaya dalıyorsunuz: 'eşyaben 've' öğesinin çözümünün bir parçasıdır bençözümün bir parçası değildir '. Bunu, sol çocuğun bir vaka ve sağ çocuğun diğer vaka olduğu ikili bir ağaç olarak görselleştirebilirsiniz. Bu ağaç arama ağacı (veya arama alanı) ): derinliğinve bu nedenle Ö(2n)düğümleri. Bu nedenle algoritma, öğelerin sayısında bir üst çalışma süresine sahiptir.

Şimdi 'Bağlı' kısmına geçiyoruz: 'bu yapılandırma asla işe yaramaz, bu yüzden bunu hesaplamakla da uğraşmayabiliriz' diyebileceğimiz kriterleri bulmaya çalışıyoruz. Böyle bir kritere örnek olarak 'sırt çantasına koyduğumuz eşyaların ağırlığı aşıldıT': ilkini, n/2 öğeler sırt çantasına ve bu nedenle zaten dolu, eşya koymaya çalışmanın bir anlamı yok n/2+1 -den n sırt çantasında da var, ancak herhangi bir alt kümeye uymaya çalışmanın bir anlamı yok n/2+1 -den n sırt çantasında, zaten dolu olduğu için 2n/2vakalar. Başka bir örnek ' kalan tüm öğeleri koysam bile, koyduğum öğelerin değeri şimdiye kadar bulduğum en iyi yapılandırmayı aşmayacak '.

Bu ölçütler temel olarak arama ağacının bölümlerini keser: bazı düğümlerde, örneğin 'sol alt ağaç bana daha iyi bir yapılandırma vermez, çünkü X' dediğinizden, bu alt ağacı unutursunuz ve onu keşfetmezsiniz. Bir derinlik ağacıd bu şekilde kesip kurtardığınızı Ö(2d) Eğer şanslıysanız, bu biraz hız artışı olabilir.

Buna `` Sınırlama '' adını verdiğini unutmayın, çünkü genellikle bir tür alt veya üst sınır içerir: kriter için ' Geri kalan tüm öğeleri koysam bile, koyduğum öğelerin değeri en iyi yapılandırmayı aşmayacak Şimdiye kadar buldum ', şimdiye kadarki en iyi yapılandırmanızın değeri en iyi yapılandırmada bir alt sınırdır, bu yüzden bu alt sınırın ötesine geçmeyecek her şey başarısız olmaya mahkumdur.

'Sınırlama' bölümünü istediğiniz kadar karmaşık hale getirebilirsiniz. Örneğin, tamsayı programlama sorunları genellikle gevşeme kullanılarak çözülür: programınızı, polinom zamanında çözebileceğiniz doğrusal bir programa gevşetirsiniz ve daha sonra ikili değişkenleriniz için hiçbir zaman işe yaramayacak birçok vakayı atabilirsiniz. Sonra kalan seçeneklerde dal.

Şube ve Sınır'ın genellikle pratikte sadece bir hız artışı sağladığını, ancak teoride olmadığını unutmayın: buluşsal yönteminizi kullanarak arama ağacının ne kadarının kesildiğini söylemek zor. Bu, bu tür problemler üzerinde pratikte kullanılan farklı buluşsal yöntemlerin sayısı ile ifade edilir. Şanssızsanız, kalan arama ağacı çok fazla sınırlama olsa bile çok büyük kalır.


4

Makinelere belirli süreler ve son teslim tarihleri ​​olan işleri atama görevini planlamayı düşünün . Ayrık zaman varsayıyoruz. Bu tür birçok problem NP (O) -hard.

Özellikle, bu cevap hakkında konuşacağız 1|rben|Lmaksimum, planladığımız

  • bir makinede
  • çıkış tarihleri ​​ile ilgili sorunlar ve biz
  • maksimum gecikmeyi en aza indir Lmaksimum, bu, tüm işlerde son tarih ve tamamlanma süresi arasındaki maksimum farktır.

Bu sorunun karar versiyonu NP-zordur; bu, 3PARTITION'dan indirimle görülebilir .

İlginçtir ki, önleme izin verirsek , yani aktif işleri değiştirirsek, sorun en erken Son Tarih ile sezgisel olarak çözülebilir. Bu varyantın optimal çözümünün, orijinal sorunun optimal çözümünden daha kötü olmadığını görmek kolaydır.

Şimdi, Şube ve Bağlı'yı bu soruna uygulamak için bazı parametreleri düzeltmemiz gerekiyor:

  • Ön ödemeye izin vererek ve EDD kullanarak daha düşük sınırları hesaplıyoruz.
  • Planlanmamış tüm işleri bir sonraki iş olarak sabitleyerek şubeye gidiyoruz.
  • Önce alt sınırı küçük olan çocuğa gidiyoruz.

B & B her uygulama için bunu yapmak zorunda.


Somut bir örnek için, 1|rben|Lmaksimum:

ben1234pben4265rben0135dben8121110

ile pben işlerin işlem süreleri, rben çıkış tarihleri ​​ve dben bitiş tarihleri.

B & B yukarıda belirtildiği gibi çalıştırıldığında, bu gerçekleşir:

algoritması
Bu GIF döngü yapmaz. En baştan görmek için yeni bir sekmeye yeniden yükleyin .
[ kaynak ] [ statik sürüm ]

41 düğümden sadece dördünün uygun şekilde ziyaret edildiğini ve sadece on tanesinin daha düşük sınırlar hesaplandığını unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.