تعقيد · خوارزميات · تشفير · فراكتال · فوضى

الفوضى المنظمة
من الفراكتال إلى التشفير

هل يستطيع الحاسوب أن يرمي نردا؟ رحلة تفاعلية في الخوارزميات التي تصنع العشوائية من النظام

إ
إبراهيم أبو العنين
٥٥ دقيقة قراءة
الموجة العظيمة قبالة كاناغاوا - كاتسوشيكا هوكوساي
الموجة العظيمة قبالة كاناغاوا - كاتسوشيكا هوكوساي، ١٨٣١م. كل موجة تحتوي موجات أصغر تحتوي موجات أصغر - فراكتال من الماء والزبد. ماندلبرو استخدم السواحل بالضبط ليسأل: كم يبلغ طول ساحل بريطانيا؟
الفصل الأول

التعقيد حين تفكر المستعمرة

في صحراء أريزونا عام ١٩٨٢ جلست عالمة أحياء شابة تحت شمس حارقة تراقب نملا. ليس نملا عاديا - نمل حصاد أحمر يبني مستعمرات تحت الأرض بعمق مترين. ديبورا غوردون لم تكن تبحث عن شيء محدد. كانت تراقب وتسأل سؤالا بسيطا: من المسؤول هنا؟

كل كتب الأحياء تقول: الملكة. الملكة تقود المستعمرة وتعطي الأوامر والعاملات تنفذ. لكن غوردون راقبت لسنوات ولاحظت شيئا غريبا: الملكة لا تعطي أوامر. إطلاقا. كل ما تفعله هو وضع البيض. لا توجد خطة مركزية. لا يوجد مهندس معماري. لا يوجد مدير مشروع.

ومع ذلك المستعمرة تبني أنفاقا بزوايا محسوبة لتهوية مثالية. تخصص فرقا للاستكشاف وأخرى لجمع الطعام وأخرى للحراسة - وتغير النسب حسب الحاجة. حين تمطر تسد المداخل. حين يهاجمها عدو تحشد المقاتلين. تتخذ قرارات ذكية كمؤسسة بشرية. لكن لا توجد نملة واحدة "تقرر" أي شيء.

القواعد الثلاث

غوردون اكتشفت أن كل نملة تتبع قواعد بسيطة لا تتجاوز ثلاثا:

١
شم - إذا شممت رائحة فيرومون طعام اتبعها. إذا لم تشم شيئا تحرك عشوائيا.
٢
ضع - إذا وجدت طعاما ضع فيرومونا على طريق العودة.
٣
تجنب - إذا قابلت نملة عائدة بدون طعام غيّر اتجاهك.

ثلاث قواعد. لا خطة. لا قائد. لا خريطة. ومن هذا تظهر طرق سريعة مثالية بين العش ومصدر الطعام - أقصر مسار ممكن. نفس المسألة التي يحتاج حاسوب حديث آلاف العمليات لحلها تحلها مستعمرة نمل بثلاث قواعد كيميائية بسيطة.

هذا اسمه الانبثاق ؟ (Emergence). الكل ليس أكبر من مجموع أجزائه فقط - الكل مختلف نوعيا عن أجزائه. لا توجد نملة ذكية. المستعمرة ذكية. لا توجد نملة تعرف الخريطة. المستعمرة تعرف.

لا توجد نملة مسؤولة. لا توجد نملة تعرف ما تفعله المستعمرة. ومع ذلك المستعمرة تعرف بالضبط ما تفعله. ديبورا غوردون، ستانفورد
مستعمرة النمل: شاهد الطرق تظهر من العدم
٥٠ نملة - لا قائد - لا خطة
كل نملة تتبع ٣ قواعد فقط. راقب كيف تظهر الطرق تلقائيا بين العش (الدائرة الداكنة) والطعام (الدائرة الفاتحة).

لعبة الحياة: أربع قواعد تصنع كونا

النمل ليس وحيدا. نفس المبدأ - قواعد بسيطة محلية تنتج سلوكا معقدا عالميا - يظهر في كل مكان. في الأحياء وفي الفيزياء وفي الرياضيات. وأنقى تجسيد له جاء من رياضي بريطاني لم يكن يبحث عن الحياة بل عن لعبة.

في عام ١٩٧٠ جلس جون كونواي - رياضي بريطاني لامع في جامعة كامبريدج - مع طلابه في غرفة الشاي. على لوح غو أمامهم كانوا يجربون قواعد. يضعون حجارة على الشبكة ويحركونها بقواعد بسيطة لجيل بعد جيل. جربوا مئات التوليفات. معظمها مات بسرعة أو انفجر بلا ضابط.

ثم وجد كونواي أربع قواعد سحرية:

ولادة: خلية ميتة عندها بالضبط ٣ جيران أحياء ← تحيا
بقاء: خلية حية عندها ٢ أو ٣ جيران ← تبقى حية
وحدة: خلية حية عندها أقل من ٢ جيران ← تموت وحيدة
ازدحام: خلية حية عندها أكثر من ٣ جيران ← تموت مختنقة

من هذه القواعد الأربعة تنبثق أشكال تمشي عبر الشاشة ("طائرات شراعية")، وأشكال تنبض، وأشكال تطلق طائرات شراعية بانتظام ("مدافع"). بل ثبت رياضيا أن لعبة الحياة تورينغ-كاملة ؟ - أي أنها تستطيع نظريا حساب أي شيء يحسبه حاسوبك. كون كامل من ٤ قواعد.

لعبة الحياة: ارسم خلايا أو اختر نمطا
|
الجيل: ٠
اضغط على الشبكة لرسم خلايا. أو اختر نمطا جاهزا وشاهد التطور. ٤ قواعد فقط!

كونواي كره لعبة الحياة. ليس لأنها سيئة بل لأن شهرتها طغت على كل أعماله الأخرى في نظرية الزمر والعقد الرياضية. قال مرة: "كل ما يريد الناس سؤالي عنه هو تلك اللعبة السخيفة." توفي في أبريل ٢٠٢٠ بكوفيد-١٩. لكن لعبته الخالدة أثبتت شيئا عميقا: قواعد بسيطة - إن أحسن تصميمها - تنتج تعقيدا يفوق الخيال. كونواي جرب مئات التوليفات قبل أن يجد الأربع الصحيحة. القواعد لم تكتب نفسها.

نملة لانغتون: فوضى ثم طريق سريع

والآن لنعد إلى ما شاهدته في أول الفصل. ذلك الكائن الذي تحرك بفوضى ثم فجأة بنى طريقا مستقيما. هذه نملة لانغتون - واحدة من أجمل الاكتشافات في علوم التعقيد.

كريس لانغتون لم يكن أكاديميا تقليديا. في شبابه كان هيبيا ومتسلق جبال. عام ١٩٧٥ تحطم في حادث طيران شراعي - كسر ٣٥ عظمة. بقي في المستشفى سنة كاملة. خلال تعافيه الطويل قرأ عن الأنظمة الحية والمحاكاة الحاسوبية. قرر أن يكرس حياته لسؤال واحد: هل يمكن للآلات أن "تحيا"؟

صاغ مصطلح "الحياة الاصطناعية" عام ١٩٨٦ واخترع أبسط كائن يظهر سلوكا انبثاقيا. نملة على شبكة مربعات. قاعدتان فقط:

قواعد نملة لانغتون

على مربع أبيض: استدر يمينا. اقلب المربع إلى أسود. تقدم خطوة.
على مربع أسود: استدر يسارا. اقلب المربع إلى أبيض. تقدم خطوة.

هذا كل شيء. قاعدتان.

ماذا تتوقع؟ حركة بسيطة متكررة ربما؟ اضغط "تشغيل" وراقب ثلاث مراحل: أولا فوضى عشوائية تماما (بقع سوداء وحمراء بلا نمط). ثم فجأة - بدون أي تحذير - طريق سريع قطري ينطلق في اتجاه واحد ولا يتوقف. التحول يحدث عند الخطوة ١٠٠٠٠ تقريبا. لا أحد يعرف لماذا.

نملة لانغتون: قاعدتان ← فوضى ← نظام
الخطوة: ٠
أول ١٠٠٠٠ خطوة: فوضى عشوائية تماما. ثم فجأة - بلا سابق إنذار - طريق سريع قطري يظهر ولا يتوقف أبدا. لا أحد يعرف لماذا.

أول عشرة آلاف خطوة: فوضى. بقع سوداء وبيضاء بلا نمط واضح. تبدو عشوائية تماما. ثم - بلا أي إنذار - تبدأ النملة ببناء "طريق سريع" قطري. نمط متكرر كل ١٠٤ خطوات يمتد إلى اللانهاية. لا أحد يعرف لماذا. لا يوجد برهان رياضي يفسر هذا الانتقال من الفوضى إلى النظام. إنه لغز مفتوح منذ عام ١٩٨٦.

حافة الفوضى

النمل الحقيقي ولعبة الحياة ونملة لانغتون - ثلاثة أنظمة مختلفة تماما تشترك في شيء واحد: التعقيد ينشأ على الحافة بين النظام والفوضى.

فكر في الأمر هكذا. نظام منتظم تماما - مثل بلورة - لا يحدث فيه شيء مثير. كل شيء متكرر ومتوقع. ونظام فوضوي تماما - مثل غاز ساخن - لا يستمر فيه شيء. كل شيء يتبدد ويتبعثر. لكن بينهما - على تلك الحافة الضيقة - يحدث السحر. تظهر أنماط وتختفي. يتشكل نظام ثم ينهار ثم يتشكل غيره. الحياة والذكاء والحساب - كلها تعيش على هذه الحافة.

المبدأ الواحد

كل ما ستقرأه في هذه المقالة يعود إلى هذا المبدأ. مولدات الأعداد العشوائية: قواعد حسابية بسيطة تنتج ما يبدو عشوائيا. الفراكتال: قواعد هندسية بسيطة تنتج تعقيدا لا نهائيا. نظرية الفوضى: معادلات بسيطة تنتج سلوكا لا يمكن التنبؤ به. التشفير: عمليات بسيطة تنتج أمانا لا يمكن كسره. قواعد بسيطة. تكرار. تعقيد.


الفصل الثاني

النرد الكاذب

افتح هاتفك. افتح أي تطبيق فيه رقم "عشوائي" - لعبة نرد، خلط أوراق، كلمة مرور عشوائية. ارمِ النرد. ظهر ٤. ارمه مرة أخرى. ظهر ٢. يبدو عشوائيا.

لكنه ليس كذلك. كل "عدد عشوائي" في حاسوبك ليس عشوائيا. إنه نتيجة معادلة رياضية حتمية تماما. لو عرفت المعادلة والرقم الذي بدأت منه لاستطعت أن تتنبأ بكل "عشوائية" حاسوبك حتى يوم القيامة.

فكر في الأمر هكذا. الحاسوب آلة تأخذ مدخلا وتطبق خوارزمية وتعطيك مخرجا. نفس المدخل + نفس الخوارزمية = نفس المخرج. دائما. لا توجد خوارزمية تعطيك نتيجة عشوائية حقا. لأن "عشوائي" يعني "لا يمكن التنبؤ به" - والحاسوب بطبيعته يمكن التنبؤ بكل ما يفعله.

جون فون نويمان - الرجل الذي صمم بنية الحاسوب كما نعرفه - قال بنفسه:

أي شخص يستخدم طرقا حسابية لتوليد أعداد عشوائية
هو في حالة خطيئة.
جون فون نويمان، ١٩٥١

أفضل ما يستطيعه الحاسوب هو توليد أعداد شبه عشوائية ؟ (pseudo-random) - العلاقة بين المدخل والمخرج مبهمة بما يكفي لتبدو عشوائية. لكن عند مستوى معين من التمحيص ينهار الوهم ويظهر النمط.

ما هي العشوائية الحقيقية؟

العشوائية الحقيقية لا توجد إلا في الطبيعة. هناك أجهزة تسمى TRNG ؟ (True Random Number Generator) تعتمد على ظواهر فيزيائية لا يمكن التنبؤ بها: التحلل الإشعاعي لذرة يورانيوم. الضجيج الحراري في مقاومة كهربائية. التقلبات الكمية في الفراغ. تقلبات شدة الضوء.

وشركة Cloudflare - التي تحمي ربع مواقع الإنترنت - تستخدم طريقة أغرب: جدار من مصابيح اللافا. نعم. مصابيح اللافا. في بهو مقرها في سان فرانسيسكو جدار كامل منها يسمونه "جدار الإنتروبيا". كاميرا تصور حركة الفقاعات - وهي حركة فوضوية حقيقية لا يمكن التنبؤ بها - وتحول كل صورة إلى سلسلة أعداد تغذي مولد تشفير يحمي ملايين المواقع. والطريف أن الموظفين الذين يمرون أمام الكاميرا يضيفون فوضى إضافية - حركاتهم العشوائية تصبح جزءا من التشفير.

ومكتبهم في لندن يستخدم بندولا مزدوجا - نظام فوضوي رياضيا بحت. ومكتبهم في أوستن يستخدم أشكالا معلقة شفافة تتأرجح مع تيارات الهواء. وفي لشبونة: ٥٠ آلة أمواج. كل مكتب يحصد الفوضى بطريقته. والفكرة ليست جديدة - شركة Silicon Graphics بنت نظاما مشابها اسمه "Lavarand" عام ١٩٩٦.

لكن هذه كلها حلول خاصة. معظم البرامج لا تحتاج عشوائية حقيقية. تحتاج شيئا يبدو عشوائيا ويمكن إعادته. وهنا تبدأ القصة.

البذرة: لماذا نريد عشوائية قابلة للإعادة؟

كل مولد أعداد شبه عشوائية يبدأ من رقم واحد يسمى البذرة ؟ (seed). هذه البذرة تُستخدم لحساب العدد "العشوائي" الأول. هذا العدد يصبح بذرة للعدد الثاني. والثاني بذرة للثالث. وهكذا. سلسلة لا نهائية من رقم واحد.

النتيجة: نفس البذرة = نفس السلسلة. دائما. جربها:

جرب: نفس البذرة = نفس "العشوائية"
اضغط الزر مرتين بنفس البذرة. ستحصل على نفس الأعداد بالضبط. غير البذرة وجرب مرة أخرى.

قد تتساءل: لماذا نريد هذا أصلا؟ أليس المفترض أن تكون الأعداد "عشوائية"؟ لماذا نريد تكرارها؟

ألعاب الفيديو: في لعبة مثل Minecraft كل عالم يتولد من بذرة واحدة. اكتب نفس البذرة ويحصل كل لاعب في العالم على نفس الخريطة بالضبط - نفس الجبال والأنهار والكهوف. المصمم يخزن رقما واحدا بدلا من خريطة كاملة.

الفن الخوارزمي: تخيل أنك ترسم ١٠٠ دائرة بمواقع وأحجام "عشوائية" وأعجبك الترتيب. بدون بذرة لا يمكنك استعادته أبدا. مع بذرة يمكنك تجربة ألوان مختلفة مع الحفاظ على نفس الترتيب بالضبط.

الاختبار: حين يختبر مهندس خوارزمية يحتاج أن يعيد نفس "العشوائية" ليقارن النتائج. البذرة تجعل الفوضى قابلة للإعادة.

لكن دالة Math.random() المدمجة في JavaScript لا يمكن بذرها. لا توجد طريقة للحصول على نفس التسلسل مرتين. لذلك نحتاج مولداتنا الخاصة.

ثلاثة مقاييس: كيف نحكم على مولد؟

قبل أن نبني أي مولد نحتاج أن نعرف: ما الذي يجعل مولدا جيدا وآخر سيئا؟ ثلاثة أشياء:

١
الدورة ؟ (Period): كم عددا يولد قبل أن يبدأ التكرار؟ تذكر أن كل عدد يولد من سابقه. حين يظهر عدد سبق أن ظهر ستعلق في حلقة تكرار لا تخرج منها أبدا. مولد دورته ١٠٠ عديم الفائدة. مولد دورته مليار قد يكفي.
٢
التوزيع (Distribution): هل الأعداد موزعة بالتساوي؟ أم تتجمع حول قيم معينة وتتجنب أخرى؟ أم تشكل نمطا مرئيا؟ مولد يميل للأعداد الزوجية مثلا لا يصلح.
٣
عدم القابلية للتنبؤ (Unpredictability): هل يمكن لشخص يرى جزءا من السلسلة أن يتنبأ بالباقي؟ هذا مهم جدا للتشفير. مولد يمكن عكس هندسته خطر على الأمان.

الآن تعال نبني مولدا من الصفر ونختبره بهذه المقاييس الثلاثة.

حقيقة صادمة
كل "عدد عشوائي" ولده هاتفك منذ أن اشتريته كان محددا مسبقا من لحظة تشغيله الأولى. البذرة عادة تأتي من ساعة النظام - الميلي ثانية التي أقلعت فيها. لو عرفت تلك اللحظة لعرفت كل "عشوائية" هاتفك.

الفصل الثالث

أبسط مولد في العالم

في عام ١٩٤٩م جلس فون نويمان أمام حاسوب ENIAC وفكر: ما أبسط طريقة لتوليد عدد "عشوائي" من عدد سابق؟ فكرته: خذ العدد. ربّعه. خذ الأرقام الوسطى. هذا هو العدد التالي. سماها طريقة المربع الأوسط ؟ (Middle-square method).

تعال نمشي فيها خطوة بخطوة. لنقل أننا نعمل بأعداد من ٤ أرقام:

المربع الأوسط خطوة بخطوة
اضغط "الخطوة التالية" لتبدأ
1234

بسيط! خوارزمية من ثلاثة أسطر تولد أعدادا تبدو عشوائية. لكن... هل هي جيدة؟

اختبار الدورة: متى ينهار المولد؟

الاختبار الأول: كم عددا يمكننا توليده قبل أن نحصل على تكرار؟ بأعداد من ٤ أرقام الحد الأقصى النظري ١٠٠٠٠ عدد (من ٠٠٠٠ إلى ٩٩٩٩). لكن هل نصل إلى هذا الحد؟

جرب بنفسك: اختر بذرة وشاهد متى يتكرر أول عدد:

اختبار الدورة: متى ينهار المربع الأوسط؟

جرب البذرة 1234: تحصل على دورة من بضع عشرات فقط. جرب 9600: ٤ أعداد فقط ثم تنهار! لكن هناك بذرة أسوأ من الكل. بذرة محكوم عليها بالموت من قبل أن تبدأ. جرب 2500 وشاهد ماذا يحدث.

٢٥٠٠: المولد الذي انتحر فورا

احسبها بنفسك: $2500^2 = 06250000$. الأرقام الأربعة الوسطى؟ 2500. نفس البذرة بالضبط. المولد يولد نفسه. حلقة لا نهائية من عدد واحد من أول خطوة - كمرآة تعكس مرآة. والأسوأ: بذور كثيرة تؤدي في النهاية إلى ٠٠٠٠ - ومنها لا يخرج المولد أبدا لأن $0^2 = 0$. ثقب أسود رقمي.

هل يمكن تحسينها؟ بزيادة عدد الأرقام تزداد الدورة. مع ٦ أرقام بدلا من ٤ نحصل على دورة أطول بكثير. لكن هل تبدو الأعداد عشوائية فعلا؟ لنختبرها بصريا. نملأ صورة نقطة نقطة - إذا كان العدد أكبر من النصف نلون البكسل أبيض وإلا أسود. مولد جيد يعطي تشويشا كشاشة تلفزيون. مولد سيئ يظهر أنماطا.

اختبار البكسل: المربع الأوسط (٦ أرقام)
اضغط "شغّل" وراقب

هل ترى الخطوط المائلة؟ لو كانت هذه الأعداد عشوائية حقا لبدت الصورة كتشويش تلفزيون بدون أي نمط. لكن المربع الأوسط ينتج أعدادا مترابطة - كل عدد مشتق من مربع سابقه - فتظهر خطوط قطرية متكررة لأن النمط يعيد نفسه بعد دورة قصيرة (حوالي ٨٥٠ عددا مع هذه البذرة). حين تكون دورة المولد أقصر من عرض الصورة يصطف نفس النمط عموديا ويظهر كخطوط.

فون نويمان نفسه كان يعرف أن طريقته سيئة. لكنها كانت تكفي لحاسوب ENIAC البطيء في ذلك الوقت. نحتاج شيئا أفضل بكثير.


LCG: المولد الذي حكم العالم

المولد الذي استخدمته فعلا معظم لغات البرمجة لعقود اسمه المولد التطابقي الخطي ؟ (Linear Congruential Generator - LCG). وهو معادلة واحدة فقط:

$$x_{n+1} = (a \cdot x_n + c) \bmod m$$

تخيلها كساعة مجنونة. خذ الرقم الحالي، اضربه في عدد ضخم (فيتشوه تماما)، أضف عددا آخر (فيتشوه أكثر)، ثم أجبره على العودة إلى نطاق محدد بالقسمة بالباقي (كعقرب الساعة الذي يعود للصفر بعد ١٢). النتيجة: رقم جديد لا علاقة ظاهرة له بسابقه. كرر. لنشاهدها خطوة بخطوة:

LCG خطوة بخطوة
اضغط "الخطوة التالية"
seed × a + c mod m
42

ثلاثة أعداد ثابتة فقط - a (المضاعف) وc (الإزاحة) وm (المقسوم عليه) - هي كل ما يحتاجه المولد. سطر كود واحد:

function nextRand() { seed = (a * seed + c) % m; return seed; }

لكن أي قيم نختار لـ a وc وm؟ هنا القصة تصبح مثيرة. اختيار سيئ يعطي مولدا عديم الفائدة. اختيار جيد يعطي مولدا استخدمه ملايين المبرمجين.

المعاملات: لماذا الأرقام المحددة مهمة جدا؟

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

المصدرacmالنتيجة
glibc (GCC)110351524512345$2^{31}$أنماط مرئية
Numerical Recipes16645251013904223$2^{32}$ممتاز
RANDU (IBM)655390$2^{31}$كارثي

نفس المعادلة بالضبط. نفس الكود. ثلاثة أرقام مختلفة. نتائج مختلفة تماما. لنرى الفرق بصريا - أولا بالرسم البياني ثنائي الأبعاد:

اختبار الأزواج المتتالية
كيف يعمل هذا الاختبار؟
نولد ٥٠ ألف عدد "عشوائي". كل عددين متتاليين $(x_n, x_{n+1})$ نرسمهما كنقطة: الأول على المحور الأفقي والثاني على المحور العمودي. المحور الأفقي = العدد الحالي. المحور العمودي = العدد التالي. كل نقطة حمراء = زوج متتالي.
مولد جيد = سحابة متجانسة تملأ المربع كالضجيج. مولد سيئ = النقاط تصطف على خطوط مرئية (يعني الأعداد مترابطة ويمكن التنبؤ بها).
$x_{n+1}$
$x_n$
Numerical Recipes (جيد)
يرسم آخر ١٠ بتات فقط - يكشف الأنماط المخفية
تغطية متساوية = مولد جيد خطوط خفيفة = مولد مقبول خطوط واضحة = مولد سيئ

في الوضع العادي تبدو كل المولدات متشابهة تقريبا - وهذا بالضبط ما يجعل المولدات السيئة خطيرة. تبدو بريئة في اختبار بسيط. لكن فعّل "كشف البتات الدنيا" وشاهد: glibc تظهر شبكة منتظمة لأن بتاتها المنخفضة تدور في دورات قصيرة. وRANDU تنكشف خطوطه القطرية بوضوح صادم.

كارثة RANDU: حين خدع المولد العالم

في الستينيات كانت شركة IBM سيدة عالم الحوسبة. حاسوب System/360 كان في كل جامعة ومختبر. ومعه مولد أعداد عشوائية اسمه RANDU بمعاملات بسيطة: $a = 65539$، $c = 0$، $m = 2^{31}$.

ملايين العلماء استخدموه في محاكاتهم. وبدا كل شيء طبيعيا. في بعد واحد - أعداد تبدو عشوائية. في بعدين - الرسم البياني يبدو مقبولا. لكن حين رسم أحدهم النقاط في ثلاثة أبعاد اكتشف الكارثة: كل النقاط تقع على ١٥ مستوى فقط. ليست موزعة في الفراغ بل مصطفة كجنود.

نتائج علمية نشرت في مجلات محكمة كانت خاطئة. محاكاة فيزيائية استغرقت سنوات أعطت إجابات خاطئة. كل ذلك لأن "العشوائية" لم تكن عشوائية.

الدرس

أن الأعداد تبدو عشوائية في بعد واحد أو بعدين لا يعني أنها عشوائية في ثلاثة أبعاد. اختبار العشوائية أصعب بكثير من توليدها. وكارثة RANDU تذكرنا أن الثقة العمياء في الأدوات تؤدي إلى نتائج كاذبة.

حيلة عرض الصورة

وهنا حيلة مهمة تعلمناها من مبرمج الفيديو التعليمي: نفس المولد الذي يبدو جيدا بعرض صورة ٦٠٠ بكسل قد يظهر أنماطا واضحة بعرض ٥٥٠ بكسل. لماذا؟ لأن حين يتوافق عرض الصورة مع الدورة الداخلية للمولد تصطف الأعداد عموديا وتظهر البنية المخفية. تغيير العرض يكسر أو يكشف التوافق.

إذن الاختبار الصحيح: جرب أعراضا متعددة. إذا ظهر نمط بأي عرض فالمولد ضعيف. معاملات Numerical Recipes لم تظهر أنماطا بأي عرض جربته.

حقيقة مدهشة
لغة Java - إحدى أكثر لغات البرمجة انتشارا في العالم - لا تزال تستخدم خوارزمية LCG كمولد افتراضي في الفئة java.util.Random. وكذلك فعلت نسخ من C وC++ وVisual Basic لعقود.
حيلة IEEE 754
في عالم الديموسين (demoscene) - حيث يبني المبرمجون عروضا بصرية كاملة في ٦٤ كيلوبايت فقط - طور إنيغو كيليز حيلة ذكية: بدلا من توليد عدد صحيح ثم تحويله إلى كسر عشري (عملية بطيئة)، يكتب البتات العشوائية مباشرة في الجزء العشري من تمثيل IEEE 754. النتيجة: مولد أسرع ٤ مرات بدقة ٢٣ بت بدلا من ١٥.

الفصل الرابع

اختبار البكسل

الرسم البياني أظهر لنا أنماطا. لكن هناك اختبار أقوى بكثير: اختبار البكسل. الفكرة بسيطة. املأ شاشة نقطة نقطة. لكل نقطة: إذا كان العدد "العشوائي" التالي أكبر من 0.5 لونها أبيض. وإلا لونها أسود. مولد جيد؟ ستحصل على تشويش يشبه شاشة تلفزيون بدون إشارة. مولد سيئ؟ ستظهر أنماط وخطوط ودوائر.

وهنا حيلة ذكية من الفيديو التعليمي: حين تغير عرض الصورة تتغير الأنماط. مولد يبدو جيدا بعرض ٦٠٠ بكسل قد يظهر خطوطا واضحة بعرض ٥٥٠. لأن عرض الصورة حين يتوافق مع دورة المولد الداخلية تصطف الأرقام عموديا وتظهر البنية المخفية.

اختبار البكسل: أربع خوارزميات جنبا إلى جنب
المربع الأوسط
سيئ جدا
LCG - glibc
مقبول
الوصفات العددية
جيد
RANDU
كارثي
150px
حرك شريط العرض. بعض المولدات تبدو جيدة بعرض معين وتنكشف بعرض آخر!

هذا الاختبار البصري من أهم أدوات تقييم المولدات. العين البشرية تكتشف الأنماط أسرع من أي خوارزمية. ولهذا وُضعت اختبارات رسمية: اختبارات Die Hard (١٩٩٥) - ١٨ اختبارا إحصائيا صارما. واختبارات TestU01 وNIST الأحدث. مولد لا يجتاز هذه الاختبارات لا يصلح للاستخدام الجاد.

ميرسين تويستر: المعيار الذهبي

في عام ١٩٩٧م طور ماتسوموتو ونيشيمورا خوارزمية سموها ميرسين تويستر (Mersenne Twister). دورتها - أي عدد الأعداد قبل أن تتكرر - هي $2^{19937} - 1$. هذا عدد من ٦٠٠٠ رقم. أكبر من عدد الذرات في الكون المرئي بمليارات المرات. تجتاز كل اختبارات Die Hard. وأصبحت المولد الافتراضي في Python وRuby وPHP وMatlab. وحتى Java تستخدم LCG بمعاملاتها الخاصة كمولد افتراضي.

متى تستخدم ماذا؟

الخوارزميةالدورةالسرعةالاستخدام
المربع الأوسط~١٠٠سريعتعليمي فقط - لا تستخدمه أبدا
LCG (معاملات جيدة)$2^{32}$سريع جداألعاب، فن خوارزمي، محاكاة بسيطة
Mersenne Twister$2^{19937}$سريعمحاكاة علمية، الافتراضي في معظم اللغات
CSPRNG (ChaCha20, AES)هائلةأبطأالتشفير فقط - غير قابل للعكس
TRNG (أجهزة)لا نهائيةبطيءتوليد مفاتيح، بذور أولية

رحلة العشوائية عبر الزمن

١٩٤٩
فون نويمان يخترع المربع الأوسط على ENIAC. بسيط لكن ضعيف - دورات قصيرة وثقوب سوداء رقمية.
١٩٥٨
المولد التطابقي الخطي (LCG) يصبح المعيار. سطر كود واحد يحكم عقودا من الحوسبة.
١٩٦٨
كارثة RANDU - IBM تدمر سنوات من البحث العلمي بمعاملات سيئة. الأعداد تقع على ١٥ مستوى فقط.
١٩٩٧
ماتسوموتو ونيشيمورا يطوران ميرسين تويستر. دورة $2^{19937}$. يصبح الافتراضي في Python وRuby وPHP.
٢٠٠٨
دانييل بيرنشتاين يصمم ChaCha20 - أول مولد تشفيري سريع بما يكفي للاستخدام اليومي.
٢٠٢٥
OpenSSH 10.0 يتحول إلى ML-KEM - تشفير مقاوم للحوسبة الكمية. السباق مستمر.
القاعدة الذهبية
هل تبني لعبة أو فنا خوارزميا؟ LCG يكفي وزيادة. هل تحتاج محاكاة علمية دقيقة؟ Mersenne Twister. هل تشفر بيانات؟ لا تستخدم أيا مما سبق. استخدم مولدا مشفرا (CSPRNG) لأن كل ما سبق يمكن عكس هندسته والتنبؤ بالأعداد التالية.

حتى الآن رأينا كيف تنتج معادلة بسيطة واحدة تيارا لا نهائيا من الأعداد التي تبدو عشوائية. قواعد بسيطة، تكرار، تعقيد - نفس المبدأ الذي رأيناه في مستعمرة النمل. لكن الأعداد ليست المكان الوحيد الذي يظهر فيه هذا المبدأ. ماذا لو طبقنا نفس الفكرة - قاعدة هندسية بسيطة تكرر نفسها مرة بعد مرة - على الأشكال بدلا من الأرقام؟


الفصل الخامس

الفراكتال الشكل الذي يحتوي نفسه

في عام ١٩٦٧م نشر رياضي بولندي يعمل في مختبرات IBM سؤالا غريبا: "كم يبلغ طول ساحل بريطانيا؟" ليس سؤالا جغرافيا. إنه سؤال رياضي. لأن الإجابة تعتمد على طول المسطرة. قس بمسطرة ١٠٠ كيلومتر تحصل على رقم. قس بمسطرة كيلومتر واحد تحصل على رقم أكبر بكثير - لأنك تتبع التعرجات الصغيرة. قس بمسطرة متر واحد يزداد الطول أكثر. قس بمسطرة سنتيمتر... الطول يستمر في الازدياد بلا نهاية.

هذا الرياضي كان بينوا ماندلبرو. صبي بولندي يهودي هرب مع عائلته من النازيين. درس في فرنسا ثم ذهب إلى أمريكا. لم تقبله الجامعات الكبرى - أفكاره كانت غريبة جدا. فعمل في مختبرات IBM حيث لم يسأله أحد عن أبحاثه. هناك اخترع كلمة "فراكتال" ؟ عام ١٩٧٥ وسخر منه الرياضيون الأكاديميون: "هذا رجل يرسم صورا جميلة ويسميها رياضيات!" لكنه كان يرى ما لا يرونه. الطبيعة ليست خطوطا مستقيمة ودوائر كاملة. الطبيعة فراكتال.

والفراكتال شكل يحتوي نسخا مصغرة من نفسه في كل مستوى. كبر الصورة تجد نفس النمط. كبرها أكثر تجده مرة أخرى. وأخرى. وأخرى. إلى ما لا نهاية. السحب فراكتال. الجبال فراكتال. الأوعية الدموية فراكتال. رئتاك فراكتال. الطبيعة تكرر نفسها على كل مقياس.

ندفة كوخ: محيط لا نهائي في مساحة محدودة

ابدأ بمثلث متساوي الأضلاع. على كل ضلع: قسمه ثلاثا، وأضف مثلثا صغيرا على الثلث الأوسط. كرر على كل ضلع جديد. وكرر. وكرر. النتيجة: شكل محيطه لا نهائي لكن مساحته محدودة. كيف يمكن لشكل أن يكون له حد لا نهائي ومساحة محدودة؟ لأنه ليس بعدا واحدا ولا بعدين. بعده الفراكتالي هو $D \approx 1.26$ - رقم بين الأعداد الصحيحة.

ندفة كوخ: شاهد المحيط ينفجر
التكرار: ٠ | الأضلاع: ٣

مجموعة ماندلبرو: أعقد شيء في الرياضيات

لكن أشهر فراكتال على الإطلاق ولد من معادلة أبسط مما تتخيل:

$$z_{n+1} = z_n^2 + c$$

خذ عددا مركبا $c$. ابدأ بـ $z = 0$. ربّع واجمع $c$. ربّع الناتج واجمع $c$. كرر. إذا بقي $z$ محدودا فإن $c$ ينتمي لمجموعة ماندلبرو. إذا هرب إلى اللانهاية فلا. لون كل نقطة حسب سرعة هروبها. النتيجة: أعقد كائن رياضي عرفه الإنسان. كبره مليون مرة تجد أشكالا جديدة لم ترها من قبل. كبره مليار مرة تجد المزيد. لا نهاية للتفاصيل.

مجموعة ماندلبرو: اضغط لتكبر
التكبير: ×1 | اضغط على أي نقطة لتكبيرها
اضغط على حدود الشكل الأسود (ليس المنتصف). كلما كبرت وجدت تفاصيل جديدة لم تكن مرئية. لا نهاية للتكبير. هذا هو معنى "أعقد كائن رياضي".
بُعد فراكتالي

الخط بعده ١. المربع بعده ٢. لكن ندفة كوخ بعدها $D = \frac{\log 4}{\log 3} \approx 1.26$ - بين الخط والمربع. وحدود مجموعة ماندلبرو بعدها $D = 2.0$ بالضبط - سطح بلا سمك لكنه معقد بما يكفي ليملأ مستوى كامل. هذه هي أبعاد الفراكتال: أرقام بين الأعداد الصحيحة.

ماندلبرو اكتشف الفراكتال في الطبيعة ثم في الرياضيات. لكن هل اخترعه الإنسان قبل أن يكتشفه؟ هل بنى أحد فراكتالا من حجر ورخام قبل أن يملك حاسوبا أو يعرف الكلمة؟ الإجابة في القاهرة. قبل ماندلبرو بستمائة عام.


الفصل السادس

مسجد السلطان حسن

في عام ١٣٤٨م ضرب الطاعون الأسود القاهرة. مات ثلث السكان في أشهر. انهار الاقتصاد. أصبحت الشوارع فارغة والأسواق مغلقة. من هذه الفوضى - وبأموال صودرت من ممتلكات الموتى - أمر السلطان حسن - وهو في الثالثة عشرة من عمره - ببناء أعظم مدرسة عرفها العالم الإسلامي.

والمماليك أنفسهم كانوا نظاما معقدا بكل معنى الكلمة. عبيد جلبوا أطفالا من آسيا الوسطى والقوقاز، دربوا على الفروسية والحرب، ثم حكموا إمبراطورية. لا توجد سلالة حاكمة - كل سلطان يصل بالقوة والتحالفات. نظام يبدو فوضويا لكنه أنتج أعظم عمارة في تاريخ الإسلام. فوضى سياسية ولدت نظاما هندسيا.

والقاهرة نفسها كانت نظاما معقدا انبثاقيا - مثل مستعمرة النمل في الفصل الأول. لا مخطط مركزي لشوارعها. كل حرفي يبني بجوار حرفي مشابه فتتشكل أحياء متخصصة تلقائيا. كل تاجر يختار موقعه بناء على جيرانه فتظهر أسواق منتظمة بلا تخطيط. من قواعد بسيطة محلية ينبثق نظام حضري معقد.

ومن قلب هذه المدينة المعقدة خرج مبنى هو تجسيد حرفي للفراكتال. مدرسة السلطان حسن - التي بنيت بين ١٣٥٦ و١٣٦٣م - ليست مجرد مبنى جميل. إنها فراكتال من القرن الرابع عشر. والسلطان حسن نفسه؟ قتل في مؤامرة قبل اكتمال البناء ولم يعثر على جثته قط. لكن المبنى اكتمل بدونه - كالمستعمرة التي تستمر بدون ملكتها.

لكن ما معنى هذا الكلام بالضبط؟ كيف يمكن لمبنى أن يكون فراكتالا؟

تذكر: الفراكتال شكل يحتوي نسخا مصغرة من نفسه على كل مقياس. ندفة كوخ تبدو متشابهة سواء نظرت إليها من بعيد أو كبرتها عشر مرات. المبنى الفراكتالي يفعل الشيء نفسه: حين تقف أمامه ترى تقسيما هندسيا. حين تدخل الفناء ترى نفس التقسيم بمقياس أصغر. حين تنظر إلى البلاط تحت قدميك - نفس النسب مرة أخرى. وحين ترفع رأسك إلى المقرنصات فوقك - أصغر وأصغر، نفس البنية تتكرر.

القياس: كيف تقيس فراكتالية مبنى؟

باحثون في جامعة كاليفورنيا استخدموا تقنية "عد الصناديق"؟ (box-counting): تضع شبكة مربعات على صورة واجهة المبنى وتعد كم مربعا يحتوي تفاصيل. ثم تصغر المربعات وتعد مرة أخرى. النسبة بين حجم المربع وعدد المربعات المملوءة تعطيك البعد الفراكتالي. مبنى حداثي (واجهة زجاجية ملساء) بعده قريب من ١.٠ - سطح مستو بلا تفاصيل. مبنى فراكتالي غني بعده أقرب إلى ١.٥ أو أعلى.

مدرسة السلطان حسن: $D = 1.16$. قد يبدو الرقم متواضعا لكنه يعني أن المبنى أكثر تعقيدا من خط لكن أبسط من سطح - بالضبط مثل منحنى كوخ التربيعي. والمفارقة أن المباني الحديثة التي نظن أنها "معقدة" - ناطحات السحاب الزجاجية - بعدها الفراكتالي $D \approx 1.05$. ملساء. مملة رياضيا. المسجد الذي عمره سبعمائة عام أغنى هندسيا من برج في مانهاتن.

لماذا يهم البعد الفراكتالي؟

دراسات في علم النفس المعماري أظهرت أن البشر يفضلون المباني ذات البعد الفراكتالي بين $1.3$ و$1.5$ - نفس نطاق الأشجار والسحب والجبال. المباني الحداثية الملساء ($D \approx 1.1$) تشعرنا بالاغتراب. المعمار الإسلامي الكلاسيكي يقع في النطاق الذي يريحنا بيولوجيا - ربما لأن أدمغتنا تطورت في بيئات فراكتالية طبيعية.

أربعة مستويات من التشابه الذاتي

الفراكتال في مدرسة السلطان حسن يظهر على أربعة مستويات متداخلة:

١
الفناء المركزي: مربع ضخم تحيط به أربعة إيوانات ضخمة. هذا هو المقياس الأكبر. الإيوانات موجهة نحو الاتجاهات الأربعة - وإيوان القبلة أكبرها.
٢
المدارس الأربع: كل إيوان يقود إلى مدرسة. كل مدرسة لها فناؤها الخاص المربع الأصغر. نسخة مصغرة من البنية الأم.
٣
الأرضيات الرخامية: كل أرضية مقسمة إلى ٩ مربعات. كل مربع مقسم بنسبة $1:\sqrt{2}$ إلى مستطيلات أصغر. نفس النسبة التي تحكم المبنى كله.
٤
المقرنصات: خلايا ثلاثية الأبعاد، كل خلية تحتوي خلايا أصغر، تحتوي خلايا أصغر. أعقد عنصر فراكتالي في العمارة الإسلامية - ٤ أو ٥ مستويات من التكرار الذاتي.
أرضيات رخامية فراكتالية
الأرضيات الرخامية - مربعات داخل مربعات
مقرنصات
المقرنصات - خلايا داخل خلايا
زخرفة هندسية حجرية
زخرفة هندسية - أنماط متكررة
نقش دائري
نقش نباتي - فروع داخل فروع
سقف خشبي نجمي
سقف خشبي - نجمة من نجوم أصغر
باب برونزي
باب نحاسي - تفاصيل داخل تفاصيل

النسبة السرية: $1:\sqrt{2}$

المربع هو الشكل الأصل. إخوان الصفا - جماعة سرية من فلاسفة البصرة في القرن العاشر - اعتبروا المربع من أكثر الأشكال استقرارا. يمثل الاتجاهات الأربعة ويحدد اتجاه القبلة.

لكن المربع وحده لا يصنع فراكتالا. السر في كيفية تقسيمه. خذ مربعا وارسم قطره. طول القطر = $\sqrt{2}$ ضعف طول الضلع. هذه النسبة - $1:\sqrt{2}$ - هي ما يحكم كل تقسيم في المبنى. من الفناء المركزي إلى الإيوانات إلى الأرضيات. نفس النسبة تتكرر أربع مرات على أربعة مقاييس مختلفة.

والمذهل أن هذه هي نفس النسبة التي تحكم أحجام الورق الحديثة (A4 وA3 وA5) - حين تطوي ورقة A4 من المنتصف تحصل على A5 بنفس النسب. مبدأ التشابه الذاتي الذي اكتشفه المعماريون المسلمون يعيش في كل ورقة تطبعها.

تقسيم فراكتالي: من الفناء إلى الزخرفة
المستوى: ٠
كل مستوى يضيف تقسيمات أصغر بنسبة $1:\sqrt{2}$. لاحظ كيف تتكرر البنية نفسها على كل مقياس.

الصانع والرياضي

أبو الوفاء البوزجاني في القرن العاشر كتب رسالة بعنوان "ما يحتاج إليه الصانع من أعمال الهندسة". لاحظ العنوان: ما يحتاج إليه الصانع. ليس رسالة نظرية بل دليل عملي. شرح فيها كيف يقسم الحرفي مساحة مربعة إلى أجزاء متناسبة باستخدام المسطرة والبركار فقط - بدون أرقام ولا حساب. الهندسة كانت لغة بصرية بين الرياضي والبناء.

هذا يعني أن المعماريين المسلمين لم يحتاجوا نظرية الفراكتال ليبنوا فراكتالا. كانوا يملكون شيئا أقوى: تقليدا حرفيا ينقل النسب من جيل إلى جيل. الأستاذ يعلم التلميذ: "قسم هذا المربع كما أريتك". التلميذ يطبق القاعدة على مقياس أصغر. والنتيجة - بدون أن يعرف أحد كلمة "فراكتال" - مبنى بعده الفراكتالي يضاهي الأشكال الرياضية التي اكتشفت بعده بستة قرون.

المعماريون المسلمون بنوا الفراكتال قبل أن يسميه ماندلبرو بستمائة عام. لم يحتاجوا حاسوبا ولا نظرية. احتاجوا مسطرة وبركارا وتقليدا حرفيا عمره أجيال.

الفراكتال إذن ليس حكرا على الحواسيب والرياضيات. إنه مبدأ عميق: قاعدة بسيطة تكرر نفسها على مقاييس مختلفة تنتج تعقيدا لا نهائيا. في مسجد السلطان حسن القاعدة هي نسبة $1:\sqrt{2}$ المطبقة أربع مرات. في ندفة كوخ القاعدة هي "أضف مثلثا على كل ضلع". وفي مجموعة ماندلبرو القاعدة هي "ربع واجمع". نفس المبدأ بالضبط الذي رأيناه في مولدات الأعداد العشوائية - معادلة واحدة تكرر نفسها فتنتج ما يبدو عشوائيا. لكن ماذا يحدث حين يكون التكرار حساسا - حساسا بشكل مفرط - لأدنى تغيير؟

ليس السلطان حسن وحده
الفراكتال يظهر في العمارة الإسلامية في كل مكان: الحمراء في غرناطة ($D = 1.32$)، مسجد الشاه في أصفهان، الجامع الأموي في دمشق. نيكوس سالينغاروس - رياضي ومنظر معماري - أثبت أن العمارة التقليدية عموما (الإسلامية والقوطية والصينية) أغنى فراكتاليا من الحداثية. الحداثة حذفت التفاصيل باسم "البساطة" - وحذفت معها ما يجعل المباني محببة بيولوجيا.

الفصل السابع

الفوضى الحتمية

في صباح شتوي عام ١٩٦١م كان إدوارد لورنز - عالم أرصاد في MIT - يشغل محاكاة طقس على حاسوب Royal McBee LGP-30 بحجم مكتب. كان قد شغل نفس المحاكاة بالأمس وأراد رؤية النتائج مرة أخرى. لكن بدلا من البدء من الصفر قرر توفير الوقت: أخذ الأرقام من منتصف الطباعة السابقة وأدخلها كنقطة بداية جديدة.

مشكلة واحدة صغيرة: الحاسوب كان يحسب بدقة ٦ أرقام عشرية (0.506127) لكن الطابعة كانت تطبع ٣ أرقام فقط لتوفير الورق (0.506). أدخل لورنز الرقم المقرب وذهب ليشرب قهوة في الممر.

حين عاد بعد ساعة وقف مذهولا أمام الطابعة. الطقس مختلف تماما. ليس مختلفا قليلا. مختلف كأنه من كوكب آخر. في البداية ظن أن الحاسوب تعطل. لكن بعد أيام من التحقق أدرك الحقيقة: فارق $0.000127$ - أقل من جزء من عشرة آلاف - في رقم واحد غير مسار الطقس بأكمله.

لم يكن يعلم أنه اكتشف للتو أحد أعمق المبادئ في الرياضيات. سماه لاحقا تأثير الفراشة ؟ في محاضرة عنوانها الشهير: "هل يمكن لرفرفة جناحي فراشة في البرازيل أن تسبب إعصارا في تكساس؟"

والإجابة ليست "ربما". الإجابة: حتما. لكن ليس لأن الطقس عشوائي. بل لأنه حتمي وحساس. هذا هو التمييز الجوهري الذي يجب أن نفهمه:

الفوضى ≠ العشوائية. الفوضى = نظام حتمي تماما لكنه حساس حساسية مفرطة لأدنى تغيير في شروطه الأولية.

الخريطة اللوجستية: فوضى من سطر واحد

أبسط نظام فوضوي ممكن. معادلة واحدة:

$$x_{n+1} = r \cdot x_n \cdot (1 - x_n)$$

حيث $x$ بين ٠ و١ و$r$ معامل التحكم. صممت أصلا لنمذجة تقلبات أعداد الأرانب. لكن شاهد ماذا يحدث حين تحرك r:

الخريطة اللوجستية: حرك r وشاهد الفوضى
2.50
r < 3: استقرار. | r ≈ 3.45: تأرجح بين قيمتين. | r ≈ 3.54: أربع قيم. | r > 3.57: فوضى.

مخطط التشعب: أجمل رسم في الرياضيات

لكن المفاجأة الحقيقية تظهر حين ترسم كل قيم r معا. هذا هو مخطط التشعب ؟ - وهو من أجمل الأشكال في الرياضيات كلها. اقرأه من اليسار إلى اليمين: خط واحد مستقر ← ينشطر إلى اثنين ← ينشطر إلى أربعة ← فوضى. لكن داخل الفوضى: نوافذ صغيرة من النظام تظهر وتختفي. والرسم كله فراكتال - كبر أي جزء تجد نفس الشكل.

مخطط التشعب
لاحظ: بعد الفوضى تظهر نوافذ نظام مفاجئة. فوضى ثم نظام ثم فوضى. والرسم نفسه فراكتال - كبر أي جزء تجد نفس النمط.
ثابت فايغنباوم
ميتشل فايغنباوم اكتشف شيئا مذهلا: المسافة بين كل تشعب والذي يليه تتقلص بنسبة ثابتة دائما: $\delta = 4.66920\ldots$ هذا الثابت يظهر في كل الأنظمة الفوضوية - من صنابير الماء المتقطرة إلى دورات الأرانب إلى ضربات القلب. ثابت كوني مثل π لكن لا يعرفه أحد تقريبا.

الفصل الثامن

الفوضى تصنع أرقاما

الخريطة اللوجستية التي رأيناها للتو - التي صممت لنمذجة أعداد الأرانب - هي في الحقيقة مولد أعداد عشوائية. نعم. نفس المعادلة. عند $r = 4$ تنتج سلسلة أعداد بين ٠ و١ لا يمكن تمييزها عن العشوائية الحقيقية.

لماذا $r = 4$ تحديدا؟ تذكر مخطط التشعب. عند $r < 3$ يستقر النظام. عند $r \approx 3.57$ يدخل الفوضى. لكن عند $r = 4$ بالذات يحدث شيء خاص: مدى القيم يغطي كل الفترة من ٠ إلى ١ بالتساوي. أي أن المعادلة تزور كل قيمة ممكنة - شرط أساسي لأي مولد عشوائي جيد. فوضى حتمية تولد ما يبدو عشوائيا.

والأعجب أن هذا المولد يتفوق على LCG في اختبار مهم: لا يمكن عكس هندسته بسهولة. مع LCG إذا عرفت ثلاثة أعداد متتالية يمكنك استنتاج المعاملات والتنبؤ بكل الأعداد التالية. مع الخريطة اللوجستية الأمر أصعب بكثير - الحساسية المفرطة للشروط الأولية تعني أن خطأ ضئيلا في تقدير البذرة يعطي تسلسلا مختلفا تماما.

لعبة الفوضى: سحر من العدم

لكن هناك شيء أجمل من مولد عشوائي. تعال نلعب لعبة تربط كل ما تعلمناه - العشوائية والفراكتال والنظام.

ضع ثلاث نقاط على رؤوس مثلث. اختر نقطة بداية في أي مكان. ثم في كل خطوة: اختر رأسا عشوائيا وتحرك نصف المسافة نحوه. ضع نقطة. كرر. ما الذي تتوقعه؟ غيمة عشوائية من النقاط بلا شكل؟ اضغط "ابدأ" وراقب. بعد مائة نقطة ستلمح شيئا. بعد ألف ستكون متأكدا. بعد عشرة آلاف لن تصدق عينيك.

لعبة الفوضى: شاهد الشكل يظهر من العدم
النقاط: ٠

انظر إلى الشاشة. من قفزات عشوائية بحتة - نرد يختار رأسا ونقطة تتحرك نصف المسافة - يظهر مثلث سيربنسكي. فراكتال كامل. نظام مثالي من فوضى محضة.

هذا ليس خدعة بصرية. هذه خاصية رياضية عميقة اسمها الجاذب ؟ (attractor). بعض الأنظمة الفوضوية لها أشكال تنجذب إليها كل المسارات مهما كانت نقطة البداية. ابدأ من أي مكان على الشاشة - الزاوية، المنتصف، الحافة - وستحصل على نفس مثلث سيربنسكي بالضبط. النقطة الأولى لا تهم. الجاذب يسحب كل شيء نحوه.

لكن لماذا مثلث سيربنسكي تحديدا؟ لأن قاعدة "نصف المسافة" تمنع النقاط من الوقوع في مناطق معينة - المثلثات المقلوبة في كل مستوى. القاعدة بسيطة لكنها تنحت فراغات هندسية دقيقة. غير القاعدة من "نصف" إلى "ثلث" المسافة تحصل على شكل مختلف. غير عدد الرؤوس من ٣ إلى ٤ مع شرط "لا تختر نفس الرأس مرتين" تحصل على فراكتال آخر. كل مجموعة قواعد لها جاذبها الخاص.

الدائرة تكتمل

توقف لحظة وانظر إلى ما حدث. بدأنا هذه المقالة بمولدات أعداد عشوائية - آلات حتمية تتظاهر بالعشوائية. ثم اكتشفنا الفراكتال - أشكال من تكرار بسيط. ثم نظرية الفوضى - حتمية تبدو عشوائية. والآن: العشوائية تصنع فراكتالا، والفوضى تصنع أرقاما عشوائية. الخيوط كلها تتقاطع.

الاتصال المذهل

نفس المعادلة التي تنمذج انهيار أعداد الأرانب تولد أعدادا عشوائية تشفر كلمة مرور بنكك. ونفس العملية العشوائية التي تبدو فوضوية تنتج فراكتالا منتظما. النظام والفوضى وجهان لعملة واحدة.


الفصل التاسع

التشفير وفن الإخفاء

فلنتوقف ونسأل: لماذا نهتم بتوليد أعداد "عشوائية" أصلا؟ الإجابة في كلمة واحدة: التشفير.

أبسط شفرة ممكنة: حرك كل حرف بمقدار ثابت. أ تصبح ج، ب تصبح د، وهكذا. هذه شفرة قيصر - استخدمها يوليوس قيصر قبل ألفي عام. ومشكلتها واضحة: كل أ في الرسالة تصبح نفس الحرف. ابحث عن التكرارات تكسر الشفرة في دقائق.

لكن ماذا لو استخدمت إزاحة مختلفة لكل حرف؟ وكل إزاحة "عشوائية"؟ هذا هو مبدأ الدفتر ذي الاستخدام الواحد ؟ (one-time pad) - وهو الشفرة الوحيدة المثبت رياضيا أنها غير قابلة للكسر. المشكلة: تحتاج مفتاحا بطول الرسالة. مفتاح عشوائي حقيقي. ومشاركته مع المستلم بشكل آمن.

الحل الحديث: استخدم مولد أعداد عشوائية ينتج مفتاحا طويلا من بذرة قصيرة. يكفي أن يتفق الطرفان على البذرة. نفس البذرة = نفس المفتاح = نفس التشفير وفك التشفير.

جرب بنفسك: شفرة XOR

شفرة XOR: اكتب رسالة وشفرها
كل حرف يشفر بإزاحة "عشوائية" مختلفة مولدة من المفتاح. نفس المفتاح يفك الشفرة.

البذرة تصنع عالما: المناظر الطبيعية

لكن البذرة لا تستخدم فقط في التشفير. في ألعاب الفيديو مثل Minecraft كل عالم يتولد من بذرة واحدة. نفس البذرة = نفس الجبال والوديان والأنهار لكل لاعب في العالم.

مناظر من بذرة: نفس البذرة = نفس العالم
جرب نفس البذرة مرتين - ستحصل على نفس المنظر بالضبط. غير البذرة يتغير كل شيء.

حشو الدوائر: فن من خوارزمية

وهذا مثال آخر: خوارزمية تضع دوائر عشوائية وتكبرها حتى تلمس دائرة أخرى. النتيجة: فن تكويني جميل من بضعة أسطر كود. والبذرة تحدد الترتيب.

حشو الدوائر: فن خوارزمي

من أين تأتي البذرة الأولى؟

سؤال لم نجبه بعد: إذا كان كل شيء يبدأ من بذرة - فمن أين تأتي البذرة نفسها؟ على نظام Linux يوجد ملف سحري اسمه /dev/urandom. هذا الملف يحصد فوضى حقيقية من كل مكان: تذبذبات توقيت القرص الصلب. ضجيج بطاقة الشبكة. حركات الماوس. مفاتيح لوحة المفاتيح. يجمعها كلها في "بركة إنتروبيا" ويولد منها أعدادا عشوائية حقيقية تصلح لتكون بذورا.

هكذا يعمل النظام الكامل: فوضى حقيقية من العالم الفيزيائي ← بذرة ← مولد أعداد عشوائية حتمي ← تيار لا نهائي من الأعداد "العشوائية" ← تشفير.

التهديد الكمي: الباب الخلفي عبر الزمن

كل ما تحدثنا عنه - LCG وميرسين تويستر وحتى مولدات التشفير القوية مثل AES وChaCha20 - يقوم على رهان واحد: أن بعض المسائل الرياضية صعبة الحل. خذ عددا من ٦٠٠ رقم واطلب من حاسوب أن يحلله إلى عوامله الأولية. أسرع حواسيب العالم تحتاج ملايين السنين. على هذه الصعوبة يقوم كل تشفير الإنترنت.

لكن في عام ١٩٩٤ نشر بيتر شور خوارزمية تستطيع تحليل هذه الأعداد في ساعات - لكنها تحتاج حاسوبا كميا. حاسوب يعمل بقوانين ميكانيكا الكم بدلا من قوانين الإلكترونيات التقليدية.

الحاسوب الكمي القوي بما يكفي لا يوجد بعد. لكن هنا يظهر التهديد الأخطر. يسميه خبراء الأمن "احصد الآن، فك الشفرة لاحقا" ؟ (Harvest Now, Decrypt Later):

١
جهاز استخبارات يسجل اتصالاتك المشفرة اليوم ويخزنها على أقراص رخيصة
٢
ينتظر ١٠ أو ١٥ أو ٢٠ عاما حتى يتوفر حاسوب كمي قوي
٣
يفك تشفير كل ما خزنه دفعة واحدة. كل رسالة. كل معاملة بنكية. كل سر دولة.

هذا يعني أن اتصالاتك اليوم معرضة للخطر - ليس الآن بل في المستقبل. والمعلومات الحساسة (أسرار عسكرية، ملفات طبية، براءات اختراع) لا تفقد قيمتها خلال ٢٠ عاما.

لذلك بدأ السباق. في عام ٢٠٢٢ اختار المعهد الأمريكي للمعايير (NIST) خوارزميات جديدة مقاومة للحوسبة الكمية. وOpenSSH - البرنامج الذي يحمي كل خادم Linux على الإنترنت تقريبا - بدأ التحول:

الإصدارالتاريخما تغير
OpenSSH 9.0٢٠٢٢أول دعم لتبادل مفاتيح مقاوم للكم (sntrup761)
OpenSSH 9.9٢٠٢٤إضافة ML-KEM (المعيار الجديد من NIST)
OpenSSH 10.0أبريل ٢٠٢٥ML-KEM أصبح الافتراضي لكل اتصال
OpenSSH 10.1٢٠٢٥تحذير صريح عند الاتصال بدون حماية كمية

الخوارزمية الجديدة "هجينة" بتصميم ذكي: تجمع ML-KEM (المقاوم للكم) مع x25519 (التقليدي). حتى لو تبين أن الجزء الكمي ضعيف يبقى الجزء التقليدي يحميك. تحوط في الاتجاهين.

هذا التحذير يظهر الآن على الشاشات
"This session may be vulnerable to
'store now, decrypt later' attacks"

إصدار OpenSSH 10.1 يعرض هذا التحذير حين يتصل خادمك بدون تشفير مقاوم للكم. ١ إذا كنت تدير خوادم - حدث الآن. ما تنقله اليوم بدون تشفير كمي قد يقرأه شخص ما بعد عقد.

لكن كيف نعرف أصلا أن تشفيرنا جيد؟ كيف نقيس كمية "العشوائية" في مفتاح؟ كيف نميز نصا مشفرا جيدا من نص مشفر سيئا يمكن كسره؟ الإجابة في مفهوم اكتشفه فيزيائي نمساوي مأساوي قبل أن يولد أول حاسوب - ودفع حياته ثمنا لاكتشافه.


الفصل العاشر

الإنتروبيا لماذا يفسد كل شيء

في سبتمبر ١٩٠٦م كان لودفيج بولتزمان في إجازة مع عائلته في بلدة دواينو الإيطالية المطلة على البحر. فيزيائي نمساوي أمضى ثلاثين عاما يدافع عن فكرة واحدة: أن المادة مكونة من ذرات وأن الحرارة ليست إلا حركتها. سخر منه كبار الفيزيائيين - إرنست ماخ كان يرفض حتى وجود الذرات لأنه "لا يمكن رؤيتها". هوجم في المؤتمرات. سخروا من أوراقه. في ذلك اليوم في دواينو بينما كانت زوجته وابنته على الشاطئ شنق نفسه في غرفة الفندق.

المأساة أنه بعد أقل من عام أثبت جان بيران وجود الذرات تجريبيا وفاز بجائزة نوبل. بولتزمان كان محقا في كل شيء. وعلى شاهد قبره في فيينا حفرت معادلة واحدة - هي كل ما تركه:

$$S = k \cdot \log W$$

الإنتروبيا ($S$) تساوي ثابت بولتزمان ($k$) مضروبا في لوغاريتم عدد الحالات الممكنة ($W$). كلما زادت الحالات الممكنة زادت الفوضى.

فكر في الأمر هكذا: كوب شاي ساخن في غرفة باردة. الحرارة مركزة في الشاي - هذه حالة واحدة محددة من ترتيب الجزيئات. لكن "الحرارة موزعة بالتساوي في الغرفة" - هذه ملايين الترتيبات الممكنة. احتمال أن تتركز الحرارة تلقائيا في الشاي مرة أخرى ضئيل لدرجة أنه لن يحدث قبل موت الكون. ليس مستحيلا - فقط غير محتمل بشكل ساحق. الإنتروبيا لا تزداد لأن الكون "يريد" الفوضى. بل لأن حالات الفوضى أكثر عددا بكثير من حالات النظام.

إنتروبيا المعلومات

في عام ١٩٤٨ سرق كلود شانون الكلمة. ليس سرقة حرفية - لكن فون نويمان نصحه: "سمها إنتروبيا. لا أحد يفهم الإنتروبيا فعلا، فلن يجادلك أحد في الندوات."

إنتروبيا المعلومات؟ تقيس كمية المفاجأة في رسالة. فكر في حرف عربي. إذا كنت تعرف أن الحرف التالي هو "الألف" بنسبة ٩٩٪ - فظهور الألف لا يفاجئك. معلومات قليلة. إنتروبيا منخفضة. لكن إذا كان الحرف التالي قد يكون أي شيء باحتمال متساو - كل حرف يفاجئك. معلومات كثيرة. إنتروبيا عالية. معادلة شانون تحسب هذا بالضبط:

$$H = -\sum_{i=1}^{n} p_i \log_2 p_i$$

حيث $p_i$ هو احتمال ظهور الرمز $i$. التشابه مع معادلة بولتزمان ليس صدفة - هي نفس الرياضيات في سياق مختلف. الفيزيائي يعد حالات الجزيئات والمهندس يعد حالات الرموز.

لماذا يهم هذا للتشفير؟

هل كلمة مرورك آمنة؟ الإجابة ليست في طولها بل في إنتروبيتها. لنفهم لماذا.

نص عربي عادي: حرف الألف يظهر ١٢.٥٪ من الوقت. حرف الظاء يظهر ٠.١٪. لأن بعض الحروف أكثر شيوعا يمكنك تخمين الحرف التالي. هذا يعني إنتروبيا منخفضة - حوالي ٤ بت لكل حرف. نص مشفر جيد: كل رمز يظهر بنفس الاحتمال تقريبا. لا يمكنك تخمين شيء. إنتروبيا عالية - حوالي ٨ بت لكل بايت.

وهنا الرابط المباشر بالتشفير: إذا كان النص المشفر إنتروبيته منخفضة فالشفرة مكسورة. لأن الإنتروبيا المنخفضة تعني وجود أنماط - والأنماط تعني معلومات مسربة. كل مولد عشوائي سيئ (مثل المربع الأوسط أو RANDU) ينتج أعدادا إنتروبيتها أقل من الحد الأقصى. وهذا بالضبط ما يجعلها غير صالحة للتشفير.

كلمة مرور من ٨ أحرف عشوائية (أحرف كبيرة وصغيرة وأرقام ورموز = ٩٥ رمزا ممكنا): إنتروبيتها $\log_2(95^8) \approx 52.6$ بت. كلمة مرور "password123": إنتروبيتها تقارب الصفر لأنها ضمن أول ألف كلمة يجربها أي مهاجم. الإنتروبيا هي ما يحدد فعلا قوة أمنك الرقمي.

حاسبة الإنتروبيا: قس محتوى المفاجأة
النص العربي العادي: ~4 بت/حرف. النص المشفر الجيد: ~8 بت/حرف (الحد الأقصى). قارن!
الاتصال العميق
إنتروبيا الفيزياء (الحرارة تنتشر) وإنتروبيا المعلومات (الرسالة غير متوقعة) - نفس الرياضيات بالضبط. نفس المعادلة. بولتزمان لو عاش ليرى شانون لعرف أن معادلته تحكم ليس فقط غليان الماء بل كل رسالة نرسلها على الإنترنت.

الفصل الحادي عشر

النظام في قلب الفوضى

تخيل أنك واقف على شاطئ. الموجة التي تضرب قدميك - مثل موجة هوكوساي في أول المقالة - تبدو فوضوية. لكن كل قطرة فيها تتبع قوانين نيوتن بدقة مطلقة. كل ذرة ماء تعرف أين تذهب. الفوضى ليست في الماء بل في عينيك - في عجزك عن تتبع مليارات القطرات دفعة واحدة.

هذا ما تعلمناه في هذه الرحلة.

بدأنا بمستعمرة نمل في صحراء أريزونا. خمسون ألف نملة، كل واحدة تتبع ثلاث قواعد كيميائية بسيطة، لا قائد ولا خطة - ومن هذا تنبثق شبكة طرق تحسدها شركات اللوجستيات. ونملة لانغتون: قاعدتان فقط، عشرة آلاف خطوة من الفوضى العمياء، ثم - بلا أي تفسير رياضي حتى اليوم - طريق سريع لا ينتهي.

ثم سألنا: هل يستطيع الحاسوب أن يرمي نردا؟ وبنينا مولدات من الصفر. المربع الأوسط الذي انتحر عند البذرة ٢٥٠٠. وRANDU الذي خدع جيلا كاملا من العلماء. ومعادلة LCG التي حكمت العالم بسطر واحد من الكود. تعلمنا أن ما يبدو عشوائيا قد لا يكون كذلك - وأن الاختبار الوحيد هو أن تنظر من زوايا لم تخطر لك.

واكتشفنا الفراكتال. شكل يحتوي نفسه إلى ما لا نهاية. ماندلبرو - الغريب الذي رفضته الجامعات - سماه عام ١٩٧٥. لكن حرفيي القاهرة في القرن الرابع عشر كانوا يبنونه من حجر ورخام بمسطرة وبركار. مسجد السلطان حسن - الذي مولته أموال ضحايا الطاعون وقتل صاحبه قبل اكتماله - يقف شاهدا على أن النظام يولد من الفوضى، والجمال يولد من المأساة.

ورأينا كيف أن فارقا أصغر من جزء من عشرة آلاف غير مسار الطقس بأكمله في حاسوب لورنز. تأثير الفراشة. والخريطة اللوجستية - معادلة صممت لعد الأرانب - تحولت مولدا للعشوائية عند $r = 4$. ولعبة الفوضى حولت قفزات عشوائية إلى مثلث سيربنسكي المثالي. العشوائية تصنع نظاما. والنظام ينتج عشوائية. الحدود بينهما ليست حدودا - إنها مرآة.

ثم ربطنا كل هذا بحياتك اليومية. بذرة واحدة - رقم - تولد مفتاحا يحمي رسائلك ومعاملاتك البنكية وأسرار الدول. والإنتروبيا - الكلمة التي حفرها بولتزمان على شاهد قبره بعد أن انتحر لأن العالم لم يصدقه - هي نفسها ما يقيس أمان تشفيرك. نفس المعادلة. نفس الرياضيات. الفيزيائي الذي مات وحيدا في فندق إيطالي لا يعرف أن معادلته تحمي كل رسالة ترسلها على الإنترنت.

بذرة واحدة تصنع كل شيء

آخر تجربة. بذرة واحدة - رقم واحد - تولد منظرا طبيعيا وتشفر رسالة وتقيس الإنتروبيا. كل شيء من رقم واحد. غير الرقم يتغير كل شيء. أبقه كما هو يبقى كل شيء كما هو. إلى الأبد. حتمية مطلقة تتنكر في زي فوضى مطلقة.

بذرة واحدة ← منظر + تشفير + إنتروبيا
المنظر
نقاط عشوائية
نفس البذرة = نفس المنظر + نفس النقاط + نفس التشفير. دائما. غير البذرة يتغير كل شيء.

والآن يأتي الحاسوب الكمي. آلة تعمل بقوانين عالم لا يشبه عالمنا - عالم تكون فيه القطة حية وميتة معا. خوارزمية شور تستطيع كسر كل تشفير نعتمد عليه. ليس اليوم - لكن ربما بعد عقد. فنبني خوارزميات جديدة مقاومة للكم. فوضى أعمق وأعقد. سباق لا ينتهي بين من يبني القفل ومن يصنع المفتاح. يغذيه سؤال واحد لا تنتهي صلاحيته: هل هذه الأعداد عشوائية بما يكفي؟

في البدء كانت البذرة. رقم واحد. منها ولدت أعداد لا نهائية. ومن الأعداد ولدت أشكال لم يرها أحد من قبل. ومن الأشكال ولدت شفرات لا يكسرها الزمن. ومن الشفرات ولد أمان لم يعرفه العالم قط. كل هذا من رقم واحد. كل هذا من قاعدة واحدة تكرر نفسها.

بين مستعمرة النمل في صحراء أريزونا والمقرنصات في سقف مسجد السلطان حسن. بين قاعدتي نملة لانغتون ومعادلة $z = z^2 + c$. بين بذرة التشفير في هاتفك ومعادلة بولتزمان المحفورة على شاهد قبر في فيينا. بين الموجة العظيمة التي رسمها هوكوساي والموجة التي تضرب شاطئا الآن وأنت تقرأ هذه الكلمات.

خيط واحد يمتد عبر ألف عام من التاريخ البشري. عبر الرياضيات والفيزياء والأحياء والعمارة والتشفير. خيط بسيط بساطة مخيفة:

قواعد بسيطة. تكرار. تعقيد.

النظام في قلب الفوضى. والفوضى في قلب النظام. والجمال في المسافة بينهما.

ملحق

معجم المصطلحات

بالعربيةبالإنجليزيةالمعنى باختصار
الانبثاقEmergenceظهور خصائص معقدة على مستوى النظام لا توجد في أجزائه المنفردة
شبه عشوائيPseudo-randomأعداد تبدو عشوائية لكنها ناتجة عن معادلة حتمية قابلة للإعادة
البذرةSeedالرقم الأولي الذي يبدأ منه المولد. نفس البذرة = نفس السلسلة دائما
الدورةPeriodعدد الأعداد التي يولدها المولد قبل أن يبدأ بالتكرار
المربع الأوسطMiddle-square methodخوارزمية فون نويمان: ربّع العدد وخذ الأرقام الوسطى
المولد التطابقي الخطيLCGمولد يحسب كل عدد بالضرب والجمع والباقي. سطر كود واحد
ميرسين تويسترMersenne Twisterمولد بدورة $2^{19937}$. الافتراضي في Python وRuby وPHP
مولد تشفيريCSPRNGمولد غير قابل لعكس الهندسة. يستخدم للتشفير فقط
فراكتالFractalشكل يحتوي نسخا مصغرة من نفسه على كل مقياس. بعده كسري
البعد الفراكتاليFractal dimensionرقم بين الأعداد الصحيحة يقيس تعقيد الشكل. خط = ١، سطح = ٢
عد الصناديقBox-countingطريقة قياس البعد الفراكتالي بعد المربعات المملوءة على مقاييس مختلفة
مجموعة ماندلبروMandelbrot setفراكتال من المعادلة $z = z^2 + c$. أعقد كائن رياضي معروف
تأثير الفراشةButterfly effectحساسية مفرطة للشروط الأولية. تغيير ضئيل يغير كل شيء
الخريطة اللوجستيةLogistic mapمعادلة $x = rx(1-x)$. من الاستقرار إلى الفوضى حسب قيمة r
مخطط التشعبBifurcation diagramرسم يوضح تحول النظام من نظام إلى فوضى عبر تغيير معامل
الجاذبAttractorشكل أو حالة ينجذب إليها نظام ديناميكي مهما كانت البداية
ثابت فايغنباومFeigenbaum constant$\delta = 4.6692...$ نسبة ثابتة بين التشعبات في كل الأنظمة الفوضوية
الدفتر ذو الاستخدام الواحدOne-time padالشفرة الوحيدة المثبت رياضيا أنها غير قابلة للكسر
الإنتروبياEntropyمقياس الفوضى (فيزياء) أو المفاجأة (معلومات). نفس الرياضيات
احصد الآن فك لاحقاHarvest Now, Decrypt Laterتسجيل اتصالات مشفرة اليوم لفكها بحاسوب كمي مستقبلا
تورينغ-كاملTuring-completeنظام يستطيع نظريا حساب أي شيء يحسبه أي حاسوب
الحياة الاصطناعيةArtificial Lifeمحاكاة حاسوبية لأنظمة تظهر خصائص الحياة من قواعد بسيطة
حافة الفوضىEdge of Chaosالحد بين النظام الجامد والفوضى التامة. حيث ينشأ التعقيد
اقرأ أيضا
منطق · رياضيات · فلسفة
الجَذْر الأصَمّ
حين يصطدم العقل بنفسه
خوارزميات · شعر · تاريخ
حركة الحصان
من شعر ابن دُرَيد إلى خوارزميات النحل