Εκπαιδευτικό έργο τεχνητή νοημοσύνη. Ματ, τεχνητή νοημοσύνη: τι μας διδάσκει η εμπειρία του Garry Kasparov Εκπαιδευτικό έργο σκάκι και τεχνητή νοημοσύνη

Σπίτι Grishanin E.A. Durin S.V. Περιεχόμενα 1. Τι είναι η τεχνητή νοημοσύνη; 2. Σχετικά με τις βάσεις γνώσεων. 3. Εργασίες δοκιμής.Τεχνητή νοημοσύνη . Στη δεκαετία του '60 του 20ου αιώνα, εμφανίστηκε ένα νέο τμήμα της επιστήμης των υπολογιστών, το οποίο ονομάστηκε "Τεχνητή Νοημοσύνη". ΣΕεγκυκλοπαιδικό λεξικό είναι γραμμένο: «Νοημοσύνη (από το λατινικό intellectus - γνώση, κατανόηση, λογική) - η ικανότητα της σκέψης, η ορθολογική γνώση». Αυτή η ικανότητα είναι πλήρως χαρακτηριστική μόνο των ανθρώπων. Το αντικείμενο μελέτης της επιστήμης «Τεχνητή Νοημοσύνη» είναι η ανθρώπινη σκέψη. Οι επιστήμονες αναζητούν μια απάντηση στο ερώτημα: πώς σκέφτεται ένας άνθρωπος; Στόχος αυτής της έρευνας είναι να δημιουργήσει ένα μοντέλο ανθρώπινης νοημοσύνης και να το εφαρμόσει σε υπολογιστή. Κάπως απλοποιημένος, ο παραπάνω στόχος ακούγεται ως εξής: - Να διδάξουμε μια μηχανή να σκέφτεται. Όταν ένα άτομο αρχίζει να λύνει ένα πρόβλημα, συχνά δεν έχει ένα σαφές πρόγραμμα δράσης. Αυτό το πρόγραμμα το φτιάχνει μόνος του καθώς εργάζεται. Για παράδειγμα, όταν παίζει σκάκι, ένας σκακιστής γνωρίζει τους κανόνες του παιχνιδιού και έχει στόχο να κερδίσει το παιχνίδι. Οι ενέργειές του δεν είναι προγραμματισμένες εκ των προτέρων. Εξαρτώνται από τις ενέργειες του αντιπάλου, από την αναπτυσσόμενη θέση στο ταμπλό, από την ευφυΐα καιπροσωπική εμπειρία σκακιστής. Υπάρχουν πολλά άλλα είδηανθρώπινη δραστηριότητα , το οποίο δεν μπορεί να προγραμματιστεί εκ των προτέρων. Για παράδειγμα, σύνθεση μουσικής και ποίησης, απόδειξη ενός θεωρήματος, λογοτεχνική μετάφραση από , διάγνωση και θεραπεία ασθενειών και πολλά άλλα. Γνωρίζετε καλά ότι ένας υπολογιστής εκτελεί οποιαδήποτε εργασία σύμφωνα με ένα πρόγραμμα. Τα προγράμματα γράφονται από άτομα και ο υπολογιστής τα εκτελεί επίσημα. Οι προγραμματιστές συστημάτων τεχνητής νοημοσύνης προσπαθούν ακριβώς να διδάξουν ένα μηχάνημα, όπως ένα άτομο, να δημιουργήσει ανεξάρτητα ένα πρόγραμμα των ενεργειών του με βάση τις συνθήκες του προβλήματος. Μπορείτε επίσης να το πείτε αυτό: ο στόχος είναι να μετατρέψετε τον υπολογιστή από επίσημο ερμηνευτή σε πνευματικό ερμηνευτή. Πρόγραμμα επίσημων δεδομένων εκτελεστών Εκτέλεση των αποτελεσμάτων προγράμματος Έξυπνα δεδομένα εκτελεστών Κατασκευή του προγράμματος Εκτέλεση των αποτελεσμάτων του προγράμματος Μοντέλο λειτουργίας του επίσημου και πνευματικού εκτελεστή Οποιοδήποτε σύστημα τεχνητής νοημοσύνης λειτουργεί εντός συγκεκριμένου θεματικού τομέα (ιατρικά διαγνωστικά, νομοθεσία, μαθηματικά, οικονομικά κ.λπ. .). Όπως ένας ειδικός, ένας υπολογιστής πρέπει να έχει γνώσεις σε έναν δεδομένο τομέα. Η γνώση σε μια συγκεκριμένη θεματική περιοχή, επισημοποιημένη με συγκεκριμένο τρόπο και αποθηκευμένη στη μνήμη του υπολογιστή, ονομάζεται βάση γνώσεων υπολογιστή. Για παράδειγμα, θέλετε να χρησιμοποιήσετε έναν υπολογιστή για να λύσετε προβλήματα γεωμετρίας. Εάν ένα βιβλίο προβλημάτων περιέχει 500 προβλήματα διαφορετικού περιεχομένου, τότε με την παραδοσιακή χρήση υπολογιστή θα πρέπει να γράψετε 500 προγράμματα. Εάν ένας ειδικός τεχνητής νοημοσύνης αναλάβει αυτό το πρόβλημα, θα το προσεγγίσει εντελώς διαφορετικά. Θα βάλει γνώσεις γεωμετρίας στον υπολογιστή (όπως ακριβώς οι δάσκαλοι βάζουν γνώση σε εσάς). Με βάση αυτή τη γνώση και χρησιμοποιώντας έναν ειδικό αλγόριθμο λογικής συλλογιστικής, ο υπολογιστής θα λύσει οποιοδήποτε από τα 500 προβλήματα. Για να γίνει αυτό, θα αρκεί να του πείτε μόνο την κατάσταση του προβλήματος. Τα συστήματα τεχνητής νοημοσύνης λειτουργούν με βάση τις βάσεις γνώσεων που είναι ενσωματωμένες σε αυτά. Κάθε μαθητής γνωρίζει ότι για να λύσετε οποιοδήποτε πρόβλημα δεν αρκεί να θυμάστε τους κανόνες, τους νόμους, τους τύπους, αλλά πρέπει επίσης να είστε σε θέση να σκέφτεστε, να συλλογίζεστε και να εφαρμόζετε αυτή τη γνώση. Η ανθρώπινη σκέψη βασίζεται σε δύο στοιχεία: το απόθεμα της γνώσης και την ικανότητα για λογικό συλλογισμό Αυτό οδηγεί σε δύο κύρια καθήκοντα κατά τη δημιουργία ευφυών συστημάτων σε έναν υπολογιστή: - μοντελοποίηση γνώσης (ανάπτυξη μεθόδων για την επισημοποίηση της γνώσης για την εισαγωγή της στη μνήμη του υπολογιστή. μια βάση γνώσεων)· - μοντελοποίηση συλλογισμού (δημιουργία προγραμμάτων υπολογιστή που μιμούνται τη λογική της ανθρώπινης σκέψης κατά την επίλυση διαφόρων προβλημάτων). Ένας τύπος συστήματος τεχνητής νοημοσύνης είναι τα έμπειρα συστήματα. Συνήθως, η λέξη «ειδικός» αναφέρεται σε ένα άτομο που έχει εκτεταμένη γνώση και εμπειρία σε έναν συγκεκριμένο τομέα. Τα εξειδικευμένα συστήματα υπολογιστών περιέχουν γνώση αυτού του επιπέδου. Ο σκοπός των έμπειρων συστημάτων είναι να παρέχουν συμβουλές στους χρήστες και να βοηθούν στη λήψη αποφάσεων. Μια τέτοια βοήθεια γίνεται ιδιαίτερα σημαντική σε ξένη γλώσσαακραίες καταστάσεις , για παράδειγμα, σε συνθήκες τεχνικού ατυχήματος, λειτουργίας έκτακτης ανάγκης, κατά την οδήγηση . Ο υπολογιστής δεν υπόκειται σε άγχος. Θα βρει γρήγορα τη βέλτιστη, ασφαλή λύση και θα την προσφέρει στο άτομο. Ωστόσο, η τελική απόφαση λαμβάνεται από το άτομο. Εν συντομία για το κύριο πράγμα Η τεχνητή νοημοσύνη (AI) είναι ένας κλάδος της επιστήμης των υπολογιστών. Το αντικείμενο της μελέτης της τεχνητής νοημοσύνης είναι η ανθρώπινη σκέψη. ο στόχος είναι η δημιουργία ευφυών συστημάτων σε έναν υπολογιστή. Παραδείγματα τομέων στους οποίους δημιουργούνται συστήματα τεχνητής νοημοσύνης: σκάκι και άλλα παιχνίδια, συγγραφή ποίησης και μουσικής, μετάφραση κειμένων από τη μια γλώσσα στην άλλη, ρομποτική, ιατροδικαστική (αναγνώριση δακτυλικών αποτυπωμάτων κ.λπ.), ιατρική διάγνωση. Τα συστήματα τεχνητής νοημοσύνης λειτουργούν με βάση τη γνώση που είναι ενσωματωμένη σε αυτά σε μια συγκεκριμένη περιοχή. Το μοντέλο γνώσης που είναι ενσωματωμένο στη μνήμη του υπολογιστή ονομάζεται βάση γνώσεων υπολογιστή. Η ανθρώπινη σκέψη βασίζεται σε δύο συστατικά: το απόθεμα γνώσης και την ικανότητα λογικής λογικής. Τα συστήματα AI εφαρμόζουν ένα μοντέλο συλλογισμού (ανθρώπινη λογική). Με βάση τη βάση γνώσεων και το μοντέλο συλλογισμού, το ίδιο το σύστημα AI προγραμματίζει τη δουλειά του όταν επιλύει οποιοδήποτε πρόβλημα. Ένα έμπειρο σύστημα είναι ένα σύστημα τεχνητής νοημοσύνης που περιέχει τη γνώση και την εμπειρία ενός ειδικού σε μια δεδομένη θεματική περιοχή. Εδώ είναι η σύνθεση της βάσης γνώσεων "Συγγενείς": Γεγονότα: Ο Λέων είναι ο πατέρας του Αντρέι. Ο Λέων είναι ο πατέρας του Πέτρου. Andrey - ο πατέρας του Alexey. Peter - ο πατέρας του Michael? Ο Πέτρος είναι ο πατέρας του Ντμίτρι. Κανόνες: κάθε άνθρωπος είναι γιος του πατέρα του. παππούς - πατέρας του πατέρα? αδέρφια - γιοι του ίδιου πατέρα. θείος - αδερφός του πατέρα? ανιψιός - γιος αδερφού? εγγονός - γιος γιου. Με βάση αυτά τα δεδομένα και τους κανόνες, είναι δυνατό, μέσω της λογικής συλλογιστικής, να δημιουργηθούν κάθε είδους οικογενειακοί δεσμοί μεταξύ των ανδρών αυτής της οικογένειας. Δώστε προσοχή σε δύο χαρακτηριστικά της βάσης γνώσεων: - τα γεγονότα είναι ιδιωτικά και οι κανόνες είναι γενικοί (δίκαιοι για κάθε οικογένεια). - η βάση γνώσεων περιλαμβάνει μόνο θεμελιώδη γεγονότα. Πράγματι, αρκεί να γνωρίζουμε ποιος είναι ο πατέρας ποιών για να καθορίσουμε, χρησιμοποιώντας τους κανόνες, άλλους οικογενειακούς δεσμούς. Με βάση μια τέτοια βάση γνώσεων, είναι δυνατό να οικοδομηθεί ένα έμπειρο σύστημα στον τομέα των συγγενικών σχέσεων μεταξύ ανδρών. Για να το χρησιμοποιήσετε σε σχέση με μια άλλη οικογένεια, αρκεί να αντικαταστήσετε τη λίστα των γεγονότων και οι κανόνες, φυσικά, θα παραμείνουν οι ίδιοι. Συγκρίνοντας τη βάση δεδομένων με τη βάση γνώσεων, καταλήγουμε στο συμπέρασμα: η βάση δεδομένων περιέχει μόνο γεγονότα, η βάση γνώσεων περιέχει γεγονότα και κανόνες. Αρχική Σχετικά με τις βάσεις γνώσεων. Είστε ήδη εξοικειωμένοι με την έννοια της «βάσης δεδομένων». Μια βάση δεδομένων (DB) είναι ένα μοντέλο πληροφοριών κάποιου πραγματικού συστήματος στη μνήμη του υπολογιστή. Ειπώθηκε παραπάνω ότι μια βάση γνώσεων (KB) είναι ένα μοντέλο της γνώσης ενός ατόμου σε μια συγκεκριμένη θεματική περιοχή. Ας δείξουμε τη διαφορά μεταξύ μιας βάσης δεδομένων και μιας βάσης γνώσεων χρησιμοποιώντας ένα συγκεκριμένο παράδειγμα. Ας εξετάσουμε αυτό το ζήτημα χρησιμοποιώντας το παράδειγμα των οικογενειακών δεσμών μεταξύ ανδρών της ίδιας οικογένειας. Δείτε πώς μοιάζουν στη γραφική μορφή ενός οικογενειακού δέντρου: Lev Peter Andrey Mikhail Dmitry Alexey Οικογενειακό δέντρο Εδώ οι γραμμές αντιπροσωπεύουν τη σχέση μεταξύ πατέρα (στο ανώτερο επίπεδο) και γιου (στο κάτω επίπεδο). Οικογενειακοί δεσμοί Άνδρας Λέων Υιοί Πατέρας Παππούς Αδέρφια Θείοι Ανιψιοί Δεν ξέρω Δεν ξέρω Εγγονοί Andrey, Peter δεν ξέρω δεν ξέρω δεν ξέρω Andrey Alexey Lev Δεν ξέρω Peter I don δεν ξέρω τον Μιχαήλ Ντμίτρι όχι Πίτερ Μιχαήλ, Ντμίτρι Λεβ δεν ξέρω Αντρέι δεν ξέρω Αλεξέι όχι Αλεξέι Όχι Αντρέι Λεβ όχι όχι Μιχαήλ Όχι Πίτερ Λεβ Ντμίτρι Αντρέι όχι όχι Ντμίτρι Όχι Πίτερ Λεβ Μιχαήλ όχι όχι όχι Πίτερ Αντρέι Αλεξέι Μιχαήλ Dmitry Ο Πίνακας 9.1 περιέχει πληροφορίες για οχήματαοικογενειακούς δεσμούς μεταξύ των ίδιων ανδρών παρουσιάζεται σε διευρυμένη μορφή. Χρησιμοποιώντας ένα σχεσιακό DBMS, είναι εύκολο να δημιουργήσετε μια σχεσιακή βάση δεδομένων με βάση αυτόν τον πίνακα. Απευθυνόμενος σε αυτήν με αιτήματα, μπορείτε να προσδιορίσετε ποιος είναι ο πατέρας, ο παππούς ή ο αδερφός του. Αυτός ο πίνακας αντιπροσωπεύει ένα μοντέλο πληροφοριών του αντικειμένου «οικογένειας». Τώρα ας προχωρήσουμε στη δημιουργία μιας βάσης γνώσεων. Το θέμα εδώ είναι οι οικογενειακοί δεσμοί μεταξύ ανδρών της ίδιας οικογένειας. Στην τεχνητή νοημοσύνη υπάρχουνμοντέλα γνώσης. Θα εξετάσουμε μόνο ένα από αυτά, το οποίο ονομάζεται μοντέλο λογικής γνώσης. Αυτή η προσέγγιση χρησιμοποιείται στο σύστημα προγραμματισμού PROLOG (Η Prolog συζητείται στο δεύτερο μέρος του βιβλίου). Σύμφωνα με το λογικό μοντέλο, η βάση γνώσεων αποτελείται από γεγονότα και κανόνες. Τώρα ας δώσουμε γενικός ορισμός έννοιες του «γεγονότος» και του «κανόνα». Ένα γεγονός είναι ένα μήνυμα (πληροφορία) για ένα συγκεκριμένο γεγονός, για την ιδιότητα ενός συγκεκριμένου αντικειμένου, για τη σύνδεσή του με άλλα αντικείμενα. Για παράδειγμα, οι ακόλουθες δηλώσεις είναι γεγονότα: - πεύκο - κωνοφόρο δέντρο. - Ο Κολόμβος ανακάλυψε την Αμερική το 1492. - η πυκνότητα του νερού είναι 1 g/cm. - Βασιλιάς Σολομών - γιος του βασιλιά Δαβίδ. - Ο Λέων Τολστόι είναι Ρώσος συγγραφέας. Ένας κανόνας είναι μια δήλωση που είναι πιο γενική από ένα γεγονός. Οι κανόνες ορίζουν ορισμένες έννοιες μέσω άλλων, δημιουργούν σχέσεις μεταξύ των διαφόρων ιδιοτήτων των αντικειμένων και διατυπώνουν τους νόμους της φύσης ή της κοινωνίας. Μια βάση γνώσεων είναι μια συλλογή θεμελιωδών γεγονότων και κανόνων σε μια συγκεκριμένη θεματική περιοχή. Πρόσφατα, εμφανίστηκε μια νέα ειδικότητα «μηχανικός γνώσης», καθήκον του οποίου είναι να επισημοποιήσει τη γνώση, να αναπτύξει βάσεις γνώσεων και να δημιουργήσει συστήματα τεχνητής νοημοσύνης που βασίζονται σε αυτές. Το παράδειγμα που εξετάσαμε είναι πολύ απλό. Εδώ δεν είναι δύσκολο να μαντέψει κανείς ποια γεγονότα είναι θεμελιώδη και να διατυπώσει ένα πλήρες σύνολο κανόνων. Σε πιο σύνθετα θεματικά πεδία αυτή η εργασία είναι πολύ πιο δύσκολη. Συχνά μόνο ένας μεγάλος ειδικός (ειδικός) ή μια ομάδα ειδικών με εκτεταμένες γνώσεις σε αυτόν τον τομέα μπορεί να το λύσει. Εν συντομία για το κύριο πράγμα. Το λογικό μοντέλο γνώσης σε μια συγκεκριμένη θεματική περιοχή αντιπροσωπεύεται από μια βάση γνώσεων που αποτελείται από γεγονότα και κανόνες. Ένα γεγονός είναι πληροφορίες για ένα συγκεκριμένο γεγονός, για την ιδιότητα ενός συγκεκριμένου αντικειμένου, για τη σύνδεσή του με άλλα αντικείμενα. Οι κανόνες ορίζουν ορισμένες έννοιες μέσω άλλων, καθιερώνουν σχέσεις μεταξύ των διαφόρων ιδιοτήτων των αντικειμένων και διατυπώνουν τους νόμους της φύσης ή της κοινωνίας. Η βάση γνώσεων περιλαμβάνει μόνο θεμελιώδη στοιχεία για μια δεδομένη θεματική ενότητα Εργασίες δοκιμής στο σπίτι 1. 2. 3. 4. Εργασία Νο. 1 Εργασία Νο. 2 Εργασία Νο. 3 Εργασία Νο. 4 Τέλος Πότε ξεκίνησε η κατεύθυνση που ονομάζεται «Τεχνητή Νοημοσύνη». Προκύπτουν στην επιστήμη των υπολογιστών A. Στη δεκαετία του '50 Β. Στη δεκαετία του '70 Δ. Στη δεκαετία του '80 Σωστό Επόμενο Σκεφτείτε Περαιτέρω Τι είναι μια βάση γνώσεων A. Μια βάση γνώσης είναι η πληροφορία για ένα συγκεκριμένο γεγονός; συγκεκριμένο αντικείμενο, σχετικά με τη σύνδεσή του με άλλα αντικείμενα B. Μια βάση γνώσεων είναι ένα σύνολο θεμελιωδών γεγονότων και κανόνων σε μια συγκεκριμένη θεματική περιοχή Γ. Μια βάση γνώσης είναι η D. Μια βάση γνώσης είναι μια ανάπτυξη μιας δήλωσης που είναι πιο γενική από ό,τι. ένα γεγονός για την εισαγωγή τους στη μνήμη του υπολογιστή ως βάση γνώσεων Τι είναι η μοντελοποίηση του συλλογισμού Α. Δημιουργία προγραμμάτων υπολογιστή, Β. Ανάπτυξη μεθόδων που μιμούνται τη λογική της ανθρώπινης σκέψης κατά την επίλυση διαφόρων προβλημάτων. επισημοποίηση της γνώσης για την εισαγωγή της σε μια συγκόλληση υπολογιστή ως βάση γνώσεων. Γ. Αυτό είναι ένα μοντέλο ανθρώπινης γνώσης στο Δ. Αυτός είναι ένας αλγόριθμος για μια συγκεκριμένη θεματική περιοχή. ηχογραφημένο στη γλώσσα του ερμηνευτή. Τι είναι το ΓΕΓΟΝΟΣ; Α. Κάθε αντικείμενο που αποτελείται από Β. Αυτή η πληροφορία για τη σύνθεση και Γ. Ένα μήνυμα για ένα συγκεκριμένο Δ. Αυτή είναι μια ορισμένη σειρά πολλών διασυνδεδεμένων μερών και της δομής του συστήματος, που παρουσιάζεται γραφικά ως ενιαίο σύνολο. μορφή. γεγονός και ιδιότητα ενός συγκεκριμένου αντικειμένου, η σύνδεσή του με άλλα αντικείμενα. συνδυάζοντας τα στοιχεία που απαρτίζουν το σύστημα.

Δυστυχώς, δεν υπάρχουν καλύτεροι αλγόριθμοι για το σκάκι από το να δοκιμάζεις πάρα πολλές θέσεις. Είναι αλήθεια ότι η αναζήτηση είναι βελτιστοποιημένη κατά σειρά (και περισσότερες από μία), αλλά εξακολουθεί να είναι μια μεγάλη αναζήτηση. Για να αναζητήσετε μια κίνηση απόκρισης, δημιουργείται ένα δέντρο με την αρχική κίνηση στη ρίζα, άκρες - κινήσεις απάντησης και κόμβους - νέες θέσεις.

Το πώς επιλέγεται η επόμενη κίνηση σε στοιχειώδεις αλγόριθμους είναι εύκολο να εξηγηθεί. Στη σειρά σας, επιλέγετε την κίνηση (κατά τη γνώμη σας) που θα φέρει το μεγαλύτερο όφελος (μεγιστοποιεί το όφελός σας) και στην επόμενη κίνησή σας, ο αντίπαλός σας προσπαθεί να επιλέξει την κίνηση που θα του φέρει το μεγαλύτερο όφελος (μεγιστοποιεί το όφελος και ελαχιστοποιεί το δικό σου). Ένας αλγόριθμος με αυτή την αρχή ονομάζεται minimax. Σε κάθε στάδιο, εκχωρείτε μια βαθμολογία θέσης σε κάθε κόμβο στο δέντρο (περισσότερα για αυτό αργότερα) και τη μεγιστοποιείτε στη σειρά σας και την ελαχιστοποιείτε στη στροφή του αντιπάλου σας. Κατά τη λειτουργία, ο αλγόριθμος πρέπει να περάσει από όλους τους κόμβους του δέντρου (δηλαδή από όλες τις πιθανές θέσεις παιχνιδιού στο παιχνίδι), δηλαδή είναι εντελώς ακατάλληλος από άποψη χρόνου.
Η επόμενη βελτίωσή του είναι το άλφα-βήτα κλάδεμα (μέθοδος κλαδιών και δεσμών).

Από το όνομα προκύπτει ότι ο αλγόριθμος αποκόπτει σύμφωνα με δύο παραμέτρους - άλφα και βήτα. Η κύρια ιδέα της κοπής είναι ότι τώρα θα διατηρήσουμε το διάστημα αποκοπής (κάτω και άνω όρια - άλφα και βήτα, αντίστοιχα - Κ.Ο.) και δεν θα εξετάσουμε τις εκτιμήσεις όλων των κόμβων που δεν εμπίπτουν στο παρακάτω διάστημα ( δεδομένου ότι δεν επηρεάζουν το αποτέλεσμα - πρόκειται απλώς για χειρότερες κινήσεις από αυτή που έχει ήδη βρεθεί), και το ίδιο το διάστημα θα περιοριστεί καθώς βρίσκουμε καλύτερες κινήσεις. Αν και το απόκομμα alpha-beta είναι πολύ καλύτερο από το minimix, ο χρόνος λειτουργίας του είναι επίσης πολύ μεγάλος. Αν υποθέσουμε ότι στη μέση του παιχνιδιού υπάρχουν περίπου 40 διαφορετικές κινήσεις στη μία πλευρά, τότε ο χρόνος του αλγορίθμου μπορεί να υπολογιστεί ως O(40^P), όπου P είναι το βάθος του δέντρου κίνησης. Φυσικά, με το minimax μπορεί να υπάρξει μια τέτοια σειρά θεώρησης των κινήσεων όταν δεν κάνουμε καμία περικοπή, τότε η άλφα-βήτα περικοπή θα μετατραπεί απλά σε minimax. Στην καλύτερη περίπτωση, το κλάδεμα άλφα-βήτα μπορεί να αποφύγει τον έλεγχο της ρίζας όλων των κινήσεων στο minimax. Προκειμένου να αποφευχθεί ο μεγάλος χρόνος εργασίας (με τόσο μεγάλη πολυπλοκότητα του αλγορίθμου), το δέντρο αναζητείται για κάποια σταθερή τιμή και ο κόμβος αξιολογείται εκεί. Αυτή η εκτίμηση είναι μια πολύ μεγάλη προσέγγιση με την πραγματική εκτίμηση ενός κόμβου (δηλαδή, αναζήτηση μέχρι το τέλος του δέντρου και στη συνέχεια το αποτέλεσμα είναι "νίκη, ήττα, ισοπαλία"). Όσο για την αξιολόγηση του κόμβου, υπάρχει απλώς ένας σωρός διάφορες τεχνικές(μπορείτε να διαβάσετε στους συνδέσμους στο τέλος του άρθρου). Με λίγα λόγια, υπολογίζω φυσικά το υλικό του παίκτη (σύμφωνα με ένα σύστημα - σε ακέραιους αριθμούς πιόνι - 100, ιππότης και επίσκοπος - 300, πύργος - 500, βασίλισσα - 900, σύμφωνα με άλλο σύστημα - πραγματικό σε μέρη του ενός) + θέση στο το ταμπλό του συγκεκριμένου παίκτη. Όσο για τη θέση, εδώ ξεκινά ένας από τους εφιάλτες της γραφής σκακιού, αφού η ταχύτητα του προγράμματος θα εξαρτηθεί κυρίως από τη συνάρτηση αξιολόγησης και, πιο συγκεκριμένα, από την αξιολόγηση της θέσης. Υπάρχει ήδη πολύς κόσμος εδώ. Για μια ζευγαρωμένη περιήγηση στον παίκτη +, για την κάλυψη του βασιλιά με τα πιόνια του +, για ένα πιόνι κοντά στο άλλο άκρο του ταμπλό +, κ.λπ., και μείον τη θέση των κρεμασμένων κομματιών, έναν ανοιχτό βασιλιά κ.λπ. και τα λοιπά. - μπορείτε να γράψετε ένα σωρό παράγοντες. Για την αξιολόγηση μιας θέσης σε ένα παιχνίδι, κατασκευάζεται μια εκτίμηση της θέσης του παίκτη που κάνει την κίνηση και αφαιρείται από αυτήν η εκτίμηση της αντίστοιχης θέσης του αντιπάλου. Όπως λένε, μια εικόνα μερικές φορές αξίζει όσο χίλιες λέξεις και ίσως ένα κομμάτι ψευδο-κώδικα C# να είναι επίσης καλύτερο από μια εξήγηση:

Enum CurrentPlayer (Εγώ, αντίπαλος); public int AlphaBetaPruning (int alpha, int beta, int depth, CurrentPlayer currentPlayer) ( // τιμή της τρέχουσας τιμής int κόμβου; // μέτρηση τρέχοντος κόμβου ++nodesSearched; // πάρτε αντίθετα από το currentPlayer CurrentPlayer αντίπαλοPlayer = GetOppositePlayerTo (currentP); / δημιουργεί όλες τις κινήσεις για τον παίκτη, η σειρά του οποίου είναι να κάνει κίνηση / / κινήσεις, που δημιουργούνται με αυτήν τη μέθοδο, είναι χωρίς κινήσεις // αφού γίνει ποιος τρέχων παίκτης θα ήταν στη λίστα ελέγχου κινήσεις = GenerateAllMovesForPlayer(currentPlayer);

// επαναφέρετε τις κινήσεις για κάθε κίνηση σε κινήσεις ( MakeMove(move); ++ply; // Εάν το βάθος είναι ακόμα, συνεχίστε την αναζήτηση βαθύτερη εάν (βάθος > 1) τιμή = -AlphaBetaPruning (-beta, -alpha, depth - 1, αντίπαλοςΠαίκτης// Αν δεν έχει απομείνει βάθος (κόμβος φύλλου), αξιολογήστε αυτήν την τιμή θέσης = EvaluatePlayerPosition(currentPlayer) - EvaluatePlayerPosition(opponentPlayer()). if (value >= beta) return beta alpha = value) ) if (moves.Count == 0) ( // αν δεν κινείται, τότε η θέση είναι ματ ή if ( IsInCheck(currentPlayer)) return (-MateValue + ply); αλλιώς επιστροφή 0? )

  • Νομίζω ότι ορισμένες εξηγήσεις σχετικά με τον κώδικα δεν θα ήταν περιττές:
  • Το GetOppositePlayerTo() αλλάζει απλώς το CurrentPlayer.Me σε CurrentPlayer.Opponent και αντίστροφα
  • Η MakeMove() κάνει την επόμενη κίνηση από τη λίστα μετακινήσεων
ply - μια καθολική μεταβλητή (μέρος της κλάσης) που κρατά τον αριθμό των μισών κινήσεων που έγιναν σε ένα δεδομένο βάθος

Παράδειγμα χρήσης της μεθόδου:
( ply = 0; nodesSearched = 0; int score = AlphaBetaPruning(-MateValue, MateValue, max_depth, CurrentPlayer.Me); )
όπου το MateValue είναι ένας αρκετά μεγάλος αριθμός. παράμετρος max_depth -μέγιστο βάθος

, στο οποίο θα κατέβει ο αλγόριθμος στο δέντρο. Θα πρέπει να ληφθεί υπόψη ότι ο ψευδοκώδικας είναι καθαρά αποδεικτικός, αλλά αρκετά λειτουργικός.

Αντί να επινοήσουν έναν νέο αλγόριθμο, οι άνθρωποι που προωθούν το κλάδεμα άλφα-βήτα έχουν βρει πολλά διαφορετικά ευρετικά. Τα ευρετικά είναι απλώς ένα μικρό hack που μερικές φορές κάνει πολύ μεγάλη διαφορά στην ταχύτητα. Υπάρχουν πολλά ευρετικά στοιχεία για το σκάκι, δεν μπορείτε να τα μετρήσετε όλα. Θα δώσω μόνο τα κύρια, τα υπόλοιπα θα τα βρείτε στους συνδέσμους στο τέλος του άρθρου. Αρχικά, εφαρμόζεται μια πολύ γνωστή ευρετική. Σε μια ήσυχη θέση, ο εχθρός επιτρέπεται να κάνει δύο κινήσεις αντί για μία και μετά το δέντρο εξετάζεται σε βάθος (βάθος-2), και όχι (βάθος-1). Εάν, μετά την αξιολόγηση ενός τέτοιου υποδέντρου, αποδειχθεί ότι ο τρέχων παίκτης εξακολουθεί να έχει ένα πλεονέκτημα, τότε δεν έχει νόημα να εξετάσουμε περαιτέρω το υποδέντρο, αφού μετά την επόμενη κίνησή του ο παίκτης θα κάνει τη θέση του μόνο καλύτερη. Δεδομένου ότι η αναζήτηση είναι πολυωνυμική, η αύξηση της ταχύτητας είναι αισθητή. Μερικές φορές συμβαίνει ότι ο εχθρός εξισώνει το πλεονέκτημά του, τότε πρέπει να εξετάσετε ολόκληρο το υποδέντρο μέχρι το τέλος. Δεν πρέπει πάντα να γίνεται μια κενή κίνηση (για παράδειγμα, όταν ένας από τους βασιλιάδες είναι στο τσεκ, στο zugzwang ή στο τέλος του παιχνιδιού).

Στη συνέχεια, η ιδέα χρησιμοποιείται για να κάνετε πρώτα μια κίνηση, η οποία θα περιλαμβάνει τη σύλληψη του εχθρικού κομματιού που έκανε την τελευταία κίνηση. Δεδομένου ότι σχεδόν όλες οι κινήσεις κατά τη διάρκεια της αναζήτησης είναι ανόητες και όχι πολύ έξυπνες, αυτή η ιδέα θα περιορίσει σημαντικά το παράθυρο αναζήτησης στην αρχή, κόβοντας έτσι πολλές περιττές κινήσεις.

Επίσης γνωστό ιστορία ευρετικήή καλύτερη υπηρεσία κινήσεων. Κατά τη διάρκεια της αναζήτησης, οι καλύτερες κινήσεις σε ένα δεδομένο επίπεδο του δέντρου αποθηκεύονται και όταν εξετάζετε μια θέση, μπορείτε πρώτα να προσπαθήσετε να κάνετε μια τέτοια κίνηση για ένα δεδομένο βάθος (με βάση την ιδέα ότι οι ίδιες καλύτερες κινήσεις γίνονται συχνά σε ίσα βάθη στο δέντρο).
Είναι γνωστό ότι αυτού του είδους η προσωρινή αποθήκευση των κινήσεων βελτίωσε την απόδοση του σοβιετικού προγράμματος Kaissa κατά 10 φορές.

Υπάρχουν επίσης μερικές ιδέες για τη δημιουργία κινήσεων. Πρώτον, λαμβάνονται υπόψη οι νικητήριες συλλήψεις, δηλαδή εκείνες οι συλλήψεις όταν ένα κομμάτι με χαμηλότερο σκορ κερδίζει ένα κομμάτι με υψηλότερο σκορ. Στη συνέχεια εξετάζουν τις προαγωγές (όταν ένα πιόνι στην άλλη άκρη του ταμπλό μπορεί να αντικατασταθεί με ένα περισσότερο δυνατή φιγούρα), στη συνέχεια παίρνει ίσα και μετά μετακινείται από την ευρετική κρυφή μνήμη ιστορικού. Οι υπόλοιπες κινήσεις μπορούν να ταξινομηθούν με βάση τον έλεγχο του ταμπλό ή κάποιο άλλο κριτήριο.

Όλα θα ήταν καλά εάν η κοπή alpha-beta ήταν εγγυημένη ότι θα έδινε την καλύτερη απάντηση. Ακόμη και λαμβάνοντας υπόψη για πολύ καιρόνα υπερσκοτώσει. Δεν ήταν όμως έτσι. Το πρόβλημα είναι ότι μετά από αναζήτηση με ένα σταθερό ποσό, η θέση αξιολογείται και αυτό είναι, αλλά, όπως αποδείχθηκε, σε ορισμένες θέσεις παιχνιδιού είναι αδύνατο να σταματήσει η αναζήτηση. Μετά από πολλές προσπάθειες, αποδείχτηκε ότι η κατάρρευση μπορεί να σταματήσει μόνο σε ήρεμες θέσεις. Επομένως, στην κύρια αναζήτηση, προστέθηκε μια πρόσθετη αναζήτηση, στην οποία λαμβάνονται υπόψη μόνο οι συλλήψεις, οι προωθήσεις και οι έλεγχοι (ονομάζεται αναγκαστική αναζήτηση). Παρατηρήσαμε επίσης ότι ορισμένες θέσεις με ανταλλαγή στη μέση πρέπει επίσης να εξεταστούν σε μεγαλύτερο βάθος. Αυτό είναι το πώς οι ιδέες για επεκτάσεις і μειώσεις, δηλαδή εμβάθυνση και συντόμευση του δέντρου αναζήτησης. Για εσοχές, οι πιο κατάλληλες θέσεις είναι όπως endgame με πιόνια, αποφυγή ελέγχου, ανταλλαγή κομματιού στη μέση ενός μπούστου κ.λπ. Οι θέσεις «απόλυτα ήρεμες» είναι κατάλληλες για βράχυνση. Στο σοβιετικό πρόγραμμα Kaissa, η αναγκαστική προτομή ήταν λίγο ιδιαίτερη - εκεί, μετά από μια σύλληψη κατά τη διάρκεια της προτομής, άρχισε αμέσως η αναγκαστική και το βάθος της δεν περιοριζόταν (αφού μετά από κάποιο χρονικό διάστημα θα εξαντλούνταν σε μια ήσυχη θέση).

Όπως είπε ο Anthony Hoare: Η πρόωρη βελτιστοποίηση είναι η ρίζα όλων των κακών στον προγραμματισμό." (σημείωση: για όσους πιστεύουν ότι αυτό το απόσπασμα είναι από τον Knuth, υπάρχει μια ενδιαφέρουσα συζήτηση

Ας δούμε μερικά βασικές έννοιες, που θα μας βοηθήσει να δημιουργήσουμε μια απλή τεχνητή νοημοσύνη που μπορεί να παίξει σκάκι:

  • κίνηση;
  • αξιολόγηση σκακιέρας;
  • Minimax;
  • αποκοπή άλφα βήτα.

Σε κάθε βήμα, θα βελτιώνουμε τον αλγόριθμό μας χρησιμοποιώντας μία από αυτές τις δοκιμασμένες στο χρόνο τεχνικές προγραμματισμού σκακιού. Θα δείτε πώς καθένα από αυτά επηρεάζει το στυλ παιχνιδιού του αλγόριθμου.

Ο ολοκληρωμένος αλγόριθμος βρίσκεται στο GitHub.

Βήμα 1. Δημιουργία κινήσεων και οπτικοποίηση της σκακιέρας

Θα χρησιμοποιήσουμε τις βιβλιοθήκες chess.js για να δημιουργήσουμε κινήσεις και το chessboard.js για απόδοση του πίνακα. Η βιβλιοθήκη για τη δημιουργία κινήσεων εφαρμόζει όλους τους κανόνες του σκακιού. Με βάση αυτό, μπορούμε να υπολογίσουμε όλες τις κινήσεις για μια δεδομένη κατάσταση σανίδας.

Οπτικοποίηση της λειτουργίας δημιουργίας κίνησης. Η αρχική θέση χρησιμοποιείται ως είσοδος και η έξοδος είναι όλες οι πιθανές κινήσεις από αυτή τη θέση.

Η χρήση αυτών των βιβλιοθηκών θα μας βοηθήσει να επικεντρωθούμε μόνο στην πιο ενδιαφέρουσα εργασία - τη δημιουργία ενός αλγόριθμου που βρίσκει την καλύτερη κίνηση. Θα ξεκινήσουμε γράφοντας μια συνάρτηση που επιστρέφει μια τυχαία κίνηση από όλες τις πιθανές κινήσεις:

Var accountBestMove = συνάρτηση(παιχνίδι) ( //Δημιουργία όλων των κινήσεων για μια δεδομένη θέση var newGameMoves = game.ugly_moves(); return newGameMoves; );

Αν και αυτός ο αλγόριθμος δεν είναι πολύ σταθερός σκακιστής, είναι ένα καλό σημείο εκκίνησης αφού είναι αρκετά επίπεδο για να μας παίξει:

Ο μαύρος παίζει με τυχαίες κινήσεις

JSFiddle.

Βήμα 2: Αξιολόγηση Διοικητικού Συμβουλίου

Τώρα ας προσπαθήσουμε να καταλάβουμε ποια πλευρά είναι πιο δυνατή σε μια συγκεκριμένη θέση. Ο ευκολότερος τρόπος για να το πετύχετε αυτό είναι να υπολογίσετε τη σχετική αντοχή των κομματιών στον πίνακα χρησιμοποιώντας τον ακόλουθο πίνακα:

Χρησιμοποιώντας τη συνάρτηση βαθμολόγησης, μπορούμε να δημιουργήσουμε έναν αλγόριθμο που επιλέγει την κίνηση με την υψηλότερη βαθμολογία:

Var accountBestMove = συνάρτηση (παιχνίδι) ( var newGameMoves = game.ugly_moves(); var bestMove = null; //Χρήση οποιουδήποτε αρνητικού αριθμού var bestValue = -9999; για (var i = 0; i< newGameMoves.length; i++) { var newGameMove = newGameMoves[i]; game.ugly_move(newGameMove); //Возьмите отрицательное число, поскольку ИИ играет черными var boardValue = -evaluateBoard(game.board()) game.undo(); if (boardValue >bestValue) ( bestValue = boardValue; bestMove = newGameMove ) ) επιστροφή bestMove; )

Η μόνη απτή βελτίωση είναι ότι ο αλγόριθμός μας θα φάει τώρα το κομμάτι αν είναι δυνατόν:

Ο μαύρος παίζει με μια απλή συνάρτηση βαθμολόγησης

Μπορείτε να δείτε τι συνέβη σε αυτό το στάδιο στο JSFiddle.

Βήμα 3. Αναζήτηση δέντρου και minimax

Στη συνέχεια θα δημιουργήσουμε ένα δέντρο αναζήτησης από το οποίο ο αλγόριθμος μπορεί να επιλέξει την καλύτερη κίνηση. Αυτό γίνεται χρησιμοποιώντας τον αλγόριθμο minimax.

Σημείωμα μετάφραση Σε ένα από τα άρθρα μας που έχουμε ήδη ασχοληθεί - μάθαμε να δημιουργούμε τεχνητή νοημοσύνη που δεν μπορεί να νικηθεί στο τικ.

Σε αυτόν τον αλγόριθμο, ένα αναδρομικό δέντρο όλων των πιθανών κινήσεων διερευνάται σε ένα δεδομένο βάθος και η θέση αξιολογείται στα «φύλλα» του δέντρου.

Μετά από αυτό επιστρέφουμε είτε το μικρότερο είτε υψηλότερη τιμήπαιδί στον γονικό κόμβο, ανάλογα με το ποιος υπολογίζεται η κίνηση (δηλαδή προσπαθούμε να ελαχιστοποιήσουμε ή να μεγιστοποιήσουμε το αποτέλεσμα σε κάθε επίπεδο).

Οπτικοποίηση minimax σε τεχνητή θέση. Η καλύτερη κίνηση για τον Λευκό είναι το b2-c3, οπότε μπορούμε να εγγυηθούμε ότι θα φτάσουμε σε μια θέση όπου το σκορ είναι -50

Var minimax = συνάρτηση (βάθος, παιχνίδι, isMaximisingPlayer) ( if (βάθος === 0) ( return -evaluateBoard(game.board()); ) var newGameMoves = game.ugly_moves(); if (isMaximisingPlayer) ( var bestMove = -9999; για (var i = 0; i< newGameMoves.length; i++) { game.ugly_move(newGameMoves[i]); bestMove = Math.max(bestMove, minimax(depth - 1, game, !isMaximisingPlayer)); game.undo(); } return bestMove; } else { var bestMove = 9999; for (var i = 0; i < newGameMoves.length; i++) { game.ugly_move(newGameMoves[i]); bestMove = Math.min(bestMove, minimax(depth - 1, game, !isMaximisingPlayer)); game.undo(); } return bestMove; } };

Με το minimax, ο αλγόριθμός μας αρχίζει να κατανοεί τις βασικές τακτικές του σκακιού:

Minimax με επίπεδο βάθους 2

Μπορείτε να δείτε τι συνέβη σε αυτό το στάδιο στο JSFiddle.

Η αποτελεσματικότητα του minimax εξαρτάται σε μεγάλο βαθμό από το βάθος αναζήτησης που μπορεί να επιτευχθεί. Αυτό θα βελτιώσουμε στο επόμενο βήμα.

Βήμα 4. Αλφα-βήτα απόκομμα

Θέσεις που δεν χρειαζόμαστε εάν χρησιμοποιείται απόκομμα alpha-beta. Το δέντρο επισκέπτεται με τη σειρά που περιγράφεται.

Με το κλάδεμα alpha-beta, έχουμε σημαντική βελτίωση στο minimax, όπως φαίνεται στο ακόλουθο παράδειγμα:

Ο αριθμός των θέσεων που πρέπει να αξιολογηθούν σε περίπτωση αναζήτησης με βάθος 4 και η αρχική θέση που φαίνεται στην εικόνα.

Μπορείτε να δείτε τι συνέβη σε αυτό το στάδιο στο JSFiddle.

Βήμα 5: Βελτιωμένη λειτουργία αξιολόγησης

Η αρχική συνάρτηση βαθμολόγησης είναι αρκετά αφελής αφού απλά μετράμε τους πόντους των κομματιών που βρίσκονται στο ταμπλό. Για να το βελτιώσουμε, θα αρχίσουμε να λαμβάνουμε υπόψη τη θέση των σχημάτων. Για παράδειγμα, ένας ιππότης στο κέντρο της σανίδας είναι "πιο ακριβός" επειδή έχει περισσότερες διαθέσιμες κινήσεις και επομένως είναι πιο δραστήριος από έναν ιππότη στην άκρη του ταμπλό.

Φωτογραφίες από ανοιχτές πηγές

Η νέα τεχνητή νοημοσύνη έγινε ο καλύτερος σκακιστής στη Γη σε μόλις 4 ώρες προπόνησης! (δικτυακός τόπος)

Θυμάστε τι αίσθηση προκάλεσε ο υπερυπολογιστής του σκακιού το 1996; Βαθύ μπλε», κερδίζοντας τον πρώτο αγώνα με τον Ρώσο πρωταθλητή Γκάρι Κασπάροφ; Παρά το γεγονός ότι ο συμπατριώτης μας κέρδισε ακόμα αυτό το παιχνίδι, έγινε σαφές ακόμη και τότε ότι η τεχνητή νοημοσύνη προχωρούσε γρήγορα και κάποια μέρα θα γινόταν γοητευτικά ο καλύτερος σκακιστής, μετά από τον οποίο θα ήταν άχρηστο οι άνθρωποι να παίξουν με το πρόγραμμα. Το μόνο ερώτημα που παρέμενε ήταν πότε θα γινόταν αυτό.

Εκπρόσωποι της διάσημης εταιρείας Google είπαν ότι αυτή η ώρα έφτασε επιτέλους. Σύμφωνα με τους ειδικούς, το νευρωνικό δίκτυο AlphaZero που ανέπτυξαν σε μόλις 4 ώρες αυτο-εκπαίδευσης μετατράπηκε στον πιο βιρτουόζο και άψογο σκακιστή σε ολόκληρη την ιστορία αυτού του παιχνιδιού. Μια υπερδύναμη τεχνητή νοημοσύνη έμαθε να παίζει σκάκι, γνωρίζοντας μόνο τους κανόνες του. Αφού έπαιξε με τον εαυτό του για 4 ώρες, το ρομπότ έμαθε να παίζει τέλεια, νικώντας εύκολα το πρόγραμμα σκακιού Stockfish, που παλαιότερα θεωρούνταν το πιο τέλειο. Οι υπολογιστές έπαιξαν 100 παιχνίδια - το AlphaZero κατάφερε να κερδίσει 28 από αυτά και να τραβήξει τα υπόλοιπα 72. Ένα προηγμένο νευρωνικό δίκτυο που μιμείται τη δουλειά του ανθρώπινου εγκεφάλου είναι σε θέση να ρισκάρει και ακόμη και να χρησιμοποιεί ένα είδος διαίσθησης.

Δεν υπάρχει πλέον καμία ανάγκη να ονειρευόμαστε τη νίκη επί της τεχνητής νοημοσύνης.

Παλαιότερα μοντέλα του AlphaZero έμαθαν το παιχνίδι παρακολουθώντας ζωντανά σκακιστές. Οι προγραμματιστές υπέθεσαν ότι αυτό θα βοηθούσε την τεχνητή νοημοσύνη να κατανοήσει καλύτερα τις στρατηγικές του παιχνιδιού. Στην πραγματικότητα, αποδείχθηκε ότι η παρακολούθηση των ανθρώπων επιβραδύνει μόνο την ανάπτυξη του προγράμματος. Όταν το νευρωνικό δίκτυο αφέθηκε στην τύχη του, οι ικανότητές του εκτοξεύτηκαν στα ύψη. Τώρα οι μηχανικοί της Google σκέφτονται πώς να χρησιμοποιήσουν τέτοιες τεχνολογίες για πραγματικό όφελος για την ανθρωπότητα, αφού ένα παιχνίδι σκακιού, ακόμη και το πιο αριστοτεχνικό, δεν έχει πρακτικό σκοπό.

Το 1968, ο διάσημος Ντέιβιντ Λέβι έβαλε στοίχημα ότι κανένα πρόγραμμα δεν θα τον κέρδιζε μέσα στην επόμενη δεκαετία. Όλο αυτό το διάστημα, ο grandmaster διαγωνιζόταν συνεχώς με διάφορους υπολογιστές σκακιού και κέρδιζε κάθε φορά εναντίον τους. Το 1978 νίκησε το πιο δυνατό πρόγραμμα της εποχής, το Chess 4,7, κερδίζοντας ένα στοίχημα. Δυστυχώς, αυτές τις μέρες δεν θα υπάρχουν πλέον τόσο ενδιαφέρουσες μάχες - τώρα θα πρέπει να μάθουμε μόνο πώς ένα φανταστικό νευρωνικό δίκτυο νίκησε ένα άλλο. Οι ζωντανοί σκακιστές δεν μπορούν πλέον ούτε να ονειρεύονται να νικήσουν τέτοια τέρατα. Και αυτή είναι μόνο η αρχή τέτοιων νικών της τεχνητής νοημοσύνης επί των ανθρώπων...



Τι άλλο να διαβάσετε