সিমুলেশন এবং মডেলিংয়ের জন্য এফপি


12

আমি একটি সিমুলেশন / মডেলিং প্রকল্প শুরু করতে চলেছি। আমি ইতিমধ্যে জানি যে ওওপি এই জাতীয় প্রকল্পের জন্য ব্যবহৃত হয়। তবে, হাস্কেল অধ্যয়ন আমাকে উপাদানগুলির একটি সিস্টেমের মডেলিংয়ের জন্য এফপি দৃষ্টান্ত ব্যবহারের বিষয়ে বিবেচনা করতে বাধ্য করেছে। আমাকে বিস্তারিতভাবে বলতে দাও:

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

যদি আমি কোনও ওওপি পদ্ধতি ব্যবহার করি তবে আমি দুটি বস্তু তৈরি করব যা প্রতিটি প্রকারের ডেটা আবদ্ধ করবে, পিডিই সমাধানের পদ্ধতিগুলি (উত্তরাধিকারসূত্রে কোড পুনরায় ব্যবহারের জন্য এখানে ব্যবহৃত হবে) এবং পিডিই এর সমাধান।

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

উপসংহারে, এফপি পদ্ধতির বাস্তবায়ন কি ওওপির সাথে তুলনা করে (পিডিই সমাধানের জন্য বিভিন্ন ধরণের উপাদান বা নতুন পদ্ধতি যুক্ত) পরিচালনা করা সহজ এবং সহজতর হবে?

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

উত্তর:


7

ভাল প্রশ্ন, আমি একই লাইন বরাবর চিন্তা করা হয়েছে। Icallyতিহাসিকভাবে, ওও দৃষ্টান্তটি কম্পিউটার সিমুলেশনের প্রয়োজনীয়তা থেকে উদ্ভূত হয়েছিল - সিমুলার ইতিহাস দেখুন - এবং স্মলটালকের মতো প্রাথমিক ওও ভাষাগুলি এমন কি লোকেরা তৈরি করেছিল যা তারা জানত যে তারা কী করছে (অর্থাত অ্যালান কে), ওও এখন তর্কযোগ্যভাবে অতিরিক্ত ব্যবহৃত হয়েছে এবং অনেক বেশি দুর্ঘটনাজনিত জটিলতা এনেছে ।

সাধারণত, এফপি স্টাইলের প্রোগ্রামগুলি সংক্ষিপ্ত, পরীক্ষা করা সহজ এবং ওও প্রোগ্রামগুলির চেয়ে সংশোধন করা সহজ। রব হ্যারোপ তাঁর আলোচনায় রেখেছিলেন, ভবিষ্যতের কাজটি কি কার্যকর? , আপনি ফাংশন এবং ডেটার চেয়ে সহজ কখনও পাবেন না; দুটি বিস্মৃতভাবে রচনা করুন, যা কিছু বিমূর্ততা প্রয়োজন তা তৈরি করতে। আপনার প্রশ্নের উত্তর দেওয়ার একটি উপায় (বা আমি কি কেবল এটি বিশ্রাম নিচ্ছি? :) জিজ্ঞাসা করা, সর্বোচ্চ স্তরের ফাংশনটি কী এবং সর্বোচ্চ স্তরের ইনপুট-ডেটা -> আউটপুট-ডেটা দেখতে কেমন? তারপরে আপনি সেই "আলফা" ফাংশন এবং ডেটা টাইপগুলি বিমূর্তনের পরবর্তী স্তরে ভাঙ্গতে শুরু করতে পারেন এবং প্রয়োজনীয় হিসাবে পুনরাবৃত্তি করতে পারেন।

আপনার প্রশ্নের আরেকটি দৃষ্টিভঙ্গি (বেশিরভাগ উত্তর নয়) হ'ল স্ট্যাক ওভারফ্লোতে এই থ্রেডটি (অস্বীকার, আমি এটি শুরু করেছি) দেখুন, কয়েকটি উত্তর খুব আকর্ষণীয়: /programming/3431654/how-does- ক্রিয়ামূলক প্রোগ্রামিং আবেদন-টু-সিমিউলেশন

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


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

@ হিপ্টোবেসকোয়ার - হ্যাঁ, আমি আমার ক্লোজার-ফুকে এতে সিমুলেশন লেখার লক্ষ্য নিয়ে ক্রমাগত র‌্যাম্প করছি। এখনও দেখানোর জন্য প্রস্তুত কিছু নেই, তবে আমি কোনও শো-স্টপার্স দেখতে পাচ্ছি না এবং ক্লোজারের ডিজাইনটি সুন্দরভাবে ব্যবহারিক, যেমন প্রয়োজনে আপনি ট্রানজেন্টস / মিউটেশন ব্যবহার করতে পারেন, পাশাপাশি এর এজেন্টগুলি অ্যাসিঙ্ক্রোনাস দিকগুলির পক্ষে উপযুক্ত। এক পর্যায়ে (যখন কোন প্রতিশ্রুতি নেই) আমি এই বিষয়ে একটি নিবন্ধ লিখব ...
সীমিত করুন

আমি ক্লোজুরে একবার দেখেছি তবে আমি এস-এক্সপ্রেশনের অনুরাগী বলতে পারি না। আমি জানি এটি ব্যবহারিক (লিস্প কোডটি ডেটা) তবে অভ্যস্ত হওয়া কি সহজ?
heaptobesquare

@heaptobesquare - s- এক্সপ্রেশন / লিসপ সিনট্যাক্সটি অভ্যস্ত হওয়া আসলে খুব সহজ; প্রথমে একটি ভাল সম্পাদক বাছুন ( ইমাসস বা ভিআইএম , আমার ভোট ইম্যাক্সের জন্য, দেখুন ক্লোজারের মোড রয়েছে এমন ডেভক্লুজেউর.আর.ডিসপ্লে / ডক / গেটিং + স্টার্টড + উইথ + ইমাসস ) দেখুন একটি ভাল বই (যেমন প্রোগ্রামিং ক্লোজার) ), এবং হ্যাকিং শুরু করুন। সর্বাধিক কয়েক সপ্তাহ পরে সিনট্যাক্সটি ব্যাকগ্রাউন্ডে ম্লান হয়ে যাবে, যেমনটি হওয়া উচিত - এটি এত নিখুঁতভাবে সামঞ্জস্যপূর্ণ আপনি এটি খুব কম ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘনিয়ে যাওয়ার মতো ঘন ঘন ঘনিয়ে ছড়িয়ে।।।।।।।।।।।।।।।।। Weeks weeks।।। :)
সীমাবদ্ধ

আমি অবশ্যই একবার চেষ্টা করে দেখব। লিস্পের হোমসাইকোনসিটি সর্বোপরি আকর্ষণীয়।
heaptobesquare

2

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

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

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


আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ! সুতরাং, আমি যদি যেখানে সি ++ ব্যবহার করি, তখন কেবলমাত্র উপাদানটির (যা প্যারামিটার, সীমানা শর্ত এবং পিডিই ম্যাট্রিক্স ফর্মের ক্ষেত্রে) কোনও বস্তুর সাথে আবশ্যক এবং ফাংশনগুলি সংজ্ঞায়িত করে (এমনকি কিছু উচ্চতর আদেশের ক্ষেত্রেও ক্ষেত্রে) প্যারামিটারটি অন্য কোনও কিছুর ফাংশন), অবজেক্টের স্কোপের বাইরে যা ऑब्जेक्टের ডেটাতে কাজ করে, দক্ষ হবে?
heaptobesquare

@ হিপটোবেসকোয়ার: সত্যি বলতে কী, এটি আপনার ক্ষেত্রে কার্যকর হবে কিনা তা আমি আপনাকে বলতে পারি না । এটি চেষ্টা করে দেখুন, বড় মনে করুন, ছোট শুরু করুন। কোনটি সবচেয়ে ভাল কাজ করে এবং কী না তা খুঁজে পেতে কিছু "ট্রেসার কোড" ( artima.com/intv/tracer.html ) প্রোগ্রামিং শুরু করুন । এবং যদি আপনি এমন পরিস্থিতিতে পৌঁছে যান যেখানে আপনি লক্ষ্য করেছেন যে কোনও কিছু সঠিকভাবে কাজ করে না, রিফ্যাক্টর।
ডক ব্রাউন 18

হাস্কেলের কাছে হ্যাম্যাট্রিক্স লাইব্রেরি রয়েছে, যা বিএলএএস / ল্যাপাক লাইব্রেরির জন্য বাইন্ডিং, এবং এর জন্য খুব সুন্দর একটি বাক্য গঠন যা আমি ব্যক্তিগতভাবে একটি ওওপি পদ্ধতির চেয়ে বেছে নিতে পারি।
পল 20

@ পল: ধন্যবাদ, আমি অবশ্যই এটি একবার দেখে নেব! হাস্কেল লাইব্রেরিগুলি কি সাধারণভাবে সামঞ্জস্যপূর্ণ এবং সামগ্রীতে সমৃদ্ধ? উইকিরা তাই বলে তবে এটি কি সত্য?
heaptobesquare

@ হিপ্টোবেসকোয়ার: আমি কেবলমাত্র হ্যাস্কেল গ্রন্থাগারটি হ'ল পার্সেক (আমি এটি একটি এসেমব্লার লিখতে ব্যবহার করেছি), তবে আমি এটি ব্যবহার পছন্দ করি। আমি কেবল হামাট্রিক্স এবং হ্যাস্কেল ওপেনজিএল বাইন্ডিংগুলির জিএইচসিআই অনুসন্ধান করেছি তবে এগুলি বেশ সুন্দর বলে মনে হচ্ছে। হাম্যাট্রিক্স ম্যাটল্যাবের মতো প্রায় সংক্ষিপ্ত বলে মনে হচ্ছে (যা আমি বেশ খানিকটা ব্যবহার করেছি) - যা বিশেষভাবে এই ধরণের জিনিসটির জন্য তৈরি করা হয়েছিল। আমার সীমিত অভিজ্ঞতা থেকে গ্রন্থাগারগুলি সামঞ্জস্যপূর্ণ - এটি হ্যাস্কেল সংখ্যক সাধারণ বিল্ডিং ব্লকের উপর নির্মিত - এবং এগুলি আরও সমৃদ্ধ কারণ হাস্কেলররা জাগতিক জিনিসগুলি করতে পছন্দ করেন না :)
পল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.