सबसे अच्छा reproducibility उपकरण आपके कार्यों का एक लॉग बनाने के लिए है, कुछ इस तरह से:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
यह एक कागज पर लिखा जा सकता है, लेकिन, यदि आपके प्रयोग एक कम्प्यूटेशनल ढांचे में फिट होते हैं, तो आप कम्प्यूटेशनल टूल का उपयोग आंशिक रूप से या पूरी तरह से स्वचालित करने के लिए कर सकते हैं जो लॉगिंग प्रक्रिया (विशेष रूप से इनपुट डेटासेट को ट्रैक करने में आपकी मदद करके जो कि विशाल हो सकते हैं, और आउटपुट आंकड़े)।
कम सीखने की अवस्था वाले पायथन के लिए एक महान प्रजनन उपकरण निश्चित रूप से IPython / Jupyter Notebook है ( % logon और% logstart magics मत भूलना )। युक्ति: यह सुनिश्चित करने के लिए कि आपकी नोटबुक प्रतिलिपि प्रस्तुत करने योग्य है, कर्नेल को पुनरारंभ करें और सभी कोशिकाओं को ऊपर से नीचे (बटन रन ऑल सेल) चलाने की कोशिश करें: यदि यह काम करता है, तो एक संग्रह फ़ाइल ("ठंड") में सब कुछ बचाएं, अन्यथा, विशेष रूप से यदि आपको त्रुटियों से बचने के लिए गैर -रैखिक और गैर-अनुक्रमिक और गैर-स्पष्ट फैशन में सेल चलाने की आवश्यकता है , तो आपको थोड़ा सा काम करने की आवश्यकता है।
कि हाल ही में हुई है एक और महान उपकरण (2015) है recipy जो (देखें नीचे) बहुत सुमात्रा तरह है, लेकिन अजगर के लिए विशेष रूप से बनाया है। मुझे नहीं पता कि यह जुपिटर नोटबुक के साथ काम करता है, लेकिन मुझे पता है कि लेखक अक्सर उनका उपयोग करता है इसलिए मुझे लगता है कि अगर यह वर्तमान में समर्थित नहीं है, तो यह भविष्य में होगा।
गिट भी भयानक है, और यह पायथन से बंधा नहीं है। यह आपको न केवल आपके सभी प्रयोगों, कोड, डेटासेट, आंकड़े इत्यादि का इतिहास रखने में मदद करेगा, बल्कि आपको एक वैज्ञानिक का उपयोग करते हुए ( git pickaxe ), सहयोग ( दोष ) और डिबग ( git - bisect ) को बनाए रखने के लिए उपकरण प्रदान करेगा। डिबगिंग की विधि ( डेल्टा डिबगिंग कहा जाता है )। यहाँ एक काल्पनिक शोधकर्ता की कहानी है कि वह अपने स्वयं के प्रयोगों को लॉगिंग सिस्टम बनाने की कोशिश कर रहा है, जब तक कि यह गिट के एक फैसिलिमल होने तक समाप्त नहीं हो जाता।
एक और सामान्य (पर एक अजगर एपीआई के साथ किसी भी भाषा के साथ काम उपकरण pypi ) है सुमात्रा , जो विशेष रूप आप ऐसा करने में सहायता करने के लिए डिज़ाइन किया गया है अनुकरणीय अनुसंधान ( अनुकरणीय , ठीक उसी कोड और सॉफ्टवेयर दिए गए एक ही परिणाम का उत्पादन करने के उद्देश्य जबकि reproducibility उत्पादन करना है किसी भी माध्यम को दिए गए समान परिणाम, जो बहुत कठिन और समय लेने वाला है और स्वचालित नहीं है)।
यहां बताया गया है कि सुमात्रा कैसे काम करती है: सुमात्रा के माध्यम से आपके द्वारा प्रयोग किए जाने वाले प्रत्येक प्रयोग के लिए, यह सॉफ्टवेयर "गेम स्टेट को बचाने" की तरह कार्य करेगा, जो अक्सर वीडियोगेम में पाया जाता है। अधिक सटीक रूप से, यह बचाएगा:
- आपके द्वारा प्रदान किए गए सभी पैरामीटर;
- आपके संपूर्ण प्रायोगिक एप्लिकेशन और कॉन्फ़िगर फ़ाइलों की सटीक सोर्सकोड स्थिति;
- आउटपुट / प्लॉट / परिणाम और आपके प्रायोगिक अनुप्रयोग द्वारा निर्मित कोई भी फ़ाइल।
यह तब आपके प्रत्येक प्रयोग के लिए टाइमस्टैम्प और अन्य मेटाडेटा के साथ एक डेटाबेस का निर्माण करेगा, जिसे आप बाद में webGUI का उपयोग करके क्रॉल कर सकते हैं। चूंकि सुमात्रा ने एक विशिष्ट बिंदु पर एक विशिष्ट प्रयोग के लिए आपके आवेदन की पूरी स्थिति को समय में बचाया, आप उस कोड को पुनर्स्थापित कर सकते हैं जो किसी भी क्षण आप चाहते हैं एक विशिष्ट परिणाम का उत्पादन किया है, इस प्रकार आपके पास कम लागत पर अनुसंधान योग्य है (भंडारण को छोड़कर अगर आप विशाल डेटासेट पर काम करते हैं, लेकिन यदि आप हर चीज को सहेजना नहीं चाहते हैं तो आप अपवादों को कॉन्फ़िगर कर सकते हैं)।
एक और भयानक उपकरण GNOME का Zeitgeist है (पहले पायथन में कोडित था, लेकिन अब Vala में पोर्ट किया गया है), एक कम्पासिंग एक्शन जर्नलिंग सिस्टम है, जो आपके द्वारा किए जाने वाले सभी चीज़ों को रिकॉर्ड करता है और यह मशीन लर्निंग का उपयोग कर उस समय के लिए सारांशित कर सकता है जो आप आइटम आधारित संबंधों के बीच चाहते हैं। समानता और उपयोग के पैटर्न पर, उदाहरण के लिए जैसे सवालों का जवाब "मेरे लिए सबसे अधिक प्रासंगिक था, जबकि मैं पिछले साल एक महीने के लिए प्रोजेक्ट एक्स पर काम कर रहा था?" । दिलचस्प बात यह है कि एवरनोट के समान एक नोट लेने वाला ऐप Zim Desktop Wiki , Zeitgeist के साथ काम करने के लिए एक प्लगइन है।
अंत में, आप या तो गिट या सुमात्रा या किसी भी अन्य सॉफ़्टवेयर का उपयोग कर सकते हैं, जो आप चाहते हैं, वे आपको समान पुनरावृत्ति शक्ति प्रदान करेंगे, लेकिन सुमात्रा विशेष रूप से वैज्ञानिक अनुसंधान के लिए सिलवाया गया है, इसलिए यह क्रॉल करने के लिए वेब GUI जैसे कुछ फैंसी उपकरण प्रदान करता है आपके परिणाम, जबकि Git कोड रखरखाव के लिए अधिक अनुरूप है (लेकिन इसमें git-bisect जैसे डिबगिंग टूल हैं ताकि यदि आपके प्रयोगों में कोड शामिल हों, तो यह वास्तव में बेहतर हो सकता है)। या बेशक आप दोनों का उपयोग कर सकते हैं!
/ संपादित करें: dsign ने यहां एक बहुत ही महत्वपूर्ण बिंदु को छुआ है: आपके सेटअप की प्रतिकृति की उतनी ही महत्वपूर्ण है जितनी आपके आवेदन की प्रतिकृति। दूसरे शब्दों में, आपको कम से कम उनके सटीक संस्करणों और आपके प्लेटफॉर्म के विवरण के साथ आपके द्वारा उपयोग किए जाने वाले पुस्तकालयों और कंपाइलरों की पूरी सूची प्रदान करनी चाहिए ।
व्यक्तिगत रूप से, पायथन के साथ वैज्ञानिक कंप्यूटिंग में, मैंने पाया है कि पुस्तकालयों के साथ-साथ एक एप्लिकेशन को पैकेजिंग करना बहुत दर्दनाक है, इस प्रकार मैं अब केवल एनाकोंडा जैसे महान वैज्ञानिक प्रबंधक पैकेज ( ऑल-इन-वन वैज्ञानिक पैकेज का उपयोग करता हूं ) और बस उपयोगकर्ताओं को उसी पैकेज का उपयोग करने की सलाह देते हैं। एक अन्य समाधान एक स्क्रिप्ट स्वचालित रूप से एक उत्पन्न करने के लिए प्रदान करने के लिए हो सकता है virtualenv , या व्यावसायिक उपयोग करते हुए सब कुछ पैकेज डोकर आवेदन के रूप में dsign द्वारा उद्धृत या खुले स्रोत Vagrant (उदाहरण के लिए pylearn2 में एक बॉक्स जो Vagrant का उपयोग एक आसानी से पुनर्वितरण का उत्पादन करने के आभासी पर्यावरण पैकेज)।
अंत में, वास्तव में यह सुनिश्चित करने के लिए कि आपके पास पूरी तरह से काम करने का माहौल है, जिसकी आपको आवश्यकता है, आप एक वर्चुअल मशीन (वर्चुअलबॉक्स देखें) बना सकते हैं, और आप मशीन की स्थिति (स्नैपशॉट) को अपने प्रयोग से बचाने के लिए तैयार कर सकते हैं। फिर आप इस आभासी मशीन को केवल शामिल की गई हर चीज़ के साथ साझा कर सकते हैं ताकि कोई भी आपके सटीक सेटअप के साथ आपके प्रयोग को दोहरा सके। सॉफ्टवेयर आधारित प्रयोग को दोहराने के लिए यह शायद सबसे अच्छा तरीका है। कंटेनर एक अधिक हल्का विकल्प हो सकता है, लेकिन वे पूरे पर्यावरण को शामिल नहीं करते हैं, ताकि प्रतिकृति की निष्ठा कम मजबूत हो।
/ EDIT2: यहां एक शानदार वीडियो सारांश दिया गया है (डिबगिंग के लिए लेकिन यह शोध पर भी लागू किया जा सकता है) प्रतिलिपि प्रस्तुत करने योग्य शोध करने के लिए क्या मौलिक है: अपने प्रयोगों और वैज्ञानिक पद्धति के अन्य चरणों को लॉग करना, एक प्रकार का "स्पष्ट प्रयोग" ।