এলোমেলো নম্বর জেনারেটর কীভাবে কাজ করে?


23

আমি কেবল পিএইচপি rand()ফাংশন সম্পর্কে চিন্তাভাবনা করছিলাম এবং আমি কীভাবে এটির পুনরায় তৈরি করতে পারি সে সম্পর্কে ভাবছিলাম এবং আমি সম্পূর্ণ বোকা হয়ে উঠে এসেছি।

এলোমেলো নম্বর জেনারেটর কীভাবে কাজ করে?


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

বায়ুমণ্ডলীয় শব্দটি এলোমেলোভাবে গ্যারান্টিযুক্ত?


14
function rand() { return 4; /* determined by die roll - guaranteed to be random */ }
নীল

3
কাউকে এটি করতে হবে: xkcd.com/221 ;)
ভ্যালেরা কলুপাপেভ

উত্তর:


7

এলোমেলো নম্বর জেনারেটর (আরএনজি) সত্যই সিউডোরেন্ডম সংখ্যা উত্পন্ন করছে, যেহেতু সত্যিকারের সত্যিকারের একটি এলোমেলো সংখ্যা তৈরি করা অসম্ভব। কেবলমাত্র সত্যই এলোমেলো জিনিস শ্বরের কাজ, বজ্রপাতের মতো।

এই উইকিপিডিয়া নিবন্ধটি আপনাকে ব্যাখ্যায় সহায়তা করতে সক্ষম হতে পারে: http://en.wikedia.org/wiki/Random_number_generators


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


সতর্কতা, পরাজিত চিজ অ্যানালজি আহাদ!

প্রতিটি 'বীজ' বরফের বুকে এবং তারপরে এলোমেলো সংখ্যাকে বরফ কিউব হিসাবে ভাবেন। ধরা যাক আপনার 1000 টি বরফের বুকে রয়েছে এবং প্রতিটি বুকে 1000 টি বরফের কিউব রয়েছে। কাউন্টি মেলায়, তারা পানীয়ের জন্য ব্যবহার শুরু করার জন্য একটি বরফের বুক বেছে নেবে এবং তারা কেবল একটি আইস কিউব ব্যবহার করতে পারে। তবে, তাদের কেবল 1 ঘন ইঞ্চি থেকে বড় আইস কিউব প্রয়োজন। সুতরাং তারা সেই 1000 টি বুকের মধ্যে এলোমেলোভাবে একটি বুক পছন্দ করবে এবং তারপরে তারা এলোমেলোভাবে সেই বুকের অভ্যন্তরে একটি আইস কিউব চয়ন করবে'll এটি যদি তাদের আকারের জন্য কাজ করে তবে তারা এটি ব্যবহার করে। যদি তা না হয় তবে তারা এটি অন্যদের সাথে বুকের মধ্যে রেখে দেয়। যদি তারা এটিকে আরও মজাদার করে তুলতে চায় তবে তারা সম্পূর্ণ অজ্ঞতার জন্য আগেই বুক পরিবর্তন করে, আপনি যদি করেন!

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

লিনিয়ার কংগ্রেসিভ জেনারেটরগুলিও পরীক্ষা করে দেখুন, আপনি যদি নোংরা বিবরণ চান তবে এটি যা সন্ধান করছেন তার চেয়ে বেশি হতে পারে: http://en.wikedia.org/wiki/Linear_congruential_generator

আশাকরি এটা সাহায্য করবে!


7
কীভাবে অভিনয়গুলি godএলোমেলোভাবে হবে? তার উপরে, বাজও এলোমেলো নয়, এটি বিভিন্ন শর্ত দ্বারা নির্ধারিত একটি পথ অনুসরণ করে। এছাড়াও, সংখ্যার উত্পাদক দোভাষী মূলত অপ্রাসঙ্গিক।

7
আমি আইনী অর্থে God শ্বরের ক্রিয়াকলাপগুলি ব্যবহার করছি: en.wikedia.org/wiki/Act_of_God এগুলি এলোমেলো হিসাবে বিবেচিত হয় কারণ এগুলি আপাত মানুষের নিয়ন্ত্রণের বাইরে beyond

4
সুতরাং মূলত, এলোমেলো কিছু নেই। তবে এর জন্য প্রতিটি আপাতদৃষ্টিতে এলোমেলো ঘটনাটি প্রভাবিত হওয়া দরকার, যা আপনি সময়ের প্রথম দিকে পৌঁছালে কাজ করে না .... দেখে মনে হচ্ছে যে আমি কিছু দর্শনের ক্লাস নেব = ডি

6
@ কোরভিন, যতদূর আমরা জানি, তেজস্ক্রিয় ক্ষয়ের মতো কোয়ান্টাম ঘটনা বা উত্তেজিত পরমাণু দ্বারা ফোটন নির্গমন সত্যই এলোমেলো। যাইহোক, গণিতবিদ এবং দার্শনিকরা আসল এলোমেলো হওয়ার অর্থ কী তা নিয়ে তর্ক করেন। এবং সাধারণ লোকেরা যখন মনে করেন যে একটি কয়েন টসটি বেশ এলোমেলো, চটপটে মঞ্চের যাদুকর ( নিউজ.স্তানফোর্ড.ইডু / প্রাইস / ২০০৪ / ডিডিয়া কনস- .h .h এইচটিএমএল ) নিয়মিত 10 ফ্লিপে 10 টি মাথা পেতে পারে।
চার্লস ই। গ্রান্ট

1
@ চারেলস - একটি মুদ্রা টস এমনকি বাইনারি হেড / লেজ নয়, এটি আসলে মাথা / লেজ / প্রান্ত, সুতরাং একটি ভাল মঞ্চের যাদুকর এটি মাথা বা লেজ না নেমে আসতে পারে। * 8 ')
মার্ক বুথ

18

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

সিউডো-এলোমেলো সংখ্যার একটি দরকারী সম্পত্তি রয়েছে যা সত্য র্যান্ডম সংখ্যার হয় না: আপনি যখন একই বীজ ব্যবহার শুরু করেন আপনি একটি অভিন্ন ক্রম ফিরে পাবেন। এটি পরীক্ষার জন্য খুব সহজ হতে পারে।


আমি যদি আপনার দ্বিতীয় বিবৃতিটি সঠিকভাবে বুঝতে পারি: random(5332)সর্বদা এর সমান হবে random(5332)?

2
@ করভিন, না আমার অর্থ যদি আপনি কল করেন srand(5332)তবে পরবর্তী নম্বরটি randসর্বদা একই থাকবে।
মার্ক রান্সম

3
"এলোমেলোভাবে উপস্থিত হয়" -> সত্যিকারের এলোমেলো সংখ্যার মতো একই পরিসংখ্যানগত বৈশিষ্ট্য রয়েছে।

এলজিসি উইকিপিডিয়া লিঙ্কের জন্য +1, মাল্টিডিম্যানশনাল মন্টি-কার্লো সিমুলেশনগুলি করার সময় কেন সরল পিআরএনজির গুরুতর সীমাবদ্ধতা রয়েছে তার একটি দুর্দান্ত অ্যানিমেশন রয়েছে।
মার্ক বুথ

4

আপনি কি সিউডোরানডম বা এলোমেলো জন্য জিজ্ঞাসা করছেন? অন্যরা সিউডোরেন্ডম সম্পর্কে উত্তর দিয়েছিল, আমাকে র্যান্ডম সম্পর্কে কথা বলতে দাও।

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

OTOH, আপনি যদি কোনও এম্বেড থাকা সিস্টেম বিকাশকারীটির সাথে দেখা করেন তবে তারা এগুলি হাসবে। একটি মাইক্রোকন্ট্রোলার প্রোগ্রামিংয়ের সাধারণ উদ্দেশ্যে, কোনও 16-বিট অ্যানালগ-ডিজিটাল কনভার্টারের কম 4 বিট পড়া ভাসমান (সংযুক্ত না) পিনের পক্ষে যথেষ্ট ব্যান্ডউইদথের চেয়ে বেশি সঠিকভাবে এলোমেলো শব্দ উত্পন্ন হবে (ভোটের সময়কালের চেয়ে সংক্ষিপ্ততর "" গোলমাল "রিডআউট", এবং আসল আরএনজি রুটিন লেখার চেয়ে সহজ। এবং এডিসি বিবেচনা করে সাধারণত মাইক্রোকন্ট্রোলারদের সিলিকনে প্রয়োগ করা হয়, সাধারণত প্রয়োগ করা হয় এবং প্রায়শই এমন 8 টি চ্যানেল প্রয়োগ করা হয় যা থেকে আপনার আবেদনের জন্য সম্ভবত 5 টি প্রয়োজন, এটি ব্যবহারিকভাবে নিখরচায়।

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


2

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

চিন্তা করার আরও আকর্ষণীয় পরবর্তী প্রশ্নটি কীভাবে এটি বীজ দেয়? সময়? আইপি ঠিকানা? প্রভৃতি


বীজ যা আমাকে বিভ্রান্ত করছে, আমি এমন কোনও কিছুই ভাবতে পারি না যা সম্ভবত কোনও ধরণের প্যাটার্ন ছাড়াই ফাংশনটি বীজ করতে পারে, এবং যদি তা না হয় তবে এলোমেলো বীজটি প্রথম স্থানে উত্পন্ন করার কারণ কী!

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

1

প্রথমত, কার্যত সমস্ত rand()ফাংশন প্রকৃত এলোমেলোতা সরবরাহ করে না, বরং তারা তথাকথিত সিউডো-এলোমেলো সংখ্যা সরবরাহ করে।

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

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


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


-2

র্যান্ডম নাম্বারগুলি প্রক্রিয়া দ্বারা উত্পন্ন নম্বরগুলি যার আউটপুটটি অবিশ্বাস্য। অর্থাত্ পরের আউটপুটটি কী হতে পারে তা আমরা বলতে পারি না। আমরা পাশা কিছু সাধারণ উদাহরণ ফলাফল নিতে পারেন। যখন আমরা পাশা নিক্ষেপ করব তখন আউটপুট কী হতে পারে তা অনুমানযোগ্য।

এলোমেলো সংখ্যা 2 প্রকারের হয়। সত্য র্যান্ডম সংখ্যা 2. সিউডো এলোমেলো সংখ্যা।

র্যান্ডম সংখ্যাগুলি কীভাবে জেনারেট হয়


1
উত্তরের কোন অংশগুলি আপনার এবং আপনি যে উত্সটি উদ্ধৃত করেছেন সেগুলি থেকে কোনটি হাইলাইট করতে দয়া করে উদ্ধৃতি বিন্যাস ব্যবহার করুন। আপনার সমস্ত উত্তর যদি কোনও বাহ্যিক উত্স থেকে অনুলিপি / পেস্ট হয় তবে এটি এখানে ভাল উত্তর নয়।
মাদুর

এই অফারটি কোন কিছুরই সৃষ্টি পয়েন্ট উপর সারগর্ভ বলে মনে হচ্ছে না এবং পূর্বে 6 উত্তর ব্যাখ্যা
মশা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.