Ιωάννης Γ. Κοντοχριστόπουλος Τμήμα Ηλεκτρολόγων Μηχανικών & Τεχνολογίας Υπολογιστών Επιβλέπων: Επ. Καθηγητής Κ. Σγάρμπας Τετάρτη 10 Οκτωβρίου 2012
Η ανάπτυξη ενός προγράμματος τεχνητής νοημοσύνης, ικανού να αντιμετωπίσει το παιχνίδι της μπιρίμπας, καθώς και της αντίστοιχης εφαρμογής παιχνιδιού Η τεχνητή νοημοσύνη θα πρέπει να «παίζει» τόσο ικανοποιητικά ώστε να είναι ανταγωνιστική προς ανθρώπινους συμπαίχτες
Η μπιρίμπα είναι ένα παιχνίδι τύχης (οι κάρτες μοιράζονται τυχαία στους παίχτες) και μερικής πληροφόρησης (οι παίχτες δε γνωρίζουν τις κάρτες που έχουν οι αντίπαλοι) 1 Παιχνίδια τέτοιου τύπου είναι σχετικά δύσκολο να αντιμετωπιστούν από μια τεχνητή νοημοσύνη Άλλα παραδείγματα τέτοιων παιχνιδιών είναι το πόκερ και η δηλωτή
Για να «παίξει» ένα πρόγραμμα τεχνητής νοημοσύνης ένα παιχνίδι, μια λύση είναι να βρει την κατάσταση του παιχνιδιού καθώς και τις μελλοντικές καταστάσεις αυτού, δημιουργώντας έτσι ένα «δέντρο καταστάσεων» Από το δέντρο αυτό αρκεί να επιλεγεί η κίνηση που οδηγεί στην πιο επιθυμητή κατάσταση στο μέλλον
Για να βρεθεί το δέντρο καταστάσεων πρέπει να βρεθούν όλες οι καταστάσεις. Αυτό ίσως είναι πρακτικά αδύνατο αν το δέντρο είναι πολύ μεγάλο Μπορούμε να περιορίσουμε το δέντρο κατά πλάτος ή κατά βάθος έως ένα ορισμένο σημείο, μειώνοντας το μέγεθός του. Στις καταστάσεις που βρέθηκαν, θα υπάρχουν και ικανοποιητικές λύσεις Μια άλλη μέθοδος είναι να κατευθύνουμε την αναζήτηση προς τα σημεία που θεωρούμε καλύτερα, και όταν βρούμε λύση (μέσω μιας ευρετικής μεθόδου), να επιλέξουμε αυτή
Στην ασαφή λογική 2, μια έννοια δε θεωρείται αναγκαστικά αληθής (0) ή ψευδής (1), αλλά μπορεί να κατέχει οποιαδήποτε ενδιάμεση τιμή Αυτό είναι εξαιρετικά χρήσιμο σε προβλήματα που είναι δύσκολο να περιγραφούν με μαθηματικά μοντέλα Με τη χρήση αυτής της λογικής γίνεται δυνατό να βρούμε ποιά κατάσταση από το δέντρο είναι σωστότερη, ακόμα κι αν δεν υπάρχει κάποια πλήρως σωστή
Η εφαρμογή αναπτύχθηκε με χρήση της γλώσσας προγραμματισμού Python (2.5.4) και του πακέτου εργαλείων αυτής pygame (1.9.1) 3-8
Στο παιχνίδι αυτό οι παίχτες ξεκινούν με 11 τυχαία φύλλα ο καθένας, και ο στόχος τους είναι να τα ξεφορτωθούν όλα Αυτό γίνεται κατεβάζοντάς τα σε συνδυασμούς Στο παιχνίδι υπάρχουν δύο στοίβες με φύλλα, η στοίβα με τα φύλλα που παίρνουν οι παίχτες τυχαία (τις οποίας δεν ξέρουμε τα φύλλα), και η στοίβα με τα «σκάρτα» φύλλα, όπου τα φύλλα είναι φανερά
Ο γύρος του παίχτη περιλαμβάνει τρείς φάσεις: Φάση 1: Ο παίχτης επιλέγει αν θα πάρει ένα φύλλο (τυχαίο) στο χέρι του, ή θα πάρει όλα τα φύλλα από τη στοίβα των σκάρτων Φάση 2: Ο παίχτης επιλέγει αν και ποια από τα φύλλα του θα κατεβάσει σε συνδυασμούς Φάση 3: Ο παίχτης επιλέγει ένα από τα φύλλα του για να πετάξει στη στοίβα των σκάρτων
Για να μπορούμε να «παίξουμε» μαζί με την τεχνητή νοημοσύνη χρειάζεται κάποιο γραφικό περιβάλλον Επιλέχθηκε να φτιαχτεί ένα, με χρήση της βιβλιοθήκης εργαλείων της Python, “pygame”. Στο περιβάλλον δίνονται οι απαραίτητες πληροφορίες στον παίχτη για να παίξει, καθώς και η δυνατότητα να κάνει τις απαραίτητες κινήσεις
Στη μπιρίμπα δε μπορούμε να βρούμε το πλήρες δέντρο καταστάσεων, επειδή δε γνωρίζουμε όλα τα φύλλα των άλλων παιχτών, αλλά ούτε και το περιεχόμενο της στοίβας με τα «κλειστά φύλλα» Μπορούμε όμως να βρούμε το δέντρο καταστάσεων με τις δυνατές επιλογές του παίχτη σε κάθε σημείο του γύρου του Επειδή στη δεύτερη φάση του παιχνιδιού το δέντρο αυτό μπορεί να γίνει πολύ μεγάλο για να βρεθεί γρήγορα, επιλέχθηκε να περιοριστεί κατά πλάτος έως 6 επίπεδα σε κάθε σημείο
Στη συνέχεια αξιολογούνται οι καταστάσεις του δέντρου με χρήση ενός συστήματος ασαφούς λογικής Το σύστημα αυτό χρησιμοποιεί ευρετικές συναρτήσεις για να αξιολογήσει: την επίδραση των φύλλων που γνωρίζουμε ότι έχουν οι άλλοι παίχτες τους κατεβασμένους συνδυασμούς τους τα φύλλα στη στοίβα των σκάρτων
Οι ευρετικές συναρτήσεις που αναφέρθηκαν λειτουργούν ως εξής: Από τα φύλλα προς αξιολόγηση, παίρνουμε κάθε φορά ένα Αυτό προστίθεται στα φύλλα των οποίων την επίδραση θέλουμε να βρούμε (πχ. μνήμη φύλλων αντιπάλου) Στη συνέχεια βρίσκουμε τους συνδυασμούς που μπορούν να υλοποιηθούν από αυτά τα φύλλα
Όταν το φύλλο που προστέθηκε συμμετέχει σε κάποιο από τους συνδυασμούς που βρέθηκαν, αυτό σημαίνει οτι το φύλλο που προστέθηκε επιδρά στη στοίβα με τα φύλλα που ελέγχουμε Έτσι λοιπόν δίνεται μια τιμή σε αυτό το φύλλο για καθένα από τους συνδυασμούς οπου συμμετέχει (ανάλογα με το μέγεθος και την αξία τους), η οποία αντιπροσωπεύει αυτή την επίδραση Τελικά, για κάθε φύλλο επιλέγουμε τη χειρότερη από τις επιδράσεις όταν την προσθέσουμε στο σύστημα ασαφούς λογικής
Τέλος, το σύστημα ασαφούς λογικής, λαμβάνοντας υπόψη τις συνθήκες του παιχνιδιού ( το σημείο του παιχνιδιού όπου βρισκόμαστε, τα φύλλα που διαθέτουν οι παίχτες και το ποιες ομάδες πήραν μπιριμπάκια) επιλέγει μια συγκεκριμένη στρατηγική, η οποία και καθορίζει την τελική επιλογή Η τελική επιλογή δεν είναι πάντα η ίδια ακόμα και σε όμοιες συνθήκες, καθώς προτιμήθηκε να επιλέγεται με τυχαίο τρόπο (σταθμισμένα) μια εκ των καλύτερων κινήσεων κάθε φορά, έτσι ώστε να γίνει δύσκολο να προβλεφθεί από τον άνθρωπο ο τρόπος παιχνιδιού της τεχνητής νοημοσύνης
Μετά από δοκιμές παρατηρήθηκε ότι ο αρχικός στόχος, η ανάπτυξη δηλαδή ενός προγράμματος τεχνητής νοημοσύνης που θα «παίζει» το παιχνίδι της μπιρίμπας ανταγωνιστικά προς τον παίχτη, έχει επιτευχθεί μόνο μερικώς Το πρόγραμμα, αν και παίζει αρκετά καλά, δεν είναι ικανό να νικήσει έναν έμπειρο ανθρώπινο παίχτη
Αρχικά η αξιολόγηση των φύλλων γίνεται ακαριαία και οι γύροι διαρκούν ελάχιστα, στη συνέχεια όμως του παιχνιδιού μπορεί να φτάσει να διαρκεί 2-3 λεπτά ο κάθε γύρος Κατά τη διάρκεια του παιχνιδιού οι παίχτες τείνουν να μαζεύουν χρήσιμες κάρτες: Έτσι το δέντρο καταστάσεων αυξάνει εκθετικά, ενώ η αξιολόγησή του αυξάνει γρηγορότερα από γραμμικά, κάνοντας χρονοβόρα την επιλογή
Χρήση καλύτερων μεθόδων για την εύρεση του δέντρου καταστάσεων. Πειραματική αξιολόγηση Προσθήκη μοντέλου αξιολόγησης με πιθανότητες, παράλληλα με τα υπάρχοντα μοντέλα στο ασαφές σύστημα λογικής Πειραματική εύρεση καλύτερων τιμών στα βάρη που χρησιμοποιούν οι ευρετικές συναρτήσεις για την αξιολόγηση Βελτιστοποίηση του κώδικα με στόχο καλύτερη χρήση της διαθέσιμης επεξεργαστικής ισχύος
1. Τεχνητή Νοημοσύνη: Μια σύγχρονη προσέγγιση, Stuart Russell & Peter Norvig, Prentice Hall, Κίνγκ, Ροβέρτος-Ε, Ευφυής Έλεγχος, Εκδόσεις Τζιόλα, Rapid Game Development with Python, Richard Jones, Open Source Developers' Conference