פיתוח שחקני Robocode באמצעות תכנות גנטי
פיתוח שחקני Robocode באמצעות תכנות גנטי. הקדמה. משחקים ומשחקי תכנות. משחקים כמבחן לבינה מלאכותית התמודדות מול שחקנים אנושיים התמודדות מול יריבים ממוחשבים משחקי תכנות (Programming Games) השחקן - אנושי או ממוחשב? מקרה מבחן מעניין Robocode. הקדמה. Robocode. רקע
פיתוח שחקני Robocode באמצעות תכנות גנטי
E N D
Presentation Transcript
הקדמה משחקים ומשחקי תכנות • משחקים כמבחן לבינה מלאכותית • התמודדות מול שחקנים אנושיים • התמודדות מול יריבים ממוחשבים • משחקי תכנות (Programming Games) • השחקן - אנושי או ממוחשב? • מקרה מבחן מעניין • Robocode
הקדמה Robocode • רקע • נכתב בשנת 2000, ע"י מתיו נלסון • אומץ ע"י חטיבת alphaWorks של IBM • אופי המשחק • מלחמת טנקים • סוגי קרבות • קטגוריות משקל
הקדמה Robocode
הקדמה Robocode • רקע • נכתב בשנת 2000, ע"י מתיו נלסון • אומץ ע"י חטיבת alphaWorks של IBM • אופי המשחק • מלחמת טנקים • סוגי קרבות: one on one, melee, specialties • קטגוריות משחק: גודל הקוד, מספר שורות הקוד • "שחקן" Robocode • תכנית Java • תכנות מונחה אירועים (Event Driven)
הקדמה Robocode
הקדמה הבחירה ב-Robocode • תכנות ב-Java • שפה מוכרת • נגישות לקוד • פופולריות • ריבוי יריבים ראויים • יכולת השוואה • יריבים ממוחשבים • מהירות הביצוע • כמעט ולא נחקר
הקדמה מחקרים קודמים ג'ייקוב אייזנשטיין, MIT, אוק' 2003 • נסיון לפיתוח רובוטים מנצחים באמצעות תכנות גנטי • יריבים פשוטים בלבד • תנאי סביבה מלאכותיים
הקדמה מחקרים קודמים ג'ייקוב אייזנשטיין, MIT, אוק' 2003 גנום לינארי המתאר גרף של רכיבי חישוב:
הקדמה מחקרים קודמים ג'ייקוב אייזנשטיין, MIT, אוק' 2003 • השיג באופן חלקי את מטרותיו • מתקשים בסיטואציות לא דטרמיניסטיות • רובוטים מומחים
הקדמה הגדרת המטרה • ייצור "יריבים הולמים" לרובוטים הקיימים • רובוטים מורכבים • תנאי סביבה "מציאותיים" • הישגים בתחרויות מקוונות בינלאומיות • שיבוץ במקום גבוה במדרג הרובוטים
תכנות גנטי של תכנית Robocode ייצוג הגנום • גנום "עצי" למימוש קטעי קוד • קטע קוד ראשי • טיפול באירועים מוגדרים • onScannedRobot • onHitWall • onHitRobot • שיבוץ הקוד • Move • TurnTank • TurnGun • TurnRadar • Fire
תכנות גנטי של תכנית Robocode ייצוג הגנום • אוסף הצמתים והעלים בעץ • פונקציות מתמטיות: sin, abs, add, ... • קבועים מספריים: constant, random. • מדדי זמן אמת: enemyBearing, energy, ... • תרגום גנוטיפ לפנוטיפ • תרגום עץ לקוד lisp • תרגום מ-lisp ל-java • שיבוץ קטעי הקוד בתבנית מוכנה מראש • הידור ל-bytecodes (קבצי .class)
תכנות גנטי של תכנית Robocode ייצוג הגנום - דוגמא if greater wall distance 50 + neg enemy bearing random wall bearing
if greater wall distance 50 + neg enemy bearing random wall bearing תכנות גנטי של תכנית Robocode ייצוג הגנום - דוגמא (if_greater wall_distance 50 (+ enemy_bearing (random)) (neg wall_bearing))) public class GPBot extends Robot { … public void onScannedRobot() { turnGunRight(…); }} wallDistance() > 50 ? e.enemyBearing + Math.random()*2.0-1.0 : (0-wallBearing())
תכנות גנטי של תכנית Robocode אופרטורים גנטיים - הכלאה
תכנות גנטי של תכנית Robocode אופרטורים גנטיים - מוטציה
תכנות גנטי של תכנית Robocode מדד ההתאמה • איכות הפרט בהתמודדות מול יריבים שונים: • יריבים מוגדרים מראש • Self-Learning • צורת הניקוד • ניקוד יחסי: • מידרוג (Rating) • לא דטרמיניסטי • השפעה רבה למספר הסיבובים בקרב
תכנות גנטי של תכנית Robocode פרמטרים אבולוציוניים נוספים • סלקציה • טורניר בגודל קבוצה משתנה • אליטיזם • גודל האוכלוסייה • משך האבולוציה • גידול דור האפס • מגבלות על גודל הגנום
תכנות גנטי של תכנית Robocode חבילות התוכנה המשתתפות • ECJ11 - סביבה להרצת תהליכים אבולוציוניים • סביבת ריצה יציבה • אופרטורים גנטיים מקובלים • ניהול ידע • Robocode - חבילת המשחק • geep package • הגדרת השפה לכתיבת הגנום • גישור בין ECJ לחבילת המשחק
תכנות גנטי של תכנית Robocode מהלך הריצה האבולוציונית get fitness ECJ GeeP fitness results run battle Robocode
תכנות גנטי של תכנית Robocode זמני ריצה • פרמטרים המשפיעים על זמני הריצה • משך הסיבוב • מספר הסיבובים בקרב • מספר היריבים • גודל האוכלוסייה • מספר הדורות זמני ריצה ארוכים!
תכנות גנטי של תכנית Robocode זמני ריצה - המשך • לדוגמא: • משך סיבוב = 1.0-2.0 שניות • 3 סיבובים בקרב • 3 יריבים • 128 פרטים באוכלוסייה • 100 דורות • הפתרון: מודול מבוזר • מנהל קרבות מבוזר • שרתי קרבות 30 – 60שעות
התוצאות מהלך המחקר • בוצעו כשמונים ריצות אבולוציוניות
התוצאות מהלך המחקר • בוצעו כשמונים ריצות אבולוציוניות • וריאציות על הפרמטרים האבולציוניים • יריבים שונים • אופי היריבים: פשוטים, מתקדמים, לימוד עצמי • כמות היריבים: אחד, קבוצה, בחירה באקראי • קטגוריות משקל קוד שונות • תבניות קוד שונות • הרובוט המוצלח ביותר הוכנס לתחרות • geep.mini.GPBotA 1.0 • RoboRumble • miniBots
התוצאות geep.mini.GPBotA 1.0 • מדד ההתאמה • שלושה יריבים מורכבים • pez.mini.Pugilist (מקום 1) • jam.mini.Raiko (מקום 3) • cf.mini.Chiva (מקום 6) • הניקוד היחסי הממוצע • גנום בן חמישה עצים • אוכלוסייה בת 128 פרטים • 274 דורות
התוצאות geep.mini.GPBotA 1.0
התוצאות geep.mini.GPBotA 1.0 • ביצועים נגד יריבים ספציפיים: • GPBotA נגד Chiva ... • GPBotA נגד Pugilist ... • מיקום בליגה המקוונת...
התוצאות geep.mini.GPBotA 1.0
התוצאות geep.mini.GPBotA 1.0 - מבט על הקוד onScannedRobot() { turnTank(ifGreater -0.6672535760653446 (cos (abs enemy_bearing)) (cos (ifPositive enemy_bearing (ifGreater (abs (add (add (neg enemy_velocity) enemy_bearing) (abs random))) (sub (abs (abs enemy_bearing)) (ifPositive (add (add enemy_bearing (abs enemy_bearing)) enemy_energy) enemy_bearing enemy_bearing)) (abs (abs enemy_bearing)) (ifPositive enemy_bearing enemy_distance (ifPositive (ifPositive enemy_bearing (add wall_distance enemy_heading) enemy_bearing) (add (cos (neg enemy_velocity)) enemy_bearing) (abs random)))) enemy_bearing)) (cos wall_bearing)); }
התוצאות נסיון שני: HaikuBots • מגבלה על מספר שורות הקוד • קוד שיוצר ב-GP = ‘Junk DNA’ • רובוט Haiku אופייני: while (true) turnGunRight(INFINITY); onScannedRobot() { ahead(GP#1); turnRight(GP#2); turnGunRight(GP#3); }
התוצאות נסיון שני: HaikuBots • חסכון בשורות בכתיבת HaikuBot: • חיבור המכ"מ לתותח • הכנסת פקודת fire כצומת בעץ • יתרונות בכתיבת HaikuBot: • אין מגבלה על גודל הקוד - שורות ארוכות • יריבים מוגבלים ביותר
התוצאות נסיון שני: HaikuBots • הרובוט הנבחר:geep.haiku.GPBotC 1.0
התוצאות נסיון שני: HaikuBots
התוצאות 25.6.2005 : HaikuBots
התוצאות נסיון שני: HaikuBots • GPBotC נגד PoetHaiku... • GPBotC נגד HaikuTrogdor...
מסקנות ודיון מסקנות כלליות • תכנות גנטי מאפשר פתרון, גם אם חלקי • שחקנים שפותחו באמצעות תכנות גנטי: • מסוגלים לנצח יריבים מקבוצת הלימוד • מתקשים להכליל • חשיבות מרובה לבחירת הבעיה • MiniBots vs. HaikuBots
מסקנות ודיון 1)אבולוציה של מדדי התאמה מדד ראשון:ניקוד סופי R014/Geep031_0061 נגד Aristocles
מסקנות ודיון 1)אבולוציה של מדדי התאמה מדד ראשון:ניקוד סופי R014/Geep031_0061 נגד Aristocles מדד שני:ניקוד יחסי
מסקנות ודיון 1)אבולוציה של מדדי התאמה מדד ראשון:ניקוד סופי R014/Geep031_0061 נגד Aristocles מדד שני:ניקוד יחסי מדד שלישי: ניקוד יחסי מתוקן
מסקנות ודיון 2)ארכיטקטורה של שחקן שחקן מוכלל (שליטה מלאה) vs. אבולוציה בחלקים (נהג, תותחן, ומפעיל מכ"מ) • ביצועי הפרטים בהתאם להגדרת מדד האיכות שלהם • ביצועי הפרטים במשחק אמיתי
מסקנות ודיון 3)אופי האבולוציה לימוד נגד שחקנים קיימים vs. לימוד עצמי (self-play) • התמקצעות מול הכללה • שינוי מתמיד של הגדרת הבעייה • ביצועים בפועל
מה הלאה? הצעות להמשך מחקר • דרכים נוספות לפתרון הבעיה • לימוד עצמי עם אוכלוסייה התחלתית • ביזור ומודל האיים • שימוש בקו-אבולוציה • פיתוח גנטי של טכניקת בינה מלאכותית אחרת • Fuzzy logic • Neural networks • Decision trees
מה הלאה? הצעות להמשך מחקר • דרכים נוספות לפתרון הבעיה • הגדרה מחדש של הבעיה • התמודדות בקטגוריה שונה (MegaBots) • קרבות מרובי משתתפים • Melee • Team play • פתרונות חלקיים של הבעיה: פיתוח מערכות ספציפיות
מה הלאה? הצעות להמשך מחקר • החלפת המשחק בחדש!
מה הלאה? RARS- Robot Auto Race Simulator • החלפת המשחק!
מה הלאה? RARS- Robot Auto Race Simulator • החלפת המשחק!
מה הלאה? RARS- Robot Auto Race Simulator • החלפת המשחק!