آخرین بروزرسانی 17 روز قبل

ژنراتور شماره تصادفی شبه (PRNG) چیست؟

آشنایی با دنیای اعداد تصادفی شبه تصادفی: چرا کامپیوترها واقعاً تصادفی نیستند؟

سلام دوستان! امروز می‌خوایم در مورد یک موضوع جالب و البته کمی فنی صحبت کنیم: تولید کننده‌های اعداد تصادفی شبه تصادفی، یا به اختصار PRNG. شاید با خودتون فکر کنید کامپیوترها که این همه کار انجام میدن، تولید یک عدد تصادفی دیگه کاری نداره! ولی قضیه از اون چیزی که فکر می‌کنید پیچیده‌تره.

اول از همه، باید بدونیم که کامپیوترها ماشین‌های deterministic هستند، یعنی عملکردشون کاملاً قابل پیش‌بینی هست. اگه یک ورودی مشخص بهشون بدید، همیشه همون خروجی رو تولید می‌کنند. پس چطور می‌تونن عدد تصادفی تولید کنند؟

اینجاست که PRNGها وارد صحنه میشن. PRNG مخفف "Pseudo-Random Number Generator" هست، یعنی "تولید کننده اعداد شبه تصادفی". این یعنی این الگوریتم‌ها در واقع اعداد کاملا تصادفی تولید نمی‌کنند، بلکه یک دنباله از اعداد رو تولید می‌کنند که ظاهرشون تصادفی هست.

به بیان ساده‌تر، PRNGها از یک فرمول ریاضی استفاده می‌کنند تا یک دنباله از اعداد رو تولید کنند. این فرمول بر اساس یک "دانه" (seed) اولیه کار می‌کنه. اگه دانه اولیه یکسان باشه، PRNG همیشه همون دنباله از اعداد رو تولید می‌کنه.

چرا از اعداد شبه تصادفی استفاده می‌کنیم؟

خب، اگه اعداد PRNG واقعاً تصادفی نیستند، پس چرا ازشون استفاده می‌کنیم؟ چند دلیل مهم داره:

  • سرعت: تولید اعداد شبه تصادفی خیلی سریع‌تر از تولید اعداد تصادفی واقعی هست.
  • تکرارپذیری: همونطور که گفتیم، با دادن یک دانه اولیه یکسان، می‌تونیم همون دنباله از اعداد رو دوباره تولید کنیم. این برای تست و اشکال‌زدایی نرم‌افزارها خیلی مفیده. برای مثال، فرض کنین یک بازی دارید که از اعداد تصادفی برای تولید مراحل استفاده میکنه. اگه باگ (bug) داشته باشه، با داشتن دانه اولیه میتونید دقیقا همون مرحله رو دوباره ایجاد کنید و باگ رو برطرف کنید.
  • کنترل: در بعضی موارد، ما نیاز داریم که روی اعداد تصادفی تولید شده کنترل داشته باشیم. PRNG این امکان رو به ما میده.

انواع PRNG:

PRNGهای مختلفی وجود دارند، هر کدوم با الگوریتم و ویژگی‌های خاص خودشون. بعضی از رایج‌ترین اونها عبارتند از:

  • Linear Congruential Generator (LCG): یکی از ساده‌ترین و قدیمی‌ترین PRNGها. ولی به دلیل سادگی، امنیت بالایی نداره.
  • Mersenne Twister: یک PRNG محبوب که برای بازی‌ها و شبیه‌سازی‌ها استفاده میشه. دوره تناوب بسیار طولانی داره و اعداد نسبتاً تصادفی‌تری تولید می‌کنه.
  • Xorshift: یک PRNG سریع و کارآمد که برای کارهای مختلف استفاده میشه.

برای اینکه بهتر متوجه بشید، یک مثال خیلی ساده از یک PRNG (البته خیلی خیلی ساده و برای آموزش!) رو اینجا میاریم:

def simple_prng(seed):
    a = 1664525
    c = 1013904223
    m = 2**32
    seed = (a * seed + c) % m
    return seed

این کد در واقع یک تابع هست که یک دانه اولیه (seed) رو می‌گیره و یک عدد شبه تصادفی جدید تولید می‌کنه. هر بار که این تابع رو صدا بزنید، یک عدد جدید تولید می‌شه که بر اساس عدد قبلی محاسبه شده. البته این فقط یک مثال ساده هست و برای کارهای جدی مناسب نیست!

جدول مقایسه‌ای:

ویژگی PRNG اعداد تصادفی واقعی
سرعت بالا پایین
تکرارپذیری دارد ندارد
قابل پیش‌بینی بله (اگر دانه اولیه رو بدونیم) خیر
منابع تولید الگوریتم پدیده‌های فیزیکی (مثل نویز حرارتی)

کاربردهای PRNG:

PRNGها کاربردهای خیلی زیادی دارند، از جمله:

  • بازی‌های کامپیوتری: تولید اتفاقات تصادفی در بازی‌ها، مثل مکان دشمنان، آیتم‌ها و غیره.
  • شبیه‌سازی: مدل‌سازی سیستم‌های پیچیده، مثل ترافیک شهری، بازارهای مالی و غیره.
  • رمزنگاری: تولید کلیدهای رمزنگاری (البته PRNGهایی که از نظر امنیتی قوی هستند). این موضوع کمی پیچیده‌تر هست و در درس‌های دیگه بیشتر در موردش صحبت می‌کنیم.
  • نمونه‌برداری: انتخاب تصادفی نمونه‌ها از یک مجموعه داده.

در این قسمت در مرورد کاربرد PRNG در شببه سازی صحبت می کنیم. تصور کنید می‌خواهید ترافیک یک چهارراه رو شبیه‌سازی کنید. می‌تونید از یک PRNG استفاده کنید تا زمان رسیدن ماشین‌ها، جهت حرکتشون و سرعتشون رو به‌صورت تصادفی تعیین کنید. با تغییر دانه اولیه، هر بار یک شبیه‌سازی متفاوت خواهید داشت، اما در عین حال، می‌تونید با استفاده از یک دانه اولیه مشخص، یک شبیه‌سازی خاص رو دوباره اجرا کنید و نتایج رو با دقت بررسی کنید. این قابلیت تکرارپذیری برای تست و بهبود مدل شبیه‌سازی خیلی مفیده. همچنین با استفاده از PRNG می توان در یک محیط مجازی به عنوان یک ربات تصممی های تصادفی برای تست برنامه های خودمان گرفت.

خلاصه:

PRNGها ابزارهای قدرتمندی هستند که به ما امکان میدن اعداد تصادفی شبه تصادفی رو به سرعت و با قابلیت تکرار تولید کنیم. با اینکه این اعداد کاملاً تصادفی نیستند، ولی برای بسیاری از کاربردها کافی و مناسب هستند. فهمیدن نحوه کارکرد PRNGها و محدودیت‌هاشون برای هر کسی که با کامپیوتر کار می‌کنه، خیلی مهمه.

PRNG عدد تصادفی شبه تصادفی الگوریتم دانه اولیه تولید عدد بازی شبیه‌سازی رمزنگاری
PRNG دقیقا چیست؟
PRNG یک الگوریتم هست که دنباله‌ای از اعداد رو تولید می‌کنه که ظاهرشون تصادفی هست، اما در واقع به صورت قطعی و بر اساس یک دانه اولیه تولید می‌شن.
فرق PRNG با تولید کننده اعداد تصادفی واقعی چیه؟
تولید کننده‌های اعداد تصادفی واقعی از پدیده‌های فیزیکی (مثل نویز حرارتی) برای تولید اعداد استفاده می‌کنند که کاملاً تصادفی هستند. PRNGها از یک الگوریتم ریاضی استفاده می‌کنند که باعث میشه اعداد تولید شده شبه تصادفی باشند.
آیا استفاده از PRNG در رمزنگاری امن هست؟
بستگی داره! بعضی از PRNGها از نظر امنیتی قوی هستند و برای تولید کلیدهای رمزنگاری مناسب هستند، ولی بعضی دیگه امنیت پایینی دارند و نباید در رمزنگاری استفاده بشن.
چطور می‌تونم یک PRNG خوب رو انتخاب کنم؟
انتخاب PRNG مناسب بستگی به کاربرد شما داره. برای بازی‌ها و شبیه‌سازی‌ها، Mersenne Twister معمولاً انتخاب خوبیه. برای رمزنگاری، باید از PRNGهایی استفاده کنید که از نظر امنیتی قوی هستند و توسط متخصصان تایید شده‌اند.
آیا استفاده از دانه اولیه یکسان باعث ایجاد مشکل میشه؟
بله! اگه از دانه اولیه یکسان استفاده کنید، PRNG همیشه همون دنباله از اعداد رو تولید می‌کنه. این می‌تونه باعث مشکلات امنیتی بشه، به‌خصوص در رمزنگاری. به همین دلیل، مهمه که از یک دانه اولیه منحصر به فرد و غیرقابل پیش‌بینی استفاده کنید.
مخفف Pseudo Random Number Generator چیست؟
مخفف Pseudo Random Number Generator کلمه PRNG می باشد.
PRNG مخفف چیست؟
PRNG مخفف Pseudo Random Number Generator می باشد.

کلمه PRNG مخفف چیست؟

وقتی به PRNG به عنوان مخفف Pseudo Random Number Generator اشاره می کنیم، منظور این است که PRNG با گرفتن حروف اولیه هر کلمه مهم در Pseudo Random Number Generator تشکیل می شود. این فرآیند عبارت اصلی را به شکلی کوتاه تر و قابل مدیریت تر فشرده می کند و در عین حال معنای اصلی خود را حفظ می کند. بر اساس این تعریف، PRNG مخفف Pseudo Random Number Generator است.

به اشتراک گذاشتن این مطلب در شبکه های اجتماعی

امتیاز شما به این مطلب

امتیاز: 5 از 5 (مجموع 1 رای)

اولین نفری باشید که در مورد این مقاله نظر می دهید!

7598- V8
Terms & Conditions | Privacy Policy

techfeed.ir© 2024 All rights reserved