Saturday 15 January 2011

functional programming - Can branch and bound algorithms be implemented purely functionally? -


शाखा और बाउंड का सामान्य विवरण

विकिपीडिया से:

इस कदम को छंटाई कहा जाता है, और आम तौर पर एक वैश्विक वैरिएबल m (पेड़ के सभी नोड्स के बीच साझा) को बनाए रखने के द्वारा कार्यान्वित किया जाता है जो कि अब तक जांच किए गए सभी उप-क्षेत्रों में देखा गया न्यूनतम ऊपरी बॉर्डर रिकॉर्ड करता है।

व्यावहारिक उदाहरण: यात्रा विक्रेता समस्या

यात्रा के लिए एक सरल समाधान विक्रेता की समस्या एक चर रखने के लिए है, जैसे सर्वोत्तम , जो अब तक सबसे कम हैमिल्टनियन सर्किट का प्रतिनिधित्व करता है (ऊपरी बाध्य)।

हर बार जब हम एक संभावित नए सर्किट में एक नए कदम पर विचार करते हैं, तो हम पथ की लागत की गणना करते हैं वर्तमान बिंदु पर, उदा लागत , जो कि इस रास्ते की लागत पर कम है, और इसकी तुलना श्रेष्ठ चर के साथ करें अगर किसी भी बिंदु पर लागत & gt; = सर्वोत्तम , हमें इस पथ पर विचार करने की आवश्यकता नहीं है; हम सभी संभावित मार्गों को छिड़क सकते हैं जो इस उपपथ से शुरू होते हैं।

यह एक प्रक्रियात्मक भाषा जैसे कि सी में कार्यान्वयन करना मुश्किल नहीं है, जहां हम एक चर बना सकते हैं जो फ़ंक्शन के दायरे में है। उदाहरण के लिए,

  int सर्वोत्तम = -1; / / सबसे अच्छा पथ अभी तक नोड * हल टीएसपी () {// सबसे अच्छा समाधान किया जा सकता है और समाधान करने के लिए सभी रिकर्सिव कॉल में एक सुसंगत // मान होता है ...}   

मेरा वास्तविक प्रश्न

यह मेरे लिए स्पष्ट नहीं है कि इस तरह के एक एल्गोरिथम को कैसे लागू किया जाएगा विशुद्ध रूप से कार्यात्मक क्या विकिपीडिया की परिभाषा में वर्णित वैश्विक वैरिएबल m का अनुकरण करने का कोई तरीका है?

मुझे पता है कि लिस्प में एक वैश्विक चर होना सरल है, लेकिन यह संभव है कि किसी और में शुद्ध रूप से कार्यात्मक भाषा जैसे कि हास्केल?

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

यह अच्छी तरह से इस्तेमाल किया जा सकता है। प्रकार Int - & gt; (बी, इन्ट) isoMorphic है स्टेट इंट बी , इसलिए हमारे प्रकार का कार्य a -> बी हो जाता है a - & gt; स्टेट इंट बी

No comments:

Post a Comment