เหตุผลสำหรับวิธีฮังการี (Kuhn-Munkres)


14

ฉันเขียนการใช้งานอัลกอริทึมของ Kuhn-Munkres สำหรับปัญหาการจับคู่ที่สมบูรณ์แบบที่มีน้ำหนักน้อยที่สุดอย่างน้อยสองฝ่ายจากบันทึกการบรรยายที่ฉันพบที่นี่และที่นั่นบนเว็บ มันใช้งานได้ดีจริงๆแม้กระทั่งบนยอดเขานับพัน และฉันเห็นด้วยว่าทฤษฎีที่อยู่เบื้องหลังมันมีความสวยงามอย่างแท้จริง แต่ถึงกระนั้นฉันก็ยังสงสัยว่าทำไมฉันต้องไปให้ไกลขนาดนี้ ฉันพบว่าบันทึกการบรรยายเหล่านี้ไม่ได้อธิบายว่าทำไมเราไม่สามารถใช้โปรแกรมเชิงเส้นปฐมภูมิและส่งผ่านไปยังวิธีการแบบง่าย ๆ ได้ แน่นอนฉันสงสัยว่ามันเป็นคำถามของประสิทธิภาพที่คาดเดาได้ แต่เนื่องจากฉันไม่ได้เห็นมันระบุไว้อย่างชัดเจนฉันไม่แน่ใจเกินไป จุดเริ่มต้นที่มากของโพลีท็อปได้รับการพิสูจน์แล้วว่าอยู่ในช่วง 0-1 ดังนั้นดูเหมือนว่าเราสามารถป้อนเข้าสู่การใช้งาน simplex ได้โดยตรงโดยไม่ต้องกำหนดคู่ หรือว่าฉันเป็นคนง่ายๆ

คำตอบ:


16

(ย้ายจากความคิดเห็น)

แน่นอนคุณสามารถแก้ LP ใด ๆ โดยใช้วัตถุประสงค์ทั่วไป LP แก้ แต่ขั้นตอนวิธีการเฉพาะมักจะมีมากประสิทธิภาพที่ดีขึ้น

มันไม่เพียง แต่เกี่ยวกับการรับประกันประสิทธิภาพเชิง asymptotic แต่ยังเกี่ยวกับการปฏิบัติจริงในโลก อัลกอริทึมเช่นวิธีการของฮังการีนั้นมีความคล่องตัวสูงมากและค่อนข้างง่ายต่อการใช้งานอย่างถูกต้องและมีประสิทธิภาพ

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


14

แม้ว่าคำตอบนั้นจะถูกต้องในแง่ทั่วไปมันก็มีประโยชน์ที่จะพยายามเข้าใจโดยเฉพาะสิ่งที่ผิดพลาดเมื่อใช้ครั้งแรกกับปัญหาการมอบหมาย พิจารณาปัญหาการมอบหมาย NxN ด้วยเมทริกซ์ตารางค่าใช้จ่าย c_ij LP ที่เกี่ยวข้องมีตัวแปร N ^ 2 x_ij ที่จะแก้ไข การคิดว่า x_ij เหล่านี้เป็นเมทริกซ์จตุรัส X วิธีแก้ปัญหาที่เป็นไปได้นั้นต้องการให้ X เป็นเมทริกซ์เปลี่ยนรูปซึ่งบังคับใช้โดยข้อ จำกัด 2N-1 ใน LP ของเรา หนึ่งคอลัมน์สำหรับแต่ละคอลัมน์ แต่คอลัมน์ทั้งหมดนั้นไม่ได้แยกจากกันและเราจะปล่อยหนึ่งคอลัมน์) ดังนั้นข้อ จำกัด ของ LP จึงเป็นเมทริกซ์ A (2N-1) x (N ^ 2) A

ตอนนี้โซลูชันพื้นฐานจะเกิดขึ้นจากการเลือกชุดของตัวแปรพื้นฐาน (2N-1) อย่างไรก็ตามสำหรับวิธีการแก้ปัญหาขั้นพื้นฐานนี้จะทำได้เช่นกันมีเพียง N ของตัวแปรเหล่านั้นเท่านั้นที่สามารถมีค่า 1 และอื่น ๆ (N-1) เท่ากับ 0 ดังนั้นทุกวิธีแก้ปัญหาที่เป็นไปได้จะแย่ลง ปัญหาของความเสื่อมนี้คือตัวแปรพื้นฐานใด ๆ (N-1) ที่เป็น 0 สามารถสลับกับตัวแปร nonbasic (N ^ 2-2N + 1) ใด ๆ หรือที่เรียกว่า "เดือยย่อยสลาย" โดยไม่มี ผลกระทบต่อมูลค่าของฟังก์ชั่นวัตถุประสงค์ [คุณเพียงแค่แลกเปลี่ยน 0 ตัวแปรหนึ่งสำหรับอีก] เมื่อ N มีขนาดใหญ่อัลกอริธึม primal simplex เสียเวลามากในการทำให้ pivots แย่ลงซึ่งไม่ได้ปรับปรุงโซลูชัน นี่คือสาเหตุของสาเหตุที่อัลกอริทึมซื่อๆเบื้องต้นไม่ได้ถูกใช้โดยตรงเพื่อแก้ปัญหาการมอบหมาย

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