الذكاء الاصطناعي للعبة Threes! بواسطة سيرفو ذ م م. يمكنك الحصول على اللعبة من هنا: http://asherv.com/threes/
كان بناء هذا الذكاء الاصطناعي مصدر إلهام لي في وقت لاحق من الذكاء الاصطناعي لعام 2048، وقد تم نقل بعض الأفكار من الذكاء الاصطناعي لعام 2048 إلى هذا الذكاء الاصطناعي أيضًا.
على الرغم من أنني لم أقم بقياس أداء هذا الذكاء الاصطناعي رسميًا (حتى الآن)، إلا أنني أعلم أنه نجح في الوصول إلى البلاط 6144 عدة مرات، وهو أعلى بلاط متاح في اللعبة. (البلاطات الأعلى ممكنة ولكنها غير محتملة، بسبب التأثيرات العشوائية الشديدة). أعلى نتيجة (في وقت كتابة هذا التقرير) هي 775.524 نقطة:
يعتبر هذا الذكاء الاصطناعي أكثر تجريبية من شقيقه الأحدث 2048 AI بسبب التعقيد المتزايد للثلاثيات! ولأنه لم يحصل على الكثير من الوقت للتطوير. وعلاوة على ذلك، الثلاثات! يعد بشكل عام هدفًا متحركًا بعض الشيء حيث يتم تعديل خوارزميات إنشاء المربعات العشوائية أحيانًا، مما يستلزم إجراء تغييرات في الذكاء الاصطناعي.
لقد تم بالفعل تفصيل خوارزمية الذكاء الاصطناعي هذا بشكل أساسي في إجابة StackOverflow التي تصف الذكاء الاصطناعي 2048 الخاص بي. في جوهر الأمر، تقوم بتنفيذ بحث محسّن للغاية عن طريق القوة عبر شجرة اللعبة (جميع التحركات الممكنة، وقيم ظهور المربعات وقيم المربعات)، وذلك باستخدام التحسين المتوقع لدمج النتائج والعثور على "أفضل" حركة ممكنة.
يعد الذكاء الاصطناعي الثلاثي هذا في الواقع أكثر تعقيدًا من الذكاء الاصطناعي 2048 بعدة طرق: أبرزها، أنه يمثل "مجموعة" المربعات القادمة (العملية الموثقة جيدًا التي يتم من خلالها تحديد المربعات العشوائية الواردة)، ويتعامل بشكل صحيح جميع مواقع ظهور البلاط المحتملة بناءً على الحركات التي تم إجراؤها. باختصار: يحاكي برنامج Threes AI هذا بشكل صحيح (على حد علمي) كل تفاصيل لعبة Threes كجزء من عملية التحسين المتوقعة.
أسهل طريقة لتشغيل الذكاء الاصطناعي هي استنساخ أحد الفروع prebuilt/
والمتوافقة مع نظام التشغيل والمعالج لديك. تحتوي هذه الفروع على ثنائيات معدة مسبقًا في الدليل bin/
.
لاحظ أن إصدار Python "الافتراضي" على نظام التشغيل Windows هو 32 بت، في حين أن إصدار Python "الافتراضي" على OS X وLinux هو 64 بت. يتم وضع علامة على الإصدارات 32 بت i386
بينما يتم وضع علامة على الإصدارات 64 بت على x86_64
.
إذا كنت تريد إنشائه بنفسك من المصدر (على سبيل المثال، إذا كنت تقوم بإجراء تغييرات)، فاتبع الإرشادات أدناه.
ينفذ
./configure
make
في المحطة. يجب أن يكون أي مترجم C++ حديث نسبيًا قادرًا على إنشاء المخرجات.
لاحظ أنك لا تقوم make install
؛ من المفترض أن يتم تشغيل هذا البرنامج من هذا الدليل.
لديك بعض الخيارات، اعتمادًا على ما قمت بتثبيته.
Pure Cygwin: اتبع تعليمات Unix/Linux/OS X المذكورة أعلاه. لا يمكن استخدام ملف DLL الناتج إلا مع برامج Cygwin، لذا لتشغيل إصدار التحكم في المتصفح، يجب عليك استخدام Cygwin Python (وليس python.org Python). للحصول على تعليمات خطوة بخطوة، مع تحيات تاماس زيل (@matukaa)، راجع هذه الوثيقة.
Cygwin مع MinGW: تشغيل
CXX=x86_64-w64-mingw32-g++ CXXFLAGS='-static-libstdc++ -static-libgcc -D_WINDLL -D_GNU_SOURCE=1' ./configure ; make
في MinGW أو Cygwin Shell للبناء. يمكن استخدام DLL الناتج مع برامج غير Cygwin.
Visual Studio: افتح موجه أوامر Visual Studio، cd
إلى دليل threes-ai، وقم بتشغيل make-msvc.bat
.
ستحتاج إلى Python 2.7 وNumPy وPIL لتشغيل برامج Python.
قم بتشغيل bin/threes
إذا كنت تريد رؤية الذكاء الاصطناعي بنفسه وهو يعمل.
هناك بعض الإصدارات المستندة إلى الويب من Threes، لكنني أردت أن أجعل الذكاء الاصطناعي يلعب ضد التطبيق الحقيقي. لذلك، قمت بإنشاء برنامج "مساعد" لأجهزة Android، يسمى android_assistant.py
، والذي يتواصل مع الهاتف عبر ADB ويقوم بالحركات تلقائيًا تمامًا. فهو يتطلب فقط أذونات USB ADB (وصول قياسي للمطورين)، ولا يتطلب إجراء عملية الوصول إلى الجذر أو أي تعديل آخر للجهاز أو التطبيق. يستخدم الأداة المساعدة القياسية لـ Android screencap
للحصول على حالة اللعبة (المرئية)، ويحسب الحركة المثالية، ثم يستخدم النظام الفرعي لحدث إدخال Linux لإنشاء أحداث التمرير.
لاستخدام android_assistant.py
، ستحتاج إلى تكوين النظام الفرعي للتعرف الضوئي على الحروف (OCR) لجهازك. سيكون عليك أيضًا تسجيل أحداث التمرير لإعادة التشغيل. حاليًا، تم تكوين جهازين: LG Nexus 5 وOnePlus One (المتوافق مع الهواتف التي قمت باختبار هذا عليها). التصحيحات مرحب بها لإضافة المزيد من الهواتف.
لتكوين نظام التعرف الضوئي على الحروف، يجب عليك إضافة إدخال في ocr/devices.py
المتوافق مع جهازك. يمكن الحصول على اسم النموذج ببساطة عن طريق تشغيل android_assistant.py
أثناء الاتصال بالجهاز (يجب أن يظهر خطأ مع اسم النموذج المتوقع). بشكل أساسي، ستحتاج إلى التقاط لقطة شاشة للعبة واستخلاص موضع جزء "البلاط القادم"، بالإضافة إلى موضع شبكة البلاط والتباعد بينها. (من المحتمل أن يستخدم هذا الجزء المزيد من الأتمتة و/أو التبسيط!)
لتسجيل الأحداث، ما عليك سوى تشغيل python -m android.inputemu --record up down left right
وتنفيذ الإيماءة المناسبة على هاتفك عندما يُطلب منك ذلك.
المساعد اليدوي هو ثلاثيات للأغراض العامة! مساعد يعمل مع أي تطبيق للثلاثيات!. تخبره باللوحة ومجموعة البلاط القادمة، ويقوم المساعد بحساب أفضل حركة.
قم بتشغيل manual_assistant.py
لبدء المساعد اليدوي.
لاحظ أن المساعد اليدوي يتوقع رؤية التحركات المتسلسلة. إذا تخطيت للأمام (قمت بحركات بدون المساعد)، قم بإنهاء المساعد بالضغط على Ctrl+C وابدأ تشغيله مرة أخرى. بخلاف ذلك، قد تتلقى رسالة خطأ مثل "موقف مستحيل" إذا قمت بإدخال لوحة غير تسلسلية لللوحة السابقة.
عند الدخول إلى اللوحة التالية، يمكنك استخدام المسافات و/أو الأسطر الجديدة و/أو الفواصل لفصل المربعات. اقرأ من اليسار إلى اليمين، ثم من الأعلى إلى الأسفل. أدخل صفر للمساحات الفارغة. إدخال المثال:
استخدام الفواصل والأسطر الجديدة:
96,2,3,0
2,1,1,0
2,1,0,0
0,0,2,0
استخدام الفواصل وحدها:
96,2,3,0,2,1,1,0,2,1,0,0,0,0,2,0
استخدام المسافات:
96 2 3 0
2 1 1 0
2 1 0 0
0 0 2 0
يمكنك أيضًا إدخال "دلتا" من اللوحة السابقة. حدد الصف أو العمود الذي ظهرت فيه القطعة الجديدة، وقيمة القطعة التي ظهرت (يمكنك حذف هذا إذا كانت هناك حركة أخيرة واحدة محتملة فقط للقطعة الجديدة، على سبيل المثال، إذا كانت حمراء أو زرقاء). حدد أيضًا الحركة التي قمت بها إذا لم تكن هي الخطوة التي اقترحها الذكاء الاصطناعي.
يتم ترقيم الأعمدة والصفوف من اليسار إلى اليمين ومن أعلى إلى أسفل: العمود 1 هو العمود الأيسر والصف 1 هو الصف العلوي.
على سبيل المثال، إذا تم تمرير اللوحة لأعلى، والانتقال من
96 2 3 0
2 1 1 0
2 1 0 0
0 0 2 0
ل
96 3 3 0
2 1 1 0
2 0 2 0
0 3 0 0
ثم ترسل 2,3,up
كلوحة (في العمود الثاني، يظهر 3). إذا أوصى الذكاء الاصطناعي بالتحرك up
، فيمكنك ببساطة حذف ذلك وإرسال 2,3
. إذا كان من المتوقع أن يكون المربع القادم هو 3، فيمكنك حذف 3 وإرسال 2
فقط.
من خلال إدخال الدلتا، ستوفر على نفسك الكثير من الوقت. في معظم الحالات، تحتاج فقط إلى إدخال رقم واحد (العمود/الصف الذي تم تغييره).
عند إدخال اللوحة القادمة، استخدم أحد التنسيقات التالية:
blue
(1)، red
(2)، white
(3+)1
، 2
، 3
، 3+
، 6+
، أو على سبيل المثال 24,48,96
، 24 48 96
3+
يعني أنه يمكن أن يكون 3 أو أعلى؛ استخدم هذا مع Threes الأقدم! التي لا تظهر علامة "زائد" على المربعات الإضافية6+
يعني أنها أي قطعة إضافية؛ استخدم هذا إذا كان المربع التالي هو "+"24,48,96
يعني أنه واحد من هؤلاء الثلاثة؛ استخدم هذا مع الثلاثات الأحدث! التي تعرض لك خيارات واضحة لقيمة بلاط المكافأة.