ميرسين تويستر

Mersenne Twister هو مولد أرقام عشوائية زائفة للأغراض العامة (PRNG) تم تطويره في عام 1997 بواسطة ماكوتو ماتسوموتو (松本眞) وتاكوجي نيشيمورا (西村 拓士) . [ 1 ] [ 2 ] اسمها مشتق من اختيار ميرسين الأولي كطول فترتها.

تم تصميم مولد الأرقام العشوائية الزائفة Mersenne Twister خصيصًا لمعالجة معظم العيوب الموجودة في مولدات الأرقام العشوائية الزائفة السابقة.

تعتمد النسخة الأكثر شيوعًا من خوارزمية Mersenne Twister على عدد Mersenne الأولي219937-1{\displaystyle 2^{19937}-1}يستخدم التطبيق القياسي لذلك، MT19937، طول كلمة 32 بت . وهناك تطبيق آخر (بخمسة متغيرات [ 3 ] ) يستخدم طول كلمة 64 بت، وهو MT19937-64، والذي يُولّد تسلسلًا مختلفًا.

توزيع k

متتالية شبه عشوائيةxأنا{\displaystyle x_{i}}لw{\displaystyle w}أعداد صحيحة من نوع بت- ذات دورةP{\displaystyle P}يقال إنهك{\displaystyle k}- تم توزيعها علىv{\displaystyle v}دقة بتية واحدة إذا تحقق ما يلي:

يتركtruncv(x){\displaystyle \operatorname {trunc} _{v}(x)}يشير إلى العدد المكون من العدد الرئيسيv{\displaystyle v}أجزاء منx{\displaystyle x}وفكر فيP{\displaystyle P}التابعكv{\displaystyle kv}متجهات بتية
(truncv(xأنا)،truncv(xأنا+1)،...،truncv(xأنا+ك-1)){\displaystyle (\operatorname {trunc} _{v}(x_{i}),\operatorname {trunc} _{v}(x_{i+1}),\dots ,\operatorname {trunc} _{v}(x_{i+k-1}))}
ل0أنا<P{\displaystyle 0\leq i<P}ثم كل واحد من2كv{\displaystyle 2^{kv}}تتكرر التركيبات الممكنة للبتات بنفس عدد المرات في الفترة، باستثناء التركيبة المكونة من أصفار فقط والتي تحدث مرة واحدة أقل تكرارًا.

تفاصيل الخوارزمية

عرض مرئي لعملية توليد أعداد صحيحة شبه عشوائية من 32 بت باستخدام خوارزمية ميرسين تويستر. يُظهر قسم "استخراج العدد" مثالاً حيث تم إخراج العدد الصحيح 0 بالفعل، ويكون المؤشر عند العدد الصحيح 1. يتم تشغيل قسم "توليد الأعداد" عند إخراج جميع الأعداد الصحيحة.

بالنسبة لطول كلمة مكون من w بت، يقوم مولد الأرقام العشوائية Mersenne Twister بتوليد أعداد صحيحة في النطاق[0،2w-1]{\displaystyle [0,2^{w}-1]}.

تعتمد خوارزمية ميرسين تويستر على علاقة تكرارية خطية مصفوفية على الحقل المنتهيF2{\displaystyle \mathbb {F} _{2}}الخوارزمية عبارة عن مسجل إزاحة تغذية راجعة معمّم ملتوي [ 4 ] (GFSR الملتوي، أو TGFSR) ذو شكل طبيعي نسبي (TGFSR(R))، مع انعكاس بت الحالة وتلطيفه. الفكرة الأساسية هي تعريف سلسلةxأنا{\displaystyle x_{i}}من خلال علاقة تكرارية بسيطة، ثم إخراج أرقام على الشكل التاليxأناتي{\displaystyle x_{i}^{T}}، أينتي{\displaystyle T}هو قابل للعكسF2{\displaystyle \mathbb {F} _{2}}-مصفوفة تسمى مصفوفة التلطيف .

تتميز الخوارزمية العامة بالكميات التالية:

  • w{\displaystyle w}حجم الكلمة (بالبتات)
  • ن{\displaystyle n}درجة التكرار
  • م{\displaystyle m}: كلمة وسطى، إزاحة تُستخدم في علاقة التكرار التي تحدد السلسلةx{\displaystyle x}،1م<ن{\displaystyle 1\leq m<n}
  • ر{\displaystyle r}: نقطة فصل كلمة واحدة، أو عدد بتات قناع البت السفلي،0رw-1{\displaystyle 0\leq r\leq w-1}
  • أ{\displaystyle a}: معاملات مصفوفة الالتواء ذات الشكل الطبيعي النسبي
  • ب،ج{\displaystyle b,c}أقنعة بتات التلطيف TGFSR®
  • s،ت{\displaystyle s,t}: تحويلات بتات التلطيف TGFSR(R)
  • u،د،ل{\displaystyle u,d,l}: عمليات إزاحة بت/أقنعة إضافية لتطبيع بتات ميرسين تويستر

مع مراعاة أن2نw-ر-1{\displaystyle 2^{nw-r}-1}هو عدد أولي من نوع ميرسين. هذا الاختيار يبسط اختبار البدائية واختبار توزيع k اللازمين في البحث عن المعلمات.

المسلسلx{\displaystyle x}يُعرَّف بأنه سلسلة منw{\displaystyle w}كميات بتية ذات علاقة تكرارية:

xك+ن:=xك+م((xكu|xك+1ل)أ)ك=0،1،2،...{\displaystyle x_{k+n}:=x_{k+m}\oplus \left(({x_{k}}^{u}\mid {x_{k+1}}^{l})A\right)\qquad k=0,1,2,\ldots }

أين|{\displaystyle \mid }يشير إلى تسلسل متجهات البتات (مع البتات العليا على اليسار)،{\displaystyle \oplus }عملية XOR ( أو الحصرية الثنائية )،xكu{\displaystyle x_{k}^{u}}يعني الجزء العلويw-ر{\displaystyle w-r}أجزاء منxك{\displaystyle x_{k}}، وxك+1ل{\displaystyle x_{k+1}^{l}}يعني الأقلر{\displaystyle r}أجزاء منxك+1{\displaystyle x_{k+1}}.

قد يتم إزاحة جميع الرموز السفلية بواسطة-ن{\displaystyle -n}:

xك:=xك-(ن-م)((xك-نu|xك-(ن-1)ل)أ)ك=ن،ن+1،ن+2،...{\displaystyle x_{k}:=x_{k-(n-m)}\oplus \left(({x_{k-n}}^{u}\mid {x_{k-(n-1)}}^{l})A\right)\qquad k=n,n+1,n+2,\ldots }

أين يقع الآن الجانب الأيسر،xك{\displaystyle x_{k}}، هي القيمة التالية التي تم إنشاؤها في السلسلة من حيث القيم التي تم إنشاؤها في الماضي، والتي تقع على الجانب الأيمن.

التحولأ{\displaystyle A}يُعرَّف في الصيغة الطبيعية النسبية على النحو التالي:أ=(0أناw-1أw-1(أw-2،...،أ0)){\displaystyle A={\begin{pmatrix}0&I_{w-1}\\a_{w-1}&(a_{w-2},\ldots ,a_{0})\end{pmatrix}}} معأناw-1{\displaystyle I_{w-1}}كما هو الحال(w-1)(w-1){\displaystyle (w-1)(w-1)}مصفوفة الوحدة . يتميز الشكل الطبيعي النسبي بسهولة الضرب فيأ{\displaystyle A}يمكن التعبير عنها بكفاءة على النحو التالي: (تذكر أن ضرب المصفوفات يتم هنا فيF2{\displaystyle \mathbb {F} _{2}}وبالتالي، فإن عملية XOR الثنائية تحل محل عملية الجمع.xأ={x1x0=0(x1)أx0=1{\displaystyle {\boldsymbol {x}}A={\begin{cases}{\boldsymbol {x}}\gg 1&x_{0}=0\\({\boldsymbol {x}}\gg 1)\oplus {\boldsymbol {a}}&x_{0}=1\end{cases}}}أينx0{\displaystyle x_{0}}هو أدنى بت منx{\displaystyle x}.

كما هو الحال مع TGFSR(R)، يتم تطبيق تحويل تلطيفي متتالي على خوارزمية Mersenne Twister لتعويض انخفاض أبعاد التوزيع المتساوي (بسبب اختيار المصفوفة A في الصيغة الطبيعية النسبية). لاحظ أن هذا يكافئ استخدام المصفوفة A حيثأ=تي-1*أتي{\displaystyle A=T^{-1}*AT}لتي{\displaystyle T}مصفوفة قابلة للعكس ، وبالتالي فإن تحليل كثير الحدود المميز المذكور أدناه لا يزال ساريًا.

كما هو الحال معأ{\displaystyle A}نختار تحويلًا للتلطيف بحيث يكون سهل الحساب، وبالتالي لا نقوم فعليًا بإنشاءتي{\displaystyle T}نفسه. يُعرَّف هذا التعديل في حالة خوارزمية ميرسين تويستر على النحو التالي:

yx((xu) و د)yy((ys) و ب)yy((yت) و ج)zy(yل){\displaystyle {\begin{aligned}y&\equiv x\oplus ((x\gg u)~\And ~d)\\y&\equiv y\oplus ((y\ll s)~\And ~b)\\y&\equiv y\oplus ((y\ll t)~\And ~c)\\z&\equiv y\oplus (y\gg l)\end{aligned}}}

أينx{\displaystyle x}وهي القيمة التالية من السلسلة،y{\displaystyle y}هي قيمة وسيطة مؤقتة، وz{\displaystyle z}هي القيمة التي تُرجعها الخوارزمية، مع{\displaystyle \ll }و{\displaystyle \gg }أثناء عمليات الإزاحة الثنائية لليسار واليمين ، وو{\displaystyle \&}كما هو الحال في عملية AND الثنائية . تُضاف التحويلات الأولى والأخيرة لتحسين التوزيع المتساوي للبتات الأقل أهمية. من خصائص TGFSR،s+تw2-1{\displaystyle s+t\geq \left\lfloor {\frac {w}{2}}\right\rfloor -1}يلزم الوصول إلى الحد الأعلى للتوزيع المتساوي للبتات العليا.

معاملات MT19937 هي:

(w،ن،م،ر)=(32،624،397،31)أ=9908B0DF16(u،د)=(11،FFFFFFFF16)(s،ب)=(7،9D2C568016)(ت،ج)=(15،EFC6000016)ل=18{\displaystyle {\begin{aligned}(w,n,m,r)&=(32,624,397,31)\\a&={\textrm {9908B0DF}}_{16}\\(u,d)&=(11,{\textrm {FFFFFFFF}}_{16})\\(s,b)&=(7,{\textrm {9D2C5680}}_{16})\\(t,c)&=(15,{\textrm {EFC60000}}_{16})\\l&=18\\\end{aligned}}}

لاحظ أن تطبيقات Mersenne Twister ذات 32 بت تحتوي عمومًا على d =  FFFFFFFF  16. ونتيجة لذلك، يتم حذف d أحيانًا من وصف الخوارزمية، لأن عملية AND المنطقية مع d في هذه الحالة ليس لها أي تأثير.

معاملات MT19937-64 هي: [ 5 ]

(w،ن،م،ر)=(64،312،156،31)أ=B5026F5AA96619E916(u،د)=(29،555555555555555516)(s،ب)=(17،71D67FFFEDA6000016)(ت،ج)=(37،FFF7EEE00000000016)ل=43{\displaystyle {\begin{aligned}(w,n,m,r)=(64,312,156,31)\\a={\textrm {B5026F5AA96619E9}}_{16}\\(u,d)=(29,{\textrm {5555555555555555}}_{16})\\(s,b)=(17,{\textrm {71D67FFFEDA60000}}_{16})\\(t,c)=(37,{\textrm {FFF7EEE000000000}}_{16})\\l=43\\\end{aligned}}}

التهيئة

تتطلب عملية تنفيذ خوارزمية ميرسين تويستر مصفوفة من n قيمة، كل منها مكونة من w بت. ولتهيئة المصفوفة، تُستخدم قيمة ابتدائية مكونة من w بت لتوفيرx0{\displaystyle x_{0}}خلالxن-1{\displaystyle x_{n-1}}عن طريق الضبطx0{\displaystyle x_{0}}إلى قيمة البذرة وبعد ذلك تعيين

xأنا=و×(xأنا-1(xأنا-1(w-2)))+أنا{\displaystyle x_{i}=f\times (x_{i-1}\oplus (x_{i-1}\gg (w-2)))+i}

لأنا{\displaystyle i}من1{\displaystyle 1}لن-1{\displaystyle n-1}.

  • تعتمد القيمة الأولى التي تولدها الخوارزمية بعد ذلك علىxن{\displaystyle x_{n}}ليس علىx0{\displaystyle x_{0}}.
  • يشكل الثابت f معلمة أخرى للمولد، على الرغم من أنه ليس جزءًا من الخوارزمية نفسها.
  • قيمة f لـ MT19937 هي 1812433253.
  • قيمة f لـ MT19937-64 هي 6364136223846793005. [ 5 ]

كود C

#include <stdint.h>#define n 624 #define m 397 #define w 32 #define r 31 #define UMASK (0xffffffffUL << r) #define LMASK (0xffffffffUL >> (wr)) #define a 0x9908b0dfUL #define u 11 #define s 7 #define t 15 #define l 18 #define b 0x9d2c5680UL #define c 0xefc60000UL #define f 1812433253ULtypedef struct { uint32_t state_array [ n ]; // مصفوفة متجه الحالة int state_index ; // فهرس في مصفوفة متجه الحالة، 0 <= state_index <= n-1 دائمًا } mt_state ;void initialize_state ( mt_state * state , uint32_t seed ) { uint32_t * state_array = & ( state -> state_array [ 0 ]); state_array [ 0 ] = seed ; // قيمة ابتدائية مقترحة seed = 19650218UL for ( int i = 1 ; i < n ; i ++ ) { seed = f * ( seed ^ ( seed >> ( w -2 ))) + i ; // Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. state_array [ i ] = seed ; } state -> state_index = 0 ; }uint32_t random_uint32 ( mt_state * state ) { uint32_t * state_array = & ( state -> state_array [ 0 ]); int k = state -> state_index ; // يشير إلى موقع الحالة الحالية // 0 <= state_index <= n-1 دائمًا // int k = k - n; // يشير إلى الحالة قبل n تكرارًا // if (k < 0) k += n; // فهرسة دائرية modulo n // السطران السابقان لا يفعلان شيئًا في الواقع // للتوضيح فقط int j = k - ( n -1 ); // يشير إلى الحالة قبل n-1 تكرارًا if ( j < 0 ) j += n ; // فهرسة دائرية modulo nuint32_t x = ( state_array [ k ] & UMASK ) | ( state_array [ j ] & LMASK ); uint32_t xA = x >> 1 ; if ( x & 0x00000001UL ) xA ^= a ; j = k - ( n - m ); // يشير إلى الحالة قبل nm تكرار if ( j < 0 ) j += n ; // فهرسة دائرية modulo n x = state_array [ j ] ^ xA ; // حساب القيمة التالية في الحالة state_array [ k ++ ] = x ; // تحديث قيمة الحالة الجديدة if ( k >= n ) k = 0 ; // فهرسة دائرية modulo n state -> state_index = k ; uint32_t y = x ^ ( x >> u ); // تعديل y = y ^ (( y << s ) & b ); y = y ^ (( y << t ) & c ); uint32_t z = y ^ ( y >> l ); return z ; }

مقارنة مع نظام GFSR الكلاسيكي

من أجل تحقيق2نw-ر-1{\displaystyle 2^{nw-r}-1}الحد النظري الأعلى للفترة في جهاز قياس معدل ضربات القلب (GFSR) من النوع T ،ϕب(ت){\displaystyle \phi _{B}(t)}يجب أن تكون متعددة حدود أولية ،ϕب(ت){\displaystyle \phi _{B}(t)}كونها متعددة الحدود المميزة لـ:

ب=(0أناw00أناw00أناw0000أناw-رS000)م-يرمي{\displaystyle B={\begin{pmatrix}0&I_{w}&\cdots &0&0\\\vdots &&&&\\I_{w}&\vdots &\ddots &\vdots &\vdots \\\vdots &&&&\\0&0&\cdots &I_{w}&0\\0&0&\cdots &0&I_{w-r}\\S&0&\cdots &0&0\end{pmatrix}}{\begin{matrix}\\\\\leftarrow m{\text{-th row}}\\\\\\\\\end{matrix}}}
S=(0أنارأناw-ر0)أ{\displaystyle S={\begin{pmatrix}0&I_{r}\\I_{w-r}&0\end{pmatrix}}A}

يُحسّن تحويل الالتواء من أداء GFSR الكلاسيكي بالخصائص الرئيسية التالية:

  • تصل الفترة إلى الحد الأعلى النظري2نw-ر-1{\displaystyle 2^{nw-r}-1}(باستثناء إذا تمت تهيئته بالقيمة 0)
  • التوزيع المتساوي في n بُعد (على سبيل المثال، يمكن للمولدات الخطية المتطابقة في أفضل الأحوال إدارة توزيع معقول في خمسة أبعاد)

صفات

يُستخدم إعصار ميرسين على نطاق واسع جزئيًا بسبب مدته الطويلة جدًا219937-1{\displaystyle 2^{19937}-1}يتجاوز هذا الأداء أداء المولدات في حزم البرامج القديمة، مما يعالج مشاكل المولدات القديمة. [ 6 ] وهو مرخص بشكل متساهل وخالٍ من براءات الاختراع لجميع الإصدارات باستثناء CryptMT. بالإضافة إلى ذلك، يتم توزيع Mersenne Twister وفقًا لتوزيع k بدقة 32 بت لكل1ك623{\displaystyle 1\leq k\leq 623}مما يُحسّن جودة مخرجاته. مع ذلك، فإنه يستخدم مخزن بيانات كبير نسبيًا، يبلغ حوالي 2.5 كيلوبايت ، وهو غير آمن تشفيريًا إلا باستخدام متغيري TinyMT و CryptMT . يُستخدم CryptMT بدلًا من Mersenne Twister لأنه بعد مراقبة عدد كافٍ من التكرارات (624 في حالة MT19937، حيث أن هذا هو حجم متجه الحالة الذي تُنتج منه التكرارات اللاحقة)، يُمكن التنبؤ بجميع التكرارات اللاحقة للخوارزمية.

تُنتج التطبيقات عمومًا أرقامًا عشوائية أسرع من الطرق المُنفذة على مستوى العتاد. وقد وجدت دراسة أن مولد ميرسين تويستر يُنتج أرقامًا عشوائية ذات فاصلة عائمة 64 بت أسرع بحوالي عشرين مرة من مجموعة تعليمات RDRAND المُنفذة على مستوى العتاد والمُعتمدة على المعالج. [ 7 ] ومع ذلك، فإن الإنتاجية متوسطة وفقًا للمعايير الحديثة، إلا إذا تم استخدام متغير SFMT (المُناقش أدناه). [ 8 ]

ليس من المناسب عمومًا استخدام نسخ متعددة من مولد الأرقام العشوائية Mersenne Twister تختلف فقط في قيمة البذرة (وليس في المعاملات الأخرى) لمحاكاة مونت كارلو التي تتطلب مولدات أرقام عشوائية مستقلة، على الرغم من وجود طريقة لاختيار مجموعات متعددة من قيم المعاملات. [ 9 ] [ 10 ]

يُظهر اختبار Mersenne Twister أداءً جيدًا بشكل عام في اختبارات العشوائية الإحصائية ، بما في ذلك اختبارات Diehard ومعظم اختبارات TestU01 ، ولكن ليس جميعها، حيث يُظهر فشلين واضحين (التعقيد الخطي) في كل من Crush وBigCrush ضمن مجموعة TestU01. يعتمد هذا الاختبار، مثل اختبار Mersenne Twister، على...F2{\displaystyle {\textbf {F}}_{2}}-الجبر. [ 11 ]

قد يُظهر هذا الأسلوب انتشارًا ضعيفًا، مما يؤدي إلى توليد مخرجات تجتاز اختبارات العشوائية بعد فترة طويلة، إذا كانت الحالة الأولية غير عشوائية إلى حد كبير. يحدث هذا تحديدًا إذا احتوت الحالة الأولية على العديد من الأصفار. كما تحتوي النتائج المُولَّدة على متواليات فرعية تحتوي على أصفار أكثر من الآحاد، مما يزيد من خاصية الانتشار الضعيف، ويجعل التعافي من حالات الأصفار الكثيرة صعبًا. من نتائج الانتشار الضعيف أن نسختين من المُولِّد، بدأتا بحالات أولية متطابقة تقريبًا، ستُخرجان عادةً نفس المتوالية تقريبًا لعدة تكرارات، قبل أن تتباعدا في النهاية. وقد حسَّن تحديث خوارزمية MT لعام 2002 عملية التهيئة، بحيث أصبح البدء بمثل هذه الحالة أمرًا مستبعدًا للغاية. [ 12 ] ويُقال إن إصدار وحدة معالجة الرسومات (MTGP) أفضل من ذلك. [ 13 ]

المتغيرات

CryptMT عبارة عن خوارزمية تشفير متدفقة ومولد أرقام شبه عشوائية آمن تشفيرياً، يستخدم خوارزمية Mersenne Twister داخلياً. [ 14 ] [ 15 ] طُوِّرت هذه الخوارزمية بواسطة ماتسوموتو ونيشيمورا بالتعاون مع ماريكو هاجيتا وموتسو سايتو. وقد قُدِّمت إلى مشروع eSTREAM التابع لشبكة eCRYPT . [ 14 ] على عكس Mersenne Twister أو مشتقاتها الأخرى، فإن CryptMT حاصلة على براءة اختراع .

MTGP هي نسخة معدلة من خوارزمية Mersenne Twister مُحسّنة لوحدات معالجة الرسومات ، نُشرت بواسطة موتسو سايتو وماكوتو ماتسوموتو. [ 16 ] تُوسّع عمليات التكرار الخطي الأساسية من MT، وتُختار المعاملات بحيث تسمح للعديد من الخيوط بحساب التكرار بالتوازي، مع مشاركة مساحة الحالة لتقليل حمل الذاكرة. تُشير الورقة البحثية إلى تحسين التوزيع المتساوي مقارنةً بـ MT، وأداء بلغ 4.7 ​​مللي ثانية على وحدة معالجة رسومات قديمة (من عام 2008) ( Nvidia GTX260 بـ 192 نواة) لعدد صحيح عشوائي 32 بت  يبلغ 5×10⁷ .

SFMT ( خوارزمية Mersenne Twister السريعة الموجهة نحو SIMD ) هي نسخة معدلة من Mersenne Twister، تم تقديمها في عام 2006، [ 17 ] مصممة لتكون سريعة عند تشغيلها على SIMD 128 بت.

  • إنها أسرع بمرتين تقريبًا من ميرسين تويستر. [ 18 ]
  • يتمتع بخاصية توزيع متساوي أفضل لدقة البتات v مقارنة بـ MT ولكنه أسوأ من WELL ("التوزيع المتساوي الخطي طويل الفترة") .
  • يتميز هذا النظام بتعافي أسرع من الحالة الأولية ذات الفائض الصفري مقارنةً بنظام MT، ولكنه أبطأ من نظام WELL.
  • وهو يدعم فترات زمنية مختلفة من 2607  -  1 إلى 2216091  -  1.

يدعم SFMT تقنيتي Intel SSE2 و PowerPC AltiVec. كما يُستخدم أيضًا في الألعاب التي تعمل بمعالج Cell BE في جهاز PlayStation 3. [ 19 ]

TinyMT هو نوع مُعدّل من Mersenne Twister، اقترحه سايتو وماتسوموتو عام 2011. [ 20 ] يستخدم TinyMT مساحة حالة تبلغ 127 بت فقط، وهو انخفاض كبير مقارنةً بمساحة الحالة الأصلية التي تبلغ 2.5 كيلوبايت. ومع ذلك، فإن دورته تبلغ2127-1{\displaystyle 2^{127}-1}وهي أقصر بكثير من النسخة الأصلية، لذا لا يوصي بها المؤلفون إلا في الحالات التي تكون فيها الذاكرة محدودة للغاية.

التطبيقات

يستخدم البرنامج التالي مولد الأرقام العشوائية الزائفة Mersenne Twister كمولد أرقام عشوائية زائفة افتراضي:

وهو متوفر أيضًا في Apache Commons ، [ 47 ] وفي مكتبة C++ القياسية (منذ C++11[ 48 ] [ 49 ] وفي Mathematica . [ 50 ] كما تتوفر تطبيقات إضافية في العديد من مكتبات البرامج، بما في ذلك مكتبات Boost C++ ، [ 51 ] ومكتبة CUDA ، [ 52 ] ومكتبة NAG العددية . [ 53 ]

يُعدّ مولد الأرقام العشوائية Mersenne Twister أحد مولدي الأرقام العشوائية الزائفة (PRNGs) في برنامج SPSS : يُستخدم المولد الآخر فقط للتوافق مع البرامج القديمة، ويُقال إن Mersenne Twister "أكثر موثوقية". [ 54 ] وبالمثل، يُعدّ Mersenne Twister أحد مولدات الأرقام العشوائية الزائفة في برنامج SAS : أما المولدات الأخرى فهي أقدم وقد تم إيقاف استخدامها. [ 55 ] يُعدّ Mersenne Twister مولد الأرقام العشوائية الزائفة الافتراضي في برنامج Stata ، بينما يُستخدم المولد الآخر KISS للتوافق مع الإصدارات القديمة من Stata. [ 56 ]

البدائل

يوفر مولد بديل، WELL ("مولد خطي متساوي التوزيع طويل المدى")، استعادة أسرع، وعشوائية متساوية، وسرعة مماثلة تقريبًا. [ 57 ]

تُعد مولدات xorshift الخاصة بمارساجليا ومتغيراتها الأسرع في فئة LFSRs. [ 58 ]

MELGs ذات 64 بت ("64 بت موزعة بالتساوي إلى أقصى حد"F2{\displaystyle {\textbf {F}}_{2}}تُعتبر المولدات الخطية ذات الفترة الأولية لمرسين مُحسَّنة تمامًا من حيث خصائص توزيع k . [ 59 ]

تُعد عائلة ACORN (التي نُشرت عام 1989) مولد أرقام عشوائية زائفة آخر موزع k ، والذي يُظهر سرعة حسابية مماثلة لـ MT، وخصائص إحصائية أفضل لأنه يفي بجميع معايير TestU01 الحالية (2019)؛ عند استخدامه مع خيارات مناسبة للمعلمات، يمكن أن يكون لـ ACORN فترة ودقة طويلة بشكل تعسفي.

تُعد عائلة PCG مولدًا أحدث للفترات الطويلة، مع تحسين موضع التخزين المؤقت، وتحيز أقل قابلية للكشف باستخدام أساليب التحليل الحديثة. [ 60 ]

مراجع

  1. ماتسوموتو، م.؛ نيشيمورا، ت. (1998). "ميرسين تويستر: مولد أرقام شبه عشوائية منتظمة موزعة بالتساوي في 623 بُعدًا" . معاملات ACM في النمذجة والمحاكاة الحاسوبية . 8 (1): 3-30 . CiteSeerX 10.1.1.215.1141 . doi : 10.1145/272991.272995 . S2CID 3332028 .  
  2. ↑ انظر على سبيل المثال Marsland S. (2011) Machine Learning ( CRC Press )، §4.1.1. انظر أيضًا قسم "التبني في أنظمة البرمجيات".
  3. جون سافارد. "مُحَوِّل ميرسين" . في ورقة بحثية لاحقة، نُشرت عام 2000، تم تقديم خمسة أشكال إضافية لمُحَوِّل ميرسين ذي دورة 2^19937-1. صُمِّمت جميع الأشكال الخمسة ليتم تنفيذها باستخدام حسابات 64 بت بدلاً من حسابات 32 بت.
  4. ماتسوموتو، م.؛ كوريتا، ي. (1992). "مولدات GFSR الملتوية" . معاملات ACM في النمذجة والمحاكاة الحاسوبية . 2 (3): 179-194 . doi : 10.1145/146382.146383 . S2CID 15246234 . 
  5. 1 2 "std::mersenne_twister_engine" . توليد أرقام شبه عشوائية . تم الاسترجاع في 20 يوليو 2015 .
  6. ملاحظة: 2 19937 يساوي تقريبًا 4.3 × 10 6001 ؛ وهذا أكبر بكثير من العدد المقدر للجسيمات في الكون المرئي ، والذي يبلغ 10 87 .
  7. روت، ماثيو (10 أغسطس/آب 2017). "تخليق تجمعات الأقزام فائقة البرودة ذات التوهجات الراديوية" . المجلة الفيزيائية الفلكية . 845 (1): 66. arXiv : 1707.02212 . Bibcode : 2017ApJ...845...66R . doi : 10.3847/1538-4357/aa7ede . S2CID 118895524 . 
  8. "خوارزمية ميرسين تويستر السريعة الموجهة نحو SIMD (SFMT): أسرع بمرتين من خوارزمية ميرسين تويستر" . الجمعية اليابانية لتعزيز العلوم . تاريخ الاسترجاع: 27 مارس 2017 .
  9. ماكوتو ماتسوموتو؛ تاكوجي نيشيمورا. "الإنشاء الديناميكي لمولدات الأرقام شبه العشوائية" (ملف PDF) . تم الاطلاع عليه بتاريخ 19 يوليو 2015 .
  10. هيروشي هاراموتو؛ ماكوتو ماتسوموتو؛ تاكوجي نيشيمورا؛ فرانسوا بانيتون؛ بيير ليكويير. "قفزة فعالة للأمام لمولدات الأرقام العشوائية الخطية من النوع F2" (ملف PDF) . تم الاطلاع عليه بتاريخ 12 نوفمبر 2015 .
  11. P. L'Ecuyer و R. Simard، " TestU01: "مكتبة AC للاختبار التجريبي لمولدات الأرقام العشوائية معاملات ACM في البرمجيات الرياضية ، 33، 4، المقالة 22 (أغسطس 2007).
  12. "mt19937ar: Mersenne Twister with improved initialization" . hiroshima-u.ac.jp . تم الاطلاع عليه بتاريخ 4 أكتوبر 2015 .
  13. فوغ، أغنر (1 مايو 2015). "مولدات الأرقام شبه العشوائية للمعالجات المتجهة والمعالجات متعددة النوى" . مجلة الأساليب الإحصائية التطبيقية الحديثة . 14 (1): 308-334 . doi : 10.22237/jmasm/1430454120 .
  14. 1 2 "CryptMt و Fubuki" . eCRYPT . مؤرشف من الأصل بتاريخ 2012-07-01 . تم الاطلاع عليه بتاريخ 2017-11-12 .
  15. ^ ماتسوموتو، ماكوتو؛ نيشيمورا، تاكوجي؛ هاجيتا، ماريكو؛ سايتو، موتسو (2005). “التشفير Mersenne Twister و Fubuki Stream / Block Cipher” (PDF) .
  16. موتسو سايتو؛ ماكوتو ماتسوموتو (2010). "متغيرات من ميرسين تويستر مناسبة لمعالجات الرسومات". arXiv : 1005.4973v3 [ cs.MS ].
  17. "خوارزمية تويستر ميرسين السريعة الموجهة نحو SIMD (SFMT)" . hiroshima-u.ac.jp . تم الاطلاع عليه بتاريخ 4 أكتوبر 2015 .
  18. "SFMT: مقارنة السرعة" . hiroshima-u.ac.jp . تم الاطلاع عليه بتاريخ 4 أكتوبر 2015 .
  19. "رخصة بلاي ستيشن 3" . scei.co.jp. تم الاطلاع عليه بتاريخ 4 أكتوبر 2015 .
  20. "Tiny Mersenne Twister (TinyMT)" . hiroshima-u.ac.jp . تم الاطلاع عليه بتاريخ 4 أكتوبر 2015 .
  21. "رابط عشوائي" . دليل مرجعي للغة الحوار . تم الاطلاع عليه بتاريخ 4 يونيو 2020 .
  22. "RANDOMU (مرجع IDL)" . مركز وثائق Exelis VIS . تم الاسترجاع في 23 أغسطس 2013 .
  23. "مولدات الأرقام العشوائية" . عرض مهام CRAN: توزيعات الاحتمالات . تم الاسترجاع في 29-05-2012 .
  24. "توثيق فئة "عشوائي" .
  25. "عشوائي" . وثائق فري باسكال . تم الاطلاع عليه بتاريخ 28-11-2013 .
  26. "mt_rand — توليد قيمة عشوائية أفضل" . دليل PHP . تم الاطلاع عليه بتاريخ 2016-03-02 .
  27. "ملاحظات إصدار NumPy 1.17.0 — دليل NumPy v1.21" . numpy.org . تم الاطلاع عليه بتاريخ 29-06-2021 .
  28. "9.6 عشوائي — توليد أرقام شبه عشوائية" . وثائق بايثون الإصدار 2.6.8 . تم الاطلاع عليه بتاريخ 29-05-2012 .
  29. "8.6 عشوائي — توليد أرقام شبه عشوائية" . وثائق بايثون الإصدار 3.2 . تم الاطلاع عليه بتاريخ 29-05-2012 .
  30. "random — توليد أرقام شبه عشوائية — وثائق بايثون 3.8.3" . وثائق بايثون 3.8.3 . تم الاطلاع عليها بتاريخ 23 يونيو 2020 .
  31. "خيارات التصميم والتوسعات" . دليل مستخدم CMUCL . تم الاطلاع عليه بتاريخ 2014-02-03 .
  32. "حالات عشوائية" . دليل ECL . تم الاطلاع عليه بتاريخ 20-09-2015 .
  33. "توليد الأرقام العشوائية" . دليل مستخدم SBCL .
  34. "الأرقام العشوائية · لغة جوليا" . docs.julialang.org . تم الاطلاع عليه بتاريخ 21-06-2022 .
  35. "الأرقام العشوائية: دليل مرجعي لـ GLib" .
  36. "خوارزميات الأرقام العشوائية" . GNU MP . تم الاسترجاع في 21-11-2013 .
  37. "16.3 مصفوفات الأدوات المساعدة الخاصة" . برنامج جنو أوكتاف . دالة مدمجة: rand
  38. "متغيرات البيئة ذات الأرقام العشوائية" . مكتبة جنو العلمية . تم الاطلاع عليه بتاريخ 24-11-2013 .
  39. ميلارد، ج. (2014)، "حول دقة الإجراءات الإحصائية في مايكروسوفت إكسل 2010"، الإحصاءات الحاسوبية ، 29 (5): 1095-1128 ، CiteSeerX 10.1.1.455.5508 ، doi : 10.1007/s00180-014-0482-5 ، S2CID 54032450  .
  40. "مرجع لغة GAUSS 14" (ملف PDF) .
  41. " موحد ". مرجع وظائف Gretl .
  42. "مولد أرقام عشوائية جديد - ميرسين تويستر 64 بت" .
  43. "توزيعات الاحتمالات - دليل مرجعي من Sage الإصدار 7.2: الاحتمالات" .
  44. "grand - أرقام عشوائية" . مساعدة Scilab .
  45. "مولد الأرقام العشوائية" . مساعدة Maple عبر الإنترنت . تم الاطلاع عليه بتاريخ 21-11-2013 .
  46. "خوارزميات توليد الأرقام العشوائية" . مركز التوثيق، ماث ووركس .
  47. "توليد البيانات" . دليل مستخدم Apache Commons Math .
  48. "توليد الأرقام العشوائية في لغة C++11" (ملف PDF) . مؤسسة لغة C++ القياسية .
  49. "std::mersenne_twister_engine" . توليد أرقام شبه عشوائية . تم الاسترجاع في 25-09-2012 .
  50. وثائق برنامج Mathematica
  51. "boost/random/mersenne_twister.hpp" . مكتبات Boost C++ . تم الاطلاع عليه بتاريخ 29-05-2012 .
  52. "نظرة عامة على واجهة برمجة تطبيقات المضيف" . وثائق مجموعة أدوات CUDA . تم الاطلاع عليها بتاريخ 2016-08-02 .
  53. "G05 – مولدات الأرقام العشوائية" . مقدمة فصل مكتبة NAG . تم الاطلاع عليه بتاريخ 29-05-2012 .
  54. "مولدات الأرقام العشوائية" . إحصائيات IBM SPSS . تم الاسترجاع في 21-11-2013 .
  55. "استخدام دوال الأرقام العشوائية" . مرجع لغة SAS . تم الاطلاع عليه بتاريخ 21-11-2013 .
  56. مساعدة Stata: set rng -- حدد مولد الأرقام العشوائية (RNG) المراد استخدامه
  57. P. L'Ecuyer, "مولدات الأرقام العشوائية الموحدة"، الموسوعة الدولية للعلوم الإحصائية ، لوفريك، ميودراغ (محرر)، سبرينغر-فيرلاغ، 2010.
  58. "مولدات xorshift*/xorshift+ ومواجهة مولدات الأرقام العشوائية الزائفة" .
  59. هاراسي، س.؛ كيموتو، ت. (2018). "تنفيذ مولدات F2 الخطية ذات التوزيع المتساوي الأقصى 64 بت بفترة أولية لمرسين" . معاملات ACM في البرمجيات الرياضية . 44 (3): 30:1–30:11. arXiv : 1505.06582 . doi : 10.1145/3159444 . S2CID 14923086 . 
  60. "ورقة PCG" . 27 يوليو 2017.

للمزيد من القراءة

  • هاراس، س. (2014)، "حولF2{\displaystyle \mathbb {F} _{2}}العلاقات الخطية لمولدات الأرقام العشوائية الزائفة من نوع Mersenne Twister، الرياضيات والحاسبات في المحاكاة ، 100 : 103-113 ، arXiv : 1301.5435 ، doi : 10.1016/j.matcom.2014.02.002 ، S2CID 6984431 .
  • هاراسي، س. (2019)، "تحويل خوارزمية ميرسين تويستر إلى أعداد الفاصلة العائمة ذات الدقة المزدوجة"، الرياضيات والحاسبات في المحاكاة ، 161 : 76-83 ، arXiv : 1708.06018 ، doi : 10.1016/j.matcom.2018.08.006 ، S2CID 19777310 .