تولید اعداد تصادفی با توزیع Exponential و Gaussian در SQL Server با استفاده از Ziggurat Algorithm

تولید اعداد تصادفی با توزیع Exponential و Gaussian در SQL Server با استفاده از Ziggurat Algorithm


الگوریتم های تولید عدد تصادفی به دو دسته ی اصلی تقسیم می شوند:
1- تولیدکننده های شبه تصادفی (PRNG): مزیتشان سرعت و قابلیت تکرار است، اما ضعفشان پیش بینی پذیری است.
2- تولیدکننده های تصادفی حقیقی (TRNG): مزیتشان غیرقابل پیش بینی هستند، اما کندتر و سخت تر پیاده سازی می شوند.

نمونه هایی از Pseudo-Random Number Generators:

  • Linear Congruential Generator (LCG)
  • Mersenne Twister (MT19937)
  • Xorshift / XORWOW
  • Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)
  • Ziggurat Algorithm

نمونه هایی از True Random Number Generators:

  • Thermal Noise (Johnson–Nyquist Noise)
  • Shot Noise
  • Avalanche Noise
  • Photon Detection Randomness
  • Quantum Tunneling
  • Radioactive Decay
  • Oscillator Jitter
  • Chaotic Circuits
  • Atmospheric Noise

اما بیشتر توسعه دهندگان نرم افزار و بازی یا متخصصان امنیت و رمزنگاری از الگوریتم های زیر استفاده می کنند:

  • توسعه دهندگان بازی و گرافیک: بیشتر از Xorshift.
  • دانشگاهی ها و پژوهشگران: بیشتر از Mersenne Twister و Ziggurat.
  •  برنامه نویسان قدیمی یا پروژه های ساده: LCG.
  • متخصصان امنیت و رمزنگاری: CSPRNG و نویز الکتریکی و کوانتومی.

در شبیه سازی، یادگیری ماشین و آمار به توزیع های خاص مثل Normal (Gaussian) یا Exponential نیاز هست که الگوریتم های قدیمی کند بوده و فقط اعداد Uniform تولید می کنند. برای همین Ziggurat Algorithm برای تولید اعداد تصادفی با توزیع های خاص (مثل Gaussian یا Exponential) محبوب شده است که مزایا و معایب به شرح زیر است:

مزایا:
1- سرعت بالا: به طور قابل توجهی سریع تر از روش های کلاسیک مثل Box-Muller.
2- کارآمدی: بیشتر نمونه ها با محاسبات ساده تولید می شوند و فقط درصد کمی نیاز به محاسبات پیچیده دارند.
3- انعطاف پذیر: برای توزیع های مختلف (Gaussian, Exponential) قابل استفاده است.
4- بهینه برای نرم افزار و سخت افزار: در کتابخانه های زبان های برنامه نویسی و حتی GPUها استفاده می شود.

معایب:
1- پیچیدگی پیاده سازی: نیاز به جداول از پیش محاسبه شده دارد.
2- حساسیت به دقت عددی: اگر جداول یا محاسبات دقیق نباشند، کیفیت آماری خروجی کاهش می یابد.
3- کمتر شهودی: نسبت به روش های ساده تر مثل Box-Muller، فهم و آموزش آن سخت تر است.

مقاله زیر توضیح می دهد که چگونه می توان در SQL Server با استفاده از الگوریتم زیگورات (Ziggurat Algorithm) و بدون نیاز به ابزارهای خارجی اعداد تصادفی با توزیع های نمایی (Exponential) و گاوسی (Gaussian/Normal) تولید کرد:
https://www.mssqltips.com/sqlservertip/11547/

سید حامد واحدی سید حامد واحدی     4 آذر 1404