فيما يلي الرمز المصدر لمشروع HTML5 الذي ينفذ خوارزمية التعلم الآلي في لعبة فيديو Flappy Bird باستخدام الشبكات العصبية والخوارزمية الوراثية. يعلم البرنامج طيرًا صغيرًا كيف يرفرف على النحو الأمثل من أجل الطيران بأمان من خلال الحواجز لأطول فترة ممكنة.
البرنامج التعليمي الكامل مع مزيد من التفاصيل والتوضيح الذي يمكنك العثور عليه هنا:
http://www.askforgametask.com/tutorial/machine-learning-algorithm-flappy-bird
هنا يمكنك أيضًا مشاهدة مقطع فيديو قصير مع عرض بسيط للخوارزمية:
https://www.youtube.com/watch؟v=AewmDojejf0
يتم كتابة جميع الكود في HTML5 باستخدام Phaser Framework ومكتبة الشبكة العصبية المتشابكة لتنفيذ الشبكة العصبية.
للعب اللعبة ، تتكون كل وحدة (Bird) من الشبكات العصبية الخاصة بها من الطبقات الثلاث التالية:
طبقة إدخال مع 2 الخلايا العصبية التي تقدم ما يراه الطيور:
1) horizontal distance between the bird and the closest gap
2) height difference between the bird and the closest gap
طبقة خفية مع 6 خلايا عصبية
طبقة الإخراج مع خلية عصبية واحدة تستخدم لتوفير إجراء على النحو التالي:
if output > 0.5 then flap else do nothing
تستخدم مكتبة الشبكة العصبية المتشابكة لتنفيذ شبكة عصبية اصطناعية بأكملها بدلاً من صنع شبكة جديدة من الصفر.
يعتمد المفهوم الرئيسي للتعلم الآلي المنفذ في هذا البرنامج على شكل التطور العصبي. يستخدم الخوارزميات التطورية مثل الخوارزمية الوراثية لتدريب الشبكات العصبية الاصطناعية. فيما يلي الخطوات الرئيسية:
إنشاء عدد جديد من 10 وحدات (الطيور) مع شبكة عصبية عشوائية
دع جميع الوحدات تلعب اللعبة في وقت واحد باستخدام شبكاتها العصبية الخاصة
لكل وحدة ، احسب وظيفة اللياقة البدنية لقياس جودتها على النحو التالي:
fitness = total travelled distance - distance to the closest gap
عندما تُقتل جميع الوحدات ، قم بتقييم السكان الحاليين إلى المرتبة التالية باستخدام مشغلي الخوارزمية الوراثية (الاختيار ، كروس وطفرة) على النحو التالي:
1. sort the units of the current population in decreasing order by their fitness ranking
2. select the top 4 units and mark them as the winners of the current population
3. the 4 winners are directly passed on to the next population
4. to fill the rest of the next population, create 6 offsprings as follows:
- 1 offspring is made by a crossover of two best winners
- 3 offsprings are made by a crossover of two random winners
- 2 offsprings are direct copy of two random winners
5. to add some variations, apply random mutations on each offspring.
ارجع إلى الخطوة 2
نظرًا لأن البرنامج مكتوب في HTML5 باستخدام Phaser Framework ومكتبة الشبكة العصبية المتشابكة ، فأنت بحاجة إلى هذه الملفات:
يتم تنفيذ منطق اللعبة بأكمله في ملف gameplay.js . يتكون من الفصول التالية:
App.Main
، الروتين الرئيسي مع الوظائف الأساسية التالية:
TreeGroup Class
، فئة مجموعة Phaser الممتدة لتمثيل حاجز متحرك. تحتوي هذه المجموعة على أعلى وشجرة السفلية العفريت.
Tree Class
، فئة Phaser Sprite الممتدة لتمثيل العفريت شجرة.
Bird Class
، فئة Phaser Sprite الممتدة لتمثيل العفريت الطيور.
Text Class
، فئة phaser bitmaptext الموسعة المستخدمة لرسم النص.
يتم تنفيذ الخوارزمية الجينية في ملف Genetic.js الذي يتكون من الفئة التالية:
GeneticAlgorithm Class
، الطبقة الرئيسية للتعامل مع جميع عمليات الخوارزمية الوراثية. إنه يحتاج إلى معلمتين: MAX_UNITS لوضع إجمالي عدد الوحدات في السكان و TOP_UNITs لوضع عدد من أفضل الوحدات (الفائزين) المستخدمة في تطور السكان. فيما يلي وظائفها الأساسية: