मैं आधार के रूप में कुछ लोकप्रिय पायथन पैकेजों का उपयोग करके ग्राफ और नेटवर्क के लिए ओपन-सोर्स सन्निकेशन एल्गोरिदम लाइब्रेरी पर काम कर रहा हूं। मुख्य लक्ष्य ग्राफ और नेटवर्क पर एनपी-पूर्ण समस्याओं के लिए अप-टू-डेट सन्निकटन एल्गोरिदम शामिल करना है। इसका कारण 1 है) मैंने एक अच्छा (आधुनिक) समेकित पैकेज नहीं देखा है जो इसे कवर करता है और 2) यह एनपी-हार्ड अनुकूलन समस्याओं पर सन्निकटन एल्गोरिदम के बारे में सीखने के लिए एक अच्छा शैक्षिक उपकरण होगा।यूनिट परीक्षण अनुमान एल्गोरिदम
इस पुस्तकालय के निर्माण में मैं स्वच्छता जांच के लिए यूनिट-टेस्ट का उपयोग कर रहा हूं (जैसा कि कोई भी उचित डेवलपर होगा)। मैं अपने यूनिट परीक्षणों के बारे में कुछ हद तक सतर्क हूं कि उनके स्वभाव से, सन्निकटन एल्गोरिदम सही समाधान नहीं लौटा सकता है। वर्तमान में मैं हाथ से कुछ छोटे उदाहरणों को हल कर रहा हूं और फिर आश्वासन देता हूं कि लौटा हुआ परिणाम उस से मेल खाता है, लेकिन यह वांछनीय नहीं है, न ही कार्यान्वयन की भावना में स्केलेबल है।
इकाई परीक्षण अनुमान एल्गोरिदम का सबसे अच्छा तरीका क्या होगा? यादृच्छिक उदाहरण उत्पन्न करें और सुनिश्चित करें कि लौटाए गए परिणाम एल्गोरिदम द्वारा गारंटीकृत सीमा से कम हैं? ऐसा लगता है कि झूठी सकारात्मकताएं होती हैं (परीक्षण उस समय भाग्यशाली हो गया है, सभी मामलों के लिए बाध्य होने की गारंटी नहीं है)।
यदि आप एनपी-पूर्ण समस्याओं के लिए "यादृच्छिक उदाहरण" उत्पन्न करते हैं तो सीमाओं का परीक्षण करने के लिए वास्तविक उत्तर कैसे जानेंगे? आईएमएचओ आपको अभी भी अपने परीक्षण मामलों को ध्यान से चुनने की जरूरत है। एक मानव के रूप में, आप जो मामलों को चुन सकते हैं, उन्हें वास्तविक उत्तर दें, लेकिन यह अनुमानित एल्गोरिदम के लिए मुश्किल साबित हो सकता है या कम से कम व्यायाम नहीं कर सकता है। यथार्थवादी होने के लिए पर्याप्त होने के लिए ऐसे मामलों को प्रोग्रामेटिक रूप से जेनरेट किया जा सकता है। वे सिर्फ _random_ नहीं होना चाहिए। –
@ रे टोल की टिप्पणी पर विस्तार करते हुए, कुछ समस्याएं हैं जो समस्या उत्पन्न करने पर आसान होती हैं; उदाहरण के लिए, फैक्टरिंग * पीक्यू * कठिन है, जब तक कि आप पहले से ही * पी * और * क्यू * नहीं जानते हैं क्योंकि आपने उन्हें उत्पन्न किया है। क्या आपके ग्राफ/नेटवर्क समस्याओं पर एक समान सिद्धांत लागू किया जा सकता है? –
+1 टॉम जो वास्तव में ज्ञात मामलों को प्रोग्रामेटिक रूप से उत्पन्न करके मेरा मतलब है। मैं इस समय एक जवाब जोड़ने में थोड़ा संकोच कर रहा हूं क्योंकि मैं इस क्षेत्र में अधिकार नहीं हूं; शायद कोई यहां आ सकता है जिसके पास अनुभव है। मैं बस "यादृच्छिक" शब्द के चारों ओर एक लाल झंडा लगाने की कोशिश कर रहा था। –