सिमुलेशन रन के लिए सुझाव?


9

यह सवाल कॉम्प-साइंस में थोड़ा ऑफ-टॉपिक हो सकता है। यदि यह आवश्यक है तो कृपया सुझाव दें कि यह कहां से फिट होता है।

यह सवाल इस बारे में है कि सभी सिमुलेशन कुशलता से कैसे चलते हैं।

उदाहरण के लिए, मान लें कि एक सिमुलेशन को 2 मापदंडों को तय करने की आवश्यकता होती है, जिन्हें एक निश्चित सुझाए गए मूल्य सीमा पर परिभाषित किया जाना है।

दो मापदंडों की एक जोड़ी द्वारा उत्पादित बेहतर परिणाम को खोजने के लिए (उदाहरण के लिए, प्रयोगात्मक डेटा के साथ सिमुलेशन परिणाम की तुलना करके), कोई प्रत्येक पैरामीटर के लिए तीन मानों को परिभाषित करके संवेदनशीलता विश्लेषण कर सकता है, फिर 9 रन बना सकता है।

पहले मैं प्रत्येक रन के लिए इनपुट बदलने के लिए sed का उपयोग करता हूं , और इस रन के इनपुट और परिणामों को संग्रहीत करने वाले फ़ोल्डर पर मूल्य और पैरामीटर नाम लिखकर प्रत्येक रन को टैग करता हूं । लेकिन मैंने पाया कि मापदंडों की संख्या बढ़ने के बाद यह बहुत ही अक्षम है (उदाहरण के लिए प्लॉटिंग के लिए स्क्रिप्ट में फ़ोल्डर्स के नाम तक पहुंच)।

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

क्या आपके पास इन रन के प्रबंधन के बारे में कोई अच्छा विचार है? मुझे लगता है कि मोंटे कार्लो विश्लेषण करने वाले किसी व्यक्ति के लिए यह बहुत महत्वपूर्ण होगा?

अग्रिम में धन्यवाद!


2
मैं आमतौर पर ऐसे कार्यों के लिए सरल पायथन-लिपियों का उपयोग करता हूं। वे डेटा उत्पन्न करते हैं, सिमुलेशन चलाते हैं और परिणामी आउटपुट का प्रबंधन करते हैं। सुन्न / स्कैपी / मेटप्लोटिब जैसे टूल का उपयोग करके, आप कुछ हद तक सीधे विश्लेषण और साजिश भी कर सकते हैं। कभी-कभी मैं और भी आगे बढ़ जाता हूं और स्वचालित रूप से निर्मित किए गए समाधानों के खिलाफ परीक्षण करने के लिए आवश्यक इनपुट उत्पन्न करता हूं सीधे सीम्पी का उपयोग करके और मेरे सिमुलेशन कोड में इनपुट के रूप में परिणामों का उपयोग करें। मैं लैंगटैंगेन की पुस्तक "पायथन स्क्रिप्टिंग फॉर कम्प्यूटेशनल साइंस" को एक प्रारंभिक बिंदु के रूप में सुझा सकता हूं। यहाँ COMP में कुछ विशिष्ट कार्यों का सामना करना पड़ा। पायथन का उपयोग करके विज्ञान का प्रदर्शन किया जाता है।
क्रिश्चियन वालुगा

यह सवाल विषय पर बेहद लगता है। यह ब्रेड-एंड-बटर कम्प्यूटेशनल साइंस सामान है। मुझे लगता है कि हर शुरुआती कम्प्यूटेशनल वैज्ञानिक किसी न किसी बिंदु पर चेनमिंग के माध्यम से जा रहा है। मैं एक के लिए यह देखने के लिए बहुत इच्छुक हूं कि कैसे अन्य लोगों ने गधे में इस सर्वव्यापी दर्द से संपर्क किया है।
टेल

जवाबों:


5

TLDR
अपने इनपुट को प्रबंधित / संशोधित करने और अपने डेटा को व्यवस्थित / संग्रहीत करने के लिए HDF5 का उपयोग करने के लिए अजगर का उपयोग करें और उसे संशोधित करें। जैसा कि यह पहले लगता है कि जटिल हो सकता है कि यह अभी भी SQL- कुछ की तुलना में सरल होगा।

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

एचडीएफ 5 के बारे में सोचना सामान्य फ़ाइल सिस्टम की तरह कमोबेश ठीक है (यानी आपके कंप्यूटर पर निर्देशिका और उपनिर्देशिका का सेट), लेकिन एक ऐसा जो आसानी से बड़े डेटा सेट में बदल जाता है। प्रत्येक निर्देशिका / उपनिर्देशिका को मेटाडेटा के साथ टैग किया जा सकता है (आपके मामले में या तो बस पैरामीटर जो आप अलग-अलग हैं, या मापदंडों का पूरा सेट)। जब आपके डेटा का विश्लेषण करने का समय आता है तो आप मेटाडेटा के आधार पर इसके माध्यम से खोज सकते हैं।

यहाँ एक छोटा उदाहरण दिया गया है कि यह मेरे कुछ सिमुलेशन डेटा (पहले से ही HDF5 प्रारूप में) के आधार पर कैसे काम करेगा जो इस तरह दिखता है:

mydata.hdf5
|___Run01(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run02(metadata: {size:10, maxSteps:1e6, maxTime:inf})
|___Run03(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run04(metadata: {size:9, maxSteps:1e7, maxTime:inf})

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

import sys
import h5py    #the python module that interfaces with HDF5

def GetRuns(hdfRoot, attributeValuePairs):
    return [subdir for subdir in hdfRoot.values() if not(attributeValuePairs.viewitems() - dict(subdir.attrs).viewitems())]

if __name__=="__main__":
    attributeValuePairs = dict(zip(sys.argv[2::2], sys.argv[3::2]))
    with h5py.File(sys.argv[1]) as hdfRoot:
        runs = GetRuns(hdfRoot, attributeValuePairs)

        #do something here with runs...

        print runs

तो अगर मैं एक निर्देशिका में एक कमांड लाइन में था जिसमें mydata.hdf5मैं उपरोक्त स्क्रिप्ट को चला सकता हूं जैसे:

python myscript.py mydata.hdf5 maxSteps 1e7 size 13

जो स्क्रिप्ट को मेटाडेटा के साथ आंशिक रूप से या पूर्ण मिलान के साथ किसी भी रन को खोजने के लिए कहेगा {'maxSteps':'1e7', 'size':'13'}। इसके बाद स्क्रिप्ट उस डेटा में हेरफेर कर सकती है जो आपको पसंद आया ("यहां कुछ करें" खंड में), और फिर यह एक सूची मुद्रित करेगा जो कुछ इस तरह दिखाई देगा:

["Run01", "Run03"]

एक नोट हालांकि यह है कि एचडीएफ 5 आपके डेटा के लिए पूरी तरह से प्राकृतिक मानचित्रण पेश करने जा रहा है, अगर यह आपके डेटा को एन-आयामी सरणियों के सेट के रूप में प्रस्तुत करना संभव है। यह सिमुलेशन के आउटपुट के लिए किसी प्रकार के सरणी में होना बहुत आम है, इसलिए यह संभवतः एक मुद्दा नहीं होगा।

अच्छे शुरुआती बिंदु
पायथन: http://www.openbookproject.net/thinkcs/python/english2e/
HDF5: http://www.h5py.org/docs/


2

मुझे लगता है कि किसी भी गंभीर सिफारिश को करने के लिए हमें आपके वर्कफ़्लो के बारे में थोड़ा और जानने की आवश्यकता होगी।

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

सबसे सरल स्थिति में, आप अपने मेटाडेटा स्टोर के लिए एक पाठ फ़ाइल का उपयोग करेंगे, और अपनी पाठ फ़ाइल में प्रत्येक रन के बारे में मेटाडेटा की लाइनों को सुरक्षित रूप से जोड़ेंगे। फिर आप अपने आउटपुट को फिर से स्टोर कर सकते हैं, जैसे आप (एकल निर्देशिका, सामग्री की सूची के साथ बैकअप, आदि ...)

आप इस रणनीति को अपनी पसंद की किसी भी भाषा में लागू कर सकते हैं, लेकिन यह पायथन में तुच्छ होगा। आप JSON डेटा पढ़ने और लिखने या SQL डेटाबेस के साथ बातचीत करने की क्षमता के रूप में कुछ अच्छी विशेषताओं का लाभ भी उठा सकते हैं।

यह दृष्टिकोण एक बहुत ही सरल प्रकाश-भार डेटाबेस को लागू करता है। भारी रणनीतियाँ हैं जो अधिक सुरक्षा गारंटी प्रदान करती हैं, एक नया जिसे आप में रुचि हो सकती है वह है SciDB । डेटाबेस आपके डेटा के बारे में मजबूत गारंटी प्रदान करते हैं और आपको बड़े डेटासेट के लिए अपना दृष्टिकोण बढ़ाने में मदद करते हैं।

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