قمت بكتابة سكربت بسيط في بايثون يولد رقمًا عشوائيًا بين 0 و 9 ويكرر هذه العملية 100000 مرة.
لاحظت أن عدد مرات توليد الأرقام متقاربة جدًا فيما بينها. ألا يفترض أن تكون عشوائية ليس بينها أي تقارب ؟ هل يضع المفسر في الاعتبار الرقم العشوائي المولد سابقًا عند توليد رقم جديد ؟
التعليقات
البرنامج يقوم بتوليد رقم عشوائي بين 0 و 9 و يسجل كم كل رقم من هذه الأرقام طلع بعد 100000 محاولة
و النتيجة تظهر أن الأرقام متقاربة جدا و هذا يعني أنه في ال 100000 مرة التي عملت فيها أرقام عشوائية الأرقام توزعت بين 0 و ال9 بشكل متساوي تقريبا .
هذا يعني أن مولد الأرقام العشوائية في بايثون جيد لأن من شروط مولد الأرقام العشوائية أن تكون احتمالية أن ينتج أي خيار مساوية لأي خيار اخر و هذا ما حصل حيث أن الاحتمالات كلها تقريبا تحوم حول ال 10000
في العادة لغات البرمجة تقوم بتوليد ارقام شبه عشوائية باستعمال خوارزميات تسمى Pseudo-number generators. تهدف هذه الخوارزميات الى توليد ارقام تقارب في خصائصا الـ uniform distribution يعني ان يكون احتمال توليد اي رقم متساوي.
هذه الارقام المولدة ليست 100% عشوائية, حيث يمكن توليدها مرة اخرى وذلك لان هذه الخورزميات تقوم بتوليد هذه الارقام ابتداءا من قيمة ابتدائية تسمى: Seed او البذرة (إن صحت الترجمة). نفس الـ Seed تعطيك نفس السلسلة (وهذا مفيد في الـ Reproducibility للتحصل على نفس النتائج).
لهذا هناك خاصية اخرى يجب الانتباه اليها وهي الـ Periodicity او عدد الارقام التي يتم توليدها قبل رؤية نفس الرقم مرة اخرى. كلما كانت الـ Periodicity اطول كلما كانت الخوارزمية احسن.
في الخلاصة, للحصول اكبر عدد من الاختلاف يمكنك تغيير الـ Seed كل فترة, مثلا كل 20 رقم تغير الـ Seed باستعمال الدالة : random.seed