480 likes | 722 Views
פיתוח שחקני Robocode באמצעות תכנות גנטי. הקדמה. משחקים ומשחקי תכנות. משחקים כמבחן לבינה מלאכותית התמודדות מול שחקנים אנושיים התמודדות מול יריבים ממוחשבים משחקי תכנות (Programming Games) השחקן - אנושי או ממוחשב? מקרה מבחן מעניין Robocode. הקדמה. Robocode. רקע
E N D
הקדמה משחקים ומשחקי תכנות • משחקים כמבחן לבינה מלאכותית • התמודדות מול שחקנים אנושיים • התמודדות מול יריבים ממוחשבים • משחקי תכנות (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 • החלפת המשחק!