If you're seeing this message, it means we're having trouble loading external resources on our website.

তোমার যদি কোন ওয়েব ফিল্টার দেওয়া থাকে, তাহলে দয়া করে নিশ্চিত কর যে *.kastatic.org এবং *.kasandbox.org ডোমেইনগুলো উন্মুক্ত।

মূল বিষয়বস্তু

দৈব সংখ্যার বণ্টন

অনেক সময় দৈব (random) মানগুলোর সুষম বণ্টন (uniform distribution) বা গসিয়ান বণ্টন (gaussian distribution) করে কার্যকরী ফল লাভ করা যায় না। ধরি, একটি বস্তু এলোমেলোভাবে হেঁটে খাবারের খোঁজ করছে। একটি স্থানের চারপাশ ঘুরে খাবার খোঁজা ভালো কৌশল। কারণ, খাবার কোথায় আছে সেটা জানা নেই, এজন্য চারিদিকে খোঁজাটাই যুক্তিযুক্ত। কিন্তু এতে একটি সমস্যা রয়েছে, দেখা যায় যে এলোমেলোভাবে হেঁটে চলা বস্তুটি অনেকবারই তার পূর্বের অবস্থানে ফেরত আসছে (এটা “oversampling”(ওভারস্যাম্পলিং-অতিরিক্ত নমুনা সংগ্রহ করা) নামে পরিচিত)। এই সমস্যাটিকে কৌশলে সমাধান করার জন্য, এলোমেলোভাবে হাঁটার সময় কিছুক্ষণ পর পর, বড় ধাপ নিতে হবে। ফলশ্রুতিতে বস্তুটি নির্দিষ্ট স্থানের চারপাশে খাবারের জন্য অন্বেষণ করার সময় পর্যায়ক্রমিকভাবে অনেক দূরবর্তী স্থানেও চলে যায় যা ওভারস্যাম্পলিং এর সংখ্যাকে ব্যাপকভাবে হ্রাস করে। এইরকম বৈচিত্র্যময় এলোমেলোভাবে বিচরণের (Lévy flight-ল্যাভে ফ্লাইট নামে পরিচিত) জন্য পছন্দ অনুযায়ী সম্ভাব্যতার প্রয়োজন। Lévy flight কে সম্পূর্ণরূপে বাস্তবায়ন না করে, আমরা নিচে সম্ভাবনার বিন্যাসটি লিখতে পারি: যত বড় ধাপ, এটা পাওয়ার সম্ভাবনা তত কম; যত ছোট ধাপ, পাওয়ার সম্ভাবনা তত বেশি।
আমরা আগেই অ্যারেতে মান (কিছু অনুরূপ মান ছিল) নিয়ে অথবা random() এর ফলাফলগুলোর পছন্দনীয় সম্ভাবনার বণ্টন দেখেছি। আমরা Lévy flight বাস্তবায়নের জন্য বলতে পারি যে, একটি বড় ধাপ নেওয়ার জন্য বস্তুটির 1% সম্ভাবনা রয়েছে।
var r = random(1);
// A 1% chance of taking a large step
if (r < 0.01) {
 xstep = random(-100, 100);
 ystep = random(-100, 100);
} else {
 xstep = random(-1, 1);
 ystep = random(-1, 1);
}
কিন্তু, এটার ফলে সম্ভাব্যতা হ্রাস পায় এবং কয়েকটি নির্ধারিত উপায়ের সৃষ্টি হয়। একটি সাধারণ নীতি প্রণয়ন করলে কেমন হয়—যত বেশি সংখ্যা, তত বেশি এটাকে বাছাই করার সম্ভাবনাটি কেমন হবে? 3.144 এর চাইতে 3.145 কে বাছাই করার সম্ভাবনা বেশি, যদিও এটা একটি ক্ষুদ্র পার্থক্য। অর্থাৎ, যদি x যে কোন একটি সংখ্যা হয়, আমরা y-অক্ষে সেটা চিহ্নিত করতে পারবো y = x
কোডের বৈশিষ্ট্যের ছবি
চিত্র I.4
যদি আমরা উপরের চিত্র অনুযায়ী যে কোন সংখ্যার দৈব (random) বণ্টন তৈরি করতে পারি, তাহলে আমরা এই প্রক্রিয়াটিই অন্য যে কোন বক্র রেখায় প্রয়োগ করতে পারবো যার সূত্র আমাদের কাছে আছে।
একটি উপায় হল একটি দৈব সংখ্যার বদলে দুইটি সংখ্যা নেওয়া। প্রথম দৈব সংখ্যাটি, যে কোন সংখ্যাই হতে পারে। কিন্তু, দ্বিতীয়টি হল, এমন একটি মান যাকে “যোগ্যতাসম্পন্ন এলোমেলো সংখ্যা” বলা হয়। এটাই নির্ধারণ করে যে, আমরা প্রথম সংখ্যাটি নেবো নাকি সেটা বাদ দিয়ে অন্য সংখ্যা নেবো। যে সকল সংখ্যাগুলো যোগ্যতাসম্পন্ন হয় সেগুলো বাছাই করব এবং যে সংখ্যাগুলো যোগ্য নয় তাদের খুব কম সংখ্যকবার বাছাই করা হবে। ধাপগুলো নিম্নরূপ (এখন, শুধু 0 এবং 1 এর মধ্যে দৈব সংখ্যা নিয়ে চিন্তা করি) হবে:
  1. একটি দৈব (random) সংখ্যা বাছাই কর: R1
  2. সম্ভাব্যতা P হিসাব কর যেন R1 যোগ্যতাসম্পন্ন হয়। এরূপভাবে: P = R1।
  3. আরেকটি দৈব সংখ্যা বাছাই কর: R2
  4. যদি P থেকে R2 ক্ষুদ্রতর হয়, তাহলেই আমরা আমাদের সংখ্যাটি পেয়ে যাব&mdash;R1!
  5. যদি P থেকে R2 ক্ষুদ্রতর না হয়, আবারও 1 নং ধাপ থেকে শুরু করতে হবে।
আমরা দেখতে পাচ্ছি যে, একটি দৈব সংখ্যা যোগ্য হওয়ার সম্ভাবনা ঐ দৈব সংখ্যারই সমান হয়। ধরি, R1 এর মান 0.1 হয়। অর্থাৎ, R1 এর যোগ্য হবার জন্য 10% সম্ভাবনা আছে। যদি আমরা R1 এর মান 0.83 নেই তাহলে এটার যোগ্য হওয়ার 83% সম্ভাবনা আছে। সংখ্যা যত বড় হবে, এটা ব্যবহার করার সম্ভাবনাও তত বৃদ্ধি পাবে।
এখানে একটি ফাংশন আছে ( Monte Carlo method (মন্টে কার্লো মেথড) নামে পরিচিত, যা Monte Carlo casino (মন্টে কার্লো ক্যাসিনো) এর নামকরণে করা হয়েছে) যা উপরের অ্যালগোরিদম ব্যবহার করে 0 থেকে 1 এর মধ্যে একটি দৈব সংখ্যা রিটার্ন করে। এই প্রোগ্রাম, মানগুলো ব্যবহার করে উপবৃত্তকে আকৃতি প্রদান করে, কিন্তু আমরা এই মানগুলো যে কোন কাজেই ব্যবহার করতে পারি।

এই "প্রাকৃতিক সিমুলেশন" কোর্সটি নেওয়া হয়েছে Daniel Shiffman (ড্যানিয়েল শিফম্যান) এর লেখা "The Nature of Code" (কোডের প্রকৃতি) থেকে এবং এটি ক্রিয়েটিভ কমন্সের এট্রিবিউশন-নন কমার্শিয়াল 3.0 আনপোরটেড লাইসেন্সের অধিনস্ত।

আলোচনায় অংশ নিতে চাও?

কোন আলাপচারিতা নেই।
ইংরেজি জানো? খান একাডেমির ইংরেজি সাইটে আরো আলোচনা দেখতে এখানে ক্লিক কর।