ตัวแก้ปัญหาการมอบหมาย

แก้ปัญหาการมอบหมายด้วยอัลกอริทึมฮังการี. ใช้อัลกอริทึมฮังการี (Kuhn-Munkres) เพื่อหาการมอบหมายแบบหนึ่งต่อหนึ่งที่ดีที่สุดระหว่างคนงานและงาน…

ใช้อัลกอริทึมฮังการี (Kuhn-Munkres) เพื่อหาการมอบหมายแบบหนึ่งต่อหนึ่งที่ดีที่สุดระหว่างคนงานและงาน ลดหรือเพิ่มต้นทุนรวมด้วยความซับซ้อนเวลา O(n3)

ปัญหาการมอบหมายคืออะไร?

ปัญหาการมอบหมายเป็นปัญหาการเพิ่มประสิทธิภาพเชิงผสม: กำหนด n ตัวแทนและ n งาน หาการมอบหมายแบบหนึ่งต่อหนึ่งที่ลดต้นทุนรวมให้น้อยที่สุด

อัลกอริทึมฮังการี (Kuhn-Munkres 1955) แก้ปัญหาใน O(n³) ลดเมทริกซ์ต้นทุนซ้ำๆ โดยการลบแถวและคอลัมน์ จากนั้นหาการมอบหมายที่ดีที่สุดผ่านเส้นทางเพิ่ม

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

Formula: หาค่าต่ำสุด Σ C[i][σ(i)] สำหรับทุก i ภายใต้เงื่อนไขว่า σ เป็นเพอร์มิวเทชัน (การจับคู่แบบหนึ่งต่อหนึ่ง) ขั้นตอนวิธีฮังการี: 1. ลบค่าต่ำสุดของแต่ละแถว 2. ลบค่าต่ำสุดของแต่ละคอลัมน์ 3. ขีดเส้นคลุมศูนย์ด้วยจำนวนเส้นน้อยที่สุด 4. ปรับเมทริกซ์แล้วทำซ้ำจนได้คำตอบที่เหมาะสมที่สุด

ตัวอย่างการคำนวณ

เมทริกซ์ต้นทุน: [[9,2,7],[6,4,3],[5,8,1]] ลดแถว → [[7,0,5],[3,1,0],[4,7,0]] ลดคอลัมน์ → [[4,0,5],[0,1,0],[1,7,0]] ช่องศูนย์ให้งานละหนึ่งแก่แต่ละตัวแทน: ตัวแทน 1→งาน 2 (ต้นทุน 2) ตัวแทน 2→งาน 1 (ต้นทุน 6) ตัวแทน 3→งาน 3 (ต้นทุน 1) ต้นทุนรวม = 9 — ต่ำกว่าการจับคู่ที่ดูน่าเลือกอย่าง ตัวแทน 2→งาน 3, ตัวแทน 3→งาน 1 (10)

เมื่อใดควรใช้เครื่องคำนวณนี้

ข้อผิดพลาดที่ควรหลีกเลี่ยง

วิธีตีความผลลัพธ์

มาตรฐานและเอกสารอ้างอิง

คำถามที่พบบ่อย

สามารถทำการเพิ่มสูงสุดได้หรือไม่?

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

ถ้าจำนวนคนงานและงานไม่เท่ากัน?

อัลกอริทึมเพิ่มแถวหรือคอลัมน์จำลองที่มีต้นทุน 0 การมอบหมายไปยังรายการจำลองหมายถึงคนงานหรืองานที่ไม่ได้มอบหมาย

ปัญหาการมอบหมายงานรองรับข้อจำกัดในโลกจริง เช่น ทักษะหรือความพร้อมของพนักงานได้หรือไม่?

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