मैं एक प्रयोगशाला में काम करता हूं जो मिश्रित-पूर्णांक और गैर-उत्तल समस्याओं का वैश्विक अनुकूलन करता है। ओपन सोर्स ऑप्टिमाइजेशन सॉल्वर्स के साथ मेरा अनुभव यह रहा है कि बेहतर आम तौर पर संकलित भाषा में लिखे जाते हैं, और वे वाणिज्यिक अनुकूलन पैकेजों की तुलना में खराब रूप से किराया करते हैं।
यदि आप अपनी समस्या को समीकरणों की एक स्पष्ट प्रणाली के रूप में तैयार कर सकते हैं और एक मुक्त सॉल्वर की आवश्यकता है, तो आपका सबसे अच्छा शर्त शायद IPOPT है, जैसा कि एरन ने कहा। अन्य मुफ्त सॉल्वर COIN-OR वेब साइट पर पाए जा सकते हैं । मेरी जानकारी के लिए, नॉनलाइनियर सॉल्वरों में डेवलपर्स द्वारा प्रदान किए गए पायथन बाइंडिंग नहीं हैं; आपको जो भी बाइंडिंग मिलेगी, वह थर्ड-पार्टी होगी। अच्छे समाधान प्राप्त करने के लिए, आपको किसी भी नॉनक्लियर, उत्तल सॉल्वर को भी लपेटना होगा, जो आपको उचित स्टोचस्टिक ग्लोबल ऑप्टिमाइज़ेशन हेयुरेटिक्स में, या ब्रांच और बाउंड जैसे नियतात्मक वैश्विक ऑप्टिमाइज़ेशन एल्गोरिथ्म में मिला होगा। वैकल्पिक रूप से, आप Bonmin या Couenne, इस्तेमाल कर सकते हैं जो दोनों के नियतात्मक गैर उत्तल अनुकूलन समाधानकर्ताओं प्रदर्शन कि serviceably अच्छी तरह से राज्य के अत्याधुनिक solver, की तुलना में कर रहे हैं BARON ।
यदि आप एक वाणिज्यिक ऑप्टिमाइज़ेशन सॉल्वर खरीद सकते हैं, तो आप GAMS मॉडलिंग भाषा को देखने पर विचार कर सकते हैं, जिसमें कई नॉनलाइनियर ऑप्टिमाइज़ेशन सॉल्वर शामिल हैं। विशेष रूप से उल्लेख सॉल्वर CONOPT, SNOPT और बैरन के लिए इंटरफेस हैं। (CONOPT और SNOPT उत्तल सॉल्वर्स हैं।) अतीत में मैंने इस्तेमाल किया है कि एक kludgey समाधान, GAMS फाइल लिखने के लिए FortS (या Matlab) भाषा बाइंडिंग का उपयोग करने के लिए है और GAMS को Fortran (या Matlab) की गणना करने के लिए कहता है। एक अनुकूलन समस्या का समाधान। GAMS में पायथन लैंग्वेज बाइंडिंग है, और अगर कोई परेशानी हो तो मदद करने के लिए एक बहुत ही संवेदनशील सपोर्ट स्टाफ तैयार है। (अस्वीकरण: मेरा GAMS के साथ कोई संबंध नहीं है, लेकिन मेरी लैब एक GAMS लाइसेंस का मालिक है।) वाणिज्यिक सॉल्वरों से अधिक नहीं होना चाहिएfmincon
; वास्तव में, मुझे आश्चर्य होगा अगर वे बहुत बेहतर नहीं थे। यदि आपकी समस्याएं आकार में पर्याप्त रूप से छोटी हैं, तो आपको सॉल्वर के लिए जीएएमएस लाइसेंस और लाइसेंस खरीदने की भी आवश्यकता नहीं हो सकती है, क्योंकि जीएएमएस की एक मूल्यांकन प्रति उनकी वेब साइट से डाउनलोड की जा सकती है। अन्यथा, आप शायद यह तय करना चाहेंगे कि कौन सा सॉल्वर जीएएमएस लाइसेंस के साथ खरीद सकता है। यह ध्यान देने योग्य है कि बैरन को एक मिश्रित-पूर्णांक लीनियर प्रोग्रामिंग सॉल्वर की आवश्यकता होती है, और यह कि दो सर्वश्रेष्ठ मिश्रित-पूर्णांक लीनियर प्रोग्रामिंग सॉल्वर CPRO और GUROBI के लिए लाइसेंस शिक्षाविदों के लिए स्वतंत्र हैं, इसलिए आप केवल GAMS इंटरफेस खरीदने के साथ दूर होने में सक्षम हो सकते हैं इंटरफेस और सॉल्वर लाइसेंस की तुलना में, जो आपको काफी पैसा बचा सकता है।
यह बिंदु दोहराता है: मैंने जो ऊपर उल्लेख किया है, निर्धारक गैर-उत्तल अनुकूलन सॉल्वरों में से किसी के लिए, आपको समीकरणों के स्पष्ट सेट के रूप में मॉडल तैयार करने में सक्षम होने की आवश्यकता है। अन्यथा, गैर-उत्तल अनुकूलन एल्गोरिदम काम नहीं करेगा, क्योंकि ये सभी शाखा-और-बाउंड जैसे एल्गोरिदम के लिए उत्तल विश्राम का निर्माण करने के लिए प्रतीकात्मक विश्लेषण पर भरोसा करते हैं।
अद्यतन: एक विचार है कि पहली बार में मेरे लिए नहीं हुआ था था कि आप भी उन्नत अनुकूलन (के लिए टूलकिट कह सकते हैं टीएओ ) और PETSc का उपयोग कर tao4py और petsc4py PETSc साथ है, जो आसान बनता है की क्षमता अतिरिक्त लाभ है, और लाभ अपनेपन और ACTS उपकरण।
UPDATE # 2: आपके द्वारा बताई गई अतिरिक्त जानकारी के आधार पर, अनुक्रमिक द्विघात प्रोग्रामिंग (SQP) विधियाँ एक सर्वश्रेष्ठ शर्त होने जा रही हैं। SQP विधियों को आम तौर पर आंतरिक बिंदु विधियों की तुलना में अधिक मजबूत माना जाता है, लेकिन घने रैखिक हल की आवश्यकता का दोष है। चूंकि आप गति से अधिक मजबूती की परवाह करते हैं, इसलिए SQP आपका सबसे अच्छा दांव होगा। मुझे पायथन में लिखा गया एक अच्छा SQP सॉल्वर नहीं मिल रहा है (और जाहिर तौर पर, इस तकनीकी रिपोर्ट में आर्गन में स्वेन लेफ़र को भी नहीं देखा जा सकता है )। मैं अनुमान लगा रहा हूं कि SciPy और OpenOpt जैसे पैकेजों में लागू किए गए एल्गोरिदम में कुछ SQP एल्गोरिदम के मूल कंकाल हैं, लेकिन विशेष हेयूरिस्ट्स के बिना जो अधिक उन्नत कोड्स का उपयोग कन्वर्सेशन मुद्दों को दूर करने के लिए करते हैं। आप NLopt की कोशिश कर सकते हैंएमआईटी में स्टीवन जॉनसन द्वारा लिखित। मुझे इसके लिए उच्च उम्मीदें नहीं हैं क्योंकि इसकी कोई प्रतिष्ठा नहीं है जिसे मैं जानता हूं, लेकिन स्टीवन जॉनसन एक शानदार लड़का है जो अच्छा सॉफ्टवेयर लिखता है (आखिरकार, उसने एफएफटीडब्ल्यू लिखा था)। यह SQP के एक संस्करण को लागू करता है; अगर यह अच्छा सॉफ्टवेयर है, मुझे बताएं।
मैं उम्मीद कर रहा था कि TAO विवश अनुकूलन सॉल्वर के रास्ते में कुछ होगा, लेकिन यह नहीं है। आप निश्चित रूप से उपयोग कर सकते हैं कि उन्हें क्या बनाना है; उनके पास बहुत सारे घटक हैं। जैसा कि आपने बताया, हालांकि, ऐसा करना आपके लिए बहुत अधिक काम होगा, और यदि आप उस तरह की परेशानी में जा रहे हैं, तो आप एक TAO डेवलपर हो सकते हैं।
उस अतिरिक्त जानकारी के साथ, आपको पायथन से GAMS (यदि यह बिल्कुल विकल्प है), या IPOPT पायथन इंटरफ़ेस को पैच करने की कोशिश करने से बेहतर परिणाम प्राप्त होने की अधिक संभावना है। चूंकि आईपीओपीटी एक आंतरिक बिंदु पद्धति का उपयोग करता है, इसलिए यह उतना मजबूत नहीं होगा, लेकिन हो सकता है कि एंड्रियास का आंतरिक बिंदु विधि का कार्यान्वयन माटलैब के एसक्यूपी के कार्यान्वयन से काफी बेहतर हो, जिस स्थिति में, आप मजबूती से बलिदान नहीं कर रहे होंगे। आपको यह सुनिश्चित करने के लिए कुछ केस स्टडीज को चलाना होगा।
आप पहले से ही बहुपद असमानता बाधाओं के रूप में तर्कसंगत असमानता बाधाओं को सुधारने की चाल के बारे में जानते हैं (यह आपकी पुस्तक में है); इसका कारण यह है कि बैरन और कुछ अन्य नॉनवॉन्क्स सॉल्वरों को मदद मिलेगी कि यह अतिरिक्त वैध असमानताओं को उत्पन्न करने के लिए शब्द विश्लेषण का उपयोग कर सकता है जो कि सॉल्वर अभिसरण में सुधार और गति बढ़ाने के लिए कटौती के रूप में उपयोग कर सकता है।
GAMS Python बाइंडिंग और Python इंटरफ़ेस को IPOPT को छोड़कर, इसका जवाब नहीं है, Python के लिए अभी तक कोई भी उच्च गुणवत्ता वाला नेलिनियर प्रोग्रामिंग सॉल्वर नहीं हैं। शायद @Dominique कि NLPy के साथ बदल जाएगा।
UPDATE # 3: पायथन-आधारित सॉल्वर की तलाश में अधिक जंगली छुरा PyGMO की उपज है , जो कि PaGMO के लिए पायथन बाइंडिंग का एक समूह है, जो C ++ आधारित वैश्विक मल्टीबोजिव ऑप्टिमाइज़ेशन सॉल्वर है। हालाँकि यह मल्टीबोजेक्टिव ऑप्टिमाइज़ेशन के लिए बनाया गया था, लेकिन इसे सिंगल ऑब्जेक्टिव नॉनलाइनियर प्रोग्रामिंग के लिए भी इस्तेमाल किया जा सकता है, और इसमें अन्य सॉल्वर्स के बीच IPOPT और SNOPT को पाइथन इंटरफेस है। इसे यूरोपीय अंतरिक्ष एजेंसी के भीतर विकसित किया गया था , इसलिए उम्मीद है कि इसके पीछे एक समुदाय होगा। इसे अपेक्षाकृत हाल ही में (24 नवंबर, 2011) जारी किया गया था।