মডুলো পক্ষপাতমূলক বিষয়ে প্রসারিত করতে আপনার সূত্রটি হ'ল:
max=$((6*3600))
$(($RANDOM%max/3600))
এবং এই সূত্রে, $RANDOM
0-32767 রেঞ্জের একটি এলোমেলো মান।
RANDOM Each time this parameter is referenced, a random integer between
0 and 32767 is generated.
এটি সম্ভাব্য মানগুলিতে কীভাবে এই মানচিত্রগুলিকে কল্পনা করতে সহায়তা করে:
0 = 0-3599
1 = 3600-7199
2 = 7200-10799
3 = 10800-14399
4 = 14400-17999
5 = 18000-21599
0 = 21600-25199
1 = 25200-28799
2 = 28800-32399
3 = 32400-32767
সুতরাং আপনার সূত্রে, 0, 1, 2 এর সম্ভাবনা 4, 5 এর দ্বিগুণ এবং 3 টির সম্ভাবনাও 4, 5 এর চেয়ে কিছুটা বেশি। সুতরাং আপনার ফলাফল 0, 1, 2 বিজয়ী হিসাবে এবং 4, 5 পরাজিত হিসাবে।
এ পরিবর্তন করার সময় 9*3600
, এটি হিসাবে সক্রিয়:
0 = 0-3599
1 = 3600-7199
2 = 7200-10799
3 = 10800-14399
4 = 14400-17999
5 = 18000-21599
6 = 21600-25199
7 = 25200-28799
8 = 28800-32399
0 = 32400-32767
1-8 এর একই সম্ভাবনা রয়েছে তবে 0 এর জন্য সামান্য পক্ষপাত রয়েছে এবং তাই 0 এখনও 100'000 পুনরাবৃত্তি সহ আপনার পরীক্ষায় বিজয়ী ছিলেন।
মডুলো পক্ষপাতিত্ব ঠিক করতে, আপনার প্রথমে সূত্রটি সহজ করতে হবে (যদি আপনি কেবল 0-5 চান তবে মডুলোটি 6, 3600 বা এমনকি ক্রেজিয়ার সংখ্যা নয়, এটির কোনও ধারণা নেই)। এই সরলকরণটি আপনার পক্ষপাতিত্বকে অনেকটা কমাবে (32766 মানচিত্র 0, 32767 থেকে 1 এ দুটি সংখ্যাকে ছোট পক্ষপাত প্রদান করবে)।
পক্ষপাত পুরোপুরি পরিত্রাণ পেতে, আপনাকে পুনরায় রোল করতে হবে (উদাহরণস্বরূপ) যখন $RANDOM
কম থাকে 32768 % 6
(যে সমস্ত রাজ্যগুলি উপলভ্য এলোমেলো ব্যাপ্তিতে পুরোপুরি মানচিত্র দেয় না) তা নির্মূল করুন।
max=6
for f in {1..100000}
do
r=$RANDOM
while [ $r -lt $((32768 % $max)) ]; do r=$RANDOM; done
echo $(($r%max))
done | sort | uniq -c | sort -n
পরীক্ষার ফলাফল:
16425 5
16515 1
16720 0
16769 2
16776 4
16795 3
বিকল্পটি আলাদা একটি এলোমেলো উত্স ব্যবহার করবে যার মধ্যে লক্ষণীয় পক্ষপাত নেই (কেবলমাত্র 32768 সম্ভাব্য মানের চেয়ে বৃহত্তরের অর্ডার)। তবে যাইহোক, পুনরায়-রোল যুক্তি প্রয়োগ করা ক্ষতিগ্রস্থ হয় না (এমনকি এটি সম্ভবত কখনই কার্যকর হয় না)।