क्या अनुकूलन एल्गोरिथ्म की अनुकूलता का मूल्यांकन करने के लिए एक सामान्य तरीका है?


9

वहाँ एक अनुकूलन एल्गोरिथ्म की अनुकूलता का मूल्यांकन करने के लिए एक सामान्य तरीका है, उदाहरण के लिए एक एल्गोरिथ्म एक अन्यथा NP- हार्ड या NP- पूर्ण समस्या को हल करने वाला?

एकमात्र विधि जो मैं अब तक आया था वह पहले से ही ज्ञात इष्टतम समाधानों के खिलाफ एल्गोरिथ्म के परिणामों की तुलना कर रहा है।

यदि नहीं, तो क्या कुछ विशेष समस्याओं के लिए विशिष्ट तरीके हैं?

स्पष्ट करने के लिए संपादित करें : इष्टतमता से मेरा मतलब है कि परिणाम एक इष्टतम समाधान परिणाम के कितना करीब है।


शायद cstheory.stackexchange.com के लिए एक प्रश्न ?
लूसियानो

आप अनुकूलन एल्गोरिथ्म की 'इष्टतमता' को कैसे परिभाषित करते हैं? क्या आप इसके स्रोत कोड पर विश्लेषण करना चाहते हैं और फिर रिपोर्ट करते हैं कि इसका सन्निकटन कारक क्या है?
एलेक्स टेन ब्रिंक

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

जवाबों:


3

यह समस्या की तरह पर निर्भर करता है।

यदि समस्या के लिए एक बहुपद-समय सन्निकटन योजना (पीटीएएस) है (जैसे यूक्लिडियन टीएसपी), तो आप एक समाधान प्राप्त कर सकते हैं जो बहुपदीय समय में इष्टतम समाधान के करीब है। इसका मतलब है कि, हर > 0 के लिए, एक बहुपद समय एल्गोरिथ्म है जो आपकी समस्या का एक अनुमानित समाधान ढूंढेगा, जो कि इष्टतम समाधान के भीतर (1+ ) होने की गारंटी है । उस स्थिति में, आप के समान मूल्यों के लिए दो एल्गोरिदम के लिए रनटाइम / मेमोरी जटिलता की तुलना करेंगे । यदि एक एल्गोरिथ्म दूसरे की तुलना में एक ही "इष्टतमता गारंटी" बना सकता है, लेकिन कम समय / स्मृति लागत पर, तो यह शायद बेहतर एल्गोरिदम है।

यदि समस्या APX है, लेकिन पीटीएएस नहीं है , यानी यदि बहुपद समय सन्निकटन एल्गोरिदम हैं जो उन समाधानों का उत्पादन करने की गारंटी देते हैं जो इष्टतम समाधान के निरंतर कारक के भीतर हैं, तो आप उस निरंतर कारक की तुलना कर सकते हैं। कम कारक वाला व्यक्ति बेहतर समाधानों का उत्पादन करेगा (लेकिन अक्सर उच्च चलने वाले समय / स्मृति लागतों की लागत पर)

यदि समस्या उन वर्गों में से किसी में भी नहीं है, तो मुझे लगता है कि आप सबसे अच्छा कर सकते हैं कि उनके समाधानों की तुलना यादृच्छिक समस्याओं के एक सेट के लिए, या ज्ञात इष्टतम समाधानों के साथ समस्याओं के लिए की जाए।


1

मुझे नहीं लगता कि ऐसा करने का एक सामान्य तरीका है, लेकिन ऐसा करने के तरीके निश्चित रूप से हैं।

उदाहरण के लिए, समस्या SET-COVER लें। जो समस्या नहीं जानते उनके लिए निम्नानुसार है:

तत्वों का एक समूह B={1,2,...,m}और कई उप-समूह दिए गए हैं S_1, S_2, ..., S_nजिनका संघ है B। आप इन सबसेट्स की न्यूनतम संख्या को खोजने की कोशिश कर रहे हैं जैसे कि संघ अभी भी है B। इस समस्या का एक वास्तविक दुनिया विशिष्ट उदाहरण है, जहां आपको पड़ोस का संग्रह दिया गया है और आप स्कूलों को रखने के लिए इष्टतम स्थानों को खोजने की कोशिश कर रहे हैं, ताकि प्रत्येक पड़ोस dनिकटतम स्कूल से कुछ दूरी से कम दूरी पर स्थित हो। इस मामले में, Bपड़ोस S_xका सेट है dऔर शहर के भीतर सभी सेट शामिल हैं x

आप यह साबित करते हैं कि यह समस्या NP-COMPLETE है। हालांकि एक सरल लालची समाधान है जहां आप बार-बार S_iखुले तत्वों की सबसे बड़ी संख्या के साथ सेट को चुनते हैं। और आप साबित कर सकते हैं कि यह एल्गोरिथ्म अच्छा करता है

यदि इष्टतम एल्गोरिथ्म में kसेट होते हैं , तो लालची एल्गोरिथ्म में k ln(n)सेट से अधिक नहीं होगा जहां ln प्राकृतिक लघुगणक है।


1

यह निर्धारित करने की समस्या कि क्या किसी कार्यक्रम में ity इष्टतम प्रदर्शन ’ए या performance इष्टतम प्रदर्शन’ की किसी भी परिभाषा के लिए performance इष्टतमता प्रदर्शन ’बी है, सामान्य रूप से अपरिहार्य है (नीचे प्रमाण)। इसका मतलब यह है कि कोई एकल विधि नहीं है जो हमेशा आपको बता सकती है कि एल्गोरिथ्म कितना इष्टतम है।

हालांकि ऐसे तरीके हैं जो अक्सर अनुमानित एल्गोरिदम का विश्लेषण करते समय लागू होते हैं। अक्सर, अनुमानित एल्गोरिदम का मूल्यांकन उनकी गारंटी से किया जाता है कि इसका समाधान इष्टतम समाधान से कितनी दूर है। मैं एक उदाहरण समस्या और सन्निकटन दूंगा, जिसे मैं 'लोअर बाउंड' विधि का उपयोग करके साबित करूंगा, जो कि अनुपात को साबित करने के लिए एक बहुत ही सामान्य रूप से प्रयोग किया जाने वाला तरीका है।

प्रश्न में समस्या 'ट्रक लोड हो रही है' समस्या है: हमारे पास बहुत से समान ट्रक हैं (जितने हम चाहें उतने), प्रत्येक टी पर भार उठाने में सक्षम प्रत्येक। हमारे पास इन ट्रकों में लोड करने की इच्छा रखने वाली n वस्तुएं हैं परिवहन। हर वस्तु का वजन w_i होता है, जहाँ w_i <= T होता है (इसलिए ऐसी कोई वस्तु नहीं है जो अपने लिए ट्रक पर भी नहीं बैठ सकती है)। आइटम को भागों में विभाजित नहीं किया जा सकता है। हम ट्रकों को भरना चाहेंगे ताकि हमें कम से कम ट्रकों की आवश्यकता हो। यह समस्या एनपी-पूर्ण है।

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

यह एल्गोरिथ्म समस्या के लिए एक तथाकथित 2-सन्निकटन है: यह अधिकतम ट्रकों के रूप में कई बार उपयोग करता है क्योंकि इष्टतम समाधान की आवश्यकता होगी। 'सबसे अधिक' महत्वपूर्ण है: हम भाग्यशाली हो सकते हैं और इष्टतम समाधान पा सकते हैं, लेकिन कम से कम हम बहुत बुरा नहीं करेंगे।

यह साबित करने के लिए, हम सबसे पहले उन ट्रकों की इष्टतम संख्या पर एक कम बाध्य को परिभाषित करते हैं जिनकी हमें आवश्यकता है। इसके लिए, कल्पना करें कि हमें आइटम को भागों में काटने की अनुमति है: हम फिर आसानी से हर ट्रक को भर सकते हैं लेकिन अंतिम पूरी तरह से। ट्रकों की संख्या की हमें आवश्यकता होगी अगर हमने ऐसा किया है जो कि मूल प्रश्न के लिए आवश्यक ट्रकों की संख्या के लिए कम बाध्य है: 'सबसे अच्छा' मामले में इष्टतम समाधान हमेशा हर ट्रक को पूरी तरह से भरता है, जिस स्थिति में ट्रकों की संख्या बराबर है, लेकिन अगर इष्टतम समाधान ट्रकों को अधूरा छोड़ते हैं, तो इसे केवल अधिक ट्रकों की आवश्यकता हो सकती है।

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


यह एल्गोरिथ्म एक निरंतर-कारक सन्निकटन देता है: यह इष्टतम समाधान के रूप में सबसे अधिक 2 गुना खराब है। अन्य उपायों के कुछ उदाहरण: इष्टतम समाधान की तुलना में सबसे अधिक सी पर (एडिटिव एरर, काफी असामान्य), अधिकांश सी लॉग एन बार में इष्टतम समाधान के रूप में खराब होता है, तो अधिकतम सीएन समय में इष्टतम समाधान के रूप में सबसे खराब सी 2 पर ^ (dn) बार के रूप में बुरा के रूप में इष्टतम समाधान (बहुत बुरा; उदाहरण के लिए, सामान्य TSP केवल इस तरह की गारंटी के साथ एल्गोरिदम मानता है)।

बेशक, अगर आप यह सुनिश्चित करना चाहते हैं कि आप जिस कारक को साबित करते हैं वह सबसे अच्छा कारक है जिसे आप साबित कर सकते हैं, तो आपको ऐसे उदाहरणों को खोजने की कोशिश करनी चाहिए जिसमें आपके एल्गोरिथ्म का समाधान वास्तव में उतना ही बुरा है जितना संभवतः हो सकता है।

यह भी ध्यान दें कि हम कभी-कभी उन समस्याओं पर सन्निकटन एल्गोरिदम का उपयोग करते हैं जो एनपी-हार्ड नहीं हैं।

मैंने इसे (बहुत अधिक के बीच) अपने विश्वविद्यालय में सन्निकटन एल्गोरिदम पाठ्यक्रम में सीखा।


अनिर्वायता प्रमाण: P को एक समस्या होने दो और A और B P के लिए सन्निकटन एल्गोरिदम हो जहाँ A और B में 'इष्टतमता' की कुछ समझदार परिभाषा के लिए समान 'इष्टतमता' नहीं है, और जहाँ A और B का चलन समय दोनों ही हैं (1) (निरंतर समय की तुलना में सख्ती से धीमा, यानी, वे बड़े उदाहरणों के लिए धीमे हो जाते हैं) और जहां ए और बी दोनों हमेशा रुकते हैं।

D एक ऐसा प्रोग्राम है जो यह दावा करता है कि यह निम्नलिखित की गणना कर सकता है: P के लिए कुछ प्रोग्राम C कंप्यूटिंग का अनुमान लगाते हुए, यह तय करें कि क्या यह A के रूप में अच्छा है या पर्याप्त रूप से बड़े इनपुट के लिए B जितना अच्छा है (आप इसलिए इसे प्रोग्रामों को श्रेणीबद्ध करने के लिए उपयोग कर सकते हैं उनकी अनुकूलता के अनुसार)।

हम तब रुकने की समस्या को हल करने के लिए D का उपयोग कर सकते हैं। बता दें कि E एक प्रोग्राम है और F इस प्रोग्राम के लिए एक इनपुट है। हम डी का उपयोग यह तय करने के लिए करेंगे कि क्या ई इनपुट एफ पर रोक देगा।

हम एक प्रोग्राम G डिजाइन करते हैं जो निम्न कार्य करता है: समस्या P के लिए एक इनपुट S दिया, यह E को F और A को S पर समानांतर में चलाता है: यह E को थोड़ी देर के लिए क्रियान्वित करता है, फिर A, फिर E और फिर आगे। यदि E F पर रुकता है, तो यह A को चलाना बंद कर देता है और इसके बजाय S पर B चलाता है और B का परिणाम देता है। यदि A ई से पहले रुकता है, तो यह A का परिणाम देता है।

G पर D का उपयोग करने से अब यह तय हो जाता है कि E, F पर टिका है: यदि E F पर टिका है, तो पर्याप्त रूप से बड़े इनपुट S के लिए, E, S पर पड़ने से पहले F पर पड़ जाता है (क्योंकि E को रोकने में लगने वाला समय आकार पर निर्भर नहीं करता है इनपुट, ए के विपरीत)। डी इसलिए रिपोर्ट करता है कि जी में बी की इष्टतम विशेषताएं हैं। यदि ई एफ पर रोक नहीं है, तो डी रिपोर्ट करेगा कि जी में ए की इष्टतमता विशेषताएं हैं।

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