دورة تطوير بايثون المتقدمة
الفصل
>
المستوى
وحدات الرياضيات
وحدة العشوائية
الهدف
شغّل المحاكيات والاختبارات للتحضير لأي أخطاء أو عراقيل أثناء بناء الأراضي الزراعية باستخدام وحدة random.
عبر الملحق يوجد مكتب يتولى بعض المهام الإدارية المتعلقة بإجراءات الشحن والإسكان واللوجستيات للبناء. سيكون من الجيد تشغيل بعض السيناريوهات باستخدام البيانات المتاحة لحساب التأخيرات ومخاطر فشل المعدات. ولمساعدتك في ذلك، لدينا وحدة random، التي يتم تفعيلها باستخدام import random .
تُستخدم هذه الوحدة لتوليد مخرجات عشوائية بدرجات متفاوتة مما يسمح لك بتشغيل المحاكيات أو إضافة عناصر عشوائية إلى حساباتك/تمارينك. لأغراضنا سنستخدم الدوال التالية:
random.seed(): يحدد البذرة للتوليد العشوائي، ويأخذ وسيطاً واحداً وهو رقم البذرة الذي ترغب في استخدامه. هذا يعني أن أي دالة عشوائية تُستخدم مع بذرة معينة ستُرجع نفس النتائج عند استخدامها. ويُستخدم ذلك للتحكم في التوليد العشوائي وتمكين إعادة إنتاج النتائج.random.random(): ترجع رقماً عشرياً عشوائياً بين0و1.random.randint(): يأخذ وسيطين، ويولد رقماً بينهما، شاملاً الرقمين. تُرجع النتيجة كعدد صحيح.random.uniform(): مماثل للدالة السابقة لكنه يُرجع رقماً عشرياً عشوائياً بدلاً من عدد صحيح.random.triangular(): مماثل للدالة السابقة ولكنه يقبل وسيطاً إضافياً يسمى mode. يجب أن يكون mode رقماً يقع بين الرقمان المحددان للنطاق العشوائي. سيتم توليد رقم عشوائي قريب إحصائياً من mode بدلاً من أن يكون رقمًا عشوائيًا محايدًا بين الوسيطين الأول والثاني.random.choice(): يأخذ قائمة كوسيطة، ويختار عن طريق العشوائية عنصراً واحداً من القائمة.random.choices(): ينشئ قائمة عشوائية مأخوذة من قائمة أخرى، ويأخذ ثلاث وسائط: قائمة ترغب في أخذ عينة منها، قائمة أخرى تحدد الوزن الذي ترغب في اعتماده لكل عنصر من عناصر القائمة، وأخيراً متغير باسم k يمكنك تعيين قيمة له لتحديد عدد العينات التي تود أخذها من القائمة. يمكن أن يكون عدد العينات أكبر من عدد العناصر في القائمة نفسها حيث سيُولد عناصر مكررة بناءً على الأوزان المُحددة.random.shuffle(): يأخذ قائمة كوسيطة ويخلطها عشوائياً.random.sample(): يأخذ وسيطين، قائمة لأخذ عينة منها وعدد العينات التي ترغب في أخذها. وهو نسخة مبسطة منrandom.choices().
لبداية، توجه إلى علامة X الفاتحة وواجه المكتب، واستخدم الدالة read() لقراءة المذكرة وتحديد النقاط البيانية اللازمة لتشغيل محاكاة مع بعض التباين العشوائي. سنقوم بتشغيل محاكاة لفشل المعدات، حيث ستُعلمك المذكرة ما seed الذي يجب استخدامه للتوليد العشوائي بالإضافة إلى القائمة التي سيتم أخذ العينات منها. استخدم الدالة random.seed() وأدخل القيمة المذكورة في المذكرة.
توجه إلى علامة X الداكنة فوق السجادة الزرقاء وواجه المكتب، لدينا ثابت قائمة باسم sectors يحتوي على مناطق الأراضي الزراعية الموضحة في المذكرة السابقة. أنشئ متغيراً باسم selection لتخزين قيمة random.choice(), واستخدم ثابت القائمة sectors لاسترجاع عينة من القائمة، مثل: selection = random.choice(sectors). أنشئ متغيراً آخر باسم delay وخزن فيه قيمة random.random() لمحاكاة هامش الخطأ الناتج عن التأخيرات.
أنشئ متغيراً آخر باسم defect وخزن فيه قيمة random.randint() لتوليد نسبة مئوية لاحتمالية فشل المعدات. أضف كوسيطات 0 و 15 لتوليد نسبة تقع بين هذين الرقمين. بمجرد إعداد المتغيرات selection و delay و defect، استخدم الدالة المعدة مسبقاً write() مع تلك المتغيرات الثلاثة بهذا الترتيب لتسجيل النقاط البيانية التي يمكن استخدامها لاختبار المشاكل المحتملة في البناء.
توجه إلى علامة X الذهبية واستخدم الدالة read() لمواصلة تشغيل التنبؤات؛ ستحتوي البيانات في المذكرة على مواد وكميات وبيانات عينة. سنقوم بتشغيل محاكاة أكبر باستخدام البيانات الموجودة في المذكرة، بما في ذلك ثابت قائمة باسم materials الذي يخزن أنواع المواد الموضحة في المذكرة.
توجه إلى علامة X الداكنة فوق السجادة الحمراء وواجه المكتب. أنشئ قائمة باسم weights وخزن فيها القيم العددية الأربعة المذكورة في المذكرة والتي تتوافق مع المواد بالترتيب الذي تم عرضه. على سبيل المثال: weights = [400, 600 , -insert value-, -insert value-]
أنشئ متغيراً باسم simulation وخزن فيه نتيجة random.choices(). أضف ثابت القائمة materials، وقائمة weights التي أنشأتها، وقائمة باسم k تحتوي على وحدات العينات الموضحة في المذكرة، كما يلي: simulation = random.choices(materials, weights , k = insert sampling units ). استخدم متغير simulation مع الدالة المعدة مسبقاً write() لتسجيل البيانات.
توجه إلى علامة X الداكنة فوق السجادة الخضراء وواجه المكتب، استخدم الدالة random.shuffle() مع قائمة simulation التي أنشأتها لخلطها، كما يلي: random.shuffle(simulation). هذا سيخلط القائمة، ولا حاجة لتخزين القيمة حيث أنها تعدل القائمة مباشرة. أنشئ قائمة باسم sample لتخزين نتيجة random.sample(). أضف قائمة simulation كأول وسيطة، وللسيطة الثانية، اختر عينة من 3 للحصول على ثلاثة عناصر عشوائية كعينة، كما يلي: sample = random.sample(simulation, k=3). استخدم كل من simulation و sample مع الدالة المعدة مسبقاً write() لتسجيل العينات الجديدة.
وأخيراً، توجه إلى علامة X الداكنة فوق السجادة البنفسجية وواجه المكتب، أنشئ متغيراً باسم defect وخزن فيه نتيجة random.uniform(). أضف الوسيطين 3 و 10. هذه هي قيم العينات للمحاكاة الأصلية والعينة المأخوذة منها، وسنستخدمها لتوليد هوامش عيب المعدات المحتملة من العينة التي تم أخذها.
أنشئ متغيراً باسم losses وخزن فيه نتيجة random.triangular(). أضف القيم 200، 600 و 400. هذه هي أرقام المواد الموضحة في المذكرة السابقة، وتحديداً الأقل والأعلى والقيمة الأقرب للمتوسط. هذا يسمح لنا بالحصول على قيمة عشوائية مثلثية بناءً على عدد المواد المستخدمة في المحاكاة. استخدم قيم defect و losses مع الدالة المعدة مسبقاً write() للحصول على النتائج وإكمال المستوى.