موضوع مقاله: تولید اعداد تصادفی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # تولید اعداد تصادفی | مقدمه: یک تاس قرمز دستگاه یا تابع یا تولید کننده‌ای است که یک یا یک سری اعداد را به صورت تصادفی تولید می‌کند. | ## بخش 1: تولید اعداد تصادفی | در ساده ترین مثال ممکن، با استفاده از تاس یک عدد از بین یک تا شش انتخاب شده و یا یک عدد ده رقمی با کنار هم قرار دادن نتیجه ده پرتاب، تولید می‌شود. می توان به جای تاس از هر وسیله ای دیگری که نمایانگر نوعی عدد باشد (مانند سکه) نیز استفاده کرد. اعداد تولید شده در این روش تصادفی هستند و به هیچ روش منطقی نمی‌ توان نتیجه را پیش بینی کرد. در کامپیوتر ها همه محاسبات بر مبنای منطق و صفر و یک می باشد بنابراین یک کامپیوتر توانایی ساخت یک عدد تصادفی حقیقی را ندارد؛ از این رو، کامپیوتر ها از توابع شبیه ساز اعداد تصادفی استفاده می کنند. این تولید کننده ها الگوی مشخصی دارند و با استفاده از ترکیب مواردی مختلف اعداد تصادفی را تولید و در کنار همدیگر قرار می دهند. به دلیل ماهیت اعداد تصادفی ( که از ناآگاهی در مورد عوامل ایجاد کننده آن منشا می گیرد)، می توان با دسترسی به پارامتر ها و عوامل موثر در ایجاد یک عدد مشخص، آن عدد را مجددا تولید کرد. با این حال الگوریتم و روش تولید این اعداد و نیز پارامتر های موثر به راحتی قابل تشخیص نیستند. نمونه ای از توابع شبه تصادفی، تابعی که با استفاده از زمان و تعدادی عملگر، یک دنباله اعداد را تولید می کند و به خروجی می فرستد. اگر دوباره از تابع دنباله ی اعداد تصادفی را بخواهیم، به علت تغییر زمان، خروجی متفاوت خواهد بود. اگر دوباره همان زمان اولیه را با همان الگوریتم به تابع دهیم، هر چند بار که تابع را فراخوانی کنیم، اعداد یکسانی را تولید خواهد کرد. هر چند در مورد توابع شبه تصادفی بررسی های فراوانی نمایانگر غیر قابل پیشبینی بودن این اعداد هستند؛ با این وجود از این متد ها در حوزه کریپتوکارنسی استفاده نمیشود. روش‌های فیزیکی برخی از پدیده‌های طبیعی الگوهای مناسبی برای تولید این اعداد هستند به عنوان مثال برخی پدیده‌های فیزیکی از جمله اختلالات حرارتی در دیودهای زنر (Zener Diodes) دارای رفتاری کاملاً تصادفی هستند و می‌توانند پایه‌ای برای تولید RNGهای فیزیکی و سخت‌افزاری باشند. همانطور که اشاره شد، الگوهای طبیعی جالبی برای تولید اعداد تصادفی وجود دارد؛ یک روش متداول استفاده از یک تابع درهم ساز (که ورودی اش جریانی از فریم‌های ویدئوییٍ یک منبع غیرقابل پیش‌بینی می‌باشد) است. | ## بخش 2: تولید اعداد تصادفی | روش‌های محاسبه‌ای تولیدکننده‌های اعداد شبه تصادفی الگوریتم‌هایی با قابلیت تولید اعداد تصادفی هستند هرچند اعداد تولید شده توسط آن‌ها به‌طور تناوبی تکرار می‌شود یا آنکه حافظه زیادی را اشغال می‌کنند. بسیاری از زبان‌های برنامه‌نویسی رایانه شامل توابع کتابخانه‌ای هستند که برای تولید اعداد تصادفی (یک بایت، کلمه ویا اعداداعشاری تصادفی با توزیع یکنواخت بین ۰ و ۱)طراحی شده‌اند. این توابع کتابخانه‌ای اغلب از لحاظ خصوصیات آماری ضعیف هستند و الگوهایشان پس از تنها ۱۰۰۰ رشته دوباره تکرار می‌شود، آن‌ها اغلب با زمان واقعی رایانه به عنوان seed راه‌اندازی می‌شوند. در واقع این توابع در بعضی موارد به تعداد کافی رویداد تصادفی تولید می‌کنند (مثلاً در بازی‌های ویدئویی) ولی وقتی رویدادهای تصادفی با کیفیت بالا مورد نظر است، ناکارآمد هستند (مثلاً در رمزنگاری). کاربردهای اعداد تصادفی شبیه‌سازی: وقتی یک رایانه برای شبیه‌سازی مفاهیم طبیعی مورد استفاده قرار می‌گیرد، اعداد تصادفی برای واقعی نشان دادن اجزا و رویدادها مورد نیاز هستند. شبیه‌سازی بسیاری از رشته هارا پوشش می‌دهد مثلاً فیزیک هسته‌ای نمونه‌برداری: آزمودن همه حالات ممکن برای یک سامانه اغلب غیر عملی است اما وضعیت و درستی یک نمونه تصادفی می‌تواند حالت کلی سیستم را شرح دهد. آنالیز عددی: روش‌های مبتکرانه‌ای برای حل مسائل عددی پیچیده ابداع شده‌است که از اعداد تصادفی استفاده می‌کنند. تصمیم‌گیری: گزارش‌هایی مبنی براینکه برخی مدیران اجرایی تصمیمات خود را برپایه پرتاب سکه یا دارت می‌گیرند وجود دارد. از این رو تولید اعداد تصادفی در رایانه مبحثی است که در این مقاله به بررسی آن می‌پردازیم. در زبان‌های برنامه‌نویسی گوناگون، تابعی وجود دارد که عددی تصادفی و معمولاً در بازهٔ صفر و یک تولید می‌کند. این تابع باید به گونه‌ای باشد که با چند بار تولید عدد تصادفی کاربر قادر به حدس زدن و پیدا کردن قاعده و الگویی در ایجاد این اعداد نشود. هر بار که این تابع صدا زده می‌شود، رایانه عدد تولید شدهٔ پیشین را به عنوان ورودی جدید تابع تولید عدد تصادفی می‌فرستد. هر بار که این تابع صدا زده شود، بر اساس ماهیت جبری ماشین و با توجه به مقدار اولیهٔ فرستاده شده به تابع تولید عدد تصادفی (seed) باید با یک دنباله از اعداد مشابه یکدیگر مواجه شویم. | ## بخش 3: تولید اعداد تصادفی | نوع اول آن ورودی دریافت نمی‌کند ولی نوع دوم آن یک عدد long به عنوان seed که همان ورودی اولیهٔ تابع تولید عدد تصادفی است، دریافت می‌کند. این کلاس از جاوا دارای متدهایی مانند next که برای دریافت عدد شبه تصادفی بعدی است، است. ما با گرفتن اعداد بعدی از دو شیٔ با دنباله‌ای کاملاً یکسان از اعداد مواجه می‌شویم. این تابع و در واقع روش پیش‌روی و به دست آوردن seed یا مقدار اولیهٔ بعدی در جاوا، برگرفته از روش پیشنهادی دونالد کنوت در کتاب هنر برنامه‌نویسی رایانه می‌باشد. یافتن مقدار اولیه در برنامه‌نویسی به عنوان مثال برای نوشتن یک بازی راه‌حل‌های گوناگونی مانند قرار دادن مقدار اولیه برابر با تعداد بازی‌های انجام شده بر روی رایانه یا ذخیرهٔ خروجی آخرین seed از برنامهٔ قبلی در حال اجرا است. مقدار اولیه راحت‌ترین راه حل این مسئله در دنیای کامپیوتر استفاده از زمان فعلی دستگاه است. برنامه‌ها می‌توانند زمان اولین اجرای خود را به عنوان seed به اولین باری که تابع تولید اعداد تصادفی صدا زده می‌شود، بفرستند. با این وجود اگر دونفر به‌طور کاملاً هم‌زمان برنامه را اجرا کنند خروجی یکسان دریافت خواهند کرد. با افزودن این معیارها و معیارهای مشابه دیگر به برنامه احتمال ایجاد تشابه را به سمت صفر کاهش می‌دهیم. این عدد long یک عدد ۶۴ بیتی در جاوا است که خود باعث محدود شدن seed و امکان به وجود آمدن اعداد تصادفی برابر را فراهم می‌سازد. اعداد شبه تصادفی اعداد تصادفی تولید شده توسط رایانه و محاسبات ریاضی اعداد کاملاً تصادفی نبوده و از اینرو این اعداد را اعداد شبه تصادفی می‌نامند. | ## جمع‌بندی | روش‌های فیزیکی و سخت‌افزاری تولید اعداد تصادفی امروزه تلاش‌های بسیاری برای استفاده از علم مکانیک کوانتوم به عنوان استاندارد طلایی تصادفی بودن در حال انجام است.