क्या पायथन के लिए एक उच्च गुणवत्ता वाला नेलिनियर प्रोग्रामिंग सॉल्वर है?


77

मेरे पास कई चुनौतीपूर्ण गैर-उत्तल वैश्विक अनुकूलन समस्याओं को हल करने के लिए है। वर्तमान में मैं MATLAB के ऑप्टिमाइज़ेशन टूलबॉक्स काfmincon()'sqp' उपयोग करता हूं (विशेष रूप से, एल्गोरिथ्म = ) के साथ, जो काफी प्रभावी है । हालाँकि, मेरा अधिकांश कोड पायथन में है, और मैं पायथन में भी अनुकूलन करना पसंद करूंगा। क्या पायथन बाइंडिंग के साथ एक एनएलपी सॉल्वर है जो मुकाबला कर सकता है fmincon()? यह जरुरी है

  • गैर-समता और असमानता बाधाओं को संभालने में सक्षम होना
  • जैकबियन प्रदान करने के लिए उपयोगकर्ता की आवश्यकता नहीं है।

यह ठीक है अगर यह वैश्विक इष्टतम की गारंटी नहीं देता है ( fmincon()नहीं करता है)। मैं एक ऐसी चीज की तलाश कर रहा हूं, जो चुनौतीपूर्ण समस्याओं के लिए भी एक स्थानीय इष्टतम के लिए मजबूत रूप से परिवर्तित हो, और भले ही यह थोड़ा धीमा हो fmincon()

मैंने ओपनऑप्ट के माध्यम से उपलब्ध सॉल्वरों में से कई की कोशिश की है और उन्हें MATLAB की तुलना में हीन पाया गया है fmincon/sqp

बस जोर देने के लिए मेरे पास पहले से ही एक ट्रैक्टेबल फॉर्म्युलेशन और एक अच्छा सॉल्वर है। मेरा लक्ष्य केवल अधिक सुव्यवस्थित वर्कफ़्लो रखने के लिए भाषाओं को बदलना है।

ज्योफ बताते हैं कि समस्या की कुछ विशेषताएं प्रासंगिक हो सकती हैं। वो हैं:

  • 10-400 निर्णय चर
  • 4-100 बहुपद समानता समानता (1 से 8 के बीच बहुपद डिग्री)
  • निर्णय की संख्या के लगभग दोगुने के बराबर कई तर्कसंगत असमानताएं बाधा बनती हैं
  • उद्देश्य फ़ंक्शन निर्णय चर में से एक है

समानता की बाधाओं का जैकबियन घना है, जैसा कि असमानता की बाधाओं का जैकबियन है।


2
डेविड, यह अब दुर्भाग्य से एक पूरी तरह से अलग सवाल है :) स्थानीय न्यूनतम और वैश्विक के बीच अंतर पीएचडी की संभावित अनंत संख्या का विषय है, और नो फ्री लंच प्रमेय द्वारा, कोई भी सॉल्वर जो एक सामान्य वैश्विक अनुकूलन समस्या के लिए अच्छा है। दूसरे के लिए बहुत बुरा है। मैं सुझाव दे सकता हूं कि आप सूत्रीकरण विकल्पों पर विचार करके शुरू करते हैं (क्या एक मिश्रित पूर्णांक रूप है? क्या एक उत्तल सन्निकटन मौजूद है?)
एरन अहमदिया

डेविड, एरन एक अच्छी बात करते हैं। गैर-उत्तल एनएलपी के संख्यात्मक समाधान प्राप्त करने के मामले में सूत्रीकरण निश्चित रूप से महत्वपूर्ण है, अकेले चलो जल्दी से अच्छे समाधान प्राप्त करें। यह वैकल्पिक योगों पर विचार करने के लायक हो सकता है, और फिर उन योगों की संरचना का उपयोग करके सॉल्वर की अपनी पसंद का मार्गदर्शन कर सकता है। किसी ऐसे ढांचे का उपयोग करना जो किसी भी संरचना का उपयोग करता है (जैसे कि स्पार्सिटी, मल्टी-स्टेज स्टोचस्टिक प्रोग्रामिंग, कटौती उत्पन्न करने के लिए बाधाओं का उपयोग करना) जिसे आप अपनी समस्या में शामिल कर सकते हैं, अच्छे समाधान प्राप्त करना महत्वपूर्ण है।
ज्योफ ऑक्सीबेरी

@DavidKetcheson: चूंकि आपके पास एक सूत्रीकरण है जिसे आप उपयोग करना चाहते हैं, तो क्या आप कम से कम अपने सूत्रीकरण की विशेषताओं पर टिप्पणी कर सकते हैं? लैबरैनिज़ेन का जैकबियन घना है या विरल है? मोटे तौर पर इसके कितने चर हैं? यह आपके लिए सॉफ़्टवेयर की अनुशंसा करने के लिए अच्छा नहीं है जो समाधान विधियों को लागू करता है जो आपकी समस्या के लिए बीमार हैं, और यही एकमात्र कारण है कि लोग पहले स्थान पर योगों के बारे में बात कर रहे हैं।
ज्योफ ऑक्सीबेरी

Copr asl का उपयोग कर ipopt को बाइंडिंग प्रदान करता है: ipopt
denfromufa

जवाबों:


32

fmincon(), जैसा कि आपने उल्लेख किया है, कई रणनीतियों को नियोजित करता है जो कि नॉनलाइनियर ऑप्टिमाइज़ेशन में अच्छी तरह से ज्ञात हैं जो कि वैश्विक इष्टतम पाया गया है या नहीं, इसके बारे में बहुत अधिक ध्यान दिए बिना स्थानीय न्यूनतम खोजने का प्रयास करते हैं। यदि आप इसके साथ ठीक हैं, तो मुझे लगता है कि आपने प्रश्न को सही ढंग से (नॉनलाइनियर ऑप्टिमाइजेशन) सही ढंग से रखा है।

सामान्य nonlinear अनुकूलन के लिए मुझे सबसे अच्छा पैकेज IPOPT [1] है। जाहिरा तौर पर मैथ्यू जू IPOPT के लिए पायथन बाइंडिंग का एक सेट रखता है , इसलिए यह कहीं से शुरू हो सकता है।

[१]: एंड्रियास वाचर एक व्यक्तिगत मित्र है, इसलिए मैं थोड़ा पक्षपाती हो सकता हूं।


एंड्रियास अच्छा काम करता है, लेकिन उसके सॉल्वर को भी जेकोबिएन मैट्रिक्स जानकारी की आवश्यकता होती है (या बहुत कम से कम, जेकोबी मैट्रिक्स के लिए स्पार्सिटी जानकारी)। जब आप कहते हैं कि आपको एक ऐसा सॉल्वर चाहिए, जिसके लिए आपको जेकबिएस मैट्रिक्स की आवश्यकता न हो, तो क्या आपका मतलब है कि आप एक ऐसा सॉल्वर चाहते हैं, जिसे आपको जेकोबिएन मैट्रिक्स को विश्लेषणात्मक रूप से प्रदान करने की आवश्यकता नहीं है (ताकि एक परिमित-अंतर गणना पर्याप्त होगी) या क्या आप चाहते हैं एक सॉल्वर जिसे जैकबियन मैट्रिक्स की जानकारी की आवश्यकता नहीं है (जो आपको व्युत्पन्न-मुक्त अनुकूलन विधियों तक सीमित करेगा)?
ज्योफ ऑक्सीबेरी

अच्छी पकड़। मेरा मतलब है पूर्व; मैंने सवाल अपडेट किया है।
डेविड केचेसन

मैं अंत में का उपयोग कर अपनी समस्या को IPOPT लागू करने में सक्षम था sage.openopt.org । यह बहुत अच्छा है!
डेविड केचेसन

4
आज (2017) आप पायथन गर्त प्योमो में आईपीओपीटी का भी उपयोग कर सकते हैं । आपको जैकोबियन और हेसियन के लिए एक अल्जीब्रिक मॉडलिंग भाषा और ऑटो डिफरेंस मिलता है।
एंटेलियो

@Antonello सही लिंक pyomo.org है
Moonwalker

37

मैं एक प्रयोगशाला में काम करता हूं जो मिश्रित-पूर्णांक और गैर-उत्तल समस्याओं का वैश्विक अनुकूलन करता है। ओपन सोर्स ऑप्टिमाइजेशन सॉल्वर्स के साथ मेरा अनुभव यह रहा है कि बेहतर आम तौर पर संकलित भाषा में लिखे जाते हैं, और वे वाणिज्यिक अनुकूलन पैकेजों की तुलना में खराब रूप से किराया करते हैं।

यदि आप अपनी समस्या को समीकरणों की एक स्पष्ट प्रणाली के रूप में तैयार कर सकते हैं और एक मुक्त सॉल्वर की आवश्यकता है, तो आपका सबसे अच्छा शर्त शायद 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) जारी किया गया था।


कृपया ध्यान दें कि PaGMO को GPL लाइसेंस प्राप्त है
denfromufa

14

एपीएम पायथन

अपडेट: नया GEKKO पैकेज देखें जिसे हमने अभी जारी किया है।

APM पायथन एक फ्री ऑप्टिमाइज़ेशन टूलबॉक्स है जिसमें APOPT, BPOPT, IPOPT और अन्य सॉल्वर्स के लिए इंटरफेस है। यह सॉल्वरों को पहली (जैकबियन) और दूसरी (हेसियन) जानकारी प्रदान करता है और परिणाम देखने के लिए एक वैकल्पिक वेब-इंटरफ़ेस प्रदान करता है। APM पायथन क्लाइंट पाइप के साथ स्थापित किया गया है:

 pip install APMonitor

इसे पायथन लिपि में भी स्थापित किया जा सकता है:

try:
    from APMonitor.apm import *
except:
    # Automatically install APMonitor
    import pip
    pip.main(['install','APMonitor'])
    from APMonitor.apm import *

हमने कुछ बेंचमार्क परीक्षण किए हैं और पाया है कि APOPT (सक्रिय सेट विधि) और IPOPT (आंतरिक बिंदु विधि) का संयोजन बेंचमार्क समस्याओं का एक बड़ा प्रतिशत हल कर सकता है। कई उदाहरण समस्याएं हैं जो डाउनलोड ज़िप फ़ाइल के साथ शामिल हैं। एक है कि आप शायद के साथ शुरू करना चाहते हैं होक Schittkowski # 71 समस्या है। यह सबसे सरल उदाहरण है और यह दर्शाता है कि विवश अनुकूलन समस्याओं को कैसे हल किया जाए।

एक ब्राउज़र इंटरफ़ेस और पायथन / MATLAB के लिए एक एपीआई है। एपीआई टू पाइथन एक एकल स्क्रिप्ट (apm.py) है जो apmonitor.com होमपेज से डाउनलोड के लिए उपलब्ध है। एक बार स्क्रिप्ट को पायथन कोड में लोड करने के बाद, यह समस्याओं को हल करने की क्षमता देता है:

  • नॉनलाइनर समीकरण
  • मिश्रित पूर्णांक nonlinear प्रोग्रामिंग
  • विभेदक और बीजगणितीय समीकरण
  • कम से कम वर्गों मॉडल फिटिंग
  • चल रहा क्षितिज अनुमान
  • Nonlinear मॉडल भविष्य कहनेवाला नियंत्रण
  • आदि।

नए उपयोगकर्ता के लिए, APM पायथन सॉफ़्टवेयर में एक Google समूह फ़ोरम है, जहाँ कोई उपयोगकर्ता प्रश्न पोस्ट कर सकता है। ऐसे वेबिनार हैं जो संचालन अनुसंधान और इंजीनियरिंग में अनुकूलन समस्याओं का प्रदर्शन करते हैं।

नीचे एक अनुकूलन समस्या का उदाहरण है (hs71.apm)।

Model
  Variables
    x[1] = 1, >=1, <=5
    x[2] = 5, >=1, <=5
    x[3] = 5, >=1, <=5
    x[4] = 1, >=1, <=5
  End Variables

  Equations
    x[1] * x[2] * x[3] * x[4] > 25
    x[1]^2 + x[2]^2 + x[3]^2 + x[4]^2 = 40

    minimize  x[1] * x[4] * (x[1]+x[2]+x[3]) + x[3]
  End Equations
End Model

अनुकूलन समस्या को निम्न पायथन लिपि से हल किया गया है:

from APMonitor.apm import *
server = 'http://byu.apmonitor.com'

# Application name
app = 'eqn'

# Clear previous application
apm(server,app,'clear all')

# Load model file
apm_load(server,app,'hs71.apm')

# Option to select solver (1=APOPT, 2=BPOPT, 3=IPOPT)
apm_option(server,app,'nlc.solver',3)

# Solve on APM server
solver_output = apm(server,app,'solve')

# Display solver output
print(solver_output)

# Retrieve results
results = apm_sol(server,app)

# Display results
print('--- Results of the Optimization Problem ---')
print(results)

# Display Results in Web Viewer 
url = apm_var(server,app)
print("Opened Web Viewer: " + url)

एपीएम पायथन अनुकूलन के लिए एक मुफ्त वेब-सेवा है। अनुकूलन समस्याओं को दूरस्थ सर्वर पर हल किया जाता है और परिणाम स्थानीय पायथन लिपि में वापस आ जाते हैं। APMonitor स्थानीय सर्वर भी डाउनलोड के लिए उपलब्ध है ताकि इंटरनेट कनेक्शन की आवश्यकता न हो ( डाउनलोड सर्वर )। हमने हाल ही में MATLAB और पायथन दोनों के लिए समानांतर प्रसंस्करण समर्थन जोड़ा है। पायथन मॉड्यूल पायथन 2.7 या पायथन 3+ के साथ संगत है।


2
जॉन, मैं देख रहा हूं कि एपीएम पायथन स्वतंत्र रूप से उपलब्ध है, लेकिन मैं पैकेज को देखने से यह पता नहीं लगा सकता कि इसमें सॉल्वर है या नहीं, यह स्थानीय स्तर पर उपयोग होता है या कम्प्यूटेशन करने के लिए एपी मॉनिटर वेबसाइट से कनेक्शन की आवश्यकता होती है। मैं जिसके लिए उत्सुक हूं।
एरन अहमदिया

3
एरन, MATLAB या पायथन लिपियों को अनुकूलन समस्याओं को हल करने के लिए एपीएम सर्वरों के लिए इंटरनेट कनेक्शन की आवश्यकता होती है। इसके कई फायदे और नुकसान हैं। सकारात्मक पक्ष पर, अनुकूलन के लिए एक वेब-सेवा क्रॉस-प्लेटफॉर्म संगतता, कुछ वाणिज्यिक सॉल्वरों की मुफ्त पहुंच और उपयोगकर्ता के लिए पारदर्शी होने वाले सॉफ़्टवेयर अपग्रेड की अनुमति देती है। नकारात्मक पक्ष पर, APM कुछ ओपन-सोर्स विकल्पों के रूप में लचीला नहीं है, लेकिन औद्योगिक उपयोगकर्ताओं के लिए डिज़ाइन किया गया है जो अनुकूलन अनुप्रयोगों के लिए टर्नकी समाधान का पक्ष लेते हैं।
जॉन हैडनग्रेन

@JohnHedengren मैं MATLAB में कुछ विशेष रूप से अनुकूलन समस्या का निर्माण करने के लिए एक अन्य पुस्तकालय का उपयोग कर रहा है, विशेष रूप से, बाधाओं इन बाहरी कॉल शामिल है। क्या आपको लगता है कि एपीएम इस उद्देश्य के लिए अभी भी उपयुक्त है?
gpavanb

मुझे लगता है कि इसके लिए सामान्य शब्द ब्लैकबॉक्स अनुकूलन है।
20

@gpavanb APMonitor पैकेज में मॉडलिंग भाषा में लिखे जाने वाले समीकरणों की आवश्यकता होती है। बाहरी कोड को लोड करने का एक विकल्प एक ऐसी वस्तु बनाना है जो अवशिष्ट प्रदान करता है और कम से कम विश्लेषणात्मक पहले डेरिवेटिव। हम आमतौर पर F90 में इन वस्तुओं को गति के लिए कोड करते हैं जैसे कि यहां सूचीबद्ध हैं: apmonitor.com/wiki/index.php/Main/Objects मुझे नहीं लगता कि APMonitor ब्लैकबॉक्स अनुकूलन के साथ एक आवेदन के लिए सबसे अच्छा विकल्प है।
जॉन हैडनग्रेन

7

हालांकि यह आपके सवाल का पूरी तरह से जवाब नहीं देता है, लेकिन मैं एनएलपीवाई नामक नॉनलाइनर प्रोग्रामिंग के लिए पायथन पैकेज लेखक हूं। सबसे हाल के संस्करण को https://github.com/dpo/nlpy से पुनर्प्राप्त किया जा सकता है

मुझे इस बात पर जोर देना चाहिए कि एनएलपीवाई शोध-श्रेणी है और इसमें शामिल सॉल्वर्स आईपीओपीटी जैसे अधिक अनुभवी कोड के रूप में मजबूत नहीं हैं। इसके अलावा, उन्हें वर्तमान में आवश्यकता है कि जैकबियंस प्रदान की जाए। कहा जा रहा है, एनएलपीवाई का उद्देश्य शोधकर्ताओं के लिए आवश्यक सॉल्वरों को इकट्ठा करने के लिए आवश्यक उपकरण प्रदान करना है, अगर उन्हें जरूरत है। किसी भी दर पर, मुझे आपकी टिप्पणियों को ऑफ़लाइन सुनने में दिलचस्पी होगी यदि आप इसे आजमाते हैं। आपको संबंधित पैकेज https://github.com/dpo/pykrylov और https://github.com/dpo/pyorder उपयोगी भी लग सकते हैं । वर्तमान में, एनएलपीवाई के प्रलेखन में निश्चित रूप से कमी है। अन्य दो उचित होना चाहिए।


7

pyomo एक पूर्ण GAMS / अजगर में अनुकूलन के लिए ampl की तरह मॉडलिंग माहौल है। यह बेहद शक्तिशाली है, इसमें सभी सॉल्वरों के लिए इंटरफेस है जो एएमपीएल द्वारा समर्थित हैं, और जेकोबियंस आदि को स्वचालित रूप से उत्पन्न करता है। हालाँकि, इसे 'वर्चुअल पायथन पर्यावरण' में चलाने के कारण, इसे मौजूदा कोड से जोड़ना तुच्छ नहीं हो सकता है।


5

GEKKO पायथन

हमने हाल ही में GEKKO पायथन पैकेज (2018) जारी कियासक्रिय सेट और आंतरिक बिंदु विधियों के साथ IPOPT, APOPT, BPOPT, MINOS और SNOPT जैसे सॉल्वर के साथ नॉनलाइनियर प्रोग्रामिंग के लिए। इन सॉल्वरों का उपयोग करने के साथ एक समस्या यह है कि आपको सामान्य रूप से कम से कम पहला डेरिवेटिव और वैकल्पिक रूप से दूसरा डेरिवेटिव प्रदान करने की आवश्यकता है। कई अच्छी मॉडलिंग भाषाएं हैं जो आपके लिए ऐसा कर सकती हैं, जैसा कि अन्य उत्तरों के साथ उल्लेख किया गया है। GEKKO बाइट कोड के समीकरणों को संकलित करता है ताकि यह ऐसा हो जैसा आपने स्पीड के मामले में मॉडल फोरट्रान या C ++ में लिखा है। स्वचालित विभेदी ढाल आधारित सॉल्वरों को विरल रूप में पहली और दूसरी डेरिवेटिव प्रदान करता है। हमने GEKKO को इष्टतम नियंत्रण समस्याओं के लिए डिज़ाइन किया है, लेकिन यह भी fmincon जैसी समस्याओं को हल कर सकता है। नीचे समानता और असमानता बाधाओं के साथ एक nonlinear प्रोग्रामिंग समस्या का एक त्वरित उदाहरण है। पहले तुम'

pip install gekko

ओल Schittkowski समस्या # 71 एक उद्देश्य समारोह, असमानता बाधा, समानता बाधा, और ऊपरी और निचले सीमा के साथ चार चर का एक उदाहरण के रूप में नीचे दिखाया गया है।

from gekko import GEKKO
m = GEKKO() # Initialize gekko
# Initialize variables
x1 = m.Var(value=1,lb=1,ub=5)
x2 = m.Var(value=5,lb=1,ub=5)
x3 = m.Var(value=5,lb=1,ub=5)
x4 = m.Var(value=1,lb=1,ub=5)
# Equations
m.Equation(x1*x2*x3*x4>=25)
m.Equation(x1**2+x2**2+x3**2+x4**2==40)
m.Obj(x1*x4*(x1+x2+x3)+x3) # Objective
m.options.IMODE = 3 # Steady state optimization
m.solve() # Solve
print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('x3: ' + str(x3.value))
print('x4: ' + str(x4.value))    

GEKKO सभी प्लेटफार्मों (विंडोज, मैकओएस, लिनक्स, एआरएम प्रोसेसर) और पायथन 2.7 और 3+ के साथ काम करता है। एक पूरी तरह से स्थानीय विकल्प "रिमोट = गलत" विकल्प सेट करके इंटरनेट कनेक्शन के बिना उपलब्ध है। स्थानीय विकल्प वर्तमान में केवल विंडोज के लिए उपलब्ध है और हम अन्य संस्करणों जैसे कि लिनक्स, मैकओएस, एआरएम प्रोसेसर पर काम कर रहे हैं जो बिना इंटरनेट कनेक्शन के स्थानीय स्तर पर चल सकते हैं। स्थानीय संस्करण में केवल मुफ्त सॉल्वर शामिल हैं जिन्हें लाइसेंस की आवश्यकता नहीं है। डिफ़ॉल्ट रूप से, समस्या को एक सार्वजनिक सर्वर पर भेजा जाता है जहां समाधान की गणना की जाती है और पायथन में वापस आ जाता है।

यद्यपि यह प्रश्न विशेष रूप से पायथन में नॉनलाइनियर प्रोग्रामिंग को हल करने के बारे में है, मैं कुछ अन्य प्रकार की समस्याओं को भी उजागर करूँगा, जो GEKKO हल कर सकती है और अनुकूलन सीखने के लिए कुछ संसाधन। GEKKO मिश्रित-पूर्णांक और विभेदक बीजीय समीकरणों को भी हल करता है और उन्नत नियंत्रण के लिए कई पूर्व-प्रोग्राम किए गए ऑब्जेक्ट (DMC, RMPCT, आदि के समान) है। ऑपरेशन के मोड में डेटा सामंजस्य, रीयल-टाइम ऑप्टिमाइज़ेशन, डायनामिक सिमुलेशन और नॉनलाइनर प्रेडिक्टिव कंट्रोल शामिल हैं।

मैं अनुकूलन ( डिजाइन अनुकूलन और गतिशील अनुकूलन ) पर दो पाठ्यक्रम पढ़ाता हूं और पाठ्यक्रम सामग्री को ऑनलाइन पोस्ट किया है। गतिशील अनुकूलन पाठ्यक्रम प्रत्येक वर्ष जनवरी में शुरू करने की पेशकश की जाती है और हम पाठ्यक्रम के लिए GEKKO पायथन पैकेज (और MATLAB) का उपयोग करते हैं। GEKKO एपीमोनीटर ऑप्टिमाइज़ेशन सूट का एक विस्तार है, लेकिन पायथन के भीतर सीधे मॉडलिंग और समाधान विज़ुअलाइज़ेशन को एकीकृत किया है। APMonitor और GEKKO संदर्भ उन अनुप्रयोगों के प्रकारों का एक नमूना देते हैं जिन्हें इस पैकेज के साथ हल किया जा सकता है। GEKKO का विकास नेशनल साइंस फाउंडेशन रिसर्च ग्रांट # 1547110 के तहत किया गया है ।


क्या आप अपने उत्तर को यह समझाने के लिए संपादित कर सकते हैं कि आपका सॉफ़्टवेयर पोस्ट में उल्लिखित विशिष्ट आवश्यकताओं को कैसे संबोधित करता है? अन्यथा यह प्रश्न के उत्तर के बजाय एक कंबल विज्ञापन पोस्ट की तरह दिखता है (और संभवतः बंद हो जाएगा)।
क्रिश्चियन क्लैसन

क्रिश्चियन, मैंने इस सवाल के जवाब को और अधिक विशिष्ट होने के लिए संपादित किया है। मैंने GEKKO और ऑनलाइन पाठ्यक्रमों के बारे में अतिरिक्त जानकारी को अंत तक स्थानांतरित कर दिया, लेकिन यदि आवश्यक हो तो इसे हटा सकता है।
जॉन हैडनग्रेन

4

Scipy.fmin_slsqp के बारे में क्या?

http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_slsqp.html


1
धन्यवाद, लेकिन यह एक है जो मैंने कोशिश की (ओपनऑप्ट के माध्यम से, जो इसे एक अतिरिक्त इंटरफ़ेस प्रदान करता है)। यह fmincon / sqp से बेहतर कभी नहीं था और कई मामलों में विफल रहा जहां बाद वाले सफल रहे।
डेविड केचेसन

1
अद्यतन: मैंने इसे सीधे SciPy से आज़माया। यह उन समस्याओं पर भी विफल रहता है जहां कुछ ही सेकंड में fmincon लगातार वैश्विक इष्टतम को खोजने में सक्षम है।
डेविड केचेसन

4

PyGMO में कई सॉल्वर होते हैं, जो उन्हें समान इंटरफ़ेस प्रदान करते हैं। IPOPT और scipy slsqp आपके द्वारा कोड संकलित करने और स्वतंत्र रूप से थर्ड पार्टी कोड डाउनलोड / इंस्टॉल करने के मामले में शामिल हैं।

एक बोनस के रूप में, द्वीपसमूह वर्ग के माध्यम से सॉल्वर का समानांतर उपयोग वास्तव में आसान (मल्टीस्टार्ट) किया जाता है!


3

वहाँ cvxmod है , स्टीफन बोयड के उत्तल अनुकूलन सॉफ्टवेयर के आसपास एक पायथन आवरण। यह सेज पैकेज का हिस्सा है ।


लेकिन ओपी एक गैर-उत्तल अनुकूलन समस्या के बारे में पूछ रहा है।
अलेजांद्रो

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

ज्योफ, मैं cvxmod को गैर-उत्तल समस्या में कैसे लागू कर सकता हूं?
डेविड केचेसन

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

1
@Geoff: हां, मैं मल्टीस्टार्ट का उपयोग कर रहा हूं। CVXMOD के रूप में, यह केवल उन समस्याओं को स्वीकार करता है जिन्हें अनुशासित उत्तल प्रोग्रामिंग के संदर्भ में किया जा सकता है। सामान्य nonlinear प्रोग्रामिंग समस्याओं नहीं कर सकते हैं। जैसा कि आप कहते हैं, मैं अपनी समस्या के लगभग अनुमानित उत्थान की तलाश कर सकता था, लेकिन यहाँ पूरा लक्ष्य मेरे लिए कम काम करना है।
डेविड केचेसन

3

Fmincon अब OpenOpt ढांचे के माध्यम से पायथन से उपयोग किया जा सकता है, वैकल्पिक रूप से FuncDesigner http://openopt.org/fmincon द्वारा घने / विरल स्वचालित भेदभाव के साथ।


यह अब मौजूद नहीं है।
फीटवेट

3






रिलीज 2014 बी के अनुसार, यह अब सीधे मैटलैब द्वारा समर्थित है; देखें mathworks.de/help/matlab/matlab-engine-for-python.html
क्रिश्चियन क्लैसन

@Christian Clason, लगता है कि बिल्कुल भी मतलबी नहीं हैं? के रूप में अजगर matlab- पुल करता है। (मैं इसे हालांकि इस्तेमाल किया है नहीं।)
Denis

सीधे नहीं (यह एक कस्टम matlab सरणी वर्ग लगता है), लेकिन वहाँ है कि और numpy के बीच कनवर्ट करने के लिए एक रास्ता है। डेटा की नकल के कारण, निश्चित रूप से कुछ ओवरहेड हो जाएगा, लेकिन यह संभवतः ओपी उल्लेखों की समस्या के लिए एक समस्या से कम है। (इसका खुद इस्तेमाल नहीं किया गया; बस सोचा था कि मैं विकल्प को इंगित करूँगा।)
क्रिश्चियन क्लैसन

3

क्या आपकी आवश्यकताओं के लिए पर्याप्त मात्रा में स्किपी के माध्यम से बेसिन को रोका जा सकता है? यदि यह स्थानीय मिनट देता है और वैश्विक मंत्री नहीं है, तो आप पुनरावृत्तियों की संख्या को बदल सकते हैं और / या सीमाएं लागू कर सकते हैं।


2

सीएमए-ईएस के बारे में कैसे? इसमें पायथन बाइंडिंग है और यह nonconvex, nonlinear अनुकूलन समस्याओं के लिए अच्छी तरह से अनुकूल है और मैंने इसे काफी उपयोग किया है: https://www.lri.fr/~hansen/cmaesintro.html

पाइप के माध्यम से स्थापना:

pip install cma

उनकी वेबसाइट से कुछ नमूना कोड यहां दिए गए हैं:

import cma
help(cma)  # "this" help message, use cma? in ipython
help(cma.fmin)
help(cma.CMAEvolutionStrategy)
help(cma.CMAOptions)
cma.CMAOptions('tol')  # display 'tolerance' termination options
cma.CMAOptions('verb') # display verbosity options
res = cma.fmin(cma.Fcts.tablet, 15 * [1], 1)
res[0]  # best evaluated solution
res[5]  # mean solution, presumably better with noise

यह ऑप्टिमाइज़र ओपी से जो मांगता है, उससे बहुत दूर है। उदाहरण के लिए, CMA-ES के साथ समानता या असमानता बाधाओं को कैसे संभालना है, इसका कोई स्पष्ट तरीका नहीं है।
एरेस

1

चूंकि MATLAB में एक JIT कंपाइलर है, जबकि CPython अभी तक नहीं है (कम से कम, जब तक कि pypy को पूरी तरह से समर्थन नहीं मिल जाता)। ऐसा लगता है जैसे आप एक मुफ्त सॉल्वर चाहते हैं जो व्यावसायिक रूप से उत्पादित आउटपरफॉर्म करता है fmincon। क्या यह बहुत ज्यादा नहीं है?

वाणिज्यिक एनएलपी सॉल्वर के बीच IIRC, केवल स्नोप्ट ने अब तक पायथन एपीआई प्रदान किया है (हालांकि यह बदसूरत है)।

आपने कौन से ओपनऑप्ट सॉल्व करने की कोशिश की है? आपके गैर-कार्य में कितने चर और अड़चनें हैं?

आप OpenOpt / Funcdesigner API के माध्यम से OpenOpt ऋषि सर्वर पर इंस्टॉलेशन के बिना IPOPT की कोशिश कर सकते हैं ("ऋषि से अजगर पर स्विच करें" चित्र पर ध्यान दें)।

10300(x0.1)2+10300(y0.2)2(x,y)=(1,1)


2
यदि आप ध्यान से पढ़ते हैं, तो मैं सिर्फ इसी तरह की मजबूती के साथ कुछ करने के लिए कह रहा हूं। यह बेहतर होने की जरूरत नहीं है, और यह धीमी भी हो सकती है।
डेविड केचेसन

1

वैश्विक समस्याओं के लिए आपको http://openopt.org/interalg में दिलचस्पी हो सकती है और स्थानीय अनुकूलन के लिए अन्य ओपनओवर ग्लोबल सॉल्वर (http://openopt.org/GLP) ओपनटॉप भी सॉल्वर की विविधता प्रदान करता है: http://openopt.org / NLP


हां, मैंने उनमें से कुछ को आजमाया, लेकिन फेमिनकॉन तक किसी ने नहीं मापा।
डेविड केचेसन

1

यहां यह उल्लेख करना अच्छा है कि Google Ceres solver वास्तव में एक बहुत शक्तिशाली गैर-रेखीय अनुकूलक है, जिसका उपयोग कई परियोजनाओं में किया जाता है।

यहां एक अजगर रैपर भी उपलब्ध है: https://github.com/rll/cyres


क्या यह लेवेनबेग-मार्क्वार्ड नहीं है? जो, जबकि अच्छा है, ओपी चाहता है
डेनिस

जबकि सेरेस वास्तव में एक अच्छा सॉल्वर है, यह सभी में समानता की बाधाओं का समर्थन नहीं करता है और केवल असमानता बाधाओं को मापदंडों के ऊपरी / निचले सीमा के रूप में समर्थन करता है (वर्तमान संस्करण 1.12 के रूप में)।
ऑर्केचो

1

KNITRO में अन्य लोगों के अलावा पायथन और MATLAB इंटरफेस हैं। इसे FMINCON प्रतिस्थापन के रूप में सोचें, लेकिन बेहतर प्रदर्शन, और अधिक महंगा। https://www.artelys.com/en/optimization-tools/knitro#doc-tab

मैं KNITRO का उपयोगकर्ता हूं, लेकिन अन्यथा उत्पाद से संबद्ध नहीं हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.