ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ ΣΧΟΛΗ ΗΛΕΚΤΡΟΝΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΛΗ513 - ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ- ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2015 ΕΡΓΑΣΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΠΑΙΧΝΙΔΙ PACMAN 3D ΜΕ ΜΕΘΟΔΟΥΣ ΕΝΙΣΧΗΤΙΚΗΣ ΜΑΘΗΣΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΑΝΖΑΝΑΚΗΣ 2011030002 ΠΕΡΙΓΡΑΦΗ ΠΑΙΧΝΙΔΙΟΥ Το παιχνίδι Pac-Man αποτελεί ένα από τα δημοφιλέστερα παιχνίδια και είναι ιδιαίτερα γνωστό σε όλο τον κόσμο εδώ και αρκετές δεκαετίες. Το παιχνίδι απoτελείται από τον Pacman που είναι ο βασικός παίκτης του παιχνιδιού καθώς και τους "αντίπαλους " τα 4 φαντάσματα ( blinky, clyde inky, pinky). Η πίστα του παιχνιδιού είναι ένας λαβύρινθος και περιέχει κουκίδες (pills και superpills ). Στόχος του Pacman είναι να φάει όλα τα pills και superpills που βρίσκονται στην πίστα χωρίς να τον ακουμπήσουν τα φαντάσματα. Τα pills δίνουν 100 πόντους στον Pacman ενώ τα superpills δίνουν 200 βαθμούς και επιπλέον αλλάζουν την "κατάσταση" του παιχνιδιού για ένα μικρό χρονικό διάστημα κατά το οποίο ο pacman μπορεί να φάει τα φαντάσματα. Τα superpills είναι 4 και βρίσκονται προς τις γωνίες της πίστας. Ο Pacman μπορεί να κινηθεί σε 4 κατευθύνσεις Πάνω, Κάτω, Δεξιά και Αριστερά. Στο κλασικό παιχνίδι ο Pacman ελέγχεται από κάποιον χρήστη και τα φαντάσματα ακολουθούν συγκεκριμένη διαδρομή. Σε αυτή την υλοποίηση ο Pacman κινείται αυτόνομα και τα φαντάσματα κινούνται προς την κατεύθυνση του pacman. ΣΤΟΧΟΣ ΕΡΓΑΣΙΑΣ/ΠΡΟΒΛΗΜΑ Στόχος της εργασίας είναι να δημιουργήσουμε έναν αυτόνομο πράκτορα (Pacman) ο οποίος στοχεύει στο να κερδίσει το παιχνίδι μέσα από την εμπειρία που αποκτά κατά την διάρκεια του παιχνιδιού. Το περιβάλλον του παιχνιδιού είναι δύσκολο να προβλεφθεί διότι η συμπεριφορά φάντασμα είναι στοχαστική και ακολουθούν απρόβλεπτα μονοπάτια ωστόσο έχει μικρό χώρο δράσης που αποτελείται από τις τέσσερις κατευθύνσεις προς τις οποίες κα Pac- Man μπορεί να κινηθεί (πάνω, κάτω, δεξιά, αριστερά) σε κάθε χρονικό βήμα. Ένας αλγόριθμος ενισχυτικής μάθησης θα ήταν κατάλληλος για τον την υλοποίηση του πράκτορα. Ωστόσο, υπάρχει δυσκολία στον σχεδιασμό του χώρου καταστάσεων καθώς για να μοντελοποιηθεί πλήρως το παιχνίδι απαιτείται πολύ μεγάλος αριθμός χαρακτηριστικών.
Αυτό αυξάνει εκθετικά τον αριθμό των πιθανών καταστάσεων συνεπώς και την πολυπλοκότητα αλλά και απόδοση της λύσης από άποψη χρόνου και χώρου. Συνεπώς για να λειτουργήσει αποτελεσματικά ένας αλγόριθμος ενισχυτικής μάθησης σημαίνει μείωση του μεγέθους του προβλήματος και άρα και καθορισμός κατάλληλου χώρου καταστάσεων. ΠΡΟΣΕΓΓΙΣΗ/ΛΥΣΗ Η επιλογή του χώρου καταστάσεων όπως αναφέραμε είναι πολύ σημαντική καθώς αν λάβουμε υπόψην όλη την δυνατή πληροφορία που δίνεται στο παιχνίδι ( θέση του pacman στην πίστα, τα pills superpills κοντά του, την θέση του κοντινότερου φαντάσματος ) ο χώρος καταστάσεων θα ήταν πάρα πολύ μεγάλος. Για τον λόγο αυτό ως κατάσταση θεωρούμε έναν πίνακα 9 διαστάσεων όπου : Τα τέσσερα πρώτα στοιχεία υποδεικνύουν την ύπαρξη ή όχι τοίχου στις 4 κατευθύνσεις (Πάνω, Κάτω, Δεξιά, Αριστερά ). Οι τιμές που παίρνουν είναι διαδικές πχ αν έχουμε τοίχο πάνω και κάτω s=[1,1,0,0...] Το πέμπτο στοιχείο αντιστοιχεί στην θέση που θά ήταν προτιμότερο για τον pacman να κινηθεί όσον αφορά την ύπαρξη φαγητού καθώς και την θέση των φαντασμάτων. Παίρνει τιμές 1,2,3,4 που αντιστοιχούν στις 4 κατευθύνσεις. Για παράδειγμα αν ένα φάντασμα που είναι 5 "βηματα" μακρυά από τον pacman τον πλησιάζει τότε το στοιχείο παίρνει την κατεύθυση όπου μπορεί να ξεφύγει αλλιώς παίρνει την κατεύθυνση όπου υπάρχει είται pill είται κάποιο μπλέ φάντασμα (σε απόσταση 5 βημάτων). Τέλος τα τέσσερα τελευταία στοιχεία είναι δυαδικά και υποδεικνύουν την ύπαρξη φαντασμάτων πρός κάποια κατεύθυνση σε απόσταση 5 βημάτων από τον pacman τα οποία κινούνται πρός τον Pacman. Άρα οι δυνατές καταστάσεις είναι 4*2^8=1024. Απολαβές : Eat pellet -> +1.5 Eat superpellet -> +1.5 Eat ghost -> +1.5 Eaten by a ghost -> -35 Empty step -> -0.5 Wall -> -100
Ο αλγόριθμος που χρησιμοποιήσαμε είναι ο SARSA(λ) ο οποίος είναι ένας απλός αλγόριθμος Ενισχυτικής Μάθησης. at -> η κίνηση του Pacman σε χρονική στιγμή t rt-> απολαβή που παρατηρεί από την κίνηση at όπου α είναι ο ρυθμός μάθησης στο οποίο δίνουμε πολύ μικρή τιμή πχ α=0.01 και όπου λ παίρνει τιμές στο [0, 1]. Σε αυτήν την υλοποίηση θέτουμε λ=0.8. ΣΥΝΑΡΤΗΣΕΙΣ /ΚΩΔΙΚΑΣ Για την υλοποίηση του προβλήματος χρησιμοποιήσαμε τις παρακάτω συναρτήσεις: FeatureExtraction: Συνάρτηση με την οποία κάνουμε εξαγωγή χαρακτηριστικών ώστε να προσδιορίσουμε την κατάσταση στην οποία βρισκόμαστε κάθε χρονική περίοδο. UpdateStateArray: Ανανεώνει τον πίνακα καταστάσεων όταν συναντάμε νέες καταστάσεις. findindexofstate: Συνάρτηση με την οποία βρίσκουμε σε ποιά θέση του πίνακα καταστάσεων βρίσκεται κάθε κάτασταση. initialqvalues: Αρχικοποιεί τον πίνακα των Q_values. initialevalues: Αρχικοποιεί τον πίνακα των e_values.
observedreward: Επιστρέφει το reward που παρατηρεί όταν κάνει ένα action at σύμφωνα με τον πίνακα που αναφέραμε ποιό πάνω. takeaction: Κάνει ένα action σύμφωνα με μια greedy λογική (80 % maxqvalue(s,a) 20% τυχαία) updatevalues: Είναι η συνάρτηση που υλοποιεί τον Sarsa(λ) αλγόριθμο ανανεώνει τις τιμές των Q και e πινάκων. ΑΠΟΤΕΛΕΣΜΑΤΑ/ΕΠΙΔΕΙΞΗ Για να αξιολογήσουμε τον αλγόριθμο τρέξαμε το παιχνίδι 700 φορές. Παρατηρήσαμε ότι είχαμε 5% νίκες στα 350 παιχνίδια και 15% στα 700. Επίσης αισθητή βελτίωση στην συμπεριφορά του pacman είχαμε μετά τα 200 παιχνίδια. ΣΥΝΑΡΤΗΣΕΙΣ /ΚΩΔΙΚΑΣ Εικόνες Παρακάτω φαίνονται κάποιες εικόνες από το παιχνίδι.