ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΜΑΤΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ ΑΛΓΟΡΙΘΜΟΙ ΕΥΡΕΣΗΣ ΛΥΣΗΣ ΑΛΓΟΡΙΘΜΟΙ ΕΥΡΕΣΗΣ ΒΕΛΤΙΣΤΗΣ ΛΥΣΗΣ ΑΛΓΟΡΙΘΜΟΙ ΕΥΡΕΣΗΣ ΛΥΣΗΣ ΣΕ ΠΑΙΓΝΙΑ ΔΥΟ ΑΝΤΙΠΑΛΩΝ Καραγιώργου Σοφία
Γενικά Ο σκοπός των διαλέξεων είναι να παρουσιάσει: Αλγόριθμους που βρίσκουν κάποια λύση στο χώρο καταστάσεων Αλγόριθμους που βρίσκουν την βέλτιστη λύση στο χώρο καταστάσεων Αλγόριθμους που βρίσκουν λύσεις όταν ο χώρος καταστάσεων κατασκευάζεται κατά τη διάρκεια ενός παιγνίου με δύο αντιπάλους που και οι δύο εκτελούν κινήσεις στη προσπάθειά τους να κερδίσουν το παιχνίδι
Ταξινόμηση αλγορίθμων αναζήτησης
Αναζήτηση λύσης Γενικά όταν λέμε ότι αναζητούμε μια λύση σε ένα χώρο καταστάσεων ουσιαστικά μιλάμε για την αναζήτηση ενός μονοπατιού στο χώρο των καταστάσεων που μας οδηγεί από την αρχική κατάσταση σε μια «επιτυχή» τελική κατάσταση Οι διαφορετικές καταστάσεις που μπορούν να προσπελασθούν όταν ήδη είμαστε σε μια κατάσταση ορίζονται από τα χαρακτηριστικά του προβλήματος και δημιουργούν αυτό που ονομάζουμε δένδρο αναζήτησης
Παράδειγμα δέντρου αναζήτησης
Παράδειγμα δέντρου αναζήτησης
Ευριστικοί/Μη αλγόριθμοι αναζήτησης Όταν η απόσταση/κόστος για τη μοντελοποίηση κάθε κόμβου/κατάστασης στο χώρο αναζήτησης από τον κόμβο/κατάσταση που θεωρούμε στόχο δίνεται με βάση κάποια ευριστική μέθοδο τότε λέμε ότι έχουμε ένα αλγόριθμο ευριστικής αναζήτησης Όταν δεν έχουμε κάποια μέθοδο να εστιάσουμε το επόμενο μας βήμα, δηλαδή ψάχνουμε στα τυφλά, τότε έχουμε ένα αλγόριθμο τυφλής αναζήτησης
Αλγόριθμοι τυφλής αναζήτησης Οι αλγόριθμοι τυφλής αναζήτησης (blind search algorithms) εφαρμόζονται σε προβλήματα στα οποία δεν υπάρχει πληροφορία που να επιτρέπει την αξιολόγηση των καταστάσεων του χώρου αναζήτησης (δηλαδή ψάχνουμε στα τυφλά) Έτσι οι αλγόριθμοι αυτοί αντιμετωπίζουν με τον ίδιο ακριβώς τρόπο οποιοδήποτε πρόβλημα καλούνται να λύσουν Για τους αλγορίθμους τυφλής αναζήτησης, το τι απεικονίζει κάθε κατάσταση του προβλήματος είναι παντελώς αδιάφορο Σημασία έχει η χρονική σειρά με την οποία παράγονται οι καταστάσεις από το μηχανισμό επέκτασης
Λίστα αλγορίθμων τυφλής αναζήτησης
Αλγόριθμοι ευριστικής αναζήτησης Οι αλγόριθμοι τυφλής αναζήτησης προχωρούν σε βάθος ή πλάτος χωρίς ένδειξη για το αν πλησιάζουν σε τερματική κατάσταση Σε πολλά προβλήματα ο χώρος αναζήτησης αυξάνεται ραγδαία (συνδυαστική έκρηξη) Σκοπός: Μείωση του αριθμού των καταστάσεων που επισκέπτεται ο αλγόριθμος Απαιτείται: Πληροφορία για αξιολόγηση των καταστάσεων που θα οδηγήσει γρηγορότερα στη λύση ή θα βοηθήσει στο κλάδεμα καταστάσεων που δεν οδηγούν πουθενά Οι αλγόριθμοι που εκμεταλλεύονται τέτοιες πληροφορίες (κάποιον ευριστικό μηχανισμό) ονομάζονται αλγόριθμοι ευριστικής αναζήτησης
Χαρακτηριστικά ευριστικών αλγορίθμων Ευριστικός µηχανισµός (heuristic) είναι µία στρατηγική, βασισµένη στη γνώση για το συγκεκριµένο πρόβληµα, η οποία χρησιµοποιείται σαν βοήθηµα στη γρήγορη επίλυσή του Ο ευριστικός µηχανισµός υλοποιείται µε ευριστική συνάρτηση (heuristic function), που έχει πεδίο ορισµού το σύνολο των καταστάσεων ενός προβλήµατος και πεδίο τιµών το σύνολο τιµών που αντιστοιχεί σε αυτές Σε όμοια προβλήματα χρησιμοποιούμε παρόμοιους ευριστικούς μημανισμούς Ευριστική τιµή (heuristic value) είναι η τιµή της ευριστικής συνάρτησης και εκφράζει το πόσο κοντά βρίσκεται µία κατάσταση σε µία τελική Η ευριστική τιµή δεν είναι η πραγµατική τιµή της απόστασης από µία τερµατική κατάσταση, αλλά µία εκτίµηση (estimate) που πολλές φορές µπορεί να είναι και λανθασµένη
Παράδειγμα Παράδειγμα ευριστικής αναζήτησης είναι η συναρμολόγηση ενός puzzle Με τυφλή αναζήτηση θα έπρεπε να προσπαθήσουμε να το φτάξουμε, χωρίς να δώσουμε καμία σημασία στο χρώμα ή το σχήμα των κομματιών Στην πραγματικότητα όμως, ενεργούμε εντελώς διαφορετικά. Χωρίζουμε τα κομμάτια σε κατηγορίες, π.χ. αυτά που ανήκουν στην περιφέρεια (μία άκρη τους είναι ευθεία τομή), σε αυτά που πιθανά ανήκουν στο χρώμα του ουρανού ή στη θάλασσα ή στα δένδρα κ.ο.κ. Οι ενέργειες αυτές αντιστοιχούν στη χρήση ενός ευριστικού μηχανισμού που έχουμε αναπτύξει μέσω της εμπειρίας μας Ωστόσο, ποτέ δεν είμαστε σίγουροι ότι ο διαχωρισμός των κομματιών είναι και ο σωστός. Για παράδειγμα, υπάρχουν κομμάτια του puzzle που μπορεί να ανήκουν στη θάλασσα ή τον ουρανό Αν δεν υπήρχαν ευριστικοί μηχανισμοί, τότε τα προβλήματα αυτά θα λύνονταν πολύ δύσκολα, γιατί οι συνδυασμοί που πρέπει να γίνουν είναι πάρα πολλοί Θα ήταν σαν να προσπαθεί κάποιος να συναρμολογήσει ένα puzzle από την ανάποδη πλευρά ή σαν να ψάχνει την κεντρική πλατεία της πόλης με τα μάτια κλειστά Ο ευριστικός μηχανισμός εξαρτάται από τη γνώση που έχουμε για το πρόβλημα
Ευριστικές συναρτήσεις σε μικρά προβλήματα Ευριστικός μηχανισμός και συναρτήσεις σε λαβύρινθο Ευκλείδεια απόσταση (Euclidian distance): Απόσταση Manhattan (Manhattan distance):
Ευριστικές συναρτήσεις σε μικρά προβλήματα Ευριστικός μηχανισμός και συναρτήσεις στο N-Puzzle Πόσα πλακίδια βρίσκονται εκτός θέσης Το άθροισμα των αποστάσεων Manhattan κάθε πλακιδίου από την τελική του θέση
Ευριστικές συναρτήσεις σε μικρά προβλήματα Ευριστικός µηχανισµός και συναρτήσεις στο TSP Η κοντινότερη πόλη έχει περισσότερες πιθανότητες να οδηγήσει σε µία καλή λύση
Λίστα αλγορίθμων ευριστικής αναζήτησης
Αλγόριθμοι μη βέλτιστης λύσης Οι επόμενες διαφάνειες περιλαμβάνουν μη ευριστικούς και ευριστικούς αλγόριθμους που μπορούν να βρούν κάποια λύση στο χώρο καταστάσεων χωρίς απαραίτητα αυτή η λύση να είναι η καλύτερη
Αλγόριθμος αναζήτησης Depth First Βήμα 1: Κατασκεύασε μια λίστα ουρά που περιέχει τη ρίζα του δένδρου (αρχική κατάσταση) Βήμα 2: Μέχρι που η λίστα να αδειάσει ή να βρεθεί ένας τελικός κόμβος στόχος Βήμα 2.α: Εάν ο πρώτος κόμβος στη λίστα είναι κόμβος στόχος μη κάνεις τίποτε Βήμα 2.β: Εάν ο πρώτος κόμβος στη λίστα δεν είναι κόμβος στόχος, τότε βγάλε το πρώτο κόμβο από τη λίστα, και βάλε στη αρχή της λίστας τα παιδιά του κόμβου (δηλαδή όλες τις καταστάσεις που μπορούν να προσπελασθούν με ένα μόνο βήμα από το κόμβο/κατάσταση που μόλις αφαιρέσαμε από τη λίστα) Βήμα 2.γ: Εάν ο πρώτος κόμβος δεν έχει παιδιά απλά αφαίρεσέ τον από τη λίστα και πήγαινε στο βήμα 2 Βήμα 3: Εάν βρήκαμε ένα κόμβο στόχο τότε ανακοινώνουμε επιτυχία αλλιώς ανακοινώνουμε αποτυχία
Παράδειγμα αναζήτησης Depth First Στο παρακάτω πρόβλημα, παρουσιάζεται το μοντέλο, το ολικό δένδρο αναζήτησης και η λίστα που δημιουργείται στη depth first αναζήτηση του δέντρου
Αλγόριθμος αναζήτησης Hill Climbing Βήμα 1: Κατασκεύασε μια λίστα ουρά που περιέχει τη ρίζα του δένδρου (αρχική κατάσταση) Βήμα 2: Μέχρι που η λίστα να αδειάσει ή να βρεθεί ένας τελικός κόμβος στόχος, εξέτασε εάν ο πρώτος κόμβος στη λίστα είναι κόμβος στόχος Βήμα 2.α: Εάν ο πρώτος κόμβος στη λίστα είναι κόμβος στόχος τότε μη κάνεις τίποτε και η επανάληψη σταματά, και πάμε στο Βήμα 3 Βήμα 2.β: Εάν ο πρώτος κόμβος στη λίστα δεν είναι κόμβος στόχος, τότε βγάλε το πρώτο κόμβο από τη λίστα, βρες στο παιδιά αυτού του κόμβου (δηλαδή όλες τις καταστάσεις που μπορούν να προσπελασθούν με ένα μόνο βήμα από το κόμβο/κατάσταση που μόλις αφαιρέσαμε από τη λίστα), ταξινόμησε αυτά τα παιδιά σε αύξουσα σειρά με βάση τη υπολογιζόμενη υπόλοιπη απόστασή τους από το στόχο και βάλε στη αρχή της λίστας τα ταξινομημένα παιδιά αυτού του κόμβου Βήμα 2.γ: Εάν ο πρώτος κόμβος δεν έχει παιδιά απλά αφαίρεσέ τον από τη λίστα και πήγαινε στο βήμα 2 Βήμα 3: Εάν βρήκαμε ένα κόμβο στόχο τότε ανακοινώνουμε επιτυχία αλλιώς ανακοινώνουμε αποτυχία
Παράδειγμα αλγόριθμου Hill Climbing Στο παράδειγμα η Hill Climbing αναζήτηση δημιουργεί την παρακάτω λίστα
Παράδειγμα αλγόριθμου Hill Climbing Στο παρακάτω πρόβλημα, παρουσιάζεται το μοντέλο, το ολικό δένδρο αναζήτησης, και η λίστα που δημιουργείται στη hill climbing αναζήτηση του δένδρου
Προβλήματα με την τεχνική Hill Climbing Ο HC χρησιµοποιείται σε προβλήµατα όπου πρέπει να βρεθεί µία λύση πολύ γρήγορα, έστω και αν αυτή δεν είναι η καλύτερη, παίρνοντας όµως και το ρίσκο να µη βρεθεί καµία λύση, έστω και αν τέτοια υπάρχει (πολύ αποδοτικός σε χρόνο και μνήμη) Η τεχνική Hill Climbing είναι σαν να προσπαθούμε να βρούμε κάποιο σημείο όπου όλα τα σημεία που μπορούμε να πάμε από αυτό το σημείο με ένα βήμα έχουν χειρότερα χαρακτηριστικά από αυτό το σημείο Παραδείγματα είναι όταν μπαίνουμε σε ένα δωμάτιο και αρχίζουμε να ρυθμίζουμε το θερμοστάτη θέρμανσης/ψύξης μέχρι να βρούμε κάποιο σημείο που αισθανόμαστε άνετα. Εδώ δεν υπάρχει κάποιο συγκεκριμένο σημείο «στόχος», αλλά σταματάμε σε κάποιο σημείο (θέση του θερμοστάτη) όπου όλες οι άλλες γειτονικές ρυθμίσεις δεν μας δίνουν καλύτερα αποτελέσματα απ ότι αυτό το σημείο (θέση του θερμοστάτη) Δηλαδή, η τεχνική Hill Climbing, προσπαθεί να βρει μια λύση (σημείο στο χώρο καταστάσεων) όπου έχει βελτιστοποιηθεί η τιμή μιας παραμέτρου του προβλήματος (π.χ. πόσο άνετα αισθανόμαστε) ή ένας συνδυασμός τιμών παραμέτρων του προβλήματος Όπως καταλαβαίνουμε η τεχνική είναι απλή, δηλαδή εύκολο να υλοποιηθεί και να εφαρμοστεί, αλλά έχει και κάποια σημαντικά προβλήματα όπως: Είναι ατελής Πρόποδες (foothill) Οροπέδιο (plateau) Κορυφογραμμή (ridges)
Προβλήματα με την τεχνική Hill Climbing Βελτιώσεις: Εξαναγκασµένη αναρρίχηση λόφου (Enforced Hill-Climbing - EHC) Προσοµοιωµένη εξέλιξη (Simulated Annealing - SA) Αναζήτηση µε απαγορευµένες καταστάσεις (Tabu Search - TS)
Αλγόριθμος Προσομοιωμένης εξέλιξης (Simulated Annealing SA) Στον αλγόριθμο Hill Climbing παίρνουμε πάντα την επόμενη καλύτερη κίνηση που μπορούμε να εκτελέσουμε την κάθε στιγμή Είδαμε όμως ότι ο αλγόριθμος αυτός μπορεί να μας «κολλήσει» σε τοπικά μέγιστα local maxima Μια λύση σε αυτό το πρόβλημα είναι να επιτρέψουμε στον αλγόριθμο να κάνει και «κακές» κινήσεις. Στην αρχή δίνουμε μικρή ποινή για τη πρώτη «κακή» κίνηση αλλά πιο μεγάλη ποινή για την επόμενη «κακή» κίνηση κ.λ.π. Το κόστος των ποινών αυξάνεται εκθετικά. Η ιδέα είναι να επιτρέψουμε κάποιες κακές κινήσεις με την ελπίδα ότι σύντομα θα βρεθούμε εκτός του «τοπικού μέγιστου» και θα βρούμε ένα καλύτερο μονοπάτι που θα μας οδηγήσει στο (ιδανικά) στο «γενικό μέγιστο» (global maximum)
Αλγόριθμος αναζήτησης Breadth First Βήμα 1: Κατασκεύασε μια λίστα ουρά που περιέχει τη ρίζα του δένδρου (αρχική κατάσταση) Βήμα 2: Μέχρι που η λίστα να αδειάσει ή να βρεθεί ένας τελικός κόμβος στόχος Βήμα 2.α: Εάν ο πρώτος κόμβος στη λίστα είναι κόμβος στόχος μη κάνεις τίποτε Βήμα 2.β: Εάν ο πρώτος κόμβος στη λίστα δεν είναι κόμβος στόχος, τότε βγάλε το πρώτο κόμβο από τη λίστα, και βάλε στo τέλος της λίστας τα παιδιά του κόμβου (δηλαδή όλες τις καταστάσεις που μπορούν να προσπελασθούν με ένα μόνο βήμα από το κόμβο/κατάσταση που μόλις αφαιρέσαμε από τη λίστα) Βήμα 2.γ: Εάν ο πρώτος κόμβος δεν έχει παιδία απλά αφαίρεσέ τον από τη λίστα και πήγαινε στο βήμα 2 Βήμα 3: Εάν βρήκαμε ένα κόμβο στόχο τότε ανακοινώνουμε επιτυχία αλλιώς ανακοινώνουμε αποτυχία
Παράδειγμα αναζήτησης Breadth First Στο παρακάτω πρόβλημα παρουσιάζεται το μοντέλο, το ολικό δέντρο αναζήτησης και η λίστα που δημιουργείται στη breadth first αναζήτηση του δέντρου
Αλγόριθμος αναζήτησης Beam Search O αλγόριθμος ακτινωτής αναζήτησης (Beam Search BS) είναι παρόμοιος με τον αλγόριθμο αναζήτησης Κατά Πλάτος διότι προχωράμε στην αναζήτηση ανά επίπεδο του δένδρου αναζήτησης. Όμως η διαφορά είναι ότι δεν κοιτάμε όλους τους κόμβους του επόμενου επιπέδου, αλλά μόνο του w καλύτερους κόμβους όσον αφορά στη βαθμολόγησή τους σε σχέση με την υπολειπόμενη απόσταση από κάποιο κόμβο «στόχο». Δηλαδή σε κάθε βήμα κρατάμε τους w καλύτερους κόμβους στο μέτωπο αναζήτησης Αυτή η μέθοδος όπως και η Hill Climbing είναι ευριστική στη βάση ότι χρησιμοποιεί μια ευριστική εκτίμηση της υπολειπόμενης απόστασης ενός κόμβου (σημείου του χώρου κατάστασης) από ένα κόμβο «στόχο»
Αλγόριθμος αναζήτησης Beam Search Βήμα 1: Κατασκεύασε μια λίστα ουρά που περιέχει τη ρίζα του δένδρου (αρχική κατάσταση) Βήμα 2: Μέχρι που η λίστα να αδειάσει ή να βρεθεί ένας τελικός κόμβος στόχος Βήμα 2.α: Εάν ο πρώτος κόμβος στη λίστα είναι κόμβος στόχος μη κάνεις τίποτε Βήμα 2.β: Εάν ο πρώτος κόμβος στη λίστα δεν είναι κόμβος στόχος, τότε βγάλε το πρώτο κόμβο από τη λίστα, και βάλε στo τέλος της λίστας τα w στο πλήθος καλύτερα παιδιά του κόμβου (δηλαδή όλες τις καταστάσεις που μπορούν να προσπελασθούν με ένα μόνο βήμα από το κόμβο/κατάσταση που μόλις αφαιρέσαμε από τη λίστα) όσον αφορά την ευριστική υπολειπόμενη απόσταση του κόμβου από ένα κόμβο «στόχο» Βήμα 2.γ: Εάν ο πρώτος κόμβος δεν έχει παιδιά απλά αφαίρεσέ τον από τη λίστα και πήγαινε στο βήμα 2 Βήμα 3: Εάν βρήκαμε ένα κόμβο στόχο τότε ανακοινώνουμε επιτυχία αλλιώς ανακοινώνουμε αποτυχία
Παράδειγμα διεύρυνσης του δένδρου αναζήτησης κατά την Beam Search
Αλγόριθμος αναζήτησης Best First Search O αλγόριθμος αναζήτησης Best First είναι όπως ο αλγόριθμος αναζήτησης Hill Climbing, μόνο που εδώ επεκτείνουμε όχι τον καλύτερο κόμβο από τα παιδιά του κόμβου που είμαστε, αλλά επεκτείνουμε κάθε φορά τον καλύτερο κόμβο από όλους τους κόμβους που βρίσκονται στο μέτωπο αναζήτησης του δένδρου Ο αλγόριθμος αναζήτησης Best First Search έχει την πιθανότητα να παράγει τα μικρότερα μονοπάτια από την αρχική κατάσταση (ρίζα του δένδρου αναζήτησης) σε κάποιο κόμβο «στόχο» Η βασική διαφορά αυτού του αλγόριθμου από τον Hill Climbing είναι ότι αντί να ταξινομούμε τα παιδιά του κόμβου που επεκτείνουμε και να εισάγουμε αυτή τη ταξινομημένη λίστα στην ολική λίστα, εισάγουμε τα παιδιά του κόμβου που επεκτείνουμε στη λίστα, και μετά ταξινομούμε όλη τη λίστα. Οπότε ο καλύτερος κόμβος συνολικά πηγαίνει στη κορυφή της λίστας για επέκταση στο επόμενο βήμα
Αλγόριθμος αναζήτησης Best First Search Βήμα 1: Κατασκεύασε μια λίστα ουρά που περιέχει τη ρίζα του δένδρου (αρχική κατάσταση) Βήμα 2: Μέχρι που η λίστα να αδειάσει ή να βρεθεί ένας τελικός κόμβος στόχος, εξέτασε εάν ο πρώτος κόμβος στη λίστα είναι κόμβος στόχος Βήμα 2.α: Εάν ο πρώτος κόμβος στη λίστα είναι κόμβος στόχος τότε μη κάνεις τίποτα και η επανάληψη σταματά, και πάμε στο Βήμα 3 Βήμα 2.β: Εάν ο πρώτος κόμβος στη λίστα δεν είναι κόμβος στόχος, τότε βγάλε το πρώτο κόμβο από τη λίστα, βρες τα παιδιά αυτού του κόμβου (δηλαδή όλες τις καταστάσεις που μπορούν να προσπελασθούν με ένα μόνο βήμα από το κόμβο/κατάσταση που μόλις αφαιρέσαμε από τη λίστα), βάλε στη λίστα τα παιδιά αυτού του κόμβου, και μετά ταξινόμησε σε αύξουσα σειρά ολόκληρη τη λίστα σε σχέση με την υπολειπόμενη απόσταση του κάθε κόμβου της λίστας από ένα κόμβο «στόχο» Βήμα 2.γ: Εάν ο πρώτος κόμβος δεν έχει παιδιά απλά αφαίρεσέ τον από τη λίστα και πήγαινε στο βήμα 2 Βήμα 3: Εάν βρήκαμε ένα κόμβο στόχο τότε ανακοινώνουμε επιτυχία αλλιώς ανακοινώνουμε αποτυχία
Σχόλια για τον αλγόριθμο Best First Search Πλεονεκτήματα: Προσπαθεί να δώσει μια γρήγορη λύση σε κάποιο πρόβλημα. Το αν τα καταφέρει ή όχι εξαρτάται πολύ από τον ευριστικό μηχανισμό Είναι πλήρης (εάν υπάρχει λύση ο αλγόριθμος θα τη βρεί) Μειονεκτήματα: Το μέτωπο αναζήτησης μεγαλώνει με υψηλό ρυθμό και μαζί του ο χώρος που χρειάζεται για την αποθήκευσή του, καθώς και ο χρόνος για την επεξεργασία των στοιχείων του Δεν εγγυάται ότι η λύση που θα βρεθεί είναι η βέλτιστη
Εφαρμογή του Αλγόριθμου Best First
Γενικά σχόλια για την επιλογή του κατάλληλου αλγόριθμου Η Κατά Βάθος αναζήτηση είναι καλή όταν το δένδρο αναζήτησης δεν βαθαίνει πολύ Η Κατά Πλάτος αναζήτηση είναι καλή όταν ο Παράγοντας Διακλάδωσης δεν είναι μεγάλος Η τεχνική Hill Climbing είναι καλή όταν έχουμε μια καλή ευριστική μετρική για την υπολειπόμενη απόσταση και όταν μια καλή επιλογή είναι συνήθως σε αυτές που οδηγούν σε λύση (όχι πολλά τοπικά μέγιστα ή τοπικά ελάχιστα) Η Τεχνική Beam Search είναι καλή όταν έχουμε μια καλή ευριστική μετρική για την υπολειπόμενη απόσταση και όταν ένα καλό μονοπάτι είναι συνήθως σε αυτά που μπορούν να επιλεγούν σε κάθε επίπεδο του δένδρου Η τεχνική Best First είναι καλή όταν έχουμε μια καλή ευριστική μετρική για την υπολειπόμενη απόσταση και όταν ένα καλό μονοπάτι μπορεί να μη φαίνεται καλό στην αρχή
Αλγόριθμοι βέλτιστης λύσης Οι επόμενες διαφάνειες περιλαμβάνουν μη ευριστικούς και ευριστικούς αλγόριθμους που μπορούν να βρούν την καλύτερη λύση στο χώρο καταστάσεων
Αλγόριθμος Iterative Deepening Επαναληπτικής Εκβάθυνσης (ΕΕ) Ο αλγόριθμος επαναληπτικής εκβάθυνσης (Iterative Deepening ID) συνδυάζει με τον καλύτερο τρόπο τους DFS και BFS Ο αλγόριθμος ID: Όρισε το αρχικό βάθος αναζήτησης (συνήθως 1) Εφάρμοσε τον αλγόριθμο DFS μέχρι αυτό το βάθος αναζήτησης Αν έχεις βρει λύση σταμάτησε Αύξησε το βάθος αναζήτησης (συνήθως κατά 1) Πήγαινε στο βήμα 2
Αλγόριθμος Επαναληπτικής Εκβάθυνσης (σχόλια) Μειονεκτήματα: Όταν αρχίζει ο DFS με διαφορετικό βάθος δε θυμάται τίποτα από την προηγούμενη αναζήτηση Πλεονεκτήματα: Είναι πλήρης Αν το βάθος αυξάνεται κατά 1 σε κάθε κύκλο και ο ID βρει λύση, τότε αυτή η λύση θα είναι η καλύτερη, γιατί αν υπήρχε άλλη, καλύτερη λύση, αυτή θα βρισκόταν σε προηγούμενο κύκλο αναζήτησης
Αλγόριθμος Bi Directional Search Διπλής Κατεύθυνσης Η ιδέα της αναζήτησης διπλής κατεύθυνσης (Bidirectional Search BiS) πηγάζει από τη δυνατότητα του παραλληλισμού (parallelism) στα υπολογιστικά συστήματα Προϋποθέσεις κάτω από τις οποίες μπορεί να εφαρμοστεί: Οι τελεστές μετάβασης είναι αντιστρέψιμοι (reversible) Είναι πλήρως γνωστή η τελική κατάσταση Τότε Μπορούμε να αρχίσουμε την αναζήτηση από την αρχική και τελική κατάσταση ταυτόχρονα Αν κάποια κατάσταση που επεκτείνεται είναι κοινή και από τις 2 πλευρές, τότε βρέθηκε λύση Λύση είναι η ένωση των μονοπατιών από την κοινή κατάσταση εως την αρχική και εως την τελική κατάσταση Μειονεκτήματα: Υπάρχει επιπλέον κόστος που οφείλεται στην επικοινωνία μεταξύ των δύο αναζητήσεων
Αλγόριθμος αναζήτησης British Museum Είναι αλγόριθμος brute force Η ιδέα είναι ότι για να βρούμε την καλύτερη λύση βρίσκουμε όλα τα μονοπάτια από την αρχική κατάσταση σε όλες τις καταστάσεις «στόχους» και επιλέγουμε το καλύτερο μονοπάτι Μπορούμε να βρούμε όλα τα μονοπάτια με αναζήτηση κατα βάθος ή αναζήτηση κατά πλάτος. Μόνο που εδώ δεν σταματάμε όταν βρούμε κάποια λύση. Συνεχίζουμε μέχρι να βρούμε όλες τις λύσεις για να επιλέξουμε τη καλύτερη Ο αλγόριθμος αυτός δεν είναι πρακτικός στις περισσότερες περιπτώσεις. Για παράδειγμα με παράγοντα διακλάδωσης b=10 και βάθος δένδρου d=10 έχουμε 10 δισεκατομμύρια μονοπάτια!
Αλγόριθμος Branch and Bound Επέκτασης και Οριοθέτησης Βήμα 1: Κατασκεύασε μια λίστα από μονοπάτια που αρχικά είναι κενή. Περιέχει δηλαδή τα μονοπάτια από τη ρίζα του δένδρου (αρχική κατάσταση) στο πουθενά Βήμα 2: Μέχρι που η λίστα να αδειάσει ή, το πρώτο μονοπάτι στη λίστα οδηγεί σε «στόχο» και όλα τα άλλα μονοπάτια έχουν μεγαλύτερο κόστος και δεν έχουν ακόμη οδηγήσει σε στόχο Βήμα 2.α: Εάν το πρώτο μονοπάτι οδηγεί σε στόχο, κράτησέ το σαν πιθανή λύση. Εάν είναι καλύτερο από κάποια προηγούμενη λύση κράτησέ το σαν την καλύτερη πιθανή λύση, προχώρησε στο Βήμα 2.β Βήμα 2.β: Εάν το πρώτο μονοπάτι δεν οδηγεί σε στόχο, ή υπάρχουν άλλα μονοπάτια δεν έχουν ακόμη οδηγήσει σε στόχο έχουν μικρότερο κόστος από το μονοπάτι που ήδη βρήκαμε Βήμα 2.β.1 Βγάλε το πρώτο μονοπάτι από τη λίστα Βήμα 2.β.2 Φτιάξε μονοπάτια που μπορούν να φτιαχτούν από το μονοπάτι που βγάλαμε επεκτείνοντας το κατά ένα βήμα Βήμα 2.β.3 Βάλε τα νέα μονοπάτια στη λίστα Βήμα 2.β.4 Ταξινόμησε σε αύξουσα σειρά όλα τα μονοπάτια στη λίστα σύμφωνα με το κόστος του κάθε μονοπατιού, δηλαδή το κόστος που κάναμε να φτάσουμε από την αρχική κατάσταση στο τελευταίο κόμβο κάθε μονοπατιού Βήμα 2.β.5 Εάν βρήκαμε ένα μονοπάτι που οδηγεί σε κόμβο στόχο τότε ανακοινώνουμε μερική επιτυχία αλλιώς ανακοινώνουμε αποτυχία Βήμα 3: Εάν βρήκαμε ένα μονοπάτι που οδηγεί σε κόμβο στόχο τότε ανακοινώνουμε επιτυχία αλλιώς ανακοινώνουμε αποτυχία
Παράδειγμα εφαρμογής αλγόριθμου Branch and Bound Έστω ότι έχουμε τον παρακάτω χώρο καταστάσεων και το αντίστοιχο δένδρο αναζήτησης
Παράδειγμα εφαρμογής αλγόριθμου Branch and Bound
Παράδειγμα εφαρμογής αλγόριθμου Branch and Bound
Παράδειγμα εφαρμογής αλγόριθμου Branch and Bound
Branch and Bound και υπολογιζόμενη υπολειπόμενη απόσταση από το στόχο Εάν θεωρήσουμε μια επέκταση στον αλγόριθμο Branch and Bound με τη μορφή ότι το κόστος κάθε κόμβου δεν είναι μόνο το κόστος να φτάσουμε σε αυτό το κόμβο από τον αρχικό κόμβο, αλλά δίνεται από το άθροισμα του κόστους να φτάσουμε σε αυτό το κόμβο από τον αρχικό κόμβο συν μια υποεκτίμηση της υπολογιζόμενης υπολειπόμενης απόστασης του κόμβου από τον στόχο, τότε ο αλγόριθμος ΒΒ ελέγχει λιγότερα μονοπάτια Δηλαδή: u(total path length) = d(already traveled) + u(distance remaining)
Αλγόριθμος Αναζήτησης Β&Β με υποεκτίμηση απόστασης Βήμα 1: Κατασκεύασε μια λίστα από μονοπάτια που αρχικά είναι κενή που περιέχει δηλαδή τα μονοπάτια από τη ρίζα του δένδρου (αρχική κατάσταση) στο πουθενά Βήμα 2: Μέχρι που η λίστα να αδειάσει ή, το πρώτο μονοπάτι στη λίστα οδηγεί σε «στόχο» και όλα τα άλλα μονοπάτια που έχουν μεγαλύτερο κόστος δεν έχουν ακόμη οδηγήσει σε στόχο Βήμα 2.α: Εάν το πρώτο μονοπάτι οδηγεί σε στόχο, κράτησέ το σαν πιθανή λύση. Εάν είναι καλύτερο από κάποια προηγούμενη λύση κράτησέ το σαν την καλύτερη πιθανή λύση, προχώρησε στο Βήμα 2.β Βήμα 2.β: Εάν το πρώτο μονοπάτι δεν οδηγεί σε στόχο, ή υπάρχουν άλλα μονοπάτια δεν έχουν ακόμη οδηγήσει σε στόχο έχουν μικρότερο κόστος από το μονοπάτι που ήδη βρήκαμε Βήμα 2.β.1 Βγάλε το πρώτο μονοπάτι από τη λίστα Βήμα 2.β.2 Φτιάξε μονοπάτια που μπορούν να φτιαχτούν από το μονοπάτι που βγάλαμε επεκτείνοντας το κατά ένα βήμα Βήμα 2.β.3 Βάλε τα νέα μονοπάτια στη λίστα Βήμα 2.β.4 Ταξινόμησε σε αύξουσα σειρά όλα τα μονοπάτια στη λίστα σύμφωνα με το συνολικό κόστος του κάθε μονοπατιού, δηλαδή το κόστος που κάναμε να φτάσουμε από την αρχική κατάσταση στο τελευταίο κόμβο κάθε μονοπατιού συν το υπολογιζόμενη (υπο εκτιμόμενο) απόσταση από το στόχο Βήμα 2.β.5 Εάν βρήκαμε ένα μονοπάτι που οδηγεί σε κόμβο στόχο τότε ανακοινώνουμε μερική επιτυχία αλλιώς ανακοινώνουμε αποτυχία Βήμα 3: Εάν βρήκαμε ένα μονοπάτι που οδηγεί σε κόμβο στόχο τότε ανακοινώνουμε επιτυχία αλλιώς ανακοινώνουμε αποτυχία
Παράδειγμα εφαρμογής αναζήτησης ΒΒ με υποεκτίμηση κόστους
Δυναμικός Προγραμματισμός στους αλγόριθμους αναζήτησης Η ιδέα είναι ότι εάν κατασκευάσουμε ένα μονοπάτι που οδηγεί σε κάποιο κόμβο π.χ. D και υπάρχει κάποιο άλλο μονοπάτι που οδηγεί στον ίδιο κόμβο αλλά με μικρότερο κόστος, τότε «κλαδεύουμε» το μονοπάτι με το μεγαύτερο κόστος, και δεν το επεκτείνουμε πια
Ο αλγόριθμος Α* Συνδυάζει την άπληστη αναζήτηση με την αναζήτηση με βάση το κόστος. Χρησιμοποιεί δηλαδή στην ταξινόμηση την συνάρτηση f(s) = d(s) + h(s) Είναι κατά βάσει BestFS, αλλά με ευριστική συνάρτηση και Δυναμικό Προγραμματισμό Η f(s) μας δίνει ουσιαστικά μία εκτίμηση της καλύτερης λύσης που περνάει από τον κόμβο s Προϋπόθεση ότι η h(s) δεν υπερεκτιμά ποτέ το κόστος για να φτάσουμε στο κοντινότερο στόχο (αποδεκτή συνάρτηση) Όπως μπορεί να αποδειχτεί και αυστηρά, αυτή η ιδιότητα της f(s) μας εγγυάται ότι ο αλγόριθμος θα βρει πάντα λύση και μάλιστα θα βρει πρώτα την καλύτερη λύση. Ο αλγόριθμος Α* δηλαδή, είναι πλήρης και βέλτιστος
Ο αλγόριθμος Α* - ιδιότητες Άλλη σημαντική Ιδιότητα: πληροφόρηση Πληροφόρηση: αν h1(n) & h2(n) είναι αποδεκτές συναρτήσεις (δηλαδή δεν υπερεκτιμούν την απόσταση σε στόχο) και & h1(n) >= h2(n), τότε οι κόμβοι που ο A* εξετάζει χρησιμοποιώντας την h1 είναι υποσύνολο αυτών που εξετάζει χρησιμοποιώντας την h2 δηλαδή η h1(n) θα οδηγήσει σε πιο γρήγορη αναζήτηση ακραία περίπτωση: h2(n) = 0 = καθόλου πληροφόρηση - τότε ότι παραπάνω ξέρει η h1 θα βελτίωνε την αναζήτηση θα λέμε ότι η h1 είναι πιο πληροφορημένη από την h2
Ο αλγόριθμος Α* - ιδιότητες Σταθερότητα: Αν η h «σπάνια» υπερεκτιμά την απόσταση το πολυ s, τότε ο A* σπάνια θα βρει λύσεις που είναι χειρότερες από την καλύτερη άρα, είναι χρήσιμο να έχουμε καλή εκτίμηση της h Πληρότητα: Ο A* θα τελειώσει και θα βρει τη βέλτιστη λύση ακόμα και σε άπειρους χώρους αναζήτησης, αν υπάρχει βέλτιστη λύση και όλα τα κόστη είναι θετικά Μονότονη συνάρτηση: Αν για όλα τα n, m όπου m είναι απόγονος του n και h(n) - h(m) <= cost(n, m), τότε όποτε επισκεφτόμαστε ένα κόμβο, θα είμαστε εκεί με τον συντομότερο δρόμο δεν χρειάζεται να «θυμόμαστε» τα μονοπάτια ακραία περίπτωση: h(n) = 0 [κατά πλάτος]
Ο αλγόριθμος Α* Δημιούργησε μία ουρά (queue) που αρχικά έχει τη ρίζα (root) Έως ότου η ουρά είναι άδεια ή ο στόχος έχει βρεθεί, έλεγξε αν το πρώτο στοιχείο είναι ο στόχος Αν είναι μην κάνεις τίποτα Αν δεν είναι, τότε: βγάλε το πρώτο στοιχείο βάλε τα παιδιά του πρώτου στοιχείου πίσω στην ουρά ταξινόμησε όλη την ουρά με βάση την f(s) (ο καλύτερος κόμβος μπροστά) Αν έχει βρεθεί ο στόχος, τότε έχουμε επιτυχία, αλλιώς, αποτυχία
Παράδειγμα
Παράδειγμα Πλήρης - Ο(bm) χρόνου και χώρου -βέλτιστη λύση f(s)=d(s)+h(s) με h(s) αποδεκτή
Σύγκριση αλγορίθμων
Παίγνια 2 αντιπάλων Σε πολλά προβλήματα της ΤΝ, η εξέλιξη των καταστάσεων εξαρτάται από δύο διαφορετικά σύνολα τελεστών μετάβασης που εφαρμόζονται εναλλάξ από δύο ενεργά συστήματα (πράκτορες) Αυτά τα προβλήματα αναφέρονται και ως ανταγωνιστικά παίγνια ή παίγνια δύο αντιπάλων (adversary ή two person games) Επιλύονται με ειδικούς αλγορίθμους αναζήτησης, βασικότεροι των οποίων είναι ο Min-Max και o Alpha Beta Ο όρος «παίγνιο» αφορά στην περιγραφή του τρόπου με τον οποίο παίζεται το παιχνίδι και περιλαμβάνει: Τα αντικείμενα που υπάρχουν (για παράδειγμα, τα πούλια, το ταμπλώ, κ.τ.λ.) Το σύνολο των κανόνων (για παράδειγμα, των επιτρεπτών κινήσεων, των συνθηκών νίκης, κ.τ.λ.) που το διέπουν Αντίθετα, με τον όρο «παιχνίδι» χαρακτηρίζεται μία συγκεκριμένη παρτίδα του παιγνίου Γνωστά παραδείγματα παιγνίων είναι το σκάκι, η τρίλιζα, το τάβλι, κ.τ.λ.
Παίγνια 2 αντιπάλων Σε ένα παίγνιο δύο ατόμων το πρόβλημα ορίζεται ως εξής: Μια κατάσταση παριστάνει τη διάταξη των πιονιών σε κάποια χρονική στιγμή Ο χώρος καταστάσεων αποτελείται από όλες αυτές τις πιθανές επιτρεπτές καταστάσεις Οι τελεστές μετάβασης είναι οι επιτρεπτές κινήσεις που καθορίζονται από τους κανόνες του παιχνιδιού. Οι κανόνες του παιχνιδιού παίζουν και το ρόλο των προϋποθέσεων αυτών των τελεστών Οι τελικές καταστάσεις του παιχνιδιού έχουν γνωστά χαρακτηριστικά (π.χ. ματ στο σκάκι) Έστω ότι κάποιος συμμετέχει σε ένα παιχνίδι και είναι η σειρά του να κάνει μία κίνηση Αν θέλει να κερδίσει, θα επιδιώξει να κάνει την καλύτερη κίνηση για αυτόν, η οποία αντίστοιχα θα είναι και η χειρότερη για τον αντίπαλο Ο τρόπος που πιθανά σκέφτεται κάποιος για να παίξει είναι ο εξής: «Αν κάνω αυτή την κίνηση, τότε ο αντίπαλος θα κάνει εκείνη, αν όμως κάνω την άλλη κίνηση, τότε θα κάνει αυτήν,...» κ.ο.κ. Ο συλλογισμός αυτός αντιστοιχεί στη δημιουργία ενός δένδρου με όλες τις εναλλακτικές κινήσεις που πηγάζουν από την παρούσα κατάσταση Το δένδρο αυτό ονομάζεται δένδρο του παιχνιδιού (game tree)
Παίγνια 2 αντιπάλων Το χαρακτηριστικό του είναι ότι οι κινήσεις δύο διαδοχικών επιπέδων ανήκουν σε διαφορετικό παίκτη, γιατί οι παίκτες παίζουν εναλλάξ Το δένδρο αυτό αναπτύσσεται νοερά από τον παίκτη του οποίου είναι η σειρά να παίξει Αυτή η διαδικασία μπορεί να συνεχιστεί μέχρι κάποιο βάθος, συνήθως μικρό, και να σταματήσει εκεί όπου αρχίζει η αξιολόγηση των καταστάσεων με βάση κάποια κριτήρια Ο παίκτης αξιολογεί τις καταστάσεις που θα προκύψουν από πιθανές διαφορετικές εξελίξεις του παιχνιδιού και αποφασίζει ποια από τις εναλλακτικές κινήσεις θα τον οδηγήσει σταδιακά στην πιο ευνοϊκή για αυτόν εξέλιξη Έστω ότι ένας από τους δύο αντιπάλους είναι ο υπολογιστής Το πρόγραμμα αναζήτησης και ο άνθρωπος πρέπει να εξετάσουν και να θυμούνται όλες τις πιθανές κινήσεις που παράγονται από μία (αρχική) κατάσταση Ένα τέτοιο πρόγραμμα μπορεί να προβλέψει την έκβαση του παιχνιδιού μετά από 10 κινήσεις (βάθος 10 του δένδρου παιχνιδιού), ενώ ο άνθρωπος σταματά συνήθως μετά την πρόβλεψη 2 ή 3 κινήσεων
Παίγνια 2 αντιπάλων Παραδόξως, οι διαφορές αυτές δεν κάνουν κάποιο πρόγραμμα κυρίαρχο οποιουδήποτε παιχνιδιού Π χ μόλις πρόσφατα κατασκευάστηκε το καλύτερο σύστημα, το Deep Blue (συνδυασμός λογισμικού και υλικού) που μπορεί, κάποιες φορές, να νικήσει τον παγκόσμιο πρωταθλητή στο σκάκι Ο λόγος για την ανωτερότητα των ανθρώπων στο σκάκι είναι από τη μία μεριά απλός να περιγραφεί, αλλά από την άλλη πολύ δύσκολος να υλοποιηθεί σαν πρόγραμμα Η ανωτερότητα τους έγκειται στους εξής παράγοντες: Οι μαιτρ του σκάκι έχουν τη δυνατότητα να επιλέγουν με κάποιον ευριστικό τρόπο τις εναλλακτικές κινήσεις, αλλά δε μπορούν να μετατρέψουν αυτόν τον τρόπο σε αντίστοιχη ευριστική τιμή Οι άνθρωποι διαθέτουν κάποια διαίσθηση για την κατάληξη του παιχνιδιού αν επιλεγεί κάποια από τις εναλλακτικές κινήσεις η οποία επίσης δε μπορεί να αποδοθεί αριθμητικά ώστε να υπάρξει ευριστικό κλάδεμα του χώρου αναζήτησης Τέλος, με την εμπειρία που αποκτούν, μπορούν να σκέφτονται πολλές φορές εντελώς μηχανικά, ιδίως στα πρώτα και τελευταία στάδια του παιχνιδιού
Παίγνια 2 αντιπάλων Το κύριο μέλημα των προγραμμάτων σκάκι είναι να αναζητήσουν το δένδρο του παιχνιδιού σε όσο το δυνατόν μεγαλύτερο βάθος Αν υπήρχε η δυνατότητα να φτάσουν μέχρι τις τελικές καταστάσεις του παιχνιδιού τότε τα προγράμματα θα ήταν ανίκητα Ο λόγος που κάτι τέτοιο είναι αδύνατο πηγάζει από τους χρονικούς περιορισμούς μιας παρτίδας και από το πρόβλημα της συνδυαστικής έκρηξης Αν υποθέσουμε ότι από κάθε κατάσταση στο σκάκι παράγονται άλλες 10 καταστάσεις (Μ.Ο.), και ότι μία παρτίδα τελειώνει σε 40 κινήσεις (20 για κάθε παίκτη), τότε οι πιθανές τελικές καταστάσεις θα ήταν της τάξης του 10^40 Αν ένας υπέρ υπολογιστής ξοδεύει 1 nanosecond (=10^ 9 sec) για να εξετάσει κάθε μία από αυτές, τότε χρειάζεται 10^40x10^ 9=10^31 sec συνολικά για να τις εξετάσει όλες Έχοντας υπόψη πως ένα έτος έχει περίπου 31^6 sec περίπου, ο υπέρ υπολογιστής αυτός θα χρειαζόταν το 1/4 της ηλικίας του σύμπαντος Αφού λοιπόν δε μπορούμε να περιμένουμε τόσο πολύ, οι αλγόριθμοι αναζήτησης που υπάρχουν εξετάζουν το δένδρο του παιχνιδιού μέχρι ένα ορισμένο βάθος, τόσο όσο επιτρέπει ο χρόνος για τη κίνηση
Ο αλγόριθμος Min Max Δεδομένης μίας κατάστασης του παιχνιδιού, ο αλγόριθμος αναζήτησης ελαχίστου-μεγίστου (Min-Μax) καλείται να αποφασίσει ποια θα είναι η επόμενη κίνησή του, έναντι του αντιπάλου Η εξαντλητική αναζήτηση των δένδρων αναζήτησης είναι ανέφικτη Το ζητούμενο είναι: Να χτιστεί το δένδρο μέχρι κάποιο βάθος Να βρεθεί η καλύτερη κίνηση από την παρούσα κατάσταση Το μέτρο της υπεροχής του ενός ή του άλλου αντιπάλου δίνεται από μία ευριστική συνάρτηση που καλείται συνάρτηση αξιολόγησης (evaluation function) και η οποία εφαρμόζεται στα φύλλα του δένδρου του παιχνιδιού Ο ένας παίκτης (πρόγραμμα) ονομάζεται max και ο άλλος (άλλο πρόγραμμα ή άνθρωπος) ονομάζεται min Οι κόμβοι του δένδρου διακρίνονται σε: Αυτούς που σειρά έχει να παίξει ο max Αυτούς που σειρά έχει να παίξει ο min
Ο αλγόριθμος Min Max Βήμα 1. Εφάρμοσε τη συνάρτηση αξιολόγησης σε όλους τους κόμβους φύλλα του δένδρου Βήμα 2. Έως ότου η ρίζα του δένδρου αποκτήσει τιμή, επανέλαβε: Βήμα 3. Αρχίζοντας από τα φύλλα του δένδρου και προχωρώντας προς τη ρίζα, μετέφερε τις τιμές προς τους ενδιάμεσους κόμβους του δένδρου ως εξής: Βήμα 3.1 Η τιμή κάθε κόμβου Max είναι η μέγιστη (maximum) των τιμών των κόμβων παιδιών του Βήμα 3.2 Η τιμή κάθε κόμβου Min είναι η ελάχιστη (minimum) των τιμών των κόμβων παιδιών του Βήμα 4. Καλύτερη κίνηση είναι η κίνηση που οδηγεί στον κόμβο που έδωσε την πιο συμφέρουσα στη ρίζα τιμή (μέγιστη για το Max, ελάχιστη για το Min) Ο αλγόριθμος εγγυάται την πιο συμφέρουσα εξέλιξη μετά από κάποιες κινήσεις, έστω και αν ο αντίπαλος διαλέγει τις καλύτερες για αυτόν κινήσεις
Ο αλγόριθμος Min Max (σχόλια) Κατά σύμβαση, ο παίκτης που βρίσκεται στη ρίζα θεωρείται πως είναι ο Max Οι καταστάσεις φύλλα του δένδρου ονομάζονται και τερματικές καταστάσεις, οι οποίες όμως δεν είναι απαραίτητα τελικές καταστάσεις, απλά αποτελούν το όριο της αναζήτησης Οι τιμές των τερματικών καταστάσεων υπολογίζονται από τη συνάρτηση αξιολόγησης ενώ οι άλλες προκύπτουν από τη διάδοση αυτών
Παράδειγμα Min Max
Παράδειγμα εφαρμογής Min Max στη τρίλιζα Το παίγνιο τρίλιζα είναι ένα πρόβλημα με μικρό χώρο αναζήτησης, της τάξης των 9! καταστάσεων Όλες οι καταστάσεις μπορούν κάλλιστα να κωδικοποιηθούν σε κάποιο πρόγραμμα το οποίο σαν αποτέλεσμα δε θα χάνει ποτέ Αποτελεί καλό παράδειγμα εφαρμογής του αλγορίθμου Μin-Max Έστω ότι ο παίκτης Max είναι ένα πρόγραμμα που σημειώνει Χ και αντιμετωπίζει έναν άνθρωπο ή ένα άλλο πρόγραμμα, τον Μin Έστω ότι ο Μax αποφασίζει να δει μέχρι βάθος τριών κινήσεων Στο βάθος αυτό εφαρμόζει τη συνάρτηση αξιολόγησης για όλες τις καταστάσεις που έχουν προκύψει
Παράδειγμα εφαρμογής Min Max στη τρίλιζα Μία συνάρτηση αξιολόγησης στην τρίλιζα θα μπορούσε να είναι η: 3 Χ2 + Χ1 (3 Ο2 + Ο1) Χ2 ο αριθμός γραμμών, στηλών ή διαγωνίων με δύο Χ και χωρίς κανένα Ο Χ1 ο αριθμός γραμμών, στηλών ή διαγωνίων με ένα Χ και χωρίς κανένα Ο Ο2 ο αριθμός γραμμών, στηλών ή διαγωνίων με δύο Ο και χωρίς κανένα Χ Ο1 ο αριθμός γραμμών, στηλών ή διαγωνίων με ένα Ο και χωρίς κανένα Χ Προφανώς, θετικές τιμές επιστρέφουν οι καταστάσεις που ωφελούν αυτόν που σημειώνει Χ, ενώ αρνητικές τιμές αυτές που ωφελούν αυτόν που σημειώνει Ο Για παράδειγμα, στο επόμενο Σχήμα απεικονίζεται μία κατάσταση της οποίας η συνάρτηση αξιολόγησης επιστρέφει 4, δηλαδή αυτός που σημειώνει το Χ έχει εμφανές πλεονέκτημα
Παράδειγμα εφαρμογής Min Max στο σκάκι Το κύριο μέλημα των προγραμμάτων σκάκι είναι να αναζητήσουν το δένδρο του παιχνιδιού σε όσο το δυνατόν μεγαλύτερο βάθος. Αν υπήρχε η δυνατότητα να φτάσουν μέχρι τις τελικές καταστάσεις του παιχνιδιού, τότε τα προγράμματα θα ήταν ανίκητα Μία συνάρτηση αξιολόγησης στο σκάκι: Υπεροχή κομματιών: Κάθε κομμάτι έχει κάποια αξία, π.χ. Βασιλιάς=10, Άλογο=5, Πιόνι=1 κ.λ.π. Η αξία όλων των κομματιών κάθε χρώματος προστίθεται Υπεροχή θέσης: Κάθε κομμάτι που βρίσκεται στα 4 κεντρικά τετράγωνα παίρνει επιπλέον 2 πόντους Απειλές: Για κάθε απειλή που προβάλει ένας παίκτης παίρνει 3 επιπλέον πόντους, εκτός αν απειλεί το βασιλιά του άλλου παίκτη, οπότε παίρνει 20 πόντους
Παράδειγμα εφαρμογής Min Max στο σκάκι
Ο αλγόριθμος Alpha Beta Ο αλγόριθμος Άλφα Βήτα (Alpha Beta) αποφεύγει την αξιολόγηση καταστάσεων που ικανοποιούν ορισμένες συνθήκες Ο Alpha-Βeta είναι όμοιος με τον Min-Max, αλλά με κλάδεμα υποδένδρων, όπως κατά αντιστοιχία ο B&B με τον DFS Το κλάδεμα που κάνει ο Alpha-Βeta, όπως άλλωστε και ο Β&Β, δεν είναι ευριστικό γιατί βασίζεται σε πραγματικά νούμερα
Σύγκριση του ΑΒ με τον Min Max Παράδειγμα Min Max
Σύγκριση του ΑΒ με τον Min Max Παράδειγμα Alpha Beta Εξηγήσεις: Αξιολογούνται οι πρώτοι αριστεροί κόμβοι (4, 10, 7) και δίνουν την τιμή 4 στον κόμβο πατέρα Η αξιολόγηση προχωρά στο δεύτερο κλαδί και βρίσκει 5 και 1 οπότε και σταματά γιατί η τιμή του είναι μικρότερη από τη μεγαλύτερη τιμή του ανωτέρου επιπέδου (δηλαδή το 4) Όμοια γίνεται και στους επόμενους κόμβους
Σύγκριση του ΑΒ με τον Min Max Κατά προσέγγιση ο ΑΒ εξετάζει τερματικούς κόμβους, όπου Ν είναι οι τερματικοί κόμβοι που εξετάζει ο αλγόριθμος Min-Max Η απόδοσή του βελτιώνεται με διάφορες μεθόδους, όπως: Ευριστικό κλάδεμα του δένδρου παιχνιδιού Δυναμική αντί στατικής συνάρτησης αξιολόγησης Αποθήκευση τιμών των τερματικών καταστάσεων (transposition tables) Προκαθορισμένες κινήσεις (χωρίς αναζήτηση) σε αρχικές και τελικές φάσεις του παιγνιδιού (Openings, End Game moves)
Το πρόβλημα του ορίζοντα Μειονεκτήματα: Το φαινόμενο του ορίζοντα (horizon effect), αντιμετωπίζεται με ανιχνευτές (scouts)