ما مدى "عشوائية" توليد الأرقام العشوائية في بايثون

  • S_D

قمت بكتابة سكربت بسيط في بايثون يولد رقمًا عشوائيًا بين 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

نعم من المفروض أن تتحصل على uniform distribution

ألا يفترض أن تكون عشوائية ليس بينها أي تقارب ؟

لا

عشوائي = بدون اي قانون او توقع

ربما لدي مفهوم مغلوط عن العشوائية والاحتمالات.

لكن في هذه الحالة عندما ينتج مثلًا الرقم 6 لخمس مرات متتالية فيفترض أن احتمال ظهوره مرة سادسة يقل لأني لاحظت المفسر وكأنه "يسعى" لأن ينتج جميع الارقام بعدد مرات متقاربة.