โซลูชันที่มีประสิทธิภาพของโปรแกรมเชิงเส้นจำนวนเต็มแบบผสม


12

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

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

มีการใช้อัลกอริธึมที่เกี่ยวข้องอะไรบ้างในวันนี้และคุณภาพเหล่านี้ทำแผนที่อย่างไรกับอัลกอริธึมเหล่านี้

ฉันควรใช้แพ็คเกจซอฟต์แวร์ใดในการทดสอบ

คำตอบ:


15

แม้ว่าการโปรแกรมเชิงเส้นจำนวนเต็มเชิงเส้น (MILP) นั้นแท้จริงแล้วคือ NP-complete แต่ก็มีอินสแตนซ์ของการโปรแกรมเชิงเส้นจำนวนเต็มแบบผสมที่แก้ไขได้

NP-complete หมายความว่าการโปรแกรมเชิงเส้นจำนวนเต็มแบบผสมคือ:

a) แก้ไขได้ในเวลาพหุนามด้วยเครื่องจักรทัวริง nondeterministic (ส่วนที่ NP)

b) เวลาพหุนามลดได้เป็น 3-SAT (ส่วนที่สมบูรณ์; สำหรับส่วนที่เหลือของการสนทนาส่วนนี้ไม่สำคัญ)

O(2n)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 ที่ใกล้กับตัวเรือนูนของสูตรมากที่สุด (ดูที่บันทึกหลักสูตรเหล่านี้ ) การเลือกสูตรที่แข็งแกร่งสามารถสร้างความแตกต่างอย่างมากในเวลาที่ใช้ในการแก้ปัญหา


ตัวอย่างของโครงสร้างที่ดีที่คุณอ้างถึงคืออะไร มีคำถามอะไรบ้างที่ฉันควรถามเกี่ยวกับโปรแกรมของฉัน
MRocklin

นอกเหนือจากความเป็นเอกเทศปัญหาเป้และการตัดปัญหาสต็อกถ้าปัญหาของคุณเป็นโปรแกรม stochastic แบบหลายขั้นตอนมีกลยุทธ์การสลายตัวเพื่อใช้ประโยชน์จากโครงสร้างนั้น คุณสามารถใช้วิธีการต่าง ๆ เช่นการสลายตัวของ Benders การสลายตัว Dantzig-Wolfe และการสลายตัวรูปตัว L คุณสามารถใช้ประโยชน์จากโครงสร้างบล็อกมุมในข้อ จำกัด ของคุณ การสลายตัว Dantzig-Wolfe การสลายตัวของ Benders และการสลายตัวของ Benders โดยทั่วไปเป็นวิธีการที่ฉันเคยใช้หนึ่งหรือสองครั้งในอดีตสำหรับปัญหาการบ้าน
Geoff Oxberry

มีกลเม็ดและกับดักอื่น ๆ ที่เจฟฟ์ไม่ได้พูดถึง แต่เป็นการยากที่จะหาคำแนะนำเฉพาะโดยไม่เห็นปัญหาหรือชั้นเรียนที่แน่นอน
Aron Ahmadia

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