मिश्रित पूर्णांक प्रोग्रामिंग समस्या को हल करने के लिए सबसे तेज़ सॉफ़्टवेयर (ओपन सोर्स) क्या है


14

मुझे मिश्रित पूर्णांक प्रोग्रामिंग समस्या है। और मैं अपने सॉल्वर के रूप में GLPK का उपयोग कर रहा हूं। लेकिन मैंने पाया कि GLPK रैखिक प्रोग्रामिंग समस्या के लिए अच्छा है, लेकिन मिक्स्ड इंटेगर प्रोग्रामिंग के लिए, इसमें अधिक समय की आवश्यकता होती है, इसलिए यह हमारी आवश्यकता को पूरा नहीं करता है। मैं अन्य सॉफ्टवेयर चाह रहा हूँ। क्या तेज गति के साथ मिश्रित पूर्णांक प्रोग्रामिंग समस्या को हल करने के लिए कोई अन्य अच्छा खुला स्रोत उपकरण है? धन्यवाद!


क्या आपने SCIP की तुलना देखी है ?
अली

जवाबों:


14

यदि आप कुछ ओपन-सोर्स चाहते हैं, तो आप शायद COIN के CBC कोड को आज़माना चाहते हैं (उनके पास कुछ अन्य MILP सॉल्वर भी हैं, जैसे कि ब्रांच-एंड-प्राइस फ्रेमवर्क, या SYMPHONY)।

Gurobi और CPLEX काफी तेज़ होंगे, और 2011 या 2012 के INFORMS बैठक के रूप में, Gurobi CPLEX की तुलना में तेज़ था (हालाँकि प्रदर्शन मेट्रिक्स निश्चित रूप से समस्या पर निर्भर हैं)। मेरी थीसिस में हल किए गए MILPs पर, Gurobi CBC की तुलना में लगभग 15-100 गुना तेज़ था, और CPLEX लगभग Gurobi जितना तेज़ था, लेकिन बहुत थोड़ा धीमा (जैसे 12-80 गुना तेज़)।

हालांकि सबसे खराब स्थिति प्रदर्शन वास्तव में घातीय है, निष्पादन समय समस्या संरचना पर बहुत अधिक निर्भर करेगा। यह संभावना नहीं है कि आप लाखों चरों के साथ एक MILP को हल करने में सक्षम होंगे जब तक कि आप विशेष संरचना का दोहन न करें (हो सकता है कि अगर यह एक स्टोकेस्टिक प्रोग्राम है जिसे कई छोटी समस्याओं में विघटित किया जा सकता है), लेकिन हजारों लोगों के साथ nontrivat MILP को हल करना पूरी तरह से संभव है एक मिनट के भीतर चर। (बेशक, इन समस्याओं को हल करने के लिए एक घंटे या अधिक समय लेना भी संभव है।)

जैसा कि ब्रायन बोरचर्स ने नोट किया है, CPLEX और Gurobi दोनों के पास कुछ शोधकर्ताओं के लिए मुफ्त लाइसेंस उपलब्ध हैं, इन दो सॉफ्टवेयर पैकेजों में से एक वास्तव में एक सामान्य-उद्देश्य MILP सॉल्वर के रूप में उपयोग करने के लिए सबसे अच्छा होगा।


6

मिश्रित पूर्णांक रैखिक प्रोग्रामिंग समस्याएँ रैखिक प्रोग्रामिंग समस्याओं की तुलना में हल करने के लिए बहुत कठिन हैं। कम्प्यूटेशनल जटिलता के संदर्भ में, एलपी को बहुपद समय में हल किया जा सकता है जबकि MILP को हल करना एक एनपी-हार्ड समस्या है। MILP के समाधान के लिए ज्ञात एल्गोरिदम में घातीय सबसे खराब स्थिति है।

मिश्रित पूर्णांक रैखिक प्रोग्रामिंग के लिए अन्य सॉफ्टवेयर पैकेज हैं जिन्हें आप एससीआईपी (शैक्षणिक उपयोग के लिए नि: शुल्क), CPLEX (वाणिज्यिक लेकिन एक शैक्षणिक लाइसेंसिंग विकल्प) और GUROBI (एक शैक्षणिक लाइसेंसिंग विकल्प के साथ भी वाणिज्यिक) सहित एक या एक से अधिक देख सकते हैं। इन पैकेजों में आपकी समस्याओं पर GLPK की तुलना में काफी तेजी से हो सकता है, लेकिन MILP को हल करने में उनमें से किसी भी तेजी से होने की उम्मीद नहीं है क्योंकि वे एलपी के समान आकार को हल करने में हैं।


4

यदि आप विभिन्न सॉल्वरों का एक गुच्छा आज़माना चाहते हैं, तो जूलिया के JuMP मॉडलिंग ढांचे को आज़माएं। यह आपको अपने मॉडल को JuMP मॉडल के रूप में लिखने की सुविधा देता है, और फिर सॉल्वरों को कोड की एक पंक्ति के साथ बदल देता है। उदाहरण के लिए, MILP समस्याओं के लिए आप Bonmin, Cbc, Couenne, CPLEX, GLPK, Gurobi और MOSEK सॉल्वर्स में से चुन सकते हैं। इस वजह से, यदि आप इसे JuMP में लिखते हैं, तो आप बस उन सभी सॉल्वरों को आजमा सकते हैं, जिनका ज्यॉफ ने उल्लेख किया है और देखें कि कोड का एक गुच्छा लिखने के बिना क्या काम करता है। आपकी अपनी व्यक्तिगत परीक्षाएँ आपकी समस्याओं के लिए सबसे तेज़ एल्गोरिदम के लिए ज्ञान का सबसे अच्छा स्रोत होंगी।


क्या JuMP फ्रेमवर्क ज्यादा उपरि जोड़ता है?
n

1
नहीं, JuMP मैक्रोज़ के माध्यम से किया जाता है इसलिए यह संकलन-समय पर है। वास्तव में, JuMP कोड को फिर से लिखने के लिए मैक्रो का उपयोग करता है और ग्रेडिएंट्स, जैकबियंस और हेसियन के लिए कुशल कार्यों की गणना करने के लिए ऑटोडीफ़ेन्शन का उपयोग करता है, इसलिए यह उन मामलों में तेज़ होगा जहां आपने अन्यथा ग्रेडिएंट / के लिए एक विश्लेषणात्मक रूप प्रदान नहीं किया है। Jacobian / हेस्सियन। आप वास्तव @code_llvmमें परिणामी विधानसभा कोड को देखने के लिए जांच कर सकते हैं कि यह देखने के लिए कि गोंद कोड अनिवार्य रूप से कुछ भी नहीं है (यह भी है क्योंकि जूलिया फ़ंक्शन पॉइंटर और सी / फोरट्रान के समान बिट सरणियों का उपयोग करता है)।
क्रिस रैकैस ने

@ChrisRackauckas nonlinear बाधाओं के साथ nonlinear समस्याओं के लिए क्या बेहतर काम करता है?
स्केन

यह एक पूरी तरह से अलग सवाल है, यह शायद एक टिप्पणी में नहीं पूछा जाना चाहिए, लेकिन मैं आवश्यक बाधाओं पर निर्भर करता है और मुझे वैश्विक या स्थानीय अनुकूलन की आवश्यकता है या नहीं, इसके लिए NLopt या IPOPT के साथ JuMP का उपयोग करते हैं।
बजे क्रिस रैकॉकास

3

दूसरों के सुझावों के बाद, मैंने कई परियोजनाओं के लिए (वाणिज्यिक) GAMS का उपयोग किया है । यह बहुत सीधा है; आपको बस अपनी समस्या का गणित तैयार करना है। यह चर, बाधाओं, उद्देश्य कार्यों और सभी इनपुट डेटा को उठाता है। फिर, यह किसी भी मामले के लिए सॉल्वर (ऑप्टिमाइज़र) की एक सीमा प्रदान करता है। आपके मामले के आधार पर, आप अधिक परिष्कृत सॉल्वर जोड़ते हैं।

निश्चित रूप से, EASY देखने लायक है। ओपन-सोर्स फ्रेमवर्क।

"उपवास" शब्द बहुत अस्पष्ट है! आपको ज्यादा केंद्रित होने की ज़रूरत है; पुनरावृत्तियों की संख्या के संदर्भ में उपवास? मूल्यांकन की संख्या? बीता हुआ समय? इनका संयोजन?

हालाँकि, यदि आप एक सॉफ्टवेयर की तलाश में नहीं हैं, और आप सिर्फ समस्या का समाधान करना चाहते हैं, तो मैं वैश्विक ऑप्टिमाइज़र NSGA-II का उपयोग करने का सुझाव दे सकता हूं, जो बहुत उच्च प्रतिष्ठा और प्रदर्शन का एक ओपन-सोर्स ऑप्टिमाइज़र है।

यदि आप अधिक जानकारी प्रदान करते हैं, तो मैं सटीक मार्गदर्शन कर सकता हूं।


1
आपको गंभीरता से विचार करने की आवश्यकता है [ओपनएमडीएओ] [1], जिसे नासा द्वारा विकसित / समर्थित है और यह काफी लचीला है!
T3rmInAt0r
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.