সিমুলেশন রান পরিচালনার জন্য পরামর্শ?


9

এই প্রশ্নগুলি কম-সায়েন্সে কিছুটা অফ-টপিক হতে পারে। যদি এটির প্রয়োজন হয় তবে অনুগ্রহ করে এটি কোথায় ফিট করে suggest

প্রশ্নটি কীভাবে সমস্ত সিমুলেশন দক্ষতার সাথে পরিচালিত হয় সে সম্পর্কে।

ধরা যাক, উদাহরণস্বরূপ, একটি সিমুলেশনের জন্য 2 পরামিতিগুলি ঠিক করা দরকার যা নির্দিষ্ট প্রস্তাবিত মানের ব্যাপ্তিতে সংজ্ঞায়িত করতে হয়।

দুটি প্যারামিটারের একজোড়া (উদাহরণস্বরূপ পরীক্ষামূলক তথ্যগুলির সাথে সিমুলেশন ফলাফলের তুলনা করে) আরও ভাল ফলাফলের সন্ধানের জন্য, প্রতিটি প্যারামিটারের জন্য তিনটি মান নির্ধারণ করে সংবেদনশীলতা বিশ্লেষণ করতে পারেন, তারপরে 9 রান তৈরি করে।

পূর্বে আমি প্রতিটি রানের ইনপুট পরিবর্তন করতে সেড ব্যবহার করি এবং ফোল্ডারে এই রানের ইনপুট এবং ফলাফলগুলি সঞ্চয় করে যে মান এবং পরামিতি নাম লিখে প্রতিটি রান ট্যাগ করি। তবে আমি পরামিতিগুলির সংখ্যা বাড়ার পরে এটি খুব অকার্যকর অবস্থায় পেয়েছি (যেমন প্লট করার জন্য স্ক্রিপ্টগুলির ফোল্ডারের নাম অ্যাক্সেস করুন)।

তারপরে আমি সিদ্ধান্ত নিয়েছি সাধারণ নম্বরগুলি ফোল্ডারের নাম হিসাবে ব্যবহার করব এবং কিছু অন্যান্য স্প্রেডশিট দ্বারা বিশদটি সংরক্ষণ করব। এই উপায় এখন পর্যন্ত ঠিক আছে তবে কিছু শ্রমসাধ্য কাজ প্রয়োজন। রান বাড়ার সাথে সাথে ভুল করাও সাধারণ হয়ে যায়, যেমন এর আগে দু'দিন আগে অন্য রান করা হয়েছে already

এই রান পরিচালনার বিষয়ে আপনার কি কোনও ভাল ধারণা আছে? আমি মনে করি মন্টি কার্লো বিশ্লেষণ কারও পক্ষে এটি অত্যন্ত গুরুত্বপূর্ণ হবে?

আগাম ধন্যবাদ!


2
আমি সাধারণত এই ধরনের কাজের জন্য সাধারণ পাইথন-স্ক্রিপ্ট ব্যবহার করি। তারা ডেটা উত্পন্ন করে, সিমুলেশন চালায় এবং ফলস্বরূপ ফলাফলগুলি পরিচালনা করে। নম্পি / স্কিপি / ম্যাটপ্লোটিব-এর মতো সরঞ্জামগুলি ব্যবহার করে আপনি সরাসরি কিছুটা বিশ্লেষণ ও প্লটও করতে পারেন। কখনও কখনও আমি আরও এগিয়ে যাই এবং স্বয়ংক্রিয়ভাবে সিম্পি ব্যবহার করে উত্পাদিত সমাধানগুলির বিরুদ্ধে পরীক্ষা করার জন্য প্রয়োজনীয় ইনপুট স্বয়ংক্রিয়ভাবে উত্পন্ন করি এবং ফলাফলগুলি আমার সিমুলেশন কোডে ইনপুট হিসাবে ব্যবহার করি। আমি ল্যাংট্যাঞ্জেনের বই "পাইথন স্ক্রিপ্টিং ফর কম্পিউটেশনাল সায়েন্স" এর একটি প্রাথমিক পয়েন্ট হিসাবে সুপারিশ করতে পারি। এখানে কিছু সাধারণ কাজগুলি কমপ্লেক্সে সম্মুখীন হয়েছে। বিজ্ঞান পাইথন ব্যবহার করে প্রদর্শিত হয়।
খ্রিস্টান ওয়ালুগা

এই প্রশ্নটি বিষয়টিতে চূড়ান্ত বলে মনে হচ্ছে। এটি রুটি এবং মাখনের গণনা বিজ্ঞানের স্টাফ। আমি মনে করি যে প্রতিটি শনিবার গণনা বিজ্ঞানী চেনমিং কোন না কোন সময় যা যাচ্ছিল তার মধ্য দিয়ে গিয়েছিল। আমি একজনের জন্য খুব আগ্রহী যে কীভাবে লোকেরা পাছার মধ্যে এই সর্বব্যাপী ব্যথায় যোগাযোগ করেছে।
টেলিফোন করুন

উত্তর:


5

টিএলডিআর
আপনার ইনপুটটি পরিচালনা / পরিবর্তন করতে এবং আউটপুট প্রবাল করতে পাইথন ব্যবহার করুন এবং আপনার ডেটা সংগঠিত / সঞ্চয় করতে এইচডিএফ 5 ব্যবহার করুন। প্রথমটিকে যত জটিল মনে হচ্ছে এটি এসকিউএল-যে কোনও কিছুর চেয়ে সহজ হবে।

দীর্ঘ উত্তর + উদাহরণ
আমি এই ধরণের পরিস্থিতি মোকাবেলায় ব্যক্তিগতভাবে পাইথন স্ক্রিপ্টিং এবং এইচডিএফ 5 ফাইল ফর্ম্যাটটির সংমিশ্রণটি ব্যবহার করি। পাইথন স্ক্রিপ্টিং আপনার রানফাইলগুলি পরিবর্তনের জন্য প্রয়োজনীয় পাঠ্য বিকল্পগুলি পরিচালনা করতে পারে (এবং ডুপ্লিকেট রানগুলি পরীক্ষা করতে পারে) এবং আরও কিছু স্ক্রিপ্টিংয়ের সাহায্যে আপনি আপনার প্রোগ্রাম থেকে আউটপুট ডেটা নিতে এবং একটি HDF5 ফাইলে রাখতে পারেন put

এইচডিএফ 5 কে কম বেশি সাধারণ ফাইল সিস্টেমের (যেমন আপনার কম্পিউটারে ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলির সেট) বলে মনে করা সবচেয়ে সহজ তবে বড় ডেটা সেটগুলিতে সহজেই স্কেল করে। প্রতিটি ডিরেক্টরি / উপ-ডিরেক্টরিকে মেটাডেটা দিয়ে ট্যাগ করা যেতে পারে (আপনার ক্ষেত্রে হয় কেবলমাত্র যে পরামিতিগুলি আপনি পৃথক করছেন তা বা পুরো পরামিতিগুলির সেট)। যখন আপনার ডেটা বিশ্লেষণ করার সময় আসে আপনি মেটাডেটার ভিত্তিতে এটি অনুসন্ধান করতে পারেন।

আমার কিছু সিমুলেশন ডেটার (ইতিমধ্যে এইচডিএফ 5 ফর্ম্যাটে) এর উপর ভিত্তি করে এটি কীভাবে কাজ করবে তার একটি সংক্ষিপ্ত উদাহরণ এখানে:

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.hdf5এইচডিএফ 5 ফাইল, এবং প্রতিটি রানএক্সএক্স একটি উপ-ডিরেক্টরি যা কোনও নির্দিষ্ট সিমুলেশন থেকে আউটপুট ডেটা ধারণ করে এবং যা সম্পর্কিত মেটাডেটা দ্বারা ট্যাগ হয়। একটি অজগর স্ক্রিপ্ট যা রানগুলি অনুসন্ধান করে এবং পছন্দসই মেটাডেটাযুক্ত তাদের একটি তালিকা ফিরিয়ে দেয়:

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

আমি মনে করি যে কোনও গুরুতর সুপারিশ করার জন্য আমাদের আপনার কর্মপ্রবাহ সম্পর্কে আরও কিছুটা জানতে হবে।

আমি আপনার রানগুলি কী-ভ্যালু স্টোরের মতো আচরণের পরামর্শ দেব। প্রতিটি রানের জন্য আপনার সমস্ত মেটাডেটার জন্য একটি সাধারণ ডাটাবেস তৈরি করুন এবং তারপরে আপনার রান থেকে যে কোনও প্রাসঙ্গিক তথ্য হ্যাশ করুন যা আপনি প্রতিটি আউটপুটকে নির্ধারণ করেন।

সর্বাধিক সহজ পরিস্থিতিতে আপনি আপনার মেটাটাটা স্টোরের জন্য একটি পাঠ্য ফাইল ব্যবহার করবেন এবং আপনার পাঠ্য ফাইলে প্রতিটি রান সম্পর্কে মেটাডেটার লাইনগুলি নিরাপদে যুক্ত করবেন। তারপরে আপনি আপনার আউটপুট রানগুলি সংরক্ষণ করতে পারেন তবে আপনি চান (একক ডিরেক্টরি, সামগ্রীর তালিকার সাথে ব্যাকআপ, ইত্যাদি ...)

আপনি নিজের পছন্দ মতো যে কোনও ভাষায় এই কৌশলটি প্রয়োগ করতে পারেন, তবে পাইথনে এটি ক্ষুদ্র। পাইথনের জেএসওএন ডেটা পড়ার এবং লেখার বা এসকিউএল ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার ক্ষমতা হিসাবে আপনি কয়েকটি দুর্দান্ত বৈশিষ্ট্যগুলির সুবিধাও নিতে পারেন।

এই পদ্ধতির একটি খুব সহজ হালকা ওজন ডাটাবেস প্রয়োগ করে। ভারী কৌশলগুলি রয়েছে যা আরও সুরক্ষার গ্যারান্টি সরবরাহ করে, একটি নতুন যা আপনার আগ্রহী হতে পারে তা হ'ল সাইডিবি । ডেটাবেসগুলি আপনার ডেটা সম্পর্কে দৃ stronger় গ্যারান্টি সরবরাহ করে এবং আপনাকে বড় ডেটাসেটগুলির জন্য আপনার পদ্ধতির স্কেল করতে সহায়তা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.