برنامج
لمحاكاة إلقاء العملة المعدنية
لدراسة
احتمال الحصول على 100 صورة متتالية
تطرقت
في كتاب "خرافة داروين" إلى هذه المسألة، كمدخل بسيط
ومختصر لكيفية حساب الاحتمالات، أدلل به على استحالة أن تصنع الصدفة أي شيء مركّب،
مفيدا كان أو غير مفيد.. وأثبتّ رياضيا أن الحصول على مئة صورة متتالية عند إلقاء
العملة المعدنية هو أمر مستحيل، حتى لو ظل كل سكان كوكب الأرض البالغ عددهم 7
مليارات إنسان، يلقون العملة المعدنية بمعدل مرة في الثانية لمدة 300 مليار سنة!!
السبب
في هذا أن هذا الاحتمال يساوي 1/2 أس 100، أي 1/1267650600228229401496703205376،
وهو يساوي صفرا بلا جدال، لأن الرقم الموجود في المقام أكبر من تصوراتنا العلمية
للمالانهاية، ويعجز الحاسوب عن محاكاته ولو بمجرد العد (أثبتّ هذا برمجيا أيضا في
الكتاب نفسه).
لكن
نظرا لأن غير المتخصصين قد يتشككون في هذه الاحتمالات ويعجزن عن تخيل فداحة هذه
الأرقام التي تتكون من أكثر من 30 خانة عشرية، قررت أن أكتب برنامجا يحاكي عملية
إلقاء عملة معدنية، ويسجل عدد مرات تكرار الصور على التوالي.
فكرة
هذا البرنامج بسيطة، فهو يحصل على عدد صحيح عشوائي، فإن كان هذا العدد زوجيا نعتبر
أننا حصلنا على صورة، وإن كان فرديا نعتبر أننا حصلنا على كتابة.. ويسجل البرنامج
عدد مرات الحصول على صور على التوالي وعدد محاولات إلقاء العملة التي نتج بعدها
هذا العدد من الصور المتتابعة، لكي ندرك مقدار التجريب العشوائي الذي نحتاجه..
ويعرض البرنامج هذه النتائج كما في الشاشة:
يمكنكم
تحميل كود البرنامج من هنا:
والآن
دعونا نعلّق على هذا البرنامج.. سيكون لدينا هنا تعليق خاص للمبرمجين، وتعليق عام
على فكرة الصدفة والعشوائية التي كتبنا البرنامج من أجلها.
بالنسبة
للمبرمجين:
في
بداية تصميمي للبرنامج كنت أعرض ناتج إلقاء العملة (صورة أو كتابة) في مربع قائمة ListBox.. ولكن نظرا لأن هذه النتائج بالمليارات،
فإنها كانت تبطئ البرنامج بشكل كبير، وتستهلك مساحة من الذاكرة بمرور الوقت.. لهذا
وجدت أن حذف هذه القائمة أفضل، وعرض إحصائيات حول النتائج بدلا منها.
أيضا،
كنت أستخدم الوسيلة Application.DoEvents داخل حلقة التكرار Loop التي تحاكي إلقاء العملة، ولكن معروف أن DoEvents تبطئ البرنامج أيضا بشكل ملموس، لهذا تخلصت منها، واستخدمت بدلا
من ذلك عملية فرعية Thread لتنفيذ
المحاكاة، بحيث تظل واجهة البرنامج فعالة وتعرض الإحصائيات بينما العملية الفرعية
تنفذ الاحتمالات.. واستلزم هذا أيضا استخدام منبه Timer على النموذج، لتحديث الإحصائيات كل ثانيتين.. لاحظ أن أخذ
البيانات من العملية الفرعية ممكن إذا قمت بتعريف الإجراء الذي تنفذه العملية
الفرعية داخل فئة Class، ووضعت
في هذه الفئة متغيرات عامة مشتركة Shared يمكنك قراءتها من خارجها، بحيث يمكنك التواصل من خلالها مع
العملية الفرعية.
يمتاز
البرنامج أيضا بأنه يحفظ حالته عند إغلاقه، حتى يمكن استكمال التجريب بعد إعادة
تشغيله من آخر نقطة توقف عندها.. لفعل هذا يتم حفظ بعض القيم في مسجل قيم الويندوز
Registry، أما الإحصائيات،
فيتم حفظ القائمة List التي
تحتوي عليها، باستخدام عملية الحفظ المتسلسل Serialization، باستخدام الفئة BinaryFormatter، التي تحفظ الكائن في ملف.
بالنسبة
لفكرة البرنامج:
هذه
عينة من النتائج التي حصلت عليها بعد تشغيلي لهذا البرنامج:
عدد المحاولات
|
عدد الصور المتتالية
|
2
|
2
|
46
|
4
|
114
|
10
|
4,714
|
11
|
6,029
|
13
|
44,470
|
15
|
111,341
|
16
|
496,189
|
18
|
3,212,466
|
21
|
29,189,237
|
23
|
62,475,355
|
28
|
367,651,887
|
29
|
1,919,167,745
|
30
|
يمكننا
أن نلاحظ من هذه النتائج ما يلي:
- عدد مرات إلقاء
العملة اللازم للحصول على عدد معين من الصور المتتابعة يزداد أسيا Exponentially مع زيادة هذا
العدد، والأساس هنا هو الرقم 2 (لأننا نتعامل مع حالتين فقط: صورة أم كتابة)..
لهذا تم الحصول على صورتين متتاليتين من أول رميتين.. في الحقيقة هذا حظ حسن، لأن
احتمال هذا الموقف هو 1/4.
- احتمال الحصول
على ثلاث صور متتالية هو 1/8.. لكن هذا لم يحدث في أول 8 رميات، ولا حتى أول 44
رمية!.. حظ سيء :).
- في الرمية 45
تحققت 3 صور متتابعة، لكن الرمية 46 حققت صورة أيضا لهذا سجلها البرنامج كأربع صور
متتابعة بعد 46 محاولة لإلقاء العملة.. هذا حظ سيء أيضا، لأن احتمال الحصول على 4
صور متتابعة هو 1/2 أس 4، أي مرة من كل 16 رمية.. هذا يكشف لنا أن الاحتمالات التي
نحسبها هي أفضل التوقعات، ولا يشترط حتى أن تتحقق.
- تفاجأنا أيضا
بمفاجأة سعيدة حينما حصلنا على 10 صور متتابعة بعد 114 رمية.. احتمال 10 صور
متتابعة هو 1/2أس 10، أي مرة واحدة من كل 1024 رمية.. قد تبدو لك النتيجة غريبة
ولكنها صحيحة، فالاحتمال يقول إنك في خلال 1024 رمية تستطيع الحصول على 10 صور..
قد يحدث هذا من أول 10 رميات (وتكون ملك الحظ J)، وقد يحدث بعد
114 رمية كما رأيت، وقد يحدث بعد 1024 رمية، وقد تكون تعيس الحظ ولا يحدث مطلقا.. تذكر
دائما أن هذه احتمالات وتوقعات، وليست معادلات رياضية صارمة.. أنت لا تعرف شيئا
يقينا، ولكنك تضع إطارا رياضيا يتيح لك توقع النتائج بشكل معقول.
- من الآن فصاعدا
ستتباعد النتائج، فالمقام يزيد أسيا بالضرب في 2 ومضاعفاتها، وهذا يقلل من
الاحتمالات بصورة كبيرة، ويزيد من عدد المحاولات اللازمة بصورة سريعة.. لهذا تطلّب
الحصول على 15 صورة متتابعة أكثر من 44 ألف محاولة، بينما تطلب الحصول على 21 صورة
متتابعة أكثر من 3 مليون محاولة، بينما الحصول على 30 صورة متتابعة استلزم تقريبا
2 مليار محاولة!
- حتى الآن أنا
أنتظر حصول البرنامج على 31 صورة متتابعة.. هذا لم يحدث بعد أكثر من ساعتين من
تشغيله، وتجاوز عدد محاولات إلقاء العملة 4 مليار رمية!
(في تجربة أخرى
للبرنامج، حصلت على 30 صورة متابعة بعد أكثر من 2.5 مليار محاولة، وظللت أنتظر
بعدها أكثر من 6 ساعات، تجاوز فيها عدد المحاولات 12 مليار محاولة، ولم يحدث تتابع
31 صورة!!)
- كما قلت لكم إن
هذه الاحتمالات تتبع نمطا أسيا، ومعروف أن الدوال الأسية دول شرسة، فنتائجها
تتزايد بصورة هائلة مع أقل تغيير في قيمة المدخلات، لذا فإن كل صورة إضافية ننتظر
إضافتها إلى عدد مرات تكرار الصور المتتابعة، نتوقع حدوثها بعد ضعف عدد المحاولات
السابق.. على الأقل!!.. لهذا كنت أنتظر 31 صورة متتالية بعد 4 مليار محاولة، لكنه
لم يحدث إلى الآن.. مع العلم أن هذا الاحتمال رياضيا يساوي 1/2أس 31، أي مرة من كل
2 مليار و 100 مليون محاولة تقريبا.. لكن الصدفة لم تحقق هذا الاحتمال كما وعدتنا!
- أظن أنك الآن
تدرك فداحة الأرقام التي تنتج من هذه الاحتمالات، وأن عمر الكون لن يكفي الحاسوب
للحصول على 100 صورة متتابعة، رغم سرعته الخارقة (تجاوزت عندي نصف مليون رمية في
الثانية).. بمثل هذه السرعة سيحتاج الحصول على 100 صورة متوالية إلى 2 أس 100
محاولة، أي 1267650600228229401496703205376 محاولة، وبقسمتها على 500 ألف يتضح أن
حاسوبي يحتاج إلى 2535301200456458802993406 ثانية لتنفيذ هذه المحاولات، وهو ما
يساوي 704250333460127445275 ساعة، أي 29343763894171976886 يوما، أي 80,393,873,682,662,950
عاما، أي أكثر من 80 مليون مليار سنة!!
افترض
أن هناك حاسوبا أسرع من جهازي ألف مرة.. سيظل يحتاج إلى 80 مليون مليون سنة!
ولو
اشترك معه ألف حاسوب مثله في تجريب هذه الاحتمالات على التوازي، فستظل تحتاج إلى
80 مليار سنة (أكثر من ضعف عمر الكون!!)
أما
إذا افترضنا أن هناك مليار حاسوب كل منها أسرع من جهازي ألف مرة، اشتركت جميعا في
هذه المهمة الجسيمة، فمن المتوقع أن يحصل أحدها على 100 صورة متتالية في خلال 80
ألف سنة!!
وإذا
افترضنا أننا سخرنا جميع موارد الأرض وميزانيات الدول ومصادر الكهرباء لتخصيص 1000
مليار حاسوب متقدم لهذا المشروع العلمي الجبار، فمن المتوقع الحصول على النتيجة في
80 سنة!! (ستكون دول العالم أفلست فيها، ومات الناس جوعا طبعا J)
هذا
يثبت لنا بوضوح هذه الحقيقة الناصعة: لا تستطيع الصدفة إنتاج أي شيء مركّب أو أي
تتابع منتظم، حتى لو كان بسيطا جدا، مثل الحصول على 100 صورة على التوالي عند إلقاء
العملة.. هذا خارج كل الحسابات الرياضية، وأعلى من قدرة الحاسوب على المحاكاة،
ويبدو أمامه عمر الكون كله شيئا تافها.. فما بالنا لو تكلمنا عن نظم بالغة التعقيد
كالخلايا الحية؟.. هذه فقط بعض الأرقام التي تكشف لك قليلا من تعقيدها:
- يوجد على شريط DNA الخاص بالإنسان 3 مليار شفرة وراثية، عند
كتابتها على ورق، فإنها تملأ 10 آلاف مجلد متوسط الحجم.. كل موضع للشفرة منها يأخذ
قيمة من 64 قيمة مختلفة، أي أن أي تجريب عشوائي هنا لكتابة الشفرات سيكون أسيا
للأساس 64 (وليس للأساس 2 كما في حالة رمي العملة)!.. وقد سبق أن حسبنا أن عدد نسخ
DNA المختلفة التي
يمكن الحصول عليها بالترتيب العشوائي للشفرات تساوي (64 أس 3 مليار) أي حوالي (10
أس 5 مليار)!!
- حسب العلماء
احتمال ظهور خلية واحدة بالصدفة، فقدروه بـ 1/10 أس 40 ألفا!!
- يوجد في جسم
الإنسان من 50 مليون مليون خلية إلى 100 مليون مليون خلية (تبعا للعمر والحجم
والجنس.. إلخ).
- حسب العلماء
احتمال ظهور بروتين واحد بالصدفة، فقدروه بـ 1/10 أس 950.
-
يوجد في جسد الإنسان حوالي 30 ألف بروتين مختلف!
- يوجد على ظهر
الأرض حوالي 9 مليون نوع من المخلوقات الحية.. الملحدون يريدون إقناعنا أنها ظهرت
جميعا بالصدفة، بكل خلاياها وبكل بروتيناتها وبكل شفراتها الوراثية، وحجتهم في هذا
أن عمر الكرة الأرضية حوالي 4.5 مليار سنة وأنه رقم كبير بما يكفي لكي تنجز الصدفة
كل هذا!!.. والأدهى أنهم يسمون هذا كلاما علميا!!.. وقد رأينا باستخدام الحواسيب
التي اخترعوها أن عمر الأرض بل عمر الكود كله (30 مليار سنة تقريبا) لا يكفي لكي
يحاكي الحاسوب احتمال الحصول على 100 صورة متتالية عند إلقاء العملة!!!!
الخلاصة:
يمكننا
الآن تبسيط القضية التبسيط المخل التالي:
افترض
أن احتمال ظهور خلية حية بالصدفة يساوي احتمال حدوث 100 صورة متوالية عند إلقاء
العملة.. بهذا التناظر الساذج جدا، ستتحول خرافة التطور إلى المسألة الرياضية
التالية:
احتمال
ظهور 9 مليون نوع من المخلوقات الحية = احتمال الحصول على 100 صورة متتالية عند
إلقاء العملة، وتكرار هذا الأمر الخارق 9 مليون مرة، وهو ما يساوي تبعا لهذا
التبسيط المخلّ: (1/2 أس 100) أس 9 مليون.. أي 1/2 أس 900 مليون.. وهو ما يساوي
تقريبا 1/10 أس 90 مليون!!!
واضح
طبعا أنك لو أحضرت حواسيب بعدد ذرات الكون، فلن تستطيع محاكاة مثل هذا الاحتمال
الخرافي!! (ومن هنا أسميناها خرافة داروين J)
أحببت
أن أؤكد على هذا في الختام، لأني في نقاش مع أحد الداروينيين الملاحدة، اكتشفت
أنهم يؤمنون بالصدفة إيمانا مطلقا.. فقد قال لي: أليس من الممكن أن يسحب شخص محظوظ
البطاقة الصحيحة من أول مرة من صندوق به مليون بطاقة؟
فأجبته:
هذا احتمال 1 في المليون، ولكن طبعا ممكن إذا كان هذا الشخص محظوظا جدا.. ولكن هل
يمكن أن يكرر هذا الشخص نفس المحاولة مرتين وينجح؟.. ثلاث مرات؟.. أربع مرات؟.
فماذا إذا وجدت نفس هذا الشخص يسحب البطاقة الصحيحة من الصندوق مليون مرة
متتالية؟.. هذا احتمال (1/10 أس 6) أس مليون، أي 1/ 10 أس 6 مليون، وهو المستحيل
بعينه.. وإن رأيت شخصا يحقق هذا المستحيل، فلا ريب أنه شخص خارق لقوانين الطبيعة،
ويستطيع أن يرى عبر الصندوق والبطاقات، ليختار البطاقة الصحيحة في كل مرة!.. أي
أنه إله!!
فالمسألة
إذن ليست في تحقق الصدفة الأولى (التي هي ممكنة في نظرهم)، ولكن المسألة كلها في تتابع
هذه الصدف مرارا وتكرارا لتبدع وتطور وتركّب وتعقّد وتهندس وتنجز أشياء تعجز عن
مجاراتها إلى الآن العلوم البشرية والتقنيات الحديثة!
فإن
كان الحصول على صورة عند إلقاء العملة مرة أو مرتين عملية مضمونة، فإن الاستمرار
في الحصول على الصورة في كل مرة لمئة مرة متتالية أمر خارج حسابات الكون الذي نعيش
فيه كما أثبتنا!
فهل
هناك أتفه من هذا لنتحدى الصدفة فيه؟!
نحن
إذن نتكلم عن تصميم ذكي، واع مدبر مخطط ومنفذ بعناية ودقة، ولا علاقة له بأي صدفة
أو عشوائية.
السلام عليكم ورحمة الله وبركاته
ردحذفلقد قرأت مقالك وقد أعجبني كثيرا عندما ضربت مثلا بسيطا باستحالة الحصول على الصورة مئة مرة متتالية ، فكيف بالذرات والالكترونات وغيرها كثير انها وجدت صدفة هذا لا يقوله انسان سوي عاقل مؤمن بوجود الله عز وجل ، وكما اشكرك جدا على البرنامج الجميل الذي قمت بتصميمه
تحياتي لك بالمزيد من العطاء واالنجاح وخصوصا في مجال برمجيات الرياضيات
وبالتوفيق ان شاء الله
جزاك الله خيرا أ. حسين.. وشكرا لتقديرك ودعائك..
ردحذفتحياتي