แม้ว่าการโปรแกรมเชิงเส้นจำนวนเต็มเชิงเส้น (MILP) นั้นแท้จริงแล้วคือ NP-complete แต่ก็มีอินสแตนซ์ของการโปรแกรมเชิงเส้นจำนวนเต็มแบบผสมที่แก้ไขได้
NP-complete หมายความว่าการโปรแกรมเชิงเส้นจำนวนเต็มแบบผสมคือ:
a) แก้ไขได้ในเวลาพหุนามด้วยเครื่องจักรทัวริง nondeterministic (ส่วนที่ NP)
b) เวลาพหุนามลดได้เป็น 3-SAT (ส่วนที่สมบูรณ์; สำหรับส่วนที่เหลือของการสนทนาส่วนนี้ไม่สำคัญ)
O ( 2)n)n
คำแถลงนั้นไม่ได้หมายความว่าอินสแตนซ์ "เล็ก ๆ " นั้นเป็นเรื่องยาก โชคไม่ดีที่ฉันไม่สามารถบอกได้อย่างแม่นยำถึงความหมายเล็ก ๆ ของ MILP อินสแตนซ์ ฉันแก้ปัญหาที่มีตัวแปรการตัดสินใจไบนารีอย่างน้อย 3,000 ตัวเป็นประจำ ขึ้นอยู่กับการกำหนดปัญหาปัญหาอาจใช้เวลาน้อยกว่า. 01 วินาที (ซึ่งเป็นกรณีของปัญหาที่ค่อนข้าง จำกัด ) หรือมากกว่าหนึ่งชั่วโมง (ซึ่งเป็นกรณีของปัญหาที่มีข้อ จำกัด จำนวนมากทำงานอยู่) เนื่องจากปัญหาดูเหมือนว่า มีโครงสร้างที่ดี ฉันสามารถพูดได้ว่านักแก้ปัญหา LP ที่ทันสมัยสามารถแก้ไข LP ที่มีตัวแปรการตัดสินใจต่อเนื่องหลายล้านตัวและหากไม่มีโครงสร้างพิเศษมันไม่น่าเป็นไปได้อย่างมากที่ปัญหาจะเกิดขึ้นกับใครสักคนประมาณ 1,000 ถึง 10
หากคุณคิดว่าคุณมีอินสแตนซ์ที่แก้ไขได้ของ MILP คุณจะต้องใช้อัลกอริทึมแบบ จำกัด และแยกย่อยหรือแยกย่อยก็ได้ การใช้งานที่ดีที่สุดคือCPLEXและGurobi ทั้งคู่เป็นผลิตภัณฑ์เชิงพาณิชย์ที่มีใบอนุญาตทางวิชาการฟรีหากคุณขุดพอ หากคุณต้องการตัวแก้ปัญหาโอเพนซอร์ซจริง ๆ โครงการในชุมชนCOIN-ORนั้นมีความเหมาะสมมากกว่าถึงแม้ว่าบางครั้งแพ็กเกจซอร์สอาจจะพิถีพิถัน โครงการที่เกี่ยวข้องมากที่สุดจะเป็นcbc การแก้สาขาและตัด , แก้ซิมโฟนี , แก้ BCP สาขาตัดราคาและลูกคิดสาขาและตัดแก้ โครงการเหล่านี้ทั้งหมดจะต้องใช้หลายแพคเกจจากCOIN-ORเนื่องจากโครงสร้างแบบแยกส่วน
หากคุณต้องการเลือกที่จะพยายามแก้หลายทางออกที่ดีที่สุดของคุณคือการใช้เปิด Solver การเชื่อมต่อจากเหรียญหรือ โปรดทราบว่าบางส่วนของอินเทอร์เฟซนี้จะให้คุณตั้งค่าตัวเลือกการแก้ปัญหาพื้นฐานเท่านั้นและหากต้องการตั้งค่าตัวเลือกขั้นสูงสำหรับนักแก้ปัญหาคุณควรศึกษารายชื่อผู้รับจดหมายของCOIN-ORสำหรับรายละเอียดเพิ่มเติม ตัวแก้ MILP เชิงพาณิชย์เป็นจำนวนมาก (บางครั้งคำสั่งของขนาดหรือมากกว่า) เร็วกว่าตัวแก้โอเพนซอร์ส ตัวเลือกสำหรับการสร้างต้นแบบก็คือการใช้ภาษาการสร้างแบบจำลองเชิงพีชคณิตเช่นGAMSหรือAMPL แพคเกจซอฟต์แวร์ทั้งสองนี้เป็นผลิตภัณฑ์เชิงพาณิชย์ แต่มีรุ่นทดลองใช้ที่สามารถใช้กับอินสแตนซ์ที่มีปัญหาเล็กน้อย สำหรับกรณีที่มีปัญหามากขึ้นคุณสามารถส่งไฟล์ GAMS หรือ AMPL ไปที่เซิร์ฟเวอร์ NEOSที่จะแก้ไข เซิร์ฟเวอร์นี้ให้บริการแก่สาธารณะ
หากคุณมีอินสแตนซ์ขนาดใหญ่เพียงพอของ MILP แล้วตัวแก้ปัญหาเหล่านี้จะไม่ทำงานได้ดี คุณสามารถผ่อนคลายตัวแปรจำนวนเต็มเป็นตัวแปรต่อเนื่องแก้ปัญหาแล้วปัดไปยังคอลเล็กชั่นตัวแปรจำนวนเต็มที่ใกล้ที่สุดซึ่งเป็นวิธีการแก้ปัญหาที่เป็นไปได้ของอินสแตนซ์ปัญหาของคุณ ทางออกที่ดีที่สุดของการผ่อนคลาย LP ของ MILP ของคุณจะให้ขอบเขตที่ต่ำกว่าในค่าฟังก์ชันวัตถุประสงค์ที่ดีที่สุดของ MILP ของคุณ (สมมติว่ามีการย่อขนาดเล็กสุด) และทางออกที่เป็นไปได้ของ MILP ของคุณจะทำให้คุณมีขอบเขตสูงสุด ค่าฟังก์ชั่นของ MILP ของคุณ
หากคุณโชคดีจริงๆและเมทริกซ์ข้อ จำกัด ของคุณนั้นไม่มีรูปแบบทั้งหมดคุณสามารถใช้ตัวแก้ปัญหา LP เพื่อสร้างวิธีแก้ปัญหาจำนวนเต็มให้กับ MILP ของคุณและคุณสามารถแก้ปัญหาได้อย่างมีประสิทธิภาพแม้จะมีขนาดใหญ่ ชั้นเรียนอื่น ๆ ของปัญหามีขั้นตอนวิธีการประมาณอย่างรวดเร็วเช่นปัญหาเป้และปัญหาการตัดหุ้น อัลกอริธึมการสลายตัวอย่างพิเศษของ MILP ยังมีอยู่สำหรับปัญหาที่มีโครงสร้างพิเศษแม้ว่าฉันจะไม่คุ้นเคยกับรายละเอียดเนื่องจากหัวข้อเหล่านั้นค่อนข้างพิเศษและอยู่นอกขอบเขตของวิทยานิพนธ์ของฉัน
ฉันไม่ได้ตระหนักถึงรูปแบบการประมาณเวลาพหุนามอย่างสมบูรณ์(FPTAS) โดยเฉพาะสำหรับ MILP แม้ว่า FPTAS ของคลาสปัญหาที่มี MILP อยู่ด้วย (ดูบทความนี้) คำแนะนำของฉันคือการใช้หนึ่งในนักเขียนโปรแกรมเชิงเส้นจำนวนเต็มเชิงเส้นด้านบนร่วมกับการ จำกัด เวลาและความอดทนที่เหมาะสมในช่องว่าง optimality การทำเช่นนี้จะช่วยให้คุณมีทางออกที่ดีที่สุดเท่าที่จะเป็นไปได้สำหรับ MILP ของคุณภายในเวลาที่กำหนดและหากนักแก้ปัญหายุติลงก่อนที่จะถึงเวลาที่กำหนดโซลูชั่นที่เป็นไปได้จะเหมาะสมที่สุด การดำเนินการนี้จะยังคงให้ขอบเขตกับคุณภาพของโซลูชันเนื่องจากโซลูชันที่เป็นไปได้ของคุณจะเป็นขอบเขตบนและตัวแก้ปัญหาอาจให้ขอบเขตล่างที่เหมาะสมแก่คุณ ขอบเขตจะไม่รับประกันว่าจะอยู่ภายในโซลูชันที่เหมาะสมที่สุด แต่จากนั้นอีกครั้ง FPTAS ใด ๆ ก็จะมีราคาแพงมากขึ้นเมื่อการประมาณดีขึ้น
สิ่งที่สำคัญที่สุดที่คุณสามารถทำได้ก่อนที่คุณจะตัดสินใจเลือกสูตร MILP คือเลือกสูตรที่แข็งแกร่งที่สุดที่คุณสามารถหาได้ คุณสามารถหาคำแนะนำเกี่ยวกับวิธีเลือกสูตรที่แข็งแกร่งได้จากIntroduction to Linear Optimizationโดย Bertsimas และ Tsitsiklis แนวคิดหลักคือการเลือกสูตรที่มีข้อ จำกัด กำหนด polytope ที่ใกล้กับตัวเรือนูนของสูตรมากที่สุด (ดูที่บันทึกหลักสูตรเหล่านี้ ) การเลือกสูตรที่แข็งแกร่งสามารถสร้างความแตกต่างอย่างมากในเวลาที่ใช้ในการแก้ปัญหา