ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ ΑΝΑΦΟΡΑ ΕΡΓΑΣΙΑΣ Othello-TD Learning Βόλτσης Βαγγέλης Α.Μ. 2011030017 Η παρούσα εργασία πραγματοποιήθηκε στα πλαίσια του μαθήματος Αυτόνομοι Πράκτορες και σχετίζεται με λήψη αποφάσεων και ενισχυτική μάθηση. Σκοπός της εργασίας ήταν η δημιουργία ενός πράκτορα ο οποίος θα χρησιμοποιεί μάθηση χρονικών διαφορών (Temporal Difference Learning ή TD Learning) προσαρμόζοντας σε κάθε κίνηση το παιχνίδι του. Περιγραφή παιχνιδιού Πιο συγκεκριμένα δημιούργησα ένα παιχνίδι Othello το οποίο είναι παιχνίδι δύο παιχτών και αποτελείται από μία σκακιέρα 8 * 8 κελιών. Σκοπός του κάθε παίχτη είναι να έχει τα περισσότερα πούλια στην σκακιέρα όταν τελειώσει το παιχνίδι. Η τοποθέτηση πουλιών γίνεται σε άδειες θέσεις η οποίες συνορεύουν με τουλάχιστον ένα αντίπαλο πούλι. Επιπλέον θα πρέπει το νέο πούλι που θα τοποθετήσουμε να είναι σε τέτοια θέση ώστε μαζί με άλλο ένα δικό μας πούλι - το οποίο είναι ήδη τοποθετημένο από πριν στο ταμπλό - να περιέχουν ανάμεσά τους πούλια του αντίπαλου χρώματος. Στη συνέχεια αντικαθίστανται όλα τα ενδιάμεσα πούλια σε όλες τις κατευθύνσεις του αντιπάλου με δικά μας. Οι παίχτες τοποθετούν πούλια εναλλάξ εκτός και αν για κάποιο γύρο ο ένας από τους δύο παίχτες δεν έχει κίνηση, μέχρι να γεμίσει η σκακιέρα ή φυσικά να μην έχει κανένας παίχτης κίνηση. Την παρτίδα ξεκινά ο μαύρος παίκτης. Στη συγκεκριμένη εργασία εκτός του πράκτορα που χρησιμοποιεί μάθηση χρονικών διαφορών, δημιουργήθηκαν και ένας σχετικά έξυπνος πράκτορας αλλά και ένας τυχαίος ο οποίος διαλέγει μία κίνηση ανάμεσα σε όλες τις επιτρεπόμενες. Για κάθε παίκτη έχει φτιαχτεί μία ξεχωριστή κλάση στη γλώσσα java με τα σχετικά ονόματα. Επιπλέον ο χρήστης έχει την δυνατότητα να αλληλοεπιδράσει με τον TDL πράκτορα είτε πριν την εκμάθηση του είτε μετά, αλλά και με τον έξυπνο πράκτορα. Η εκμάθηση του TD παίκτη γίνεται μέσω κάποιου αριθμού παιχνιδιών με τον έξυπνο είτε με τον τυχαίο. Ο αριθμός αυτός είναι 500 παιχνίδια διότι παρατηρήθηκε ότι σε τόσα περίπου καταφέρνει ο TD να ξεπεράσει τις νίκες των άλλων πρακτόρων. Φυσικά και ο χρήστης έχει την δυνατότητα να τρέξει τις 500 επαναλήψεις όσες φορές θέλει ώστε να τον κάνει ακόμα πιο έξυπνο.
Στο παιχνίδι Othello υπάρχουν δύο μέθοδοι για την εφαρμογή της μάθησης χρονικών διαφορών οι οποίες μπορούν να χρησιμοποιηθούν. Η διαφορά τους έγκειται στον τρόπο με τον οποίο ο πράκτορας αντιλαμβάνεται τις επόμενες καταστάσεις από αυτή που βρίσκεται. Οι μέθοδοι είναι οι εξής: A μέθοδος Σύμφωνα με την πρώτη μέθοδο, η οποία χρησιμοποιήθηκε και στην εργασία, όταν ο πράκτορας βρίσκεται σε μια κατάσταση s, σχεδιάζει το δέντρο του παιχνιδιού το οποίο προκύπτει από όλες της διαθέσιμες κινήσεις σε κάθε επίπεδο και υπολογίζει την βέλτιστη κίνησή του. Στην συνέχεια, μέσω του αλγορίθμου minimax, υπολογίζει την βέλτιστη κίνηση (για αυτόν) που θα έπαιζε ο αντίπαλος. Με s συμβολίζεται η κατάσταση που προβλέπει ο πράκτορας πως θα επικρατεί στο ταμπλό μετά από δύο κινήσεις (μία για κάθε παίχτη).έτσι κατά μία έννοια ο πράκτορας μαθαίνει από τον εαυτό του. Η πρώτη μέθοδος είναι πιο συντηρητική αφού υποθέτει πάντα πως ο αντίπαλος παίζει βέλτιστα. B μέθοδος Σύμφωνα με την δεύτερη μέθοδο, ο πράκτορας στην κατάσταση s παίζει την βέλτιστη κίνηση που υπολογίζει ο minimax και στην συνέχεια περιμένει να παίξει ο αντίπαλος. Έτσι μετά από δύο κινήσεις (μία για κάθε παίχτη) φτάνουμε στην κατάσταση s η οποία μπορεί να είναι διαφορετική από αυτή που θα προέβλεπε ο πράκτοράς μας στην πρώτη μέθοδο. Εδώ ο πράκτορας μαθαίνει από τον αντίπαλο. Το βασικό μειονέκτημα της δεύτερης μεθόδου είναι πως κάποιος θα μπορούσε να ξεγελάσει τον πράκτορα. Για παράδειγμα θα μπορούσε αρχικά να παίζει επίτηδες άσχημα και μετά να αρχίσει να παίζει βέλτιστα. Όπως προαναφέρθηκε και στις δύο περιπτώσεις χρησιμοποιείται ένα δέντρο το οποίο περιέχει κάθε κατάσταση του παιχνιδιού. Κάθε επίπεδο του αναπαριστά το σύνολο των διαθέσιμων κινήσεων του κάθε παίχτη κάθε φορά που πρέπει να παίξει, και κάθε κόμβος, την κατάσταση που προκύπτει μετά από κάποια πιθανή κίνηση. Στη συνέχεια ο πράκτορας επιλέγει από το δέντρο την κατάσταση εκείνη που θεωρεί ως καλύτερη βασισμένος σε μία από τις παραπάνω μεθόδους. Στην εργασία χρησιμοποιήθηκε δέντρο δύο επιπέδων και ένα παράδειγμα φαίνεται παρακάτω:
Αλγόριθμος Minimax Θεωρούμε πως έχουμε δύο παίκτες, τον min και τον max. Ο max προσπαθεί να μεγιστοποιήσει το κέρδος που θα έχει από μία κίνηση ενώ ο min προσπαθεί να μειώσει το κέρδος του max.o αλγόριθμος αυτός προσπαθεί να ελαχιστοποιήσει την πιθανή απώλεια ενώ παράλληλα να μεγιστοποιήσει το ενδεχόμενο κέρδος. Η αξιολόγηση ενός στιγμιότυπου της σκακιέρας γίνεται με τη χρήση μιας συνάρτησης αξιολόγησης. Συνάρτηση αξιολόγησης O τύπος της συνάρτησης αξιολόγησης είναι ο εξής: Όπου Wi είναι τα βάρη τα οποία αντιστοιχούν στις φi (ή fi) συναρτήσεις δηλαδή στις συναρτήσεις βάσης. Στη συγκεκριμένη εργασία χρησιμοποιήθηκαν 16 συναρτήσεις βάσης οι οποίες μετράνε τα πούλια είτε του TD παίκτη είτε του αντιπάλου. Κάθε συνάρτηση μετράει τα πούλια σε διαφορετικές θέσεις του board οι οποίες είναι συμμετρικές. Το ποια πούλια μετράει κάθε συνάρτηση παρουσιάζεται παρακάτω:
Κάθε μία από τις f μετράει και τα πούλια του αντιπάλου αλλά και τα δικά του αναλόγως το όρισμα που θα τις δώσουμε. Πριν υπολογιστεί η V οι συναρτήσεις f κανονικοποιούνται. Στα βάρη αρχικά δίνεται η τιμή της μονάδας ώστε να μην υποδειχθεί στον πράκτορα ποια από τα πούλια είναι πιο σημαντικά αλλά να το καταλάβει μόνος του μέσα από την εκμάθηση του. Σε κάθε παιχνίδι ο πράκτορας ανανεώνει τα βάρη των συναρτήσεων με τον παρακάτω τρόπο: W[i] = W[i] + a * f[i] * (V(s') - V(s)) Όπου: W[i]: Το βάρος της κάθε παραμέτρου της συνάρτησης αξιολόγησης a: Ο ρυθμός μάθησης του πράκτορα f[i]: Η τιμή της κάθε παραμέτρου της συνάρτησης αξιολόγησης V(s'): Η αξία της νέας κατάστασης V(s): Η αξία της παλιάς κατάστασης Η διαδικασία του Temporal Difference Learning χρησιμοποιείται για να καταλήξουμε σε κάποια χρήσιμα βάρη για τη συγκεκριμένη συνάρτηση αξιολόγησης τα οποία στο τέλος της μάθησης αποθηκεύονται και μπορεί να χρησιμοποιηθούν όταν ο πράκτορας θα αντιμετωπίσει κάποιον αντίπαλο στη συνέχεια.
0 14 28 42 56 70 84 98 112 126 140 154 168 182 196 210 224 238 252 266 280 294 308 322 336 350 364 378 392 406 420 434 448 462 476 490 Φάση εκπαίδευσης Η φάση της εκπαίδευσης διήρκεσε 500 παιχνίδια διότι παρατηρήθηκε ότι σε αυτό τον αριθμό ο TD πράκτορας ξεπέρασε τις νίκες και των δύο αντιπάλων. Με τον έξυπνο παίκτη ο οποίος όμως δεν χρησιμοποιεί τυχαιότητα η πορεία του από εκεί και πέρα είναι καθαρά ανοδική δηλαδή έχει φτάσει σε ένα επίπεδο που νικάει σε εξαιρετικά μεγάλο ποσοστό. Παρακάτω φαίνεται το διάγραμμα το οποίο παρουσιάζει τις νίκες του πράκτορα σε σχέση με τον αριθμό των παιχνιδιών: 250 TDLearning vs Smart Player 200 150 100 50 0 Να σημειωθεί ότι στα 500 παιχνίδια σημειώθηκαν πάνω από 100 ισοπαλίες μεταξύ των παιχνιδιών 30-250 όπως φαίνεται και στο διάγραμμα. Η παράλληλη γραμμή σημαίνει ότι είτε το παιχνίδι τελειώνει σε ήττα είτε σε ισοπαλία. Μετά από αρκετές ισοπαλίες και ήττες ο πράκτορας αρχίζει να νικάει και να αυξάνει συνεχώς τις νίκες του.
0 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225 240 255 270 285 300 315 330 345 360 375 390 405 420 435 450 465 480 495 Στη συνέχεια φαίνεται το διάγραμμα το οποίο παρουσιάζει τις νίκες του πράκτορα σε σχέση με τον αριθμό των παιχνιδιών με τον τυχαίο παίκτη: TDLearning vs Random Player 350 300 250 200 150 100 50 0 Εδώ παρατηρούμε ότι με αντίπαλο τον τυχαίο ο πράκτορας προσαρμόζεται σχετικά γρήγορα και αρχίζει να νικάει από την αρχή. Αυτό είναι και λογικό από την στιγμή που ο άλλος παίζει τυχαία και δεν προσπαθεί να καταλάβει τα πιο σημαντικά κελιά. Γενικά δεν υπήρξαν πολλές τεχνικές δυσκολίες. Ήθελα αρχικά να είναι δυνατό μέσα από τον κώδικα να δημιουργηθεί και ένα εκτελέσιμο αρχείο ώστε ο καθένας να μπορεί να τρέξει το πρόγραμμα χωρίς να χρειάζεται να έχει την συγκεκριμένη πλατφόρμα. Αρχικά δεν μου εμφάνιζε τα γραφικά χωρίς να καταλαβαίνω τον λόγο. Τελικά μετά από μερικές αλλαγές του κώδικα και αρκετό ψάξιμο τα κατάφερα. Επιπλέον σε κάποιο σημείο ενώ όλα ήταν υλοποιημένα σχεδόν σωστά ο πράκτορας δεν μάθαινε όπως θα έπρεπε. Αυτό συνέβη διότι δεν είχα κανονικοποιήσει τις συναρτήσεις f κάτι που μόλις το έκανα ο πράκτορας άρχισε να έχει την επιθυμητή
συμπεριφορά. Επίσης δεν γνώριζα τι παράμετρο a (ρυθμός μάθησης) να χρησιμοποιήσω. Τελικά για να αποφύγουμε μεγάλες ταλαντώσεις στις τιμές που έχουν τα βάρη, χρησιμοποιήθηκε πολύ μικρός ρυθμός μάθησης και το a είναι περίπου ίσο με 0.01.Επιπλέον χρησιμοποιήθηκε τέτοιο a ώστε ο πράκτορας να κάνει την ανατροπή γύρω στα 500 παιχνίδια εκμάθησης. Τέλος υπάρχει το εκτελέσιμο αρχείο και ένα βίντεο το οποίο δείχνει την συμπεριφορά πριν και μετά την μάθηση και γενικά το πώς χρησιμοποιείται το πρόγραμμα. Αρχικά ο πράκτορας ενώ του αφήνονται κάποιες γωνίες για να τις καταλάβει δεν το εκμεταλλεύεται. Στη συνέχεια όμως μετά από τα 500 παιχνίδια μόλις του δίνεται η ευκαιρία να καταλάβει ένα γωνιακό κελί το καταλαμβάνει κατευθείαν. Και στις δύο περιπτώσεις ο χρήστης έπαιξε σχετικά το ίδιο καλά, στην πρώτη προσπάθεια ο πράκτορας έχασε ενώ μετά την εκμάθηση νίκησε.