एक कहानी के साथ प्रस्तुत सावधानी के कुछ शब्दों के साथ मुझे यहाँ तौलना चाहिए। बहुत पहले, मैंने एक साथी के साथ काम किया था जब मैं बस शुरू कर रहा था। बल्कि एक गन्दा उद्देश्य के साथ हल करने के लिए उसके पास एक अनुकूलन समस्या थी। उनका समाधान एक अनुकूलन के लिए विश्लेषणात्मक व्युत्पन्न उत्पन्न करना था।
जो समस्या मैंने देखी वह ये थी कि यह बुरा था। Macsyma का उपयोग करते हुए, फोरट्रान कोड में परिवर्तित किया गया, वे प्रत्येक दर्जनों निरंतर बयान स्टेटमेंट थे। वास्तव में, फोरट्रान संकलक उस पर परेशान हो गया, क्योंकि यह निरंतरता बयानों की अधिकतम संख्या से अधिक था। जबकि हमें एक झंडा मिला, जिससे हम उस समस्या से घिर गए, और भी समस्याएँ थीं।
लंबी अभिव्यक्तियों में, जैसा कि आमतौर पर सीए सिस्टम द्वारा उत्पन्न किया जाता है, बड़े पैमाने पर घटाव रद्द करने का जोखिम होता है। बहुत सारी बड़ी संख्याओं की गणना करें, केवल यह पता लगाने के लिए कि वे सभी एक दूसरे को रद्द कर दें ताकि छोटी संख्या उत्पन्न हो सके।
अक्सर विश्लेषणात्मक रूप से उत्पन्न डेरिवेटिव वास्तव में परिमित अंतरों का उपयोग करके संख्यात्मक रूप से उत्पन्न डेरिवेटिव की तुलना में मूल्यांकन करने के लिए अधिक महंगे होते हैं। N चर के लिए एक ढाल आपके उद्देश्य फ़ंक्शन के मूल्यांकन की लागत से n गुना अधिक हो सकती है। (आप कुछ समय बचाने में सक्षम हो सकते हैं क्योंकि कई शब्द विभिन्न व्युत्पन्न भर में फिर से उपयोग किए जा सकते हैं, लेकिन यह भी आपको कंप्यूटर उत्पन्न अभिव्यक्तियों का उपयोग करने के बजाय सावधानीपूर्वक हाथ कोडिंग करने के लिए मजबूर करेगा। और किसी भी समय आप गंदा गणितीय कोड। अभिव्यक्ति, एक त्रुटि की संभावना तुच्छ नहीं है। सुनिश्चित करें कि आप सटीकता के लिए इन डेरिवेटिव को सत्यापित करते हैं।)
मेरी कहानी का मुद्दा यह है कि सीए द्वारा निर्मित भावों के अपने मुद्दे हैं। मजेदार बात यह है कि मेरे सहयोगी वास्तव में समस्या की जटिलता पर गर्व करते थे, कि वह स्पष्ट रूप से एक कठिन समस्या को हल कर रहे थे क्योंकि बीजगणित इतना बुरा था। मुझे नहीं लगता कि उन्हें लगता है कि अगर बीजगणित वास्तव में सही चीज़ की गणना कर रहा था, तो क्या यह सही ढंग से कर रहा था, और क्या यह इतनी कुशलता से कर रहा था।
अगर मैं इस परियोजना में उस समय वरिष्ठ व्यक्ति होता, तो मैं उसे दंगा अधिनियम पढ़ता। उनके अभिमान ने उन्हें एक ऐसे समाधान का उपयोग करने के लिए प्रेरित किया जो संभवतः अनावश्यक रूप से जटिल था, यहां तक कि यह भी जांचे बिना कि एक परिमित अंतर आधारित ढाल पर्याप्त था। मैं शर्त लगाता हूँ कि हमने इस अनुकूलन को चलाने के लिए शायद एक सप्ताह का समय बिताया था। बहुत कम से कम, मैं उसे ध्यान से उत्पादित ढाल का परीक्षण करने के लिए परामर्श देता। क्या यह सही था? परिमित अंतर डेरिवेटिव की तुलना में यह कितना सही था? वास्तव में, आज के आसपास ऐसे उपकरण हैं जो अपनी व्युत्पन्न भविष्यवाणी में त्रुटि का एक अनुमान भी लौटाएंगे। यह निश्चित रूप से अनुकूली भेदभाव कोड के लिए सच है , (derivest) मैंने MATLAB में लिखा है।
कोड का परीक्षण करें। डेरिवेटिव सत्यापित करें।
लेकिन इससे पहले कि आप इनमें से कुछ भी करें, विचार करें कि क्या अन्य, बेहतर अनुकूलन योजनाएं एक विकल्प हैं। उदाहरण के लिए, यदि आप घातीय फिटिंग कर रहे हैं, तो एक बहुत अच्छा मौका है कि आप एक विभाजित गैर-रेखीय कम से कम वर्गों का उपयोग कर सकते हैं (कभी-कभी अलग-अलग कम से कम वर्ग कहा जाता है। मुझे लगता है कि शब्द और जंगली उनकी पुस्तक में इस्तेमाल किया गया था।) आंतरिक रूप से रैखिक और आंतरिक रूप से अरेखीय सेट में मापदंडों के सेट को तोड़ने के लिए है। एक अनुकूलन का उपयोग करें जो केवल नॉनलाइनियर मापदंडों पर काम करता है। यह देखते हुए कि उन मापदंडों को "ज्ञात" किया जाता है, तो आंतरिक रेखीय मापदंडों का अनुमान सरल रैखिक कम से कम वर्गों का उपयोग करके लगाया जा सकता है। यह योजना अनुकूलन में पैरामीटर स्थान को कम कर देगी। यह समस्या को और अधिक मजबूत बनाता है, क्योंकि आपको रैखिक मापदंडों के लिए शुरुआती मूल्य खोजने की आवश्यकता नहीं है। यह आपके खोज स्थान की गतिशीलता को कम कर देता है, जिससे समस्या अधिक तेज़ी से चलती है। फिर से मैंने आपूर्ति की हैइस उद्देश्य के लिए एक उपकरण , लेकिन केवल MATLAB में।
यदि आप विश्लेषणात्मक डेरिवेटिव का उपयोग करते हैं, तो उन्हें शब्दों का पुन: उपयोग करने के लिए कोड दें। यह एक गंभीर समय की बचत हो सकती है, और वास्तव में अपने समय की बचत करते हुए, बग को कम कर सकती है। लेकिन फिर उन नंबरों की जांच करें!
codegen
पैकेज को देखना चाहते हैं क्योंकि यह प्रत्येक या सभी भावों के लिए स्वचालित रूप से कॉम्पैक्ट और कुशल C या फोरट्रान कोड उत्पन्न कर सकता है।