سؤال

لقد كتبت ذات مرة لعبة Tetris AI التي لعبت لعبة Tetris بشكل جيد.الخوارزمية التي استخدمتها (الموصوفة في هذه الورقة) هي عملية من خطوتين.

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

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

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

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

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

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

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

نعم، ثمة طريق.

إذا اخترت م الميزات المحددة هناك 2 ^ M مجموعات فرعية، لذلك هناك الكثير للنظر فيه.وأود أن ما يلي:

For each subset S
   run your code to optimize the weights W
   save S and the corresponding W

ثم لكل زوج S-W، يمكنك تشغيل ألعاب G لكل زوج وحفظ النتيجة L لكل زوج.الآن لديك جدول مثل هذا:

feature1    feature2    feature3    featureM   subset_code game_number    scoreL
1           0           1           1           S1         1              10500
1           0           1           1           S1         2              6230
...
0           1           1           0           S2         G + 1          30120
0           1           1           0           S2         G + 2          25900

يمكنك الآن تشغيل بعض خوارزميات اختيار المكونات (PCA على سبيل المثال) وتحديد الميزات التي تستحق شرح النتيجة.

تلميح:عند تشغيل التعليمات البرمجية لتحسين W، قم بزرع مولد الأرقام العشوائية، بحيث يتم اختبار كل "عقل متطور" مختلف مقابل نفس تسلسل القطعة.

آمل أن يساعد في شيء ما!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top