ซอฟต์แวร์ที่เร็วที่สุดคืออะไร (โอเพ่นซอร์ส) เพื่อแก้ปัญหาการเขียนโปรแกรมจำนวนเต็มแบบผสม


14

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


คุณเคยเห็นการเปรียบเทียบกับSCIPหรือไม่
อาลี

คำตอบ:


14

หากคุณต้องการโอเพ่นซอร์สคุณอาจต้องการลองใช้รหัส CBC ของ COIN (พวกเขายังมีนักแก้ปัญหา MILP อีกสองสามคนเช่นโครงงานสาขาและราคาหรือ SYMPHONY)

Gurobi และ CPLEX จะเร็วกว่ามากและในการประชุม INFORMS 2011 หรือ 2012 Gurobi เร็วกว่า CPLEX (แม้ว่าการวัดประสิทธิภาพขึ้นอยู่กับปัญหาของหลักสูตร) ใน MILPs ที่แก้ไขในวิทยานิพนธ์ของฉัน Gurobi เร็วกว่า CBC ประมาณ 15-100 เท่าและ CPLEX เกือบเร็วเท่ากับ Gurobi แต่ช้ากว่าเล็กน้อยมาก (เช่นเร็วกว่า 12-80 เท่า)

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

ดังที่ Brian Borchers ตั้งข้อสังเกต CPLEX และ Gurobi มีสิทธิ์ใช้งานฟรีสำหรับนักวิจัยบางคนหนึ่งในสองชุดซอฟต์แวร์เหล่านี้จะดีที่สุดในการใช้เป็นตัวแก้ MILP ทั่วไป


6

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

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


4

หากคุณต้องการลองนักแก้ปัญหาที่แตกต่างกันลองใช้กรอบการสร้างโมเดล JuMPของ Julia มันช่วยให้คุณเขียนแบบจำลองของคุณในรูปแบบ JuMP แล้วสลับตัวแก้ปัญหาด้วยรหัสบรรทัดเดียว ตัวอย่างเช่นสำหรับปัญหา MILP คุณสามารถเลือกจากตัวแก้ Bonmin, Cbc, Couenne, CPLEX, GLPK, Gurobi และ MOSEK ด้วยเหตุนี้ถ้าคุณเขียนใน JuMP คุณสามารถลองนักแก้ปัญหาทั้งหมดที่ Geoff พูดถึงและดูว่าอะไรทำงานได้โดยไม่ต้องเขียนโค้ดจำนวนมาก การทดสอบส่วนบุคคลของคุณจะเป็นแหล่งความรู้ที่ดีที่สุดสำหรับอัลกอริทึมที่เร็วที่สุดสำหรับปัญหาของคุณ


เฟรมเวิร์ก JuMP เพิ่มโอเวอร์เฮดมากเกินไปหรือไม่
naught101

1
ไม่ JuMP ทำได้ผ่านมาโครดังนั้นจึงเป็นเวลารวบรวม ในความเป็นจริงสิ่งที่ JuMP ใช้มาโครในการเขียนโค้ดอีกครั้งและใช้การตอบโต้อัตโนมัติเพื่อคำนวณฟังก์ชันที่มีประสิทธิภาพสำหรับการไล่ระดับสี, Jacobians และ Hessians ดังนั้นมันจะเร็วขึ้นในกรณีที่คุณไม่ได้เตรียมรูปแบบการวิเคราะห์สำหรับการไล่ระดับสี / จาโคเบียน / รัฐ จริงๆคุณสามารถตรวจสอบผ่าน@code_llvmเพื่อตรวจสอบรหัสการชุมนุมที่เกิดขึ้นเพื่อดูว่ารหัสกาวไม่มีอะไรเป็นหลัก (เป็นเพราะจูเลียไร้เดียงสาใช้ตัวชี้ฟังก์ชั่นและอาร์เรย์บิตเดียวกับ C / Fortran)
Chris Rackauckas

@ChrisRackauckas แก้ปัญหาอะไรได้ผลดีกว่าสำหรับปัญหาไม่เชิงเส้นที่มีข้อ จำกัด ไม่เชิงเส้น?
skan

นั่นเป็นคำถามที่แตกต่างอย่างสิ้นเชิงหากไม่ควรถามในความคิดเห็น แต่ฉันมักจะใช้ JuMP กับ NLopt หรือ IPOPT ขึ้นอยู่กับข้อ จำกัด ที่กำหนดและไม่ว่าฉันต้องการการเพิ่มประสิทธิภาพระดับโลกหรือระดับท้องถิ่น
Chris Rackauckas

3

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

แน่นอนว่าEASY นั้นควรค่าแก่การดู กรอบโอเพนซอร์ซ

คำว่า "เร็ว" นั้นคลุมเครือมาก! คุณจะต้องเฉพาะเจาะจงมากขึ้น เร็วแค่ไหนในแง่ของจำนวนการทำซ้ำ? จำนวนการประเมินผล? เวลาที่ผ่านไป? การรวมกันของเหล่านี้?

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

หากคุณให้ข้อมูลเพิ่มเติมฉันสามารถแนะนำได้อย่างแม่นยำ


1
คุณต้องพิจารณาอย่างจริงจัง [openMDAO] [1] ซึ่งพัฒนา / สนับสนุนโดย NASA และมีความยืดหยุ่นมาก!
T3rmInAt0r
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.