Choose Language
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
Abak Logo
ABK-GOFAI: ذكاء اصطناعي كلاسيكي تقليدي

ABK-GOFAI: ذكاء اصطناعي كلاسيكي تقليدي للعب Abak Evolution Backgammon.

بدون مساعدة الشبكات العصبية، كان تطوير ذكاء اصطناعي لـ Abak مهمة صعبة ووصل مع الوقت إلى حد واضح. ومع ذلك، كانت عملية ممتعة لتطويره، ولا يزال في الخدمة للعب على مستوى "سهل" و"عادي" و"متقدم". هذا منشور عن كيفية عمله وكيف صُنع.

المرحلة 1، GOFAI PHP

أول نسخة من ذكاء Abak الاصطناعي كُتبت بلغة PHP وكانت تتسبب في تعطل النظام بأخطاء 'نفاد الذاكرة'، لكنها مهدت الطريق لنسخة C++. كانت ساحة النماذج الأولية بالنسبة لي لأكتشف كيف بحق السماء أصنع ذكاءً اصطناعيًا. أول مرة شغلتها مربوطة بالخادم (فكنت ألعب فعليًا ضدها)، احتاجت 15 ثانية طويلة جدًا لاختيار حركة، وعندما رأيت الخادم يتحرك بمفرده، جُننت وربما رقصت قليلاً. لست متأكدًا.

المرحلة 2، GOFAI C

إذن، نسخة C/C++ من الذكاء الاصطناعي، أول نسخة تذهب لبيئة إنتاجية، محرك GOFAI الحبيب، وُلدت من رماد PHP. تشغل 29 خوارزمية تحليل على آلاف المواقف في نانو ثوانٍ، وتعمل كالتالي:

  • بالنظر إلى وضعية لوحة ومجموعة نرد.
  • احسب حالة
  • احصل على كل حركة ممكنة.
  • حلل كل حركة وأعطها درجة.
  • اختر 'أفضل' درجة.

إليك رسمًا بيانيًا للعملية.

Diagrama Abak-GOFAI Artificial Intelligence

يتكون من أربع وظائف رئيسية:

  • الحصول على الإجراءات (حساب الحركات الصالحة):

    بالنظر إلى وضعية لوحة ورمية نرد، يحسب كل حركة صالحة.

    يمكن أن تتراوح الحركات الصالحة من 0 إلى عشرات الآلاف.

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

  • الحصول على الحالة (حساب حالة اللوحة):

    بالنظر إلى وضعية لوحة، يحسب حالة دلالية، وهي واضحة بذاتها:

    • البداية
    • منتصف اللعبة
    • الجري بلا أمل
    • الجري مع أمل
    • نهاية اللعبة
    • الدخول للداخل
  • تحليل الحركة (حساب الدرجات لوضعية اللوحة):

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

    بدأ الذكاء الاصطناعي بـ 8 خوارزميات وانتهى بـ 29، نبذة منها:

    • ارتفاع الأعمدة
    • خطر التعرض للضرب
    • خطر التعرض للمحاصرة
    • قوة الداخل
    • محاور الهروب
    • القطع على الحاجز
    • القطع الآمنة

    كثير من هذه الخوارزميات كانت أساسية جدًا في البداية أو لم تكن موجودة أصلاً.

    بمرور الوقت عملت عليها، مضيفًا ميزات وضابطًا العوامل بدقة.

  • اختيار الإجراء (اختيار 'أفضل' حركة):

    هذه الخوارزمية بسيطة نسبيًا إذا كنت تريد فقط أعلى درجة (كما يفعل المستوى المتقدم).

    للمستوى العادي والسهل، يختار حركة عشوائيًا من قائمة أفضل الإجراءات؛ حجمها (أو تحملها للحركات الضعيفة) يُحدد بالمستوى.

بفضل C، هذا المحرك سريع كالبرق، لذا سأستخدمه دائمًا كوظيفة الحصول على الإجراءات الأساسية.

المرحلة 3، ضبط GOFAI C

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

كانت العملية ممتعة لكن بطيئة بشكل مؤلم. لعبت كثيرًا ضد الحاسوب، وكلما رأيت حركة سيئة، أتيت لهذه الأدوات للتحقق مما حدث خطأ. أحيانًا أرسلني ذلك في مسار إصلاح خوارزمية، أو ضبط عامل، أو بناء نموذج تحليل جديد. وأحيانًا، وهذا كان جميلاً، قادني لإعادة النظر في استراتيجياتي في Abak Evolution.

Abak-GOFAI Debug Tool Screenshot 1 Abak-GOFAI Debug Tool Screenshot 2

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

المرحلة 4، اليأس

لكنني أردت المزيد لأنني ألعب Abak، وكنت أحتاج لاعبًا قويًا للاستمتاع، ولم يكن هناك الكثير من البشر الذين يلعبونها في ذلك الوقت (وحتى وأنا أكتب هذا).

ولهذا النهج الكثير من السلبيات:

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

المرحلة 5، الصحوة

ثم، في يوم من الأيام، في 2018، هزمت Google بطل لعبة GO بشبكتها العصبية AlphaGo، وكان هناك ضجة كبيرة، وأصبحت مكتبات تعلم الآلة مفتوحة المصدر الرائعة متاحة، وكانت تستخدم معالجات الرسوميات المنزلية لتسريع عملية التدريب.

بالطبع، كنت أعرف قليلاً عن الشبكات العصبية بالفعل، لكنني لم أبنِ واحدة قط، وبصراحة، كنت أراها مهمة تتجاوز قدراتي.

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

لكن هذه القصة تنتهي هنا.

إذا قرأت كل شيء حتى هنا، أنا مندهش.

هذا النص كُتب لأغراض تحسين محركات البحث من قبل فريق Abak Evolution الأمين،
المعروف أيضًا بـ Samy Garib.

Abak Evolution Backgammon هي نسخة رائعة من الطاولة قائمة على الفئات، تضيف حرفيًا بُعدًا جديدًا للعبة اللوحية الكلاسيكية.