1 ΠΡΟΒΛΗΜΑΤΑ ΤΝ ΚΑΙ LISP

Σχετικά έγγραφα
Ευφυής Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΙΑΤΜΗΜΑΤΙΚΟ ΠΜΣ «ΜΑΘΗΜΑΤΙΚΑ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΤΩΝ ΑΠΟΦΑΣΕΩΝ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ η Σειρά Ασκήσεων ΑΠΑΝΤΗΣΕΙΣ

ΤΥΦΛΗ ΑΝΑΖΗΤΗΣΗ (1) ΣΤΡΑΤΗΓΙΚΗ Ή ΑΛΓΟΡΙΘΜΟΣ ΑΝΑΖΗΤΗΣΗΣ

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

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟ ΟΥΣ

Για παράδειγμα η αρχική και η τελική κατάσταση αναπαριστώνται ως εξής: (ένα λίτρο)

Μαθηματικά των Υπολογιστών και των Αποφάσεων Τεχνητή Νοημοσύνη 1η Σειρά Ασκήσεων

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Επίλυση Προβλημάτων 1

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟ ΟΥΣ

Κεφάλαιο 3. Αλγόριθµοι Τυφλής Αναζήτησης. Τεχνητή Νοηµοσύνη - Β' Έκδοση. Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η.

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Ευφυής Προγραμματισμός

PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ"

Ευφυής Προγραμματισμός

Επίλυση προβλημάτων με αναζήτηση

Επίλυση προβληµάτων. Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης

Επίλυση προβληµάτων. Αλγόριθµοι Αναζήτησης

Τεχνητή Νοημοσύνη. 3η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e

Ευφυής Προγραμματισμός

Αλγόριθμοι Τυφλής Αναζήτησης

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

Επίλυση προβληµάτων. Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης Αλγόριθµοι τυφλής αναζήτησης Αλγόριθµοι ευρετικής αναζήτησης

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Επίλυση Προβλημάτων. Περιγραφή Προβλημάτων Αλγόριθμοι αναζήτησης Αλγόριθμοι τυφλής αναζήτησης. Αλγόριθμοι ευρετικής αναζήτησης Παιχνίδια δύο αντιπάλων

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Επίλυση Προβλημάτων 1

Επίλυση Προβλημάτων και Τεχνικές Αναζήτησης Εισαγωγή

ΙΚΑΝΟΠΟΙΗΣΗ ΠΕΡΙΟΡΙΣΜΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕ ΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Ergasthriak 'Askhsh 5

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Κεφάλαιο 5. Αλγόριθµοι Αναζήτησης σε Παίγνια ύο Αντιπάλων. Τεχνητή Νοηµοσύνη - Β' Έκδοση

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Τεχνητή Νοημοσύνη. 6η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

4 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Ε ανάληψη. Α ληροφόρητη αναζήτηση

Αλγόριθµοι Ευριστικής Αναζήτησης

ΠΛΗΡΟΦΟΡΙΑΚΑ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΣΥΣΤΗΜΑΤΑ

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

Ο ΑΤΔ Λεξικό. Σύνολο στοιχείων με βασικές πράξεις: Δημιουργία Εισαγωγή Διαγραφή Μέλος. Υλοποιήσεις

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Ενότητα 5: Παραδείγματα. Ρεφανίδης Ιωάννης Τμήμα Εφαρμοσμένης Πληροφορικής

Επίλυση Προβλημάτων 1

Άσκηση 2: Λαβύρινθοι και ρομπότ Α. (Σχεδιασμός χώρου καταστάσεων) Ενδεικτική επίλυση

Τεχνητή Νοημοσύνη. 16η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Ανάκτηση Πληροφορίας

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ

Σημειωματάριο Τετάρτης 29 Νοε. 2017

Κεφάλαιο 2. Περιγραφή Προβληµάτων και Αναζήτηση Λύσης. Τεχνητή Νοηµοσύνη - Β' Έκδοση

Θεωρία Λήψης Αποφάσεων

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Δημιουργία Δυαδικών Δέντρων Αναζήτησης

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

Περιγραφή Προβλημάτων

Προγραµµατισµός Ι (ΗΥ120)

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

ΣΗΜΕΙΩΣΕΙΣ ΥΝΑΜΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΡΩΤΗΜΑΤΑ σε ΑΝΑΖΗΤΗΣΗ

Εισαγωγή στην Γλώσσα Lisp

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕ ΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ

Διαδικασιακός Προγραμματισμός

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ Γλώσσες & Τεχνικές 4 ο Εξάμηνο. - Ενότητα 1 - Δημοσθένης Σταμάτης

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

Κεφάλαιο 6. Ικανοποίηση Περιορισµών. Τεχνητή Νοηµοσύνη - Β' Έκδοση. Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η.

ΚΕΦΑΛΑΙΟ Μηχανική Μάθηση

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

4.3. Γραµµικοί ταξινοµητές

Θέμα 1: Robbie και Αναζήτηση

Ανδρέας Παπαζώης. Τμ. Διοίκησης Επιχειρήσεων

Κεφάλαιο 9 ο Κ 5, 4 4, 5 0, 0 0,0 5, 4 4, 5. Όπως βλέπουµε το παίγνιο δεν έχει καµιά ισορροπία κατά Nash σε αµιγείς στρατηγικές διότι: (ΙΙ) Α Κ

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

Τεχνητή Νοημοσύνη. 5η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

Η εφαρµογή xsortlab. Οπτικός τρόπος ταξινόµησης

Τεχνητή Νοημοσύνη. 21η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Δέντρα Απόφασης (Decision(

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΠαράδειγµαΠρογραµµατισµού

ΠΛΗ 405 Τεχνητή Νοηµοσύνη

ιαφάνειες παρουσίασης #11

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

Προβλήµατα ικανοποίησης περιορισµών

Transcript:

1 ΠΡΟΒΛΗΜΑΤΑ ΤΝ ΚΑΙ LISP 1.1 Αναζήτηση και Στρατηγικές Αναζήτησης Ένας τρόπος επίλυσης προβληµάτων µε µεθόδους Τεχνητής Νοηµοσύνης (ΤΝ) είναι η αναζήτηση λύσης (search). Σύµφωνα µ αυτήν, ένα πρόβληµα παριστάνεται ως µια (αρχική) κατάσταση και η επίλυσή του ως µια σειρά µεταβάσεων από την κατάσταση αυτή σε µια (τελική) κατάσταση, που αποτελεί τη λύση του προβλήµατος, δια µέσου άλλων (ενδιάµεσων) καταστάσεων. Η παραγωγή των ενδιάµεσων καταστάσεων γίνεται µε τη χρήση των τελεστών µετάβασης. Ένας τελεστής µετάβασης προσδιορίζει την επόµενη κατάσταση µε βάση την προηγούµενη. Ένα πρόβληµα µπορεί να έχει ένα ή περισσότερους τελεστές µετάβασης, που ουσιαστικά αναπαριστούν τις ενέργειες που µπορούν να γίνουν για να φτάσουµε στη λύση του προβλήµατος. Για να µπορεί να εφαρµοστεί ένας τελεστής πρέπει να ικανοποιούνται ορισµένες προϋποθέσεις, που αποτελούν µέρος του ορισµού του τελεστή. εδοµένου ότι οι τελεστές µετάβασης είναι συνήθως περισσότεροι από ένας, τίθεται το ζήτηµα του ποιόν θα εφαρµόσουµε κάθε φορά. Κατ αρχή αποκλείονται αυτοί των οποίων οι προϋποθέσεις δεν ικανοποιούνται. Για τους υπόλοιπους καθορίζουµε µια σειρά µε βάση κάποια στρατηγική αναζήτησης. Υπάρχουν δύο κατηγορίες στρατηγικών αναζήτησης, οι τυφλές και οι ευριστικές. Οι τυφλές στρατηγικές δεν λαµβάνουν υπ όψιν το συγκεκριµένο πρόβληµα. ύο τέτοιες στρατηγικές είναι οι αναζήτηση κατά πλάτος και αναζήτηση κατά βάθος (µε οπισθοδρόµηση). Η αναζήτηση κατά πλάτος (breadth-first search) εφαρµόζει κατ αρχήν όλους τους εφαρµόσιµους τελεστές (µε µια συγκεκριµένη σειρά) στην αρχική κατάσταση και παράγει τόσες νέες καταστάσεις όσοι και οι εφαρµόσιµοι τελεστές. Οι καταστάσεις αυτές, επειδή η διαδικασία της αναζήτησης µπορεί να

2 παρασταθεί σαν ένα δέντρο, που λέγεται δέντρο αναζήτησης, λέγονται παιδιά της αρχικής κατάστασης (που ονοµάζεται ρίζα του δέντρου). Στη συνέχεια, η αναζήτηση κατά πλάτος εφαρµόζει όλους τους εφαρµόσιµους τελεστές (µε την ίδια σειρά) στο πρώτο από τα παιδιά που έχουν παραχθεί (και παράγει τα αντίστοιχα παιδιά του), µετά στο δέυτερο κ.ο.κ. Όταν τελειώσουν τα παιδιά της αρχικής κατάστασης, συνεχίζει µε το πρώτο παιδί του πρώτου παιδιού της αρχικής κατάστασης κ.ο.κ. Όταν βρει τη λύση (τελική κατάσταση ή κατάσταση στόχου) σταµατά. Τ1 Τ2 Τ3 Τ1 Τ3 Τ2 Τ4 Τ4 Σχήµα 11.1 Αναζήτηση κατά πλάτος Στο Σχήµα 11.1 απεικονίζεται ο τρόπος αναζήτησης κατά πλάτος, δηλ. η σειρά δηµιουργίας των καταστάσεων (ως κόµβων ενός δέντρου). Τα Τ1, Τ2, Τ3 και Τ4 παριστάνουν τους τελεστές µετάβασης. Ο αλγόριθµος της κατά πλάτος αναζήτησης σε ψευδοκώδικα παρουσιάζεται παρακάτω: 1. ηµιούργησε µια λίστα open (που αρχικά περιέχει τη ρίζα) και µια κενή λίστα closed. 2. Ενόσω open [ ], έλεγχε αν το πρώτο στοιχείο, έστω Χ, είναι ο στόχος 2.1 Αν είναι, τότε σταµάτα (επιτυχία) 2.2 Αν δεν είναι, τότε 2.2.1 Παράγαγε τα παιδιά του Χ και βάλε το Χ στην closed 2.2.2 ιάγραψε όσα παιδιά του Χ υπάρχουν στην closed 2.2.3 Εισάγαγε τα υπόλοιπα παιδιά του Χ στο τέλος της open 3. Σταµάτα (αποτυχία) Βασικά, χρησιµοποιούνται δύο λίστες, η open και η closed, όπου αποθηκεύονται στην µεν open οι ανοικτές καταστάσεις, δηλ. αυτές που δεν έχουν ακόµη αναπτυχθεί (δηλ. δεν έχουν παραχθεί τα παιδιά τους), στη δε closed, οι κλειστές, δηλ. αυτές που

3 έχουν αναπτυχθεί. Το βήµα 2.2.2 υπάρχει για να διαγραφούν όσες καταστάσεις έχουν ήδη αναπτυχθεί, διότι δεν προσφέρουν κάτι καινούργιο. Μια υλοποίηση του παραπάνω αλγορίθµου σε LISP είναι η παρακάτω. (defun breadth-first-search (init-state final-states) (let ((open (list init-state)) (closed nil)) (breadth-solve open closed final-states)) (defun breadth-solve (open closed final-states) (if (null open) nil (let ((cur-state (pop open)) (if (member cur-state final-states) (show-solution-path cur-state closed) (let* ((childs (make-childs cur-state)) (closed (push cur-state closed)) (childs (remove-closed-childs childs closed)) (open (append open childs))) (breadth-solve open closed final-states)))))) Αυτός είναι βέβαια ένας σκελετός. Υπάρχουν συναρτήσεις που πρέπει να οριστούν στη συνέχεια, όπως οι show-solution-path, make-childs και remove-closed-childs. Η αναζήτηση κατά βάθος (depth-first search) ξεκινά µε τον ίδιο τρόπο, αλλά στη συνέχεια εφαρµόζει όλους τους εφαρµόσιµους τελεστές στο πρώτο παιδί της αρχικής κατάστασης, µετά στο πρώτο παιδί του πρώτου παιδιού της αρχικής κατάστασης κ.ο.κ. µέχρις ότου είτε βρεθεί η λύση (τελική κατάσταση), οπότε σταµατά, είτε βρει αδιέξοδο, δηλ. µια κατάσταση όπου κανένας τελεστής δεν µπορεί να εφαρµοστεί, οπότε κάνει οπισθοδρόµηση (backtracking). Η οπισθοδρόµηση αναγκάζει τη διαδικασία να γυρίσει πίσω σε µια κατάσταση όπου εφαρµόζει τον επόµενο τελεστή από εκείνον που εφήρµοσε, παράγει τα παιδιά της, συνεχίζει µε το πρώτο από αυτά κ.ο.κ. Στο Σχήµα 11.2 απεικονίζεται ο τρόπος αναζήτησης κατά βάθος, δηλ. η σειρά δηµιουργίας των καταστάσεων (ως κόµβων ενός δέντρου). Τα Τ1, Τ2, Τ3 και Τ4 παριστάνουν τους τελεστές µετάβασης.

4 Τ1 Τ2 Τ3 Τ1 Τ3 Τ2 Τ4 Τ4 Σχήµα 11.2 Αναζήτηση κατά βάθος µε οπισθοδρόµηση Ο αλγόριθµος της κατά βάθος αναζήτησης σε ψευδοκώδικα παρουσιάζεται παρακάτω. Παρατηρείστε ότι η µόνη διαφορά έγκειται στο βήµα 2.2.3 όπου τα παραγόµενα παιδιά αποθηκεύονται στην αρχή αντί στο τέλος της λίστας. 1. ηµιούργησε µια λίστα open (που αρχικά περιέχει τη ρίζα) και µια κενή λίστα closed. 2. Ενόσω open [ ], έλεγχε αν το πρώτο στοιχείο, έστω Χ, είναι ο στόχος 2.1 Αν είναι, τότε σταµάτα (επιτυχία) 2.2 Αν δεν είναι, τότε 2.2.1 Παράγαγε τα παιδιά του Χ και βάλε το Χ στην closed 2.2.2 ιάγραψε όσα παιδιά του Χ υπάρχουν στην closed 2.2.3 Εισάγαγε τα υπόλοιπα παιδιά του Χ στην αρχή της open 3. Σταµάτα (αποτυχία) Η αντίστοιχη υλοποίηση σε LISP διαφέρει µόνο σε µια γραµµή: (open (append childs open)) αντί (open (append open childs)), που καθορίζει το πού τοποθετούνται τα παραγόµενα παιδιά στη λίστα open. Είτε µε τη µία είτε µε την άλλη στρατηγική ουσιαστικά αναζητούµε τη λύση δηµιουργώντας όλες τις δυνατές καταστάσεις που µπορούν να δηµιουργηθούν. Το ζητούµενο όµως στην Τεχνητή Νοηµοσύνη είναι πώς θα µπορέσουµε να το αποφύγουµε αυτό κάνοντας την αναζήτηση έξυπνη. Αυτό επιτυγχάνεται µε τη χρήση ευριστικών (heuristics), δηλ. έξυπνων τρικ ή κανόνων που συντοµεύουν την αναζήτηση. Τα ευριστικά αυτά σχετίζονται µε το συγκεκριµένο πρόβληµα κάθε

5 φορά. Έτσι, δεν αναπτύσσουµε όλα τα παιδιά µιας κατάστασης, αλλά µόνο τα καλύτερα, δηλ. αυτά που µε βάση το ευριστικό µας «υπόσχονται» πιο σύντοµη αναζήτηση. Μ αυτόν τον τρόπο δηµιουργούνται ευριστικές στρατηγικές, που είναι παραλλαγές των παραπάνω τυφλών στρατηγικών. Π.χ. η στρατηγική που ονοµάζεται αναζήτηση δέσµης (ή ακτινωτή αναζήτηση ) (beam search) λειτουργεί όπως η αναζήτηση κατά πλάτος, µόνο που κάθε φορά επιλέγει τα καλύτερα m από τα παιδιά κάθε κατάστασης για να αναπτύξει. 1. ηµιούργησε µια λίστα open (που αρχικά περιέχει τη ρίζα) και µια κενή λίστα closed. 2. Ενόσω open [ ], έλεγχε αν το πρώτο στοιχείο, έστω Χ, είναι ο στόχος 2.1 Αν είναι, τότε σταµάτα (επιτυχία) 2.2 Αν δεν είναι, τότε 2.2.1 Παράγαγε τα παιδιά του Χ και βάλε το Χ στην closed 2.2.2 ιάγραψε όσα παιδιά του Χ υπάρχουν στην closed 2.2.3 ιάταξε τα παιδιά του Χ µε βάση το ευριστικό 2.2.4 Εισάγαγε τα παιδιά στην αρχή της open 3. Σταµάτα (αποτυχία) (defun hill-search (init-state final-states) (let ((open (list init-state)) (closed nil)) (beam-solve open closed final-states)) (defun hill-solve (open closed final-states) (if (null open) nil (let ((cur-state (pop open)) (if (member cur-state final-states) (show-solution-path cur-state closed) (let* ((childs (make-childs cur-state)) (closed (push cur-state closed)) (childs (remove-closed-childs childs closed)) (childs (sort-childs childs)) (open (append childs open))) (breadth-solve open closed final-states)))))) Επίσης, η αναρρίχηση λόφων (hill climbing) είναι µια παραλλαγήν της αναζήτησης κατά βάθος, όπου δεν επιλέγεται κάθε φορά το πρώτο παιδί για ανάπτυξη, αλλά το καλύτερο, µε βάση το ευριστικό (υπάρχουν διάφορες παραλλαγές του αλγορίθµου). Αυτές οι στρατηγικές βρίσκουν εν γένει τη λύση σε λιγότερα

6 βήµατα, αλλά χρειάζεται προσοχή στον ορισµό του ευρετικού και στη επιλογή του m (πόσο µικρό ή µεγάλο πρέπει να είναι). Στα παραπάνω δύο πλαίσια φαίνεται ο αλγόριθµος αναρρίχησης λόφων σε ψευδοκώδικα και σε LISP. Παρατηρείστε ότι η διαφορά από τον αλγόριθµο αναζήτησης κατά βάθος έγκειται στο ότι έχει προστεθεί ένα επί πλέον βήµα για την διάταξη των παιδιών µιας κατάστασης. Εποµένως, εδώ πρέπει να υλοποιηθεί επί πλέον και η συνάρτηση sort-childs, που εξαρτάται από το ευριστικό (βλ. παρακάτω). 1.2 Το Πρόβληµα των ύο οχείων Ας δούµε για παράδειγµα το γνωστό πρόβληµα των δύο δοχείων: «Υπάρχουν δύο δοχεία χωρητικότητας 4 και 3 λίτρων αντίστοιχα και µια βρύση. Κατ αρχήν, τα δοχεία είναι άδεια. Θέλουµε να αποµονώσουµε στο δεύτερο δοχείο ποσότητα 2 λίτρων. Οι δυνατές ενέργειες είναι: γέµισµα των δοχείων από τη βρύση, άδειασµα των δοχείων στο έδαφος, άδειασµα του ενός δοχείου στο άλλο, µερικώς ή ολικώς.». Στο Σχήµα 11.3 φαίνεται η αρχική (α) και µια τελική κατάσταση (β) του προβλήµατος. Για να µπορέσουµε να λύσουµε τοµπρόβληµα µε αναζήτηση θα πρέπει πρώτα να βρούµε ένα τρόπο αναπαράστασης µιας κατάστασης, ώστε να µπορέσουµε να αναπαραστήσουµε την αρχική και την τελική (ή τις τελικές) καταστάσεις. Μετά πρέπει να προσδιορίσουµε τους τελεστές µετάβασης, το ευριστικό και µετά να εφαρµόσουµε µια στρατηγική αναζήτησης. Α 4λιτ Β 3λιτ Α Β 2λιτ (α) (β) Σχήµα 11.3 Το πρόβληµα των δύο δοχείων Για το πρόβληµα των δύο δοχείων, ορίζουµε σαν αναπαράσταση µιας τυχαίας κατάστασης µια λίστα µε δύο στοιχεία: (x y)

7 όπου x η ποσότητα νερού στο δοχείο των 4 λίτρων (µε δυνατές τιµές 0, 1, 2, 3, 4) και y στο δοχείο των 3 λίτρων (µε δυνατές τιµές 0, 1, 2, 3). Οπότε η αρχική και οι τελικές καταστάσεις παριστάνονται: Αρχική κατάσταση: (0 0) Τελικές καταστάσεις : (2 2), (0 2), (1 2), (3 2), (4 2) Παρατηρείστε ότι το κοινό στοιχείο των τελικών καταστάσεων είναι ότι το δεύτερο στοιχείο κάθε λίστας, που παριστάνει την ποσότητα νερού στο δοχείο Β, είναι 2. Σκοπός µα είναι να φτάσουµε σε µια από αυτές, ξεκινώντας από την αρχική. Οι τελεστές µετάβασης έχουν ως εξής: ΤΕΛΕΣΤΗΣ:ΠΕΡΙΓΡΑΦΗ ΠΡΟΫΠΟΘΕΣΕΙΣ ΑΠΟΤΕΛΕΣΜΑ Τ1: Γέµισε το Α x<4 (4 y) Τ2: Γέµισε το Β y<3 (x 3) Τ3:Άδειασε το Α x>0 (0 y) Τ4: Άδειασε το Β y>0 (x 0) Τ5: Άδειασε το Α στο Β x>0, y<3 Τ6: Άδειασε το Β στο Α x<4, y>0 Αν x 3-y τότε ((x-(3-y)) 3), αλλιώς (0 (y+x)) Αν y 4-x τότε (4 (y-(4-x))), αλλιώς ((y+x) 0) Στη συνέχεια δίνουµε τρόπους υλοποίησης των τελεστών µετάβασης. Π.χ. ο τελεστής Τ1 υλοποιείται ως εξής: (defun t1 (state) (let((x (car state)) (y (second state))) (if (<x 4) (let ((newstate (list 4 y))) (prog1 newstate (format t ~%~3a ΓΕΜΙΣΕ ΤΟ ΟΧΕΙΟ Α ~3a state newstate)))))) Παράδειγµα εφαρµογής: (t1 (1 3)) (1 3) ΓΕΜΙΣΕ ΤΟ ΟΧΕΙΟ Α (4 3) ηλ.εκτυπώνεται η αρχική κατάσταση, η περιγραφή του τελεστή και η κατάσταση που προκύπτει µετά την εφαρµογή του. Οµοίως υλοποιείται και ο Τ2. Ο Τ5 µπορεί να υλοποιηθεί ως εξής:

8 (defun t5 (state) (let ((x (car state)) (y (second state))) (if (and (> x 0) (< y 3)) (let ((z (- 3 y))) (if (or (> x z) (= x z)) (let ((newstate (list (- x (- 3 y)) 3))) (print-state-t5 state newstate)) (let ((newstate (list 0 (+ y x)))) (print-state-t5 state newstate))))))) (defun print-state-t5 (state newstate) (prog1 newstate (format t ~3a Α ΕΙΑΣΕ ΤΟ ΟΧΕΙΟ Α ΣΤΟ Β ~3a state newstate))) Παράδειγµα εφαρµογής: (t5 (3 1)) (4 0) Α ΕΙΑΣΕ ΤΟ ΟΧΕΙΟ Α ΣΤΟ Β (1 3) Μια ευριστική συνάρτηση είναι αυτή που υλοποιεί το ευριστικό, παριστάνεται δε ως h(n), όπου n είναι είναι µια κατάσταση. Στην περίπτωση των δύο δοχείων µπορούµε να ορίσουµε σαν ευριστικό σε µια κατάσταση (x, y) το πόσο κοντά στα 2 λίτρα βρίσκεται η ποσότητα νερού στα δύο δοχεία. Επίσης, συνήθως επιδιώκουµε να είναι h(n)=0 στις καταστάσεις-στόχους. Γι αυτό, εκφράζουµε την ευριστική συνάρτηση ως εξής: h(n) = ( 2-x + 2-y )/2 αν x, y 2 0 αν x=2 ή y=2 Αυτό µπορεί να υλοποιηθεί σε LISP ως εξής: (defun h-value (state) (let ((x (car state)) (y (second state))) (if (or (= x 2) (= y 2)) 0 (float (/ (+ (abs (- 2 x)) (abs (- 2 y))) 2))))) Παραδείγµατα εφαρµογής: (h-value (3 1)) 1, (h-value (3 2)) 0

9 Στη συνέχεια, απαιτείται η υλοποίηση της συνάρτησης sort-childs, όπως προαναφέραµε. Αυτή µπορεί να γίνει ως ακολούθως. Η συνάρτηση sort-childs είναι η συνάρτηση πρώτου επιπέδου: (defun sort-childes (states) (sort-states (compute-h states))) η οποία παίρνει ένα όρισµα (states), που είναι µια λίστα καταστάσεων, καλεί την compute-h, που υπολογίζει τις ευριστικές τιµές των καταστάσεων, και την sort-states, που πραγµατοποιεί τη διάταξη, και τελικά επιστρέφει τη λίστα διατεταγµένη. Παράδειγµα εφαρµογής: (sort-nodes ((4 3) (3 3) (4 1) (1 3))) ((3 3) (1 3) (4 3) (4 1)) Η compute-h παίρνει σαν είσοδο µια λίστα καταστάσεων και επιστρέφει µια λίστα ζευγών, όπου κάθε ζεύγος αποτελείται από µια καταστάση και την αντίστοιχη ευρετική τιµή. (defun compute-h (states) (let ((newstates nil)) (dolist (state states (reverse newstates)) (push (cons state (h-value state)) newstates)))) Παράδειγµα εφαρµογής: (compute-h ((4 3) (3 3) (4 1) (1 3))) (((4 3). 1.5) ((3 3). 1.0) ((4 1). 1.5) ((1 3). 1.0)) Η sort-states παίρνει σαν είσοδο την έξοδο της compute-h και επιστρέφει µια λίστα µε διατεταγµένες τις καταστάσεις µε βάση τις ευριστικές τιµές τους. (defun sort-states (h-states) (do* ((n-states h-states (remove-state min-state n-states)) (min-state (find-minstate h-states) (find-minstate n-states)) (s-states nil)) ((null n-states) (reverse s-states)) (push (car min-state) s-states))) Παράδειγµα εφαρµογής: (sort-states (((4 3). 1.5) ((3 3). 1.0) ((4 1). 1.5) ((1 3). 1.0))) ((3 3) (1 3) (4 3) (4 1))

10 (defun find-minstate (states) (let ((minstate (car states))) (dolist (state (cdr states) minstate) (if (< (cdr state) (cdr minstate)) (setf minstate state))))) (defun remove-state (minstate states) (let ((newstates nil)) (dolist (state states (reverse newstates)) (if (not (equalp state minstate)) (push state newstates))))) Η sort-states, που είναι η συνάρτηση που πραγµατοποιεί τη διάταξη, για να το κάνει αυτό χρησιµοποιεί (καλεί) δύο άλλες συναρτήσεις, τις find-minstate και removestate, από τις οποίες η µεν πρώτη βρίσκει το ελάχιστο στοιχείο µιας λίστας καταστάσεων, ενώ η δεύτερη αφαιρεί µια κατάσταση από τη λίστα καταστάσεων (βλ. παραπάνω πλαίσιο). Ουσιαστικά, η sort-states, µε τη βοήθεια των δύο αυτών συναρτήσεων, υλοποιεί τον αλγόριθµο διάταξης µε επιλογή (ένας άλλος τέτοιος αλγόριθµος θα µπορούσε να είναι ο αλγόριθµος bubble sort). Βιβλιογραφία 1. G. L. Steele JR, Common Lisp, The Language, Digital Press, 1984 (διαθέσιµο on-line στη διέυθυνση http://www-cgi.cs.cmu.edu/afs/cs.cmu.edu/project/airepository/ai/html/cltl/cltl2.html) 2. P. H. Winston and B. K. P. Horn, LISP, 3 rd Edition, Addison Wesley, 1989. 3. G. F. Luger and W. A. Stubblefield, Artificial Intelligence and the Design of Expert Systems (Κεφ. 7), Benjamin/Cummings, 1989. 4. D. S. Touretzky, COMMON LISP: A Gentle Introduction to Symbolic Computation, Benjamin/Cummings, 1990 (διαθέσιµο on-line στη διέυθυνση http://www.cs.cmu.edu/~dst/lispbook/)