Πτυχιακή.
Στις 28 Απριλίου παραδίνω πτυχιακή, μετά στις 11 Μαΐου πρέπει να κάνω μια δημόσια παρουσίαση - το "Poster session" που λένε. Το λένε έτσι επειδή υποτίθεται οτι φτιάχνεις μια ας την πούμε αφίσσα, που να εξηγεί την πτυχιακή σου, και την αναρτάς σ' έναν πίνακα για να έχεις κάτι να δείχνεις όσο κάνεις την παρουσίαση. Η δική μου πτυχιακή είναι λογισμικό οπότε δεν χρειάζεται να κάνω τέτοιες ιστορίες αλλά ίσως φτιάξω έναν πίνακα με διαγράμματα κλπ. Την ημέρα της παρουσίασης, πρέπει κατ' αρχήν να παρουσιάσω τη δουλειά μου στους δύο εξεταστές και έπειτα σε όποιον άλλον ενδιαφέρεται.
Το λογισμικό μου τώρα, είναι ένα πρόγραμμα τεχνητής νοημοσύνης- ενα έμπειρο σύστημα (expert system). "Έμπειρο σύστημα" εννοούμε συνήθως ένα πρόγραμμα που έχει σκοπό να κωδικοποιήσει την γνώση των ειδικών σε κάποιον τομέα, ωστε να χρησιμοποιηθεί (και από μη-ειδικούς) συνήθως για την εξαγωγή συμπερασμάτων και τη λήψη αποφάσεων. Για παράδειγμα, ένα από τα πρώτα έμπειρα συστήματα ήταν το MYCIN, που ο σκοπός του ήταν να βοηθήσει στη διάγνωση βακτηριακών μολύνσεων.
Ο τομέας που έχει εφαρμογή το πρόγραμμά μου είναι ένα επιτραπέζιο παιχνίδι στρατηγικής με συλλεκτικές κάρτες, το Magic: the Gathering. Είναι ένα παιχνίδι που έπαιζα πολύ σε μικρότερη ηλικία. Πλέον δεν μ' ενδιαφέρει τόσο το παιχνίδι (έχω χρόνια να παίξω) όσο κάποια χαρακτηριστικά του που είναι κλασσικά προβλήματα που εξετάζει η τεχνητή νοημοσύνη.
Κατ' αρχήν οι κάρτες με τις οποίες παίζεται το παιχνίδι έχουν πάνω τους κείμενο που εξηγεί πως παίζεται η κάρτα. Αυτό το κείμενο είναι σε μια γλώσσα που είναι σχεδόν Αγγλικά, δηλαδή σχεδόν φυσική γλώσσα. Λέω "σχεδόν" επειδή έχει ιδιαίτερη σύνταξη και σύμβολα, τα οποία κάνουν την κατανόησή της από ένα πρόγραμμα ευκολότερη υπόθεση απ' ό,τι αυτή της φυσικής γλώσσας (ιδίως των Αγγλικών που είναι παναήα μου, απ' αυτήν την άποψη). Η γλώσσα αυτή είναι στην ουσία μια γλώσσα προγραμματισμού. Ένα μέρος λοιπόν του προγράμματός μου ασχολείται μ' αυτό ακριβώς: διαβάζει το κείμενο των καρτών και το εκτελεί κατευθείαν, σαν να ήταν μια γλώσσα προγραμματισμού. Αυτό είναι παγκόσμια πρωτιά της Στάσσας σας κι είμαι ιδιαίτερα περήφανη γι' αυτό. Υπάρχουν αρκετά προγράμματα για να παίξει κανείς Magic στον υπολογιστή του, ή στην κονσόλα του, και μερικά απ' αυτά είναι κανονικά εμπορικά προϊόντα με τα όλα τους. Όλα όμως χρησιμοποιούν μια ενδιάμεση σύνταξη που είναι πιο άμεσα κατανοητή από τον υπολογιστή, αντί για την σχεδόν-φυσική γλώσσα των καρτών. Το αποτέλεσμα είναι οτι πρέπει να μεταφράζουν κάθε κάρτα στην ενδιάμεση σύνταξη που χρησιμοποιούν και συχνά χρειάζεται να γράψουν νέο κώδικα, ειδικά για κάποια καινούργια κάρτα που θέλουν να προσθέσουν στη βάση δεδομένων τους.
Η κατανόηση φυσικής γλώσσας είναι από τα βασικά μου ενδιαφέροντα, γι' αυτό προτίμησα να γράψω ένα πρόγραμμα γραμματικής ανάλυσης και ερμηνείας ("parser/ interpeter"). Ο σκοπός μου ήταν κατ' αρχήν να εξοικονομήσω χρόνο, γιατί αλλοιώτικα θα έπρεπε να επινοήσω μια δική μου ενδιάμεση σύνταξη και να μεταφράσω το κείμενο των καρτών που ήθελα να χρησιμοποιήσω, σ' αυτήν την ενδιάμεση σύνταξη ωστε να το καταλάβει ο μηχανισμός κανόνων (rules engine) του προγράμματός μου. Στην πορεία συνειδητοποίησα κάτι που μ' έκανε να αλλάξω ελαφρώς το θέμα της πτυχιακής μου, από ένα απλό παίχτη τεχνητής νοημοσύνης, που ήταν στην αρχή σ' αυτό που είναι τώρα, ένα πλήρες έμπειρο σύστημα. Αυτό το καινούργιο δεδομένο είναι οτι χάρη στο πρόγραμμα γραμματικής ανάλυσης το πρόγραμμά μου όχι μόνο καταλαβαίνει το κείμενο από τις κάρτες που έχω προσθέσει στη βάση δεδομένων του- καταλαβαίνει επίσης το κείμενο από κάρτες που δεν έχει ξαναδεί.
Μ' αυτό δεν εννοώ οτι το προγραμματάκι μου απέκτησε ξαφνικά αυτοσυνείδηση! Εννοώ οτι η κατανόηση του κειμένου στηρίζεται σε ένα σύνολο γραμματικών κανόνων, που είναι αρκετά γενικοί ωστε να καλύπτουν μεγάλο αριθμό συνδυασμών τους (κι η γλώσσα στις κάρτες υπακούει, γενικά, σ' αυτούς τους κανόνες). Αυτό βέβαια συμβαίνει με κάθε είδους γραμματικούς κανόνες- δεν είναι κάτι καινούργιο. Αυτό σημαίνει "γραμματικοί κανόνες"! Για να είμαι ειλικρινής απλά δεν περίμενα να το πετύχω τόσο γρήγορα και εύκολα αλλά ας όψεται η επιλογή μου της γλώσσας προγραμματισμού που χρησιμοποιώ: 49 κατασκευαστές γραμματικών αναλυτών συνιστούν... Prolog! Σ' αυτή τη γλώσσα είναι τόσο απλό να γράψεις γραμματικούς αναλυτές που σχεδόν ντρέπομαι να το λέω.
Ο γραμματικός αναλυτής μπορεί επίσης να επαληθεύσει την σύνταξη μιας φράσης στην γλώσσα των καρτών, να αναγνωρίσει δηλαδή κατά πόσο αυτή η φράση "στέκει" γραμματικά (αλλά και σε σχέση με τα συμφραζόμενα ενός παιχνιδιού σε εξέλιξη). Τέλος, μπορεί να παράγει φράσεις στη γλώσσα του παιχνιδιού- απ' αυτήν την άποψη θα μπορούσε να χρησιμέψει στους δημιουργούς του παιχνιδιού ως εργαλείο για να σχεδιάσουν γρήγορα καινούργιες κάρτες.
Το υπόλοιπο πρόγραμμα κάνει αρκετά συνηθισμένα πράγματα. Κατ' αρχήν, έχει έναν μηχανισμό κανόνων που εφαρμόζει κατά γράμμα τους κανόνες του παιχνιδιού, στην αυστηρή εκδοχή τους που χρησιμοποιείται σε επαγγελματικά παιχνίδια (το Magic παίζεται επαγγελματικά με βραβεία δεκάδων χιλιάδων δολλαρίων). Έχει επίσης έναν παίχτη τεχνητής νοημοσύνης, ένα AI, που παίζει Magic ενάντια στον χρήστη.
Προς το παρόν, αυτό το AI είναι αρκετά ναΐφ, επειδή είναι ακόμη σε αρχικό στάδιο. Ξεφεύγει λίγο από τα συνηθισμένα από την άποψη οτι δεν χρησιμοποιεί μόνο μαθηματική/ στατιστική ανάλυση για να πάρει αποφάσεις και να κάνει την κίνησή του, αλλά κι ένα σύστημα κανόνων, διατυπωμένων με συμβολικό τρόπο. Αυτή είναι η "εμπειρία" που είναι κωδικοποιημένη στο σύστημα. Γενικά, η πολυπλοκότητα των υπολογισμών που χρειάζονται για ένα γύρο Magic μπορεί να ξεπεράσει κατά πολύ τις δυνατότητες ενός απλού υπολογιστή, γι' αυτό κι ακόμη δεν υπάρχουν προγράμματα που να παίζουν Magic καλύτερα από ανθρώπινους παίχτες (όπως υπάρχουν πχ για το σκάκι, τη ντάμα, το πόκερ, το μπριτζ, το τάβλι και πολλά άλλα παιχνίδια στρατηγικής). Η γνώμη μου είναι οτι για να λυθεί το πρόβλημα αυτό, χρειάζεται και συμβολική επεξεργασία, αλλά κι αυτή δεν θα είναι ποτέ αρκετή από μόνη της. Το ΑΙ μου συνδυάζει και τα δύο- αλλά όπως είπα προς το παρόν είναι σ' εμβρυακό στάδιο. Δεν βιαζόμαστε όμως- σκοπεύω να συνεχίσω να το δουλεύω για τα επόμενα ένα-δυο χρόνια, απλά όχι με τους τρελλούς ρυθμούς αυτής της χρονιάς (έριξα κάτι ξεγυρισμένα δεκαεξάωρα τη μέρα που το φχαριστήθηκε η ψυχή μου). Προς το παρόν, αυτό που έχω να παραδώσω σ' ένα μήνα είναι "proof of concept" ένα πρώτο μοντέλο- ένα "prototype". Πτυχιακή είναι- δεν είναι διδακτορικό!
Μπορώ να πω όμως οτι είμαι αρκετά ευχαριστημένη με τη δουλειά μου. Ακόμη δεν έχει τελειώσει βέβαια- θέλω ακόμη ένα μήνα. Κι όταν λέω "ένα μήνα" εννοώ ένα μήνα στο ίδιο τρελλό πήξιμο, απλά πλέον έχω φάει το βόδι και δεν πρόκειται να κολλήσω στην ουρά, σιγά. Ωχ, "famous last words"... ! :)
(A Suivre)