คำอธิบายสาขาและขอบเขต


9

ฉันมีการทดสอบเกี่ยวกับสาขาและอัลกอริทึมที่ถูกผูกไว้ ฉันเข้าใจในทางทฤษฎีว่าอัลกอริทึมนี้ทำงานอย่างไร แต่ฉันไม่พบตัวอย่างที่แสดงให้เห็นว่าอัลกอริทึมนี้สามารถนำไปใช้งานได้จริง

ฉันพบตัวอย่างบางอย่างเช่นอันนี้ แต่ฉันก็ยังสับสนอยู่ดี ฉันยังมองหาปัญหาพนักงานขายที่เดินทางและฉันก็ไม่เข้าใจ

สิ่งที่ฉันต้องการคือปัญหาและวิธีแก้ไขปัญหาเหล่านี้โดยใช้สาขาและขอบเขต


1
เข้าใจอะไรยาก คุณเคยลองย้อนรอยก่อนหน้าหรือไม่?

ใช่ฉันลองแล้ว ปัญหาของ B & B คือถ้าฉันได้รับปัญหาที่สามารถแก้ไขได้ด้วย B & B ฉันไม่ทราบว่าฉันจะได้รับขอบเขตล่างสำหรับแต่ละโหนดและยังว่าฉันจะได้รับฟังก์ชั่นวัตถุประสงค์ นอกจากนี้ค่าแรกของ bestsofar ที่ฉันเปรียบเทียบกับขอบเขตล่างแต่ละคืออะไร
MR.NASS

2
@ MR.NASS ฉันไม่แน่ใจว่าสิ่งที่คุณพูดในความคิดเห็นล่าสุดของคุณ ให้ฉันพยายามอธิบาย B & B เป็นวิธีการตัดแต่งกิ่งการค้นหาต้นไม้ มันสามารถนำไปใช้กับปัญหาที่ต้องเพิ่มประสิทธิภาพการทำงานของวัตถุประสงค์ มันมักจะนำไปใช้กับปัญหาการเพิ่มประสิทธิภาพโดยสิ้นเชิงหรือ combinatorial ในแต่ละขั้นตอนคุณพยายามค้นหาขอบเขตล่างของฟังก์ชันวัตถุประสงค์สำหรับโซลูชันที่เหลืออยู่ทั้งหมด หากขอบเขตล่างสูงกว่าโซลูชันที่ดีที่สุดในปัจจุบันคุณสามารถหยุดการค้นหาและย้อนกลับ (ตัดต้นไม้การค้นหา) เนื่องจากไม่มีวิธีแก้ปัญหาที่มีคะแนนต่ำกว่า
จอร์จ

2
โดยปกติเราจะแก้ไขปัญหาที่ผ่อนคลายเพื่อให้ได้ขอบเขตที่ต่ำกว่า สำหรับโปรแกรมแบบจำนวนเต็มแบบผสมนี่คือการผ่อนคลายแบบโปรแกรมเชิงเส้น
เลือก

2
@ MR.NASS สิ่งนี้ขึ้นอยู่กับฟังก์ชั่นวัตถุประสงค์ อย่างที่ซิดกล่าวว่าคุณมักจะแก้ปัญหาในลักษณะที่ผ่อนคลาย โดยปกติเราต้องการใช้เวอร์ชันที่ผ่อนคลายซึ่งให้การประมาณที่ดีของปัญหาเริ่มต้นและสามารถแก้ไขได้อย่างมีประสิทธิภาพ โปรดทราบว่ารุ่นที่ผ่อนคลายจะต้องให้ขอบเขตที่ต่ำที่สุดซึ่งสูงที่สุดเท่ากับขอบเขตที่แท้จริงเพื่อให้ทำงานได้อย่างถูกต้อง อีกตัวอย่าง: สมมติว่าคุณต้องการแก้ปัญหา MAXSAT ด้วยวิธีการแบบ B&B สำหรับการมอบหมายความจริงบางส่วนที่ได้รับคุณสามารถคำนวณจำนวนข้อที่พอใจได้อย่างง่ายดาย ขอบเขตบน (เนื่องจากนี่เป็นปัญหาการขยายใหญ่สุด) ...
George

คำตอบ:


10

ลองใช้ Branch และ Bound กับKnapsackหวังว่านี่จะทำให้แนวคิดนี้ชัดเจนสำหรับคุณ

เรามี n รายการที่มีข้อความกำกับ 1 ผ่านไป n. โวลต์ผม คือค่าของ ผมรายการที่และ Wผมน้ำหนักของมัน เราพยายามที่จะใส่พวกเขาในเป้ที่สามารถมีได้ถึงT น้ำหนักรวมและเราพยายามที่จะเพิ่มผลรวมของค่าของรายการที่เราใส่ในเป้

แนวทางย้อนรอยทั่วไปเป็นพื้นฐานของเรา ก่อนอื่นเราใส่โวลต์1 ในแพ็คแล้วแก้ไขปัญหาสำหรับส่วนที่เหลือ n-1รายการที่มีการสอบถามซ้ำ จากนั้นเราก็ลบโวลต์1 จากแพ็คและแก้ปัญหาสำหรับส่วนที่เหลือ n-1 รายการอีกครั้งและเรากลับการกำหนดค่าที่ดีที่สุดที่เราพบ

Backtracking นี้เป็นส่วน 'Branch' ของ Branch and Bound คุณแยกสาขาใน (ในกรณีของเป้) สองกรณี: 'รายการผม เป็นส่วนหนึ่งของรายการ 'และ' โซลูชัน ผมไม่ใช่ส่วนหนึ่งของโซลูชัน ' คุณสามารถมองเห็นสิ่งนี้เป็นต้นไม้ไบนารีโดยที่เด็กด้านซ้ายเป็นหนึ่งกรณีและเด็กที่ถูกต้องคืออีกกรณีหนึ่ง ต้นไม้นี้เป็นต้นไม้ค้นหา (หรือพื้นที่ค้นหา ): ความลึกของมันคือnและดังนั้นจึงมี O(2n)โหนด อัลกอริทึมจึงมีการชี้แจงเวลาทำงานในจำนวนรายการ

ตอนนี้เราไปถึงส่วน 'Bound': เราพยายามค้นหาเกณฑ์ที่เราสามารถพูดได้ว่า 'การกำหนดค่านี้ไม่เคยประสบความสำเร็จดังนั้นเราจึงอาจไม่สนใจการคำนวณนี้' ตัวอย่างของเกณฑ์ดังกล่าวคือ 'น้ำหนักของรายการที่เราใส่ในเป้เกินกว่าT': ถ้าเราเพิ่มพูดก่อน n/2 รายการไปยังเป้หลังและดังนั้นจึงเต็มแล้วไม่มีจุดพยายามวางรายการ n/2+1 ผ่านไป n ในเป้เช่นกัน แต่ก็ยังไม่มีจุดในการพยายามที่จะพอดีกับส่วนย่อยของ n/2+1 ผ่านไป n ในเป้มันเต็มแล้วดังนั้นเราจึงประหยัด 2n/2กรณี อีกตัวอย่างคือ ' แม้ว่าฉันจะใส่รายการที่เหลือทั้งหมดมูลค่าของรายการที่ฉันใส่เข้าไปจะไม่เกินค่าที่ดีที่สุดที่ฉันเคยพบ '

เกณฑ์เหล่านี้จะตัดทอนบางส่วนของโครงสร้างการค้นหา: ในบางโหนดคุณพูดเช่น 'ทรีย่อยด้านซ้ายจะไม่ให้การกำหนดค่าที่ดีกว่าแก่ฉันเพราะ X' ดังนั้นคุณจึงลืมทรีย่อยนั้นและคุณไม่สำรวจ ทรีย่อยของความลึกd ที่คุณตัดออกด้วยวิธีนี้จะช่วยให้คุณประหยัด O(2d) ปมซึ่งสามารถเพิ่มความเร็วได้บ้างหากคุณโชคดี

โปรดทราบว่าสิ่งนี้เรียกว่า ' Bounding ' เพราะโดยทั่วไปจะเกี่ยวข้องกับขอบเขตล่างหรือบนบางอย่าง: สำหรับเกณฑ์ ' แม้ว่าฉันจะใส่รายการที่เหลือทั้งหมดมูลค่าของรายการที่ฉันใส่จะไม่เกินค่าที่ดีที่สุด ฉันพบแล้ว 'คุณค่าของการกำหนดค่าที่ดีที่สุดของคุณจนถึงตอนนี้คือขอบเขตที่ต่ำกว่าในการกำหนดค่าที่ดีที่สุดดังนั้นสิ่งใดก็ตามที่จะไม่ผ่านพ้นขอบเขตล่างนี้ไปถึงความล้มเหลว

คุณสามารถสร้างส่วน 'Bounding' ที่ซับซ้อนตามที่คุณต้องการ ตัวอย่างเช่นปัญหาการเขียนโปรแกรมจำนวนเต็มมักจะได้รับการแก้ไขโดยใช้การผ่อนคลาย: คุณผ่อนคลายโปรแกรมของคุณไปยังโปรแกรมเชิงเส้นซึ่งคุณสามารถแก้ปัญหาในเวลาพหุนามและจากนั้นคุณสามารถทิ้งกรณีจำนวนมากสำหรับตัวแปรไบนารีของคุณ จากนั้นคุณแยกสาขาตามตัวเลือกที่เหลือ

โปรดทราบว่าโดยทั่วไปแล้ว Branch และ Bound จะช่วยให้คุณฝึกฝนได้เร็วขึ้น แต่ไม่ใช่ในทางทฤษฎี: มันยากที่จะบอกว่าต้นไม้การค้นหานั้นถูกตัดโดยใช้ฮิวริสติกของคุณมากเพียงใด นี่คือการพิสูจน์โดยจำนวนของฮิวริสติกที่แตกต่างกันที่ใช้ในการปฏิบัติเกี่ยวกับปัญหาดังกล่าว หากคุณโชคไม่ดีแผนผังการค้นหาที่เหลือยังคงใหญ่แม้ว่าจะมีขอบเขต จำกัด ก็ตาม


4

พิจารณากำหนดเวลางานในการมอบหมายงานด้วยระยะเวลาและกำหนดส่งให้กับเครื่องจักร เราถือว่าเวลาไม่ต่อเนื่อง ปัญหาดังกล่าวจำนวนมากคือปัญหา NP (O)

โดยเฉพาะคำตอบนี้จะพูดถึง 1|Rผม|Lสูงสุดนั่นคือเรากำหนด

  • ในเครื่องเดียว
  • ปัญหาเกี่ยวกับวันที่ปล่อยและเรา
  • ลดความล่าช้าสูงสุด Lสูงสุดนั่นคือความแตกต่างสูงสุดระหว่างกำหนดเวลาและเวลาดำเนินการกับงานทั้งหมด

เวอร์ชันการตัดสินใจของปัญหานี้คือ NP-hard สิ่งนี้สามารถเห็นได้โดยการลดลงจาก3ส่วน

น่าสนใจพอสมควรถ้าเรายอมให้มีการจองนั่นคือการแลกเปลี่ยนงานที่ใช้งานอยู่ปัญหาสามารถแก้ไขได้ในช่วงกำลังสองตามวันที่ครบกำหนดเร็วที่สุดฮิวริสติกแรก (ในวันที่ครบกำหนดที่แก้ไข) มันง่ายที่จะเห็นว่าทางออกที่ดีที่สุดของตัวแปรนี้ไม่เลวไปกว่าทางออกที่ดีที่สุดของปัญหาดั้งเดิม

ตอนนี้เพื่อที่จะใช้ Branch & Bound กับปัญหานี้เราจำเป็นต้องแก้ไขพารามิเตอร์บางอย่าง:

  • เราคำนวณขอบเขตที่ต่ำกว่าโดยอนุญาตให้จองและใช้ EDD
  • เราแยกสาขาโดยแก้ไขงานที่ไม่ได้กำหนดไว้ทั้งหมดเป็นงานถัดไป
  • เราไปหาเด็กที่มีขอบเขตย่อยน้อยกว่าก่อน

คุณต้องทำสิ่งนี้เพื่อการใช้งาน B & B ทุกครั้ง


สำหรับตัวอย่างที่เป็นรูปธรรมให้พิจารณาตัวอย่างของ 1|Rผม|Lสูงสุด:

ผม1234พีผม4265Rผม0135dผม8121110

กับ พีผม เวลาในการประมวลผลของงาน Rผม วันที่วางจำหน่ายและ dผม วันที่ครบกำหนด

ดำเนินการ B & B ตามที่ระบุข้างต้นสิ่งนี้เกิดขึ้น:

ขั้นตอนวิธี
GIF นี้ไม่วนซ้ำ โหลดซ้ำในแท็บใหม่เพื่อดูตั้งแต่ต้น
[ แหล่งที่มา ] [ รุ่นคงที่ ]

โปรดทราบว่าจากทั้งหมด 41 โหนดมีเพียงสี่คนเท่านั้นที่ได้รับการเยี่ยมชมอย่างเหมาะสมและเพียงสิบเท่านั้นที่ถูกคำนวณขอบเขตที่ต่ำกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.