Penjelasan Cabang dan Batas

9

Saya memiliki tes tentang algoritma branch and bound . Saya mengerti secara teoritis bagaimana algoritma ini bekerja tetapi saya tidak dapat menemukan contoh yang menggambarkan bagaimana algoritma ini dapat diimplementasikan secara praktis.

Saya menemukan beberapa contoh seperti ini tetapi saya masih bingung tentang itu. Saya juga mencari masalah salesman keliling dan saya tidak bisa memahaminya.

Yang saya butuhkan adalah beberapa masalah dan bagaimana masalah ini dapat diselesaikan dengan menggunakan cabang dan terikat.

MR.NASS
sumber
1
Apa yang sulit dipahami? apakah Anda mencoba mundur sebelumnya?
Yup, saya mencobanya. Masalah dengan B & B adalah jika saya mendapatkan masalah yang dapat diselesaikan dengan B & B, saya tidak tahu bagaimana saya bisa mendapatkan batas bawah untuk setiap node dan juga bagaimana saya bisa mendapatkan fungsi objektif. Juga, apa nilai pertama bestsofar yang saya bandingkan dengan setiap batas bawah?
MR.NASS
2
@ MR.NASS Saya tidak yakin apa yang sebenarnya Anda katakan di komentar terakhir Anda. Biarkan saya coba jelaskan. B&B adalah metode untuk memangkas pohon pencarian. Ini dapat diterapkan untuk masalah yang harus mengoptimalkan fungsi tujuan. Ini biasanya diterapkan untuk masalah optimasi diskrit atau kombinatorial. Pada setiap langkah Anda mencoba menemukan batas bawah dari fungsi tujuan untuk semua kemungkinan solusi yang tersisa. Jika batas bawah lebih tinggi dari solusi terbaik saat ini, Anda dapat menghentikan pencarian dan mundur (pangkas pohon pencarian), karena tidak ada solusi dengan skor lebih rendah.
George
2
Biasanya seseorang memecahkan versi santai masalah untuk mendapatkan batas bawah. Untuk Program Integer Campuran, ini biasanya relaksasi Pemrograman Linier.
Memilih
2
@ MR.NASS Ini tergantung pada fungsi tujuan. Seperti kata Sid, Anda biasanya memecahkan versi santai dari masalah yang diberikan. Biasanya seseorang ingin menggunakan versi santai yang memberikan perkiraan yang baik dari masalah awal dan dapat diselesaikan secara efisien. Perhatikan bahwa versi santai harus memberikan batas bawah yang paling tinggi setinggi batas bawah yang sebenarnya agar dapat bekerja dengan baik. Contoh lain: misalkan Anda ingin menyelesaikan MAXSAT dengan metode B&B. Untuk penugasan kebenaran parsial yang diberikan Anda dapat dengan mudah menghitung jumlah klausa yang puas. Batas atas (karena ini adalah masalah maksimalisasi) ...
George

Jawaban:

10

Mari kita terapkan Branch and Bound ke Knapsack , semoga ini akan membuat konsepnya jelas bagi Anda.

Kami memiliki item, berlabel 1 hingga n . v i adalah nilai dari i butir th, dan w i berat. Kami mencoba memasukkannya ke dalam ransel yang dapat memuat total T , dan kami berusaha memaksimalkan jumlah nilai dari barang yang kami masukkan ke ransel.n1nvsayasayawsayaT

Pendekatan backtrack biasa adalah basis kami. Kami pertama-tama memasukkan dalam paket, dan kemudian menyelesaikan masalah untuk item n - 1 yang tersisa dengan rekursi. Kami kemudian menghapus v 1 dari paket dan menyelesaikan masalah untuk item n - 1 yang tersisa lagi, dan kami mengembalikan konfigurasi terbaik yang kami temukan.v1n-1v1n-1

Mundur ini adalah bagian 'Cabang' dari Cabang dan Terikat. Anda bercabang pada (dalam kasus Knapsack) dua kasus: 'item adalah bagian dari solusi' dan 'item i bukan bagian dari solusi'. Anda dapat memvisualisasikan ini sebagai pohon biner, di mana anak kiri adalah satu case dan anak kanan adalah case lainnya. Pohon ini adalah pohon pencarian (atau ruang pencarian ): kedalamannya adalah n , dan karenanya memiliki simpul O ( 2 n ) . Algoritma karena itu memiliki eksponensial waktu berjalan dalam jumlah item.sayasayanHAI(2n)

Sekarang kita sampai pada bagian 'Bound': kita mencoba menemukan kriteria sehingga kita dapat mengatakan 'konfigurasi ini tidak pernah berhasil, jadi kita mungkin juga tidak repot menghitung ini'. Contoh dari kriteria seperti itu adalah 'berat barang yang sudah kita masukkan ke dalam ransel melebihi ': jika kita telah menambahkan, katakanlah, item n / 2 pertama ke ransel dan karena itu sudah penuh, ada tidak ada gunanya mencoba memasukkan item n / 2 + 1 hingga ke n di ransel juga, tetapi juga tidak ada gunanya mencoba menyesuaikan setiap subset dari n / 2 + 1 hingga nTn/2n/2+1nn/2+1ndi ransel, karena sudah penuh, jadi kami menghemat sekitar kasus. Contoh lain adalah ' bahkan jika saya memasukkan semua item yang tersisa, nilai item yang saya masukkan tidak akan melebihi konfigurasi terbaik yang saya temukan sejauh ini '.2n/2

Kriteria ini pada dasarnya memotong bagian dari pohon pencarian: pada beberapa node, Anda mengatakan misalnya 'subtree kiri tidak akan memberi saya konfigurasi yang lebih baik, karena X', jadi Anda lupa tentang subtree itu dan Anda tidak menjelajahinya. Subtinggi kedalaman yang Anda potong dengan cara ini menghemat Anda O ( 2 d ) node, yang bisa jadi sedikit peningkatan kecepatan jika Anda beruntung.dHAI(2d)

Perhatikan bahwa ini disebut ' Bounding ' karena biasanya melibatkan semacam batas bawah atau atas: untuk kriteria ' bahkan jika saya memasukkan semua item yang tersisa, nilai item yang saya masukkan tidak akan melebihi konfigurasi terbaik Saya telah menemukan sejauh ini ', nilai konfigurasi terbaik Anda sejauh ini adalah batas bawah pada konfigurasi terbaik, jadi apa pun yang tidak akan pernah berhasil melewati batas bawah ini pasti akan gagal.

Anda dapat membuat bagian 'Bounding' serumit yang Anda suka. Misalnya, masalah pemrograman bilangan bulat sering diselesaikan dengan menggunakan relaksasi: Anda mengendurkan program Anda menjadi program linier, yang dapat Anda selesaikan dalam waktu polinomial, dan kemudian Anda dapat membuang banyak kasus untuk variabel biner Anda yang toh tidak akan pernah berhasil. Anda kemudian bercabang pada opsi yang tersisa.

Perhatikan bahwa Branch dan Bound biasanya hanya memberi Anda peningkatan kecepatan dalam latihan, tetapi tidak dalam teori: sulit untuk mengatakan dengan tepat berapa banyak pohon pencarian yang dipotong menggunakan heuristik Anda. Ini dibuktikan dengan jumlah heuristik yang berbeda yang digunakan dalam praktek pada masalah seperti itu. Jika Anda kurang beruntung, pohon pencarian yang tersisa tetap besar bahkan dengan banyak ikatan.

Alex ten Brink
sumber
4

Pertimbangkan penjadwalan , tugas menetapkan pekerjaan dengan jangka waktu dan tenggat waktu tertentu untuk mesin. Kami menganggap waktu terpisah. Banyak masalah seperti itu NP (O) -hard.

1rsayaL.maks

  • pada satu mesin
  • masalah dengan tanggal rilis dan kami
  • L.maks

Versi keputusan dari masalah ini adalah NP-hard; ini bisa dilihat dengan pengurangan dari 3PARTISI .

Yang cukup menarik, jika kita mengizinkan preemption , yaitu menukar pekerjaan aktif, masalahnya dapat diselesaikan dalam waktu kuadratik dengan heuristik Terlebih Dahulu Terlebih Dahulu (pada tanggal jatuh tempo yang dimodifikasi). Sangat mudah untuk melihat bahwa solusi optimal dari varian ini tidak lebih buruk daripada solusi optimal dari masalah aslinya.

Sekarang, untuk menerapkan Branch & Bound ke masalah ini kita perlu memperbaiki beberapa parameter:

  • Kami menghitung batas bawah dengan memungkinkan preemption dan menggunakan EDD.
  • Kami bercabang dengan memperbaiki setiap pekerjaan yang tidak dijadwalkan sebagai pekerjaan berikutnya.
  • Kami pergi ke anak dengan ikatan kecil lebih dulu.

Anda harus melakukan ini untuk setiap aplikasi B&B.


1rsayaL.maks

saya1234halsaya4265rsaya0135dsaya8121110

halsayarsayadsaya

Melaksanakan B&B seperti yang ditentukan di atas, ini terjadi:

algoritma
GIF ini tidak berulang. Muat ulang di tab baru untuk melihat dari awal.
[ sumber ] [ versi statis ]

Perhatikan bahwa dari 41 node, hanya empat yang dikunjungi dengan benar dan hanya untuk sepuluh yang batas bawahnya dihitung.

Raphael
sumber