สาระสำคัญของวิธีขอบเขตคืออะไร? วิธีสาขาและขอบเขตของการเขียนโปรแกรมจำนวนเต็ม แนวคิดพื้นฐาน

การพัฒนาแนวทางดังกล่าวเรียกว่า Branch และ Bound Method โดยเริ่มต้นจากงานของ Land and Doig (1960) นี่ไม่ใช่แม้แต่วิธีการ แต่เป็นแนวคิดหรือเชลล์ขั้นตอนบนพื้นฐานของอัลกอริธึมโซลูชันที่เริ่มได้รับการพัฒนา ปัญหาจำนวนเต็มจากธรรมชาติที่แตกต่างกัน คุณค่าของแนวคิดที่นำเสนอเริ่มสังเกตเห็นได้ชัดเจนเป็นพิเศษหลังจากการปรากฏของอัลกอริธึมแรกที่แน่นอนสำหรับการแก้ปัญหาพนักงานขายที่กำลังเดินทาง ซึ่งสร้างขึ้นตามรูปแบบสาขาและผูกมัด (Little et al., 1963) วิธีการนี้ใช้ได้กับทั้งปัญหาจำนวนเต็มและจำนวนเต็มบางส่วน

แก่นแท้ของแนวคิดนี้คล้ายกับเรื่องตลกชื่อดังเกี่ยวกับการจับสิงโตในทะเลทราย: เราแบ่งทะเลทรายออกเป็นสองส่วน ถ้าครึ่งแรกไม่มีสิงโตเราก็มองหามันในครึ่งหลังโดยแบ่งครึ่ง ฯลฯ ต่างจากสิงโตตรงที่ตัวที่เหมาะสมจะไม่เคลื่อนไหวและในแง่นี้งานของเราก็ง่ายกว่า

วิธีการประกอบด้วยการสร้างแผนผังของปัญหา ซึ่งมีต้นตอของปัญหาคือปัญหาเดิม ซึ่งอาจไม่มีเงื่อนไขจำนวนเต็ม (IC) ปัญหาพื้นฐานถูกสร้างขึ้นโดยปัญหาที่สูงกว่าในลักษณะที่ชุดที่ยอมรับได้ (AS) นั้นเป็นชุดย่อยที่ไม่ต่อเนื่องกันของ DM ของปัญหาที่อยู่ด้านบน การเจริญเติบโตของต้นไม้เกิดขึ้นเนื่องจากกิ่งก้านที่มีแนวโน้มดี อนาคตจะถูกกำหนดโดยการประเมินเกณฑ์ งานเทอร์มินัลสาขาวี และบันทึกซี. งานเทอร์มินัลสาขาระดับ คือมูลค่าของเกณฑ์ซึ่งแน่นอนว่าไม่แย่ไปกว่าเกณฑ์ที่เหมาะสมที่สุดและซี

– ค่าของเกณฑ์ของปัญหาเดิมที่ได้รับในระหว่างกระบวนการแก้ปัญหา (ค่าที่เห็นได้ชัดว่าแย่กว่าค่าที่เหมาะสมที่สุดสามารถถือเป็นค่าเริ่มต้นได้) ซึ่งหมายความว่าปัญหาจะเกิดขึ้นก็ต่อเมื่อการประมาณการดีกว่าบันทึกเท่านั้น ในกรณีนี้ ระดับของงานนั้นไม่สำคัญ

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

ประเภทของการประเมินขึ้นอยู่กับทิศทางของเกณฑ์: เมื่อขยายให้สูงสุดจะใช้การประมาณการด้านบน เมื่อย่อเล็กสุดจะใช้การประมาณการที่ต่ำกว่า การนำเสนอวิธีการครั้งต่อไปจะเกี่ยวข้องกับปัญหาสูงสุด

หากต้องการใช้อัลกอริทึมแบบสาขาและขอบเขต จำเป็นต้องตอบคำถามพื้นฐานสองข้อ:

    วิธีแยกชุดที่มีแนวโน้มออกเป็นส่วนย่อย

    วิธีการกำหนดประมาณการด้านบนของเกณฑ์ในชุดที่อยู่ระหว่างการพิจารณา

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

ให้ทราบช่วงของค่าที่เป็นไปได้ เจตัวแปรที่

0  เอ็กซ์ เจ เจ ,

ซึ่งในคำตอบที่เหมาะสมที่สุดต่อเนื่องกลายเป็นไม่ใช่จำนวนเต็มและเท่ากับ x เจ * - จากนั้นค่าจำนวนเต็มของตัวแปรนี้สามารถทำได้ในช่วง 0  เอ็กซ์ เจ
หรือในช่วงเวลา
+1 เอ็กซ์ เจ เจ, ที่ไหน
- ทั้งส่วน (รูปที่ 7.6)

อี แล้วสอดคล้องกับพาร์ติชั่นของเซตต่อเนื่อง 22 จะแย่กว่าสถิติหรือ nเป็นสองชุดย่อยที่แยกจากกัน 22 จะแย่กว่าสถิติหรือ 1 n และ 22 จะแย่กว่าสถิติหรือ 2 nซึ่งสหภาพไม่เท่ากัน 22 จะแย่กว่าสถิติหรือ n- ในเวลาเดียวกัน พาร์ติชั่นของชุดจำนวนเต็มจะเป็นไปตามความสัมพันธ์ (7.9) ในกรณีนี้ ชุดจำนวนเต็มทั้งชุดดั้งเดิมและชุดที่สร้างขึ้นจะรวมอยู่ในชุดต่อเนื่องที่สอดคล้องกัน ดังนั้น การค้นหาคำตอบจำนวนเต็มบนเซตต่อเนื่องจะให้ผลลัพธ์เหมือนกับการหาจำนวนเต็ม เป็นเรื่องง่ายที่จะเห็นว่าการเลือกช่วงย่อยข้างต้นด้วยตัวแปรตัวหนึ่งนำไปสู่การแบ่งชุดดั้งเดิมออกเป็นสองชุดย่อยสำหรับตัวแปรจำนวนเท่าใดก็ได้

ตอนนี้เรามาดูคำถามที่สองกันดีกว่า เนื่องจากเซตจำนวนเต็มเป็นสับเซตของเซตต่อเนื่องที่สอดคล้องกัน ค่าที่เหมาะสมที่สุดเกณฑ์ของเซตต่อเนื่องจะต้องไม่น้อยกว่าเซตจำนวนเต็มเสมอ ดังนั้นในฐานะที่เป็นขอบเขตบน งานเทอร์มินัลสาขาคุณสามารถรับค่าที่เหมาะสมที่สุดของเกณฑ์ได้ * งานต่อเนื่อง

การเลือกค่าบันทึกเริ่มต้นขึ้นอยู่กับสถานการณ์:

    หากทราบค่าจำนวนเต็มใด ๆ บันทึกจะถูกนำมาเท่ากับเกณฑ์ในการตัดสินใจครั้งนี้

    ถ้าสัมประสิทธิ์ทั้งหมดของเกณฑ์เป็นบวก เราก็สามารถทำได้ ค่าว่างบันทึก;

    ในกรณีอื่นๆ ค่าเริ่มต้นของบันทึกจะเป็นดังนี้: , ที่ไหน เอ็ม-จำนวนสูงสุดที่สามารถแสดงในคอมพิวเตอร์

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

ดังนั้น, อัลกอริธึมพื้นฐานซึ่งใช้สาขาและวิธีการผูกไว้ มีขั้นตอนต่อไปนี้


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

ตัวอย่างที่ 7.3 - ลองใช้สาขาและอัลกอริธึมที่ถูกผูกไว้กับปัญหา

ล= 9x 1 + 5x 2 สูงสุด;

3x 1 - 6x 2 1;

5x 1 +2x 2  28;

x เจ 0 , ทั้งหมด.

ลองพิจารณาวิธีการที่ใช้กับปัญหาจำนวนเต็มเชิงเส้น แม้ว่าจะไม่มีข้อจำกัดเกี่ยวกับจำนวนงานที่สร้างขึ้นโดยตรงจากงานที่มีแนวโน้ม แต่ตามกฎแล้วอัลกอริทึมจะใช้การแบ่งออกเป็นสองงานนั่นคือต้นไม้ไบนารี่ถูกสร้างขึ้น (รูปที่ 7.5) ในกรณีนี้ สำหรับจำนวนเต็มจะตั้งค่าความสัมพันธ์ดังต่อไปนี้: เมื่อทิ้งเงื่อนไขจำนวน เราจะได้งานต่อเนื่อง ซึ่งเราใส่ไว้ในรายการงาน เนื่องจากค่าสัมประสิทธิ์เกณฑ์เป็นค่าบวก ค่าเริ่มต้นของบันทึกจึงเท่ากับศูนย์ เรานำปัญหาเดียวจากรายการมาแก้ไข เราได้รับทางออกที่ดีที่สุดที่จุดยอด A (รูปที่ 7.7): x 1 * =4,72; x 2 * =2.19. เราแตกแขนงตามตัวแปร x 1. การเพิ่มข้อจำกัดให้กับปัญหาที่แก้ไขแล้ว x 1 4 เราสร้างปัญหา 2 และการบวก x 1 5 ให้ปัญหา 3 ชุดปัญหาใหม่ที่ยอมรับได้แสดงไว้ในรูปที่ 1 7.7. เราวางงานเหล่านี้ไว้ในรายการงาน การแก้ปัญหา 2 บรรลุผลที่จุด B และปัญหา 3 ที่จุด C กระบวนการทั้งหมดของการแก้ปัญหาเดิมถูกนำเสนอในรูปแบบของแผนผังการตัดสินใจในรูปที่ 1 7.10. ลำดับการแก้ปัญหาจากรายการจะสะท้อนให้เห็นโดยตัวนับการวนซ้ำ เค- ในการวนซ้ำครั้งที่ 3 (งานที่ 4) จะได้สารละลายจำนวนเต็มโดยมีค่าเกณฑ์ 41 (จุด D ในรูปที่ 7.8) ดังนั้นบันทึกจึงเปลี่ยนแปลง: คือมูลค่าของเกณฑ์ซึ่งแน่นอนว่าไม่แย่ไปกว่าเกณฑ์ที่เหมาะสมที่สุดและ=41 ปัญหาที่ 6 มีวิธีแก้ปัญหาที่ไม่ใช่จำนวนเต็ม (จุดยอด E ในรูปที่ 7.9) ปัญหาที่ 8 มีวิธีการแก้ปัญหาจำนวนเต็มที่จุด F เป็นผลให้หลังจากการวนซ้ำครั้งที่ 7 บันทึกจะกลายเป็น 50

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

จากแผนผังการตัดสินใจข้างต้น จะเห็นได้ว่าจำนวนงานในรายการอาจน้อยลงหากงานได้รับการแก้ไขในลำดับอื่น แท้จริงแล้วหากปัญหาของสาขาที่ถูกต้องกับบันทึกได้รับการแก้ไขก่อน ซี= 50 แล้วหลังจากแก้ไขปัญหาที่ 2 แล้วจะไม่มีการแตกแขนง เนื่องจากค่าประมาณบนจะต่ำกว่าบันทึก ( วี=ล * =45,17<50).

อี คำถามเกิดขึ้นตามธรรมชาติ: การเลือกตัวแปรอื่นสำหรับการแยกสาขาจะส่งผลต่อจำนวนงานและแผนผังการตัดสินใจได้อย่างไร ในตัวอย่างของเรา ถ้าหลังจากการวนซ้ำครั้งที่ 1 เราแตกสาขาตามตัวแปร x 2. จะได้ต้นไม้ดังในรูป 7.11. มันมี 2 งานมากกว่าในรูป 7.10. แน่นอนว่ามันอาจแตกต่างกันได้หากปัญหาได้รับการแก้ไขในลำดับอื่น

ดังนั้นจำนวนงานที่ต้องแก้ไขอย่างมีนัยสำคัญจึงขึ้นอยู่กับการเลือกงานจากรายการและตัวแปรสำหรับการแยกสาขา

จากอัลกอริธึมและตัวอย่างที่ให้มา พบว่าสาขาถูกยกเลิกด้วยเหตุผลหนึ่งในสามประการ:

    ความไม่สามารถแก้ไขได้ของปัญหา

    ปัญหามีวิธีแก้ปัญหาจำนวนเต็ม

    ค่าประมาณบนไม่เกินบันทึก

ตอนนี้เราจะแสดงความคิดเห็นเกี่ยวกับ Branch และ Bound Method ตามที่ระบุไว้แล้ว อัลกอริธึมพื้นฐานไม่ได้ระบุกฎสำหรับการเลือกงานและตัวแปร การใช้งานซอฟต์แวร์ส่วนใหญ่ของกฎการใช้วิธีการขึ้นอยู่กับการประเมินแบบฮิวริสติกของโอกาสของงานและตัวแปร บางแพ็คเกจ เช่น “LP in ACS” เสนอตัวเลือกมากมายสำหรับการจัดการกระบวนการแก้ปัญหา ตั้งแต่แบบอัตโนมัติไปจนถึงแบบแมนนวล ซึ่งผู้ใช้สามารถเลือกทั้งงานและตัวแปรได้เอง นอกจากนี้ อัลกอริธึมที่ใช้วิธีสาขาและขอบเขตอาจแตกต่างกันอย่างมีนัยสำคัญเนื่องจากลักษณะของระดับของปัญหา ตัวอย่างเช่น สำหรับปัญหาพนักงานขายที่กำลังเดินทาง การกำหนดประมาณการจะง่ายขึ้นอย่างมาก (ไม่จำเป็นต้องแก้ไขปัญหาเชิงเส้นต่อเนื่อง)

วิธีการแยกสาขาและผูกไว้มีข้อดีมากกว่าวิธีตัด:

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

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

    เมื่อแก้ไขปัญหาต่อเนื่อง ขนาดของตาราง simplex จะไม่เพิ่มขึ้น

ข้อเสียของสาขาและวิธีการผูกมัด:

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

    ไม่มีสัญญาณของการเพิ่มประสิทธิภาพ วิธีแก้ปัญหาที่ดีที่สุดสามารถรับได้ก่อนที่อัลกอริธึมจะหยุดทำงาน แต่ในกรณีทั่วไปจะไม่สามารถตรวจพบได้ การเพิ่มประสิทธิภาพจะเกิดขึ้นเฉพาะเมื่อรายการงานหมดลง

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

สาขาและวิธีการผูกมัด

สาขาและวิธีการผูกได้รับการพัฒนาโดย Lytle, Murthy, Sweeney และ Karel พิจารณาแนวคิดหลักของวิธีนี้ ประการแรก วิธีนี้เกี่ยวข้องกับรูปแบบทั่วไปของการสันนิษฐานและการประเมินทางเลือก โครงร่างการสร้างสมมติฐานทางเลือกโดยทั่วไปสามารถนำเสนอได้ดังแสดงในรูปที่ 1 3.9.

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

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

ปล่อยให้รัฐถูกแสวงหา ข*,ซึ่งในนั้น ร(ข *)น้อยที่สุด ให้เราสมมติต่อไปว่าทราบวิธีแก้ปัญหาในปัจจุบันแล้ว ขxกับบันทึกปัจจุบัน ร(ขx)- แล้วมันก็ชัดเจนว่ารัฐใด ข ฉันซึ่งมีมูลค่าสูงสุดที่สามารถทำได้ R(ข ผม) ³ R(ข x)สามารถลบออกได้ (ส่วนที่เกี่ยวข้องของแผนผังการค้นหาจะถูกทำเครื่องหมายตามที่แสดงโดยพื้นที่แรเงาในรูปที่ 3.9)


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

เราเชื่อ ด้วย ij ³ 0และ ด้วย ii = ¥และไม่จำเป็นว่าจะต้องเป็นเช่นนั้น กับ ij = กับ ji- เราจะเข้ารหัสปัญหาด้วยเมทริกซ์ต้นทุน C = [с ij ] ดังแสดงในรูปที่ 1 3.10 ข.

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

ลองพิจารณาแก้ไขปัญหานี้โดยใช้วิธีสาขาและผูกไว้ สองสถานการณ์ต่อไปนี้ถือเป็นปัจจัยชี้ขาด

A1) วิธีแก้ปัญหาของพนักงานขายที่ต้องเดินทางนั้นสอดคล้องกับการเลือกองค์ประกอบเดียวในแต่ละแถวของเมทริกซ์ต้นทุน กับและมีองค์ประกอบหนึ่งรายการในแต่ละคอลัมน์ของเมทริกซ์นี้ และผลรวมขององค์ประกอบที่เลือกนั้นมีค่าน้อยที่สุดและก่อตัวเป็นวงจร คำพูดสุดท้ายเป็นสิ่งสำคัญ ตัวอย่างเช่น องค์ประกอบ (1, 2), (2, 3), (3, 1), (4, 4) ไม่ก่อให้เกิดวงจร

A2) หากคุณลบ (บวก) ค่าคงที่เดียวกันจากแถว (คอลัมน์) ใดๆ 22 จะแย่กว่าสถิติหรือแล้วค่าผลลัพธ์ กับ*ต้นทุนรวมในรอบที่เหมาะสมที่สุด ค*จะลดลง (เพิ่มขึ้น) อย่างแน่นอนตามจำนวนนี้ 22 จะแย่กว่าสถิติหรือ.

ลองใช้คุณสมบัติ A2 กัน มาเขียนองค์ประกอบขั้นต่ำกัน เอชเจในแต่ละคอลัมน์ เจหลังจากนั้นเราจะลบพวกมันออกจากองค์ประกอบของคอลัมน์ที่เกี่ยวข้อง จากนั้นในเมทริกซ์ผลลัพธ์เราจะเขียนองค์ประกอบขั้นต่ำลงไป สวัสดีในบรรทัด ฉัน- เราได้เมทริกซ์ที่แสดงในรูปที่ 2.11 ก. ลบค่าที่สอดคล้องกันออกจากแต่ละบรรทัด สวัสดี(รูปที่ 3.11, ข).

จากเมทริกซ์ในรูป 3.11, b มันง่ายที่จะกำหนดว่าค่าต่ำสุดที่เป็นไปได้ กับ*(ซึ่งเราแสดงว่า) มีการคำนวณดังนี้

ตอนนี้เราจะตั้งสมมติฐานสำหรับเมทริกซ์ต้นทุนที่กำหนดในรูป 3.11 ข.

ให้เราสมมุติว่าส่วนโค้งเป็นของ ค*;สมมติฐานทางเลือกหมายความว่า หากส่วนโค้งเป็น เราจะถือว่าส่วนโค้งมีค่า 4.3 = ¥ และลบออกจากเมทริกซ์ต้นทุนในรูปที่ 1 2.11, b แถวที่ 3 และคอลัมน์ 4 ซึ่งสุดท้ายแล้วจะได้เมทริกซ์ดังแสดงในรูปที่ 1 2.12 ก. เมทริกซ์ที่กำหนดจะแสดงในรูปที่ 2.12, ข.

สำหรับเมทริกซ์ในรูป 2.12, b เราพบ . ดังนั้นเราจึงพบว่าความยาวของวงจรที่เหมาะสมที่สุดซึ่งมีส่วนโค้งคือ

ในเวลาเดียวกัน ความยาวของวงจรคือ 5+2+3+2=12 ดังนั้นเราจึงสรุปได้ว่าส่วนโค้งไม่รวมอยู่ในวงจรที่เหมาะสมที่สุด เราเชื่อ ด้วย 3.4 = ¥.

ให้เราสมมุติว่าส่วนโค้ง จากการคำนวณที่คล้ายกัน เราพบว่าต้นทุนรวมขั้นต่ำสำหรับรอบที่มีส่วนโค้งคือ 13 หน่วย ด้วยเหตุนี้สมมติฐานนี้ก็ถูกปฏิเสธเช่นกันเพราะว่า มันไม่ได้ปรับปรุงบันทึกปัจจุบัน เราเชื่อ ด้วย 1.4 = ¥

ดังนั้น ในคอลัมน์ที่ 4 ของเมทริกซ์ในรูป 3.10, b จะเหลือองค์ประกอบที่ถูกต้องเพียงองค์ประกอบเดียวเท่านั้น ด้วย 2.4 = 2- เราเชื่อ. สมมติฐานนี้ช่วยให้เราสามารถลบแถวที่ 2 และคอลัมน์ที่ 4 ได้ ด้วยเหตุนี้เราจึงได้เมทริกซ์แบบรีดิวซ์ดังแสดงในรูปที่ 1 3.13 ซึ่งสำหรับ ค*เท่ากับ 12

ให้เราสมมติว่าส่วนโค้ง จากนั้นมันจะตามโดยอัตโนมัติว่าส่วนโค้งเป็น ลองลบแถวที่ 4 และคอลัมน์ 3 ออก: เราได้เมทริกซ์แบบรีดิวซ์ที่แสดงในรูปที่ 1 3.14 ซึ่งจะตามหลังส่วนโค้งโดยอัตโนมัติ ดังนั้น จากสมมติฐานเริ่มแรกว่าส่วนโค้ง เราสร้างวงจรที่เหมาะสมที่สุดต่อไปนี้ซึ่งไม่มีส่วนโค้ง :



โดยมีค่าใช้จ่ายทั้งหมดเท่ากับ 2 + 3 + 2 + 5 = 12

การแนะนำ

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

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

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

การเขียนโปรแกรมเชิงเส้นขอบเขตสาขา

สาขาและวิธีการผูกมัด

อัลกอริธึมสาขาและขอบเขตเกี่ยวข้องกับการแยกย่อยปัญหาการเขียนโปรแกรมเชิงเส้น (LPP) ดั้งเดิมเป็นลำดับของปัญหาที่มีข้อจำกัดเพิ่มเติมเกี่ยวกับตัวแปร ซึ่งได้รับการปรับให้เหมาะสมแล้ว

1. กระบวนการเริ่มต้นด้วยการแก้ปัญหาโดยใช้วิธีการแบบซิมเพล็กซ์หรือแบบกราฟิก โดยไม่คำนึงถึงข้อกำหนดสำหรับจำนวนเต็มของตัวแปร ปัญหานี้เรียกว่า ZLP-0 หากตัวแปรทั้งหมดของแผนที่เหมาะสมที่สุดเป็นจำนวนเต็ม แผนนี้ก็เหมาะสมที่สุดสำหรับปัญหาเช่นกัน การเขียนโปรแกรมจำนวนเต็ม.

2. หากตัวแปรบางตัวไม่ได้รับค่าจำนวนเต็ม การแยกสาขาจะถูกสร้างเป็นสองงานใหม่ ZLP-1, ZLP-2 ปัญหาหนึ่งของ ZLP-1 คือปัญหา ZLP-0 ซึ่งเสริมด้วยข้อจำกัด โดยที่ คือส่วนจำนวนเต็มของตัวเลข ประการที่สองเกิดจากการเพิ่มข้อจำกัดให้กับปัญหา ZLP-0 ควรสังเกตว่าการเลือกตัวแปรจำนวนเต็มสามารถกำหนดได้โดยพลการดังนี้:

ดัชนีขึ้นหรือลง

ตัวแปรแสดงถึงการตัดสินใจที่สำคัญภายในกรอบของปัญหาที่กำหนด

ค่าสัมประสิทธิ์ใน ฟังก์ชั่นวัตถุประสงค์ด้วยตัวแปรนี้จึงเกินกว่าตัวแปรอื่นๆ ทั้งหมดอย่างมาก

3. งานของ ZLP-1 และ ZLP-2 ได้รับการแก้ไขอย่างอิสระ สาขาจะสิ้นสุดลงหากขอบเขตของโซลูชันที่เป็นไปได้ว่างเปล่าหรือโซลูชันที่เหมาะสมที่สุดเป็นจำนวนเต็มทั้งหมด มิฉะนั้น จำเป็นต้องแยกสาขาจากจุดที่ 2 โดยกำหนดจำนวนงาน ZLP ต่อไปนี้ตามลำดับปกติของ ZLP-3, ZLP-4

กระบวนการแก้ปัญหาสามารถแสดงเป็นแผนภูมิต้นไม้ซึ่งจุดยอด ZLP-0 สอดคล้องกับแผนเริ่มต้นสำหรับการแก้ปัญหา และแต่ละจุดยอดที่เชื่อมต่อกันด้วยกิ่งก้านนั้นสอดคล้องกับแผนการที่เหมาะสมที่สุดสำหรับปัญหาถัดไป

ลองพิจารณาตัวอย่างต่อไปนี้เพิ่มฟังก์ชันวัตถุประสงค์ให้สูงสุด

ภายใต้ข้อจำกัด

ลองใช้วิธีแบบกราฟิกเพื่อแก้ปัญหาการเขียนโปรแกรมเชิงเส้น

1. มาแก้ปัญหาเดิมโดยไม่ต้องคำนึงถึงข้อกำหนดของตัวแปรจำนวนเต็ม

ให้เราแสดงว่าปัญหาการเขียนโปรแกรมเชิงเส้นนี้เป็น ZLP-0

ในรูปที่ 1.1 รูปหลายเหลี่ยมของวิธีแก้ปัญหานี้ถูกเน้นด้วยการแรเงา ถึงค่าสูงสุดที่จุด ผลเฉลยไม่ใช่จำนวนเต็ม

ขั้นตอนต่อไปของการแยกสาขาและวิธีการผูกไว้คือการแยกสาขาตามตัวแปรจำนวนเต็มตัวใดตัวหนึ่งที่มีค่าเศษส่วน เช่น ในการดำเนินการนี้ เราได้เพิ่มข้อจำกัดใหม่สองข้อให้กับปัญหา ZLP-0 และข้อจำกัดเหล่านี้จะลบช่วง = ซึ่งไม่มีค่าจำนวนเต็มออก ดังนั้นในกระบวนการแยกสาขาจึงมีการสร้างงานใหม่สองงาน ZLP-1 และ ZLP-2

รูปที่ 1.1 วิธีแก้ไขปัญหา ZLP-0

2. มาแก้ปัญหา ZLP-1 แบบกราฟิกกัน

รูปที่ 1.2 แสดงโดเมนที่เป็นไปได้ของปัญหา ZLP-1 ถึงค่าสูงสุดที่จุด วิธีแก้ไขปัญหาไม่ใช่จำนวนเต็ม

รูปที่ 1.2 วิธีแก้ไขปัญหา ZLP-1

3. มาแก้ปัญหา ZLP-2 แบบกราฟิกกัน

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

รูปที่ 1.3 วิธีแก้ไขปัญหา ZLP-2

ตอนนี้เรามาศึกษาปัญหา ZLP-1 กันต่อ เนื่องจากค่าไม่ใช่จำนวนเต็ม มาสร้างอีกหนึ่งสาขาด้วยการแนะนำข้อจำกัดและ เป็นผลให้เราได้รับปัญหาใหม่สองประการ ZLP-3 และ ZLP-4

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

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

ตารางที่ 2

ตารางที่ 3

ตารางที่ 4

ให้เรานำเสนออัลกอริทึมของ Little โดยใช้ตัวอย่างที่ 1 ของส่วนก่อนหน้า ลองเขียนเมทริกซ์ใหม่:

จะสะดวกกว่าสำหรับเราที่จะตีความ C ij ว่าเป็นค่าใช้จ่ายในการเดินทางจากเมือง i ไปยังเมือง j สมมติว่านายกเทศมนตรีที่ดีของเมือง j ได้ออกกฤษฎีกาให้จ่ายเงินให้พนักงานขายที่เดินทางเข้าเมืองคนละ 5 ดอลลาร์ ซึ่งหมายความว่าทัวร์ใดๆ ก็ตามจะถูกลง 5 ดอลลาร์ เนื่องจากทัวร์ใดๆ ก็ตามต้องเข้าเมือง j แต่เนื่องจากทัวร์ทั้งหมดมีราคาลดลงอย่างสม่ำเสมอ ทัวร์ขั้นต่ำก่อนหน้านี้จึงมีราคาน้อยที่สุด ความดีของนายกเทศมนตรีสามารถแสดงได้ว่าเป็นการลดจำนวนคอลัมน์ j-th ของเมทริกซ์ C ทั้งหมดลง 5 หากนายกเทศมนตรีต้องการส่งพนักงานขายที่เดินทางออกจากเมือง j-th และตั้งรางวัลสำหรับการออกจากเมือง เท่ากับ 10 ดอลลาร์ สามารถแสดงได้โดยการลบ 10 ออกจากองค์ประกอบทั้งหมด jth ของบรรทัดนั้น สิ่งนี้จะเปลี่ยนค่าใช้จ่ายของแต่ละทัวร์อีกครั้ง แต่ทัวร์ขั้นต่ำจะยังคงเป็นขั้นต่ำ ดังนั้นบทแทรกต่อไปนี้จึงได้รับการพิสูจน์แล้ว

การลบค่าคงที่ใดๆ ออกจากองค์ประกอบทั้งหมดของแถวหรือคอลัมน์ใดๆ ของเมทริกซ์ C เราจะปล่อยให้การทัวร์ขั้นต่ำเป็นค่าต่ำสุด

สำหรับอัลกอริธึม จะสะดวกสำหรับเราที่จะได้ศูนย์มากขึ้นในเมทริกซ์ C อย่างไรก็ตาม โดยไม่ต้องได้ตัวเลขติดลบตรงนั้น ในการทำเช่นนี้ เราจะลบองค์ประกอบขั้นต่ำออกจากแต่ละแถว (ซึ่งเรียกว่าการลดแถว ดูตารางที่ 3) จากนั้นลบองค์ประกอบขั้นต่ำออกจากแต่ละคอลัมน์ของเมทริกซ์ตามแถวขององค์ประกอบขั้นต่ำ จะได้เมทริกซ์การลดตามคอลัมน์ ดูตาราง . 4)

เครื่องหมายขีดทแยงมุมหมายความว่าคุณไม่สามารถเดินจากเมือง i ไปยังเมือง i ได้ โปรดทราบว่าผลรวมของค่าคงที่การลดในแถวคือ 27 ผลรวมในคอลัมน์คือ 7 และผลรวมคือ 34

การทัวร์สามารถกำหนดได้โดยระบบขององค์ประกอบที่ขีดเส้นใต้หกรายการ (เน้นด้วยสีอื่น) ของเมทริกซ์ C ดังที่แสดงในตาราง 2. การขีดเส้นใต้องค์ประกอบหมายความว่าในรอบนั้น องค์ประกอบจะเปลี่ยนจากองค์ประกอบที่ i ไปยังองค์ประกอบที่ j สำหรับการทัวร์หกเมือง จะต้องมีองค์ประกอบที่ขีดเส้นใต้ไว้หกองค์ประกอบ เนื่องจากมีหกขอบในการทัวร์หกเมือง แต่ละคอลัมน์จะต้องมีองค์ประกอบที่ขีดเส้นใต้เพียงองค์ประกอบเดียว (พนักงานขายที่เดินทางเข้าเมืองแต่ละเมืองหนึ่งครั้ง) แต่ละแถวจะต้องมีองค์ประกอบที่ขีดเส้นใต้เพียงองค์ประกอบเดียวเท่านั้น (พนักงานขายที่เดินทางออกจากแต่ละเมืองหนึ่งครั้ง) นอกจากนี้ องค์ประกอบที่ขีดเส้นใต้ควรอธิบายถึงรอบเดียว แทนที่จะเป็นรอบเล็กๆ หลายรอบ ผลรวมของจำนวนองค์ประกอบที่ขีดเส้นใต้คือค่าทัวร์ บนโต๊ะ 2 ราคาคือ 36 ซึ่งเป็นรอบขั้นต่ำที่ได้จากการค้นหาคำศัพท์

ตอนนี้เราจะให้เหตุผลจากเมทริกซ์ที่กำหนดในตาราง 2. หากเป็นไปได้ที่จะสร้างระบบที่ถูกต้องขององค์ประกอบที่ขีดเส้นใต้เช่น ระบบที่เป็นไปตามข้อกำหนดสามประการที่อธิบายไว้ข้างต้น และองค์ประกอบที่ขีดเส้นใต้เหล่านี้จะเป็นศูนย์เท่านั้น จึงชัดเจนว่าสำหรับเมทริกซ์นี้ เราจะได้รับการเยี่ยมชมขั้นต่ำ แต่จะน้อยที่สุดสำหรับเมทริกซ์ C ดั้งเดิมเท่านั้น เพื่อให้ได้ต้นทุนทัวร์ที่ถูกต้อง คุณจะต้องบวกค่าคงที่การลดทั้งหมดกลับเข้าไป และราคาของทัวร์จะเปลี่ยนจาก 0 เป็น 34 ดังนั้น ทัวร์ขั้นต่ำต้องไม่ต่ำกว่า 34 เราได้รับเรตติ้งที่ต่ำกว่าทุกรอบ

ตอนนี้เรามาเริ่มแตกแขนงกัน ในการทำเช่นนี้ เราจะดำเนินการขั้นตอนการประมาณค่าศูนย์ พิจารณาศูนย์ในเซลล์ (1,2) ของเมทริกซ์รีดิวซ์ หมายความว่าค่าใช้จ่ายในการย้ายจากเมือง 1 ไปยังเมือง 2 เท่ากับ 0 แล้วถ้าเราไม่ไปจากเมือง 1 ไปยังเมือง 2 จะเป็นอย่างไร? จากนั้นคุณยังต้องป้อนเมือง 2 สำหรับราคาที่ระบุในคอลัมน์ที่สอง ถูกกว่าเพียง 1 (จากเมือง 6) ต่อไปคุณจะต้องออกจากเมือง 1 ตามราคาที่ระบุไว้ในบรรทัดแรก ตัวเลือกที่ถูกที่สุดคือไปที่เมือง 3 ด้วยเงิน 0 เมื่อรวมค่าขั้นต่ำทั้งสองนี้แล้ว เรามี 1+0=1: ถ้าคุณไม่ไป "ศูนย์" จากเมือง 1 ไปยังเมือง 2 คุณจะต้องจ่ายอย่างน้อย 1 นี่คือค่าประมาณของศูนย์ ค่าประมาณของศูนย์ทั้งหมดแสดงอยู่ในตาราง 5 ทางด้านขวาและสูงกว่าศูนย์ (ไม่ได้ให้คะแนนศูนย์เท่ากับศูนย์)

ลองเลือกค่าสูงสุดของค่าประมาณเหล่านี้ (ในตัวอย่างมีการประมาณการหลายค่าเท่ากับค่าหนึ่ง ลองเลือกค่าประมาณแรกในเซลล์ (1,2))

ดังนั้นจึงเลือกขอบศูนย์ (1,2) มาแบ่งทัวร์ทั้งหมดออกเป็นสองคลาส - ทัวร์ที่มีขอบ (1,2) และทัวร์ที่ไม่มีขอบ (1,2) ชั้นสองบอกได้เลยว่าต้องจ่ายเพิ่มอีก 1 รอบ ดังนั้นทัวร์ในคลาสนี้ราคา 35 ขึ้นไป

สำหรับคลาสแรก เราต้องพิจารณาเมทริกซ์ในตารางด้วย 6 โดยขีดฆ่าบรรทัดแรกและคอลัมน์ที่สอง

ตารางที่ 5

ตารางที่ 7

นอกจากนี้ในเมทริกซ์แบบรีดิวซ์จะมีการห้ามในเซลล์ (2,1) เนื่องจาก เลือกขอบ (1,2) และไม่สามารถปิดทัวร์ก่อนเวลาอันควรด้วยขอบ (2,1) เมทริกซ์ที่ลดลงสามารถลดลงได้ 1 ในคอลัมน์แรก ดังนั้นแต่ละรอบที่สอดคล้องกับมันมีค่าใช้จ่ายอย่างน้อย 35 ผลลัพธ์ของการแตกแขนงและการประมาณค่าของเราจะแสดงไว้ในรูปที่ 1 6.

วงกลมแสดงถึงชั้นเรียน: วงกลมด้านบนคือชั้นเรียนของทุกรอบ ซ้ายล่าง - คลาสของทัวร์ทั้งหมดรวมถึงขอบ (1,2); ล่างขวา - คลาสของทัวร์ทั้งหมดที่ไม่รวม edge (1,2) ตัวเลขที่อยู่เหนือวงกลมเป็นการประมาณจากด้านล่าง

แตกแขนงไปในทิศทางบวกต่อไป: ซ้าย - ล่าง ในการทำเช่นนี้ เราจะประมาณค่าศูนย์ในเมทริกซ์ C แบบรีดิวซ์ในตาราง 7. คะแนนสูงสุดในเซลล์ (3,1) คือ 3 ดังนั้น คะแนนสำหรับจุดยอดขวาล่างในรูปที่ 1 7 คือ 35+3=38 เพื่อประเมินจุดยอดซ้ายล่างในรูป ในตารางที่ 7 คุณต้องลบแถวที่ 3 และคอลัมน์ 1 ออกจากเมทริกซ์ C จะได้เมทริกซ์ C[(1,2), (3,1)] ในตาราง 8. ในเมทริกซ์นี้ คุณต้องวางการห้ามไว้ในเซลล์ (2,3) เนื่องจากส่วนของทัวร์ได้ถูกสร้างขึ้นจากขอบ (1,2) และ (3,1) แล้ว เช่น และห้ามปิดก่อนกำหนด (2.3) เมทริกซ์นี้กำหนดคอลัมน์ตาม 1 (ตารางที่ 9) ดังนั้นแต่ละทัวร์ของคลาสที่เกี่ยวข้อง (เช่น ทัวร์ที่มีขอบ (1,2) และ (3,1)) มีค่าใช้จ่าย 36 หรือมากกว่า

ตารางที่ 9

ตารางที่ 11

ตอนนี้เราประเมินค่าศูนย์ในเมทริกซ์ที่กำหนด C[(1,2), (3,1)] ศูนย์ที่มีคะแนนสูงสุด 3 อยู่ในเซลล์ (6,5) ตัวเลือกเชิงลบมีคะแนน 38+3=41 หากต้องการรับการประเมินตัวเลือกเชิงบวก ให้ลบบรรทัด 6 และคอลัมน์ 5 ออก ใส่การห้ามในเซลล์ (5,6) ดูตาราง 10. เมทริกซ์นี้ลดไม่ได้ ดังนั้นคะแนนของตัวเลือกที่เป็นบวกจึงไม่เพิ่มขึ้น (รูปที่ 8)

การประเมินค่าศูนย์ในเมทริกซ์ในตาราง 10 เราจะได้การแยกสาขาตามการเลือกขอบ (2,6) ตัวเลือกเชิงลบจะได้คะแนน 36+3=39 และเพื่อให้ได้คะแนนสำหรับตัวเลือกที่เป็นบวก เราจะขีดฆ่าแถวที่สองและคอลัมน์ที่หก รับเมทริกซ์ในตาราง 11.

ต้องเพิ่มการแบนลงในเมทริกซ์ในเซลล์ (5.3) เนื่องจากส่วนของทัวร์ได้ถูกสร้างขึ้นแล้ว และจะต้องห้ามการส่งคืนก่อนกำหนด (5.3) ตอนนี้เรามีเมทริกซ์ขนาด 2x2 เหลืออยู่โดยมีข้อจำกัดในแนวทแยง เราก็จบทัวร์ด้วยขอบ (4,3) และ (5,4) ไม่ใช่เรื่องไร้ประโยชน์ที่เราแยกออกไปเป็นตัวเลือกเชิงบวก ตอนนี้เราได้รับทัวร์แล้ว: 1>2>6>5>4>3>1 ค่าใช้จ่าย 36 เมื่อไปถึงด้านล่างสุดของแผนผังการค้นหา ระดับของทัวร์ก็แคบลงเหลือ 1 ทัวร์ และประมาณการจาก ด้านล่างกลายเป็นต้นทุนที่แน่นอน

ดังนั้น ทุกชั้นเรียนที่มีคะแนนตั้งแต่ 36 ขึ้นไป ทัวร์ที่ดีที่สุดไม่มี. ดังนั้นจุดยอดที่เกี่ยวข้องจึงถูกขีดฆ่าออก จุดยอดที่ผู้สืบทอดทั้งสองถูกลบจะถูกลบเช่นกัน เราได้ลดการค้นหาทั้งหมดลงอย่างมาก ยังคงต้องตรวจสอบว่าคลาสที่สอดคล้องกับเมทริกซ์ C ไม่มีการทัวร์ที่ดีกว่าหรือไม่นั่นคือ ให้เมทริกซ์ C โดยมีการแบนในเซลล์ 1,2 ลดลง 1 ในคอลัมน์ (ซึ่งให้คะแนน 34+1=35) การประเมินค่าศูนย์จะให้ 3 สำหรับศูนย์ในเซลล์ (1,3) ดังนั้นการประเมินตัวเลือกเชิงลบ 35+3 จึงเกินค่าของรอบที่ 36 ที่ได้รับแล้ว และตัวเลือกเชิงลบจะถูกตัดออก

เพื่อให้ได้ค่าประมาณของตัวเลือกที่เป็นบวก เราจะแยกแถวแรกและคอลัมน์ที่สามออกจากเมทริกซ์ ตั้งค่าการแบน (3.1) และรับเมทริกซ์ เมทริกซ์นี้กำหนดไว้ในแถวที่สี่ด้วย 1 คะแนนของชั้นเรียนถึง 36 และวงกลมถูกขีดฆ่า เนื่องจากลูกทั้งสองของจุดสุดยอด “ทุกคน” ถูกฆ่า มันจึงถูกฆ่าด้วยเช่นกัน ไม่มีจุดยอดเหลืออยู่ การค้นหาสิ้นสุดลงแล้ว เราได้รับทัวร์ขั้นต่ำเท่ากัน ซึ่งแสดงไว้ในตารางที่ขีดเส้นใต้ไว้ 2.

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

ลองพิจารณาปัญหาการเขียนโปรแกรมแบบแยกในรูปแบบทั่วไป:

ค้นหา -เวกเตอร์ของสิ่งแปลกปลอม, D- ไฟไนต์

มากมาย ค่าที่ยอมรับได้ของเวกเตอร์นี้ F(x) คือฟังก์ชันวัตถุประสงค์ที่กำหนด

แนวคิดของวิธีนี้คือการแบ่งพาร์ติชัน D ออกเป็นชุดย่อยที่แยกจากกัน Di (ขั้นตอนนี้เรียกว่าการแยกสาขา) และคำนวณขอบเขตบนและล่างของฟังก์ชันวัตถุประสงค์ในแต่ละชุดย่อย เราจะแสดงขีดจำกัดล่างด้วย H และขีดบนด้วย E ดังนั้น สวัสดี Eo เซตย่อยนี้จึงไม่มีจุดที่เหมาะสมที่สุดและสามารถแยกออกจากการพิจารณาเพิ่มเติมได้ หากขีดจำกัดบนคือ Ei H ให้แทนที่ H ด้วย min Hi หาก E=H ปัญหาจะได้รับการแก้ไข ไม่เช่นนั้นจำเป็นต้องดำเนินการขั้นตอนการแยกสาขาต่อไปและคำนวณขอบเขตบนและล่าง ในกรณีนี้ คุณสามารถแบ่งพาร์ติชันชุดย่อยทั้งหมดหรือบางส่วนได้ในขั้นตอนถัดไปจนกว่าจะบรรลุความเท่าเทียมกันของขอบเขตบนและล่าง และไม่ใช่บนชุดย่อยที่แยกจากกัน แต่สำหรับขอบเขตที่ยอมรับโดยรวม

แนวคิดง่ายๆ ของสาขาและวิธีผูกต้องมีการคำนวณเพิ่มเติมเพื่อกำหนดขอบเขต ตามกฎแล้ว สิ่งนี้นำไปสู่การแก้ไขปัญหาการปรับให้เหมาะสมเสริม หากต้องการการคำนวณเพิ่มเติมเหล่านี้ จำนวนมากการปฏิบัติงาน ประสิทธิผลของวิธีการอาจต่ำ

โครงการ การเขียนโปรแกรมแบบไดนามิกเมื่อเคลื่อนที่จากจุดเริ่มต้นไปยังจุดสิ้นสุด (รูปที่ 5.1) สามารถแสดงเป็นขั้นตอนการแตกแขนงได้

ชุดของวิถีที่ยอมรับได้ทั้งหมด (ลำดับของการเปลี่ยนทีละขั้นตอน) คือชุดเริ่มต้น D ซึ่งเราต้องค้นหาขอบเขตล่างและบน เช่นเดียวกับวิถีที่ฟังก์ชันวัตถุประสงค์ไปถึงขอบเขตบนและประกาศ ค่าที่สอดคล้องกันของฟังก์ชันวัตถุประสงค์เป็นบันทึก การสร้างชุดสถานะที่ได้รับหลังจากขั้นตอนแรกคือสาขาแรก


ข้าว. 5.1.

ตอนนี้เซตย่อยของ Di คือเซตของวิถี ซึ่งแต่ละเซตจะผ่านจุดที่ i ที่สอดคล้องกัน

ในขั้นตอนต่อมา หลังจากปฏิเสธพาธทั้งหมดที่นำไปสู่สถานะ (i-oe) ใดๆ ยกเว้นสถานะเดียว เซ็ตย่อยที่เกี่ยวข้องจะเป็นพาธที่เหลืออยู่นี้โดยมีความต่อเนื่องที่ถูกต้องทั้งหมด (รูปที่ 5.1) สำหรับแต่ละเซตย่อยเหล่านี้ เราต้องหาขอบเขตบนและล่าง ถ้า ขีดจำกัดล่างเกินค่าปัจจุบันของบันทึก สถานะที่เกี่ยวข้องและความต่อเนื่องทั้งหมดจะถูกปฏิเสธ หากถึงขีดจำกัดบนในวิถีที่แน่นอนและน้อยกว่าค่าบันทึกปัจจุบัน เราก็จะได้รับบันทึกใหม่

ประสิทธิผลของแนวทางนี้ขึ้นอยู่กับความถูกต้องของการประมาณการที่ได้รับเช่น จากเอย-สวัสดี และจากเวลาที่ใช้ในการคำนวณ

ในความเป็นจริง ในรูปแบบที่เรียบง่าย เราได้ใช้วิธีนี้แล้วในการแก้ปัญหาการปกป้องพื้นผิว (ส่วนที่ 4.6) เมื่อเราปฏิเสธสถานะที่ต้นทุนปัจจุบันเกินต้นทุนรวมสำหรับการประมาณเบื้องต้น ในกรณีนี้ ต้นทุนปัจจุบันคือขีดจำกัดล่าง หากเราถือว่าต้นทุนเป็นศูนย์สำหรับเส้นทางที่เหลือทั้งหมด และต้นทุนทั้งหมดที่สอดคล้องกับการประมาณเริ่มต้นจะถูกบันทึกไว้ ด้วยแนวทางนี้ บันทึกไม่ได้รับการอัปเดต แม้ว่าสามารถทำได้โดยการสร้างการประมาณเริ่มต้น (ขอบเขตบน) สำหรับเส้นทางที่เหลือในลักษณะเดียวกับที่ทำกับวิถีทั้งหมดเมื่อสร้างการประมาณเริ่มต้น ขอบเขตล่างที่ได้รับโดยไม่มีการคำนวณจะสอดคล้องกับต้นทุนเป็นศูนย์สำหรับเส้นทางที่เหลือทั้งหมดและเป็นค่าประมาณคร่าวๆ แต่ได้รับ "ฟรี" เช่น โดยไม่ต้องคำนวณ

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