মূল বিষয়বস্তু
কম্পিউটার প্রোগ্রামিং
কোর্স: কম্পিউটার প্রোগ্রামিং > অধ্যায় 5
পাঠ 2: দৈবভাবেঅ-সুষম ডিস্ট্রিবিউশন এবং সম্ভাব্যতা
এখানে আমরা কখন থেকে প্রোগ্রামিং করা শুরু করেছিলাম তা কি আমাদের মনে আছে? পর্দাতে আমরা মাঝে মধ্যেই অনেক বৃত্ত আঁকতে চাইতাম। মনে মনে তুমি হয়তো বলবে: “হুম, আমি জানি। বিভিন্ন অবস্থানে আমি এই বৃত্তগুলো অঙ্কন করব এবং বৃত্তগুলো বিভিন্ন আকৃতি ও রঙের হবে।” একটি কম্পিউটারের গ্রাফিক্স ব্যবস্থা ব্যবহার করে দৈব (random) অবস্থা তৈরি করা খুব সহজ। এই অনুশীলনীগুলোতে, আমরা প্রকৃতির বিভিন্ন ব্যবস্থার মডেল তৈরি করতে চাই। ডিজাইন সংক্রান্ত সমস্যাতে দৈবভাবে কাজ করাটা কখনই একটি চিন্তাশীল সমাধান হতে পারে না—বিশেষভাবে সেই সমস্যাগুলোতে, যেগুলো আমরা প্রকৃতিকে অনুকরণ করে তৈরি করার চেষ্টা করছি।
কতগুলো কৌশলকে কাজে লাগিয়ে আমরা
random()
ফাংশনটির ব্যবহার পরিবর্তন করে, দৈব সংখ্যার “নন-ইউনিফর্ম” ডিসট্রিবিউশন (non-uniform distribution) তৈরি করতে পারি। সম্পূর্ণ অনুশীলনী জুড়েই এটি আমাদের সাহায্য করবে যখন আমরা বিভিন্ন পরিস্থিতিতে একটি সংখ্যা ব্যবহার করব। জেনেটিক অ্যালগোরিদম (genetic algorithms) পরীক্ষা করার সময়- উদাহরণস্বরূপ, আমাদের এমন একটি “বাছাইকরণ”(selection)— পদ্ধতি সম্পাদনা করা লাগবে যা আমাদের জনসংখ্যার মধ্যে নির্বাচিত কোন সদস্যদের DNA (ডিএনএ - ডি অক্সিরাইবো নিউক্লিক এসিড) পরবর্তী প্রজন্মের কাছে পাঠায়। যারা যোগ্য, তাদের বেঁচে থাকা সম্পর্কিত যে তত্ত্বটি রয়েছে সেটা আমাদের মনে আছে তো? ধরি, বিবর্তন ঘটছে এমন একটি বানরের জনসংখ্যা আছে আমাদের কাছে আছে। প্রতিটি বানর যে এখানে সমানভাবে পুনরুৎপাদনের সুযোগ পাবে তা বলা যায় না। ডারউইনের বিবর্তনবাদ সংক্রান্ত তত্ত্বটি অনুকরণ করার জন্য আমরা দৈবভাবে দুইটি বানর নির্বাচন করব যারা সঙ্গী হবে। সবচেয়ে “যোগ্য” বানরটি আমাদের নির্বাচন করতে হবে। “যোগ্যদের নির্বাচনের সম্ভাব্যতা” (probability of the fittest) আমাদের সংজ্ঞায়িত করে দিতে হবে। উদাহরণস্বরূপ, যে বানরটি প্রাণবন্ত এবং শক্তিশালী, সেই বানরটির পুনরুৎপাদনের সম্ভাব্যতা 90% হবে, যেখানে একটি দুর্বল বানরের ক্ষেত্রে সেই সম্ভাব্যতা হবে 10%।এখন সম্ভাব্যতার একদম মৌলিক মূলনীতিগুলোর দিকে লক্ষ্য করি। প্রথমেই আমরা একটি-ঘটনার সম্ভাব্যতা (single event probability) পরীক্ষা করে দেখতে পারি, যেমন- দিয়ে দেওয়া কোন একটি ঘটনা (given event) ঘটতে পারে।
If you have a system with a certain number of possible outcomes and each outcome has the same chance of happening, the probability of the occurrence of a given event is equal to the number of outcomes that qualify as that event divided by the total number of all possible outcomes. A coin toss is a simple example—it has only two possible outcomes, heads or tails. There is only one way to flip heads. The probability that the coin will turn up heads, therefore, is one divided by two: 1/2 or 50%.
এক বাক্স তাস নেওয়া যাক যেখানে বায়ান্নটি তাস আছে। তাসের বাক্স থেকে একটি টেক্কা বের করার সম্ভাব্যতা হল:
টেক্কার সংখ্যা / তাসের মোট সংখ্যা = 4 / 52 = 0.077 = ~ 8%
রুইতন উঠার সম্ভাবনা হল:
রুইতনের সংখ্যা / তাসের মোট সংখ্যা = 13 / 52 = 0.25 = 25%
এছাড়াও আমরা এই ক্রমে ঘটতে থাকা অনেকগুলো ঘটনাবলীর সম্ভাব্যতা হিসাব করতে পারি। এই কাজটি করার জন্য, প্রতিটি ঘটনার সম্ভাব্যতাকে আলাদাভাবে গুণ করতে হবে।
একটি ধাতব মুদ্রার টানা তিন বার হেড পড়ার সম্ভাব্যতা হল:
(1/2) * (1/2) * (1/2) = 1/8 (or 0.125)
That means that a coin is likely to turn up heads three times in a row one out of eight times (each “time” being three tosses).
পরবর্তী ধাপে যাবার আগে সম্ভাব্যতা সম্পর্কিত ধারণা পর্যালোচনা করার জন্য compound events (যৌগিক ঘটনা) এবং dependent probability (নির্ভরশীল সম্ভাব্যতা) বিষয় দুইটি অধ্যয়ন করতে হবে।
আমরা কয়েকটি পদ্ধতি অনুসরণ করে
random()
ফাংশনটি সম্ভাব্যতার কোডের ভিতরে ব্যবহার করতে পারি। একটি পদ্ধতি হল নির্বাচিত কিছু সংখ্যা দিয়ে একটি অ্যারে পূর্ণ করা—যার মধ্যে কিছু সংখ্যা আবার পুনরাবৃত্ত হয়েছে—তারপর অ্যারে থেকে কিছু দৈব সংখ্যা নির্বাচন করে, এই নির্বাচনের উপরে ভিত্তি করে ঘটনা তৈরি করা।এই কোডটি চালালে, 40% সম্ভাব্যতা থাকবে মানটি 1 হবার, 20% সম্ভাব্যতা থাকবে মানটি 2 হবার এবং 40% সম্ভাব্যতা থাকবে মানটি 3 হয়ে প্রকাশিত হবার।
এছাড়াও আমরা একটি দৈব সংখ্যা চাইতে পারি (সহজভাবে, 0 থেকে 1 এর ভিতরে যেকোন একটি দৈব সংখ্যা নির্বাচন করা যাক) এবং শুধুমাত্র আমাদের নির্বাচিত দৈব সংখ্যাটি যদি একটি নির্দিষ্ট রেঞ্জের থাকে তাহলে একটি ঘটনা ঘটতে পারে। নিচের উদাহরণটি লক্ষ্য করি এবং বার বার রিস্টার্ট বাটনটি চাপতে থাকি যতক্ষণ না দৈবভাবে নির্বাচন করা সংখ্যাটির মান সীমা (threshold) এর মান থেকে কম না হয়:
এই পদ্ধতিটি অনেকগুলো ঘটনা থেকে আসা ফলাফলের উপরেও প্রয়োগ করা সম্ভব। এখানে বলা যাক যে, ফলাফল A এর ক্ষেত্রে ঘটনাটি ঘটার 60% সম্ভাব্যতা আছে, ফলাফল B এর ক্ষেত্রে ঘটনাটি ঘটার 10% সম্ভাব্যতা আছে এবং ফলাফল C এর ক্ষেত্রে ঘটনাটি ঘটার 30% সম্ভাব্যতা আছে। দৈবভাবে একটি সংখ্যা নির্বাচন এবং কোন রেঞ্জে এই সংখ্যাটি পড়ছে তা দেখার মাধ্যমে আমরা এটার কোড বাস্তবায়িত করেছি ।
- between 0.00 and 0.60 (60%) –> Outcome A
- between 0.60 and 0.70 (10%) –> Outcome B
- between 0.70 and 1.00 (30%) –> Outcome C
Click the restart button to see how often you get different outcomes:
উপরের পদ্ধতিটি প্রয়োগ করে আমরা একটি random walker (এলমেলভাবে চলা বস্তু বা অবজেক্ট) তৈরি করতে পারি যেটির ডানদিকে ঝোঁকার প্রবণতা থাকে। এখানে একটি
Walker
অবজেক্টের সম্ভাব্যতার একটি উদাহরণ দেওয়া হল:- উপরের দিকে উঠার সম্ভাব্যতা: 20%
- নিচের দিকে নামার সম্ভাব্যতা: 20%
- বামদিকে সরে যাবার সম্ভাব্যতা: 20%
- ডানদিকে সরে যাবার সম্ভাব্যতা: 40%
এই "প্রাকৃতিক সিমুলেশন" কোর্সটি নেওয়া হয়েছে Daniel Shiffman (ড্যানিয়েল শিফম্যান) এর লেখা "The Nature of Code" (কোডের প্রকৃতি) থেকে এবং এটি ক্রিয়েটিভ কমন্সের এট্রিবিউশন-নন কমার্শিয়াল 3.0 আনপোরটেড লাইসেন্সের অধিনস্ত।
আলোচনায় অংশ নিতে চাও?
কোন আলাপচারিতা নেই।