You are on page 1of 14

ΤΟ ΠΡΟΒΛΗΜΑ ΤΟΥ PARKING

Εργαστήριο Τεχνητής Νοημοσύνης

Πανεπιστήμιο Δυτικής Αττικής – Τμήμα Μηχανικών Πληροφορικής


& Υπολογιστών
Εαρινό Εξάμηνο 2017-18

Γιακούμπ Κριστιάν
cs151077
Περιεχόμενα
ΔΙΑΤΥΠΩΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ..................................................................................................... 2
ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΜΕ ΧΩΡΟ ΚΑΤΑΣΤΑΣΕΩΝ................................................................. 2
TΡΟΠΟΣ ΚΩΔΙΚΟΠΟΙΗΣΗΣ ΚΑΤΑΣΤΑΣΗΣ ................................................................................... 6
ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΜΕ ΤΗΝ DFS ...................................................................................... 6
ΠΡΩΤΑ ΣΕ ΒΑΘΟΣ ΑΝΑΖΗΤΗΣΗ (DFS) ΜΕ ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΜΕΤΩΠΟΥ ΚΑΙ ΟΥΡΑΣ............... 9
ΑΛΓΟΡΙΘΜΟΙ ΕΥΡΙΣΤΙΚΉΣ ΑΝΑΖΉΤΗΣΗΣ ................................................................................. 10
ΑΛΓΟΡΙΘΜΟΣ ΠΡΩΤΗΣ ΚΑΛΥΤΕΡΗΣ ΑΝΑΖΗΤΗΣΗΣ (bestfs) ................................................ 10
ΑΝΑΖΉΤΗΣΗ ΜΕ BESTFS ΣΤΟ ΠΡΌΒΛΗΜΑ ΛΑΒΎΡΙΝΘΟΥ ................................................... 10

1
ΔΙΑΤΥΠΩΣΗ ΠΡΟΒΛΗΜΑΤΟΣ

Το πρόβλημα του Parking


Στο πρόβλημα υπάρχουν τα εξής στοιχεία:
Έχουμε ένα Parking που διαθέτει ένα επίπεδο λειτουργίας με 6 χώρους υποδοχής
πλατφορμών αριθμημένους από S1 έως S6. Ο πρώτος από τους χώρους, ο S1, βρίσκεται
στην πρόσοψη και χαρακτηρίζεται ως χώρος εισόδου και στην αρχή του προβλήματος είναι
κενός. Στην αρχή του προβλήματος, βρίσκονται 5 αυτοκίνητα, σε αναμονή εισόδου στο
parking.
Θα πρέπει λοιπόν :
• O αυτόματος πλοηγός πρέπει να εξασφαλίσει ότι υπάρχει μια ελεύθερη πλατφόρμα
στο χώρο εισόδου, και να μεταφέρει ένα αυτοκίνητο που είναι σε αναμονή πάνω στην
πλατφόρμα αυτή.
• Κάθε πλατφόρμα μπορεί να φέρει το πολύ ένα αυτοκίνητο. Ο πλοηγός μπορεί να
μετακινήσει μια πλατφόρμα από το χώρο που βρίσκεται σε έναν γειτονικό χώρο αρκεί
αυτός να είναι κενός.
• Κάθε πλατφόρμα που μεταφέρεται μπορεί να είναι είτε ελεύθερη είτε όχι.

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

ΜΟΝΤΕΛΟΠΟΙΗΣΗ ΠΡΟΒΛΗΜΑΤΟΣ

Χώρος καταστάσεων
Οι επιτρεπτές καταστάσεις του προβλήματος αποτελούνται από το συνδυασμό των σχέσεων
μεταξύ των αντικειμένων του.

Αρχική κατάσταση
Το parking είναι άδειο και περιμένουν 5 αυτοκίνητα για να μπουν

Στόχος
Να μπουν και τα 5 αμάξια στο parking.

2
Τελεστές προβλήματος

Σε αυτό το περιβάλλον μπορούν να εφαρμοστούν σε κάθε κατάσταση μόνο οι παρακάτω


τελεστές:
• Είσοδος στο Parking (IN)
• Μεταφορά της κενής πλατφόρμας στην πρώτη γειτονική της πλατφόρμα(TR1)
• Μεταφορά της κενής πλατφόρμας στην δεύτερη γειτονική της πλατφόρμα(TR2)
• Μεταφορά της κενής πλατφόρμας στην τρίτη γειτονική της πλατφόρμα εάν και μόνο
υπάρχει τρίτος γείτονας(TR3)

Κωδικοποίηση τελεστή TR1:


(defun tr1 (state) ; μεταφορά πλατφόρμας με τον πρώτο της γειτονικό.
( swap state (position 'e state) (cadr (assoc (position 'e state) spaces))); μεταφορά της κενής
πλατφόρμας στον πρώτο γειτονικό
)
;;;;TESTS
(tr1 '(3 (P2 NO) E (P3 NO) (P1 NO) ) ) ; έλεγχος του E σε όλες τις πιθανές θέσεις
(tr1 '(3 (P2 NO) (P3 NO) E (P1 NO) ) )
(tr1 '(3 (P2 NO) (P3 NO) (P1 NO) E) )
(tr1 '(3 E (P2 NO) (P3 NO) (P1 NO) ) )
(tr1 '()) #είσοδος στο tr1 κενή λίστα

;;; RESULTS
(3 (P2 NO) (P3 NO) E (P1 NO))
(3 (P2 NO) (P3 NO) (P1 NO) E)
(3 (P2 NO) (P3 NO) E (P1 NO))
(3 (P2 NO) E (P3 NO) (P1 NO))
NIL

3
Κωδικοποίηση τελεστή TR2:

(defun tr2 (state) ; μεταφορά πλατφόρμας με τον πρώτο της γειτονικό χώρο.
( swap state (position 'e state) (caddr (assoc (position 'e state) spaces))); μεταφορά της κενής
πλατφόρμας στον δεύτερο γειτονικό χώρο
)

;;;ΔΟΚΙΜΑΣΤΙΚΕΣ ΚΛΗΣΕΙΣ
(tr2 '(3 (P2 NO) E (P3 NO) (P1 NO) ) ) ; έλεγχος του E σε όλες τις πιθανές θέσεις
(tr2 '(3 (P2 NO) (P3 NO) E (P1 NO) ) )
(tr2 '(3 (P2 NO) (P3 NO) (P1 NO) E) )
(tr2 '(3 E (P2 NO) (P3 NO) (P1 NO) ) )
(tr2 '()) #είσοδος στο tr2 κενή λίστα

;;; RESULTS
(3 (P2 NO) (P3 NO) E (P1 NO))
(3 (P2 NO) (P3 NO) (P1 NO) E)
(3 (P2 NO) (P3 NO) E (P1 NO))
(3 (P2 NO) E (P3 NO) (P1 NO))
NIL

Κωδικοποίηση τελεστή TR3:


(defun TR3(state)
(cond
( (equal (fourth (nth ( - (position 'e state) 1) spaces) ) NIL ) NIL) ;Αν δεν υπάρχει τρίτος γείτονας
επιστρέφει NIL
(T (swap state (position 'e state) (fourth (nth ( - (position 'e state) 1) spaces) ) ) ))); μεταφορά της
κενής πλατφόρμας στον τρίτο γειτονικό χώρο
)))
;;; ΔΟΚΙΜΑΣΤΙΚΕΣ ΚΛΗΣΕΙΣ
(tr3 '(5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO))) ; Αν ο πρώτος χώρος δεν έχει γείτονα
(tr3 '(5 (P1 NO) Ε (P2 NO) (P3 NO) (P4 NO) (P5 NO))) ;Όταν υπάρχει τρίτος γείτονας στον
δεύτερο χώρο
(tr3 '(5 (P1 NO) (P2 NO) (P3 NO) (P4 NO) Ε (P5 NO))) ; Όταν υπάρχει τρίτος γείτονας στον
πέμπτο χώρο
(tr3 '()) #είσοδος στο tr2 κενή λίστα

;;; RESULTS
NIL
(5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO))
(tr3 '(5 (P1 NO) (P2 NO) (P3 NO) (P4 NO) E (P5 NO)))
NIL

4
Κωδικοποίηση τελεστή IN:
(defun in (state) ; Vehicle Into Platform
(cond
((zerop (car state) ) NIL) ; δεν υπάρχει άλλο αυτοκίνητο (0) σε αναμονή
((equal (second state) 'E) NIL) ; δεν υπάρχει πλατφόρμα (EMPTY) στο χώρο εισόδου S1
((equal (second (second state)) 'YES) NIL) ;υπάρχει πλατφόρμα στο χώρο εισόδου αλλά
φέρει αυτοκίνητο (YES)
(T (cons (- (car state) 1) (cons (list (car (second state)) 'YES) (cddr state) ) ) ) ; υπάρχει
πλατφόρμα στο χώρο εισόδου και δεν φέρει αυτοκίνητο (NO)
)
)

;;;TESTS
(in '(0 (P1 YES) E (P2 YES) (P3 YES) ) ) ; δεν υπάρχει αυτοκίνητο να εισέλθει [0] - τελική
κατάσταση
(in state) ; δεν υπάρχει πλατφόρμα [E] στο χώρο εισόδου - αρχική
κατάσταση
(in '(2 (P1 YES) E (P2 NO) (P3 NO) ) ) ; υπάρχει πλατφόρμα στο χώρο εισόδου αλλά φέρει
αυτοκίνητο [YES]
(in '(1 (P2 NO) E (P3 NO) (P1 YES) ) ) ; υπάρχει πλατφόρμα στο χώρο εισόδου και δεν φέρει
αυτοκίνητο [NO]
;;;RESULTS
NIL
(2 (P2 YES) E (P3 NO) (P1 NO))
NIL
(0 (P2 YES) E (P3 NO) (P1 YES))

Μεταβλητή Spaces:
Η μεταβλητή Spaces ορίζει τον χώρο του Parking και περιεχει τις γειτνιάσεις που έχει κάθε
χώρος με άλλον.
(setq spaces
'( (1 2 6) ; O χώρος 1 έχει γείτονες τον 2 και τον 6
(2 3 5 1) ; O χώρος 2 έχει γείτονες τον 3 τον 5 και τον 1
(3 4 2) ; O χώρος 3 έχει γείτονες τον 4 και τον 2
(4 5 3) ; O χώρος 4 έχει γείτονες τον 5 και τον 3
(5 6 2 4) ; Ο χώρος 5 έχει γείτονες τον 6 τον 2 και τον 4
(6 1 5) ; Ο χώρος 6 έχει γείτονες τον 1 και τον 5
)
)

5
TΡΟΠΟΣ ΚΩΔΙΚΟΠΟΙΗΣΗΣ ΚΑΤΑΣΤΑΣΗΣ

ΟΡΙΣΜΟΣ ΚΑΤΑΣΤΑΣΗΣ
Μια κατάσταση του κόσμου του προβλήματος του Parking σε μια δεδομένη στιγμή
προσδιορίζεται τόσο από τη θέση της κενής πλατφόρμας σε κάποιο από τους χώρους ,και
από ποιες πλατφόρμες έχουν ελεύθερες ή πιασμένες θέσεις.

ΤΡΟΠΟΣ ΚΩΔΙΚΟΠΟΙΗΣΗΣ
Το πρόβλημα σε αυτή τη μορφή αποτελείται από 4 χώρους με 3 πλατφόρμες και έναν χώρο
υποδοχής , και μπορούμε να κωδικοποιήσουμε μία κατάσταση μέσα σε μία λίστα 5 στοιχείων.
Το πρώτο στοιχείο της λίστας δηλώνει τον αριθμο των διαθέσιμων ελευθέρων θέσεων και το
οποίο δεν μετακινείται μέσα στην λίστα. Επειτα υπάρχει ένα γράμμα Ε που δηλώνει αν ο
χώρος είναι κενός ,και τα υπόλοιπα στοιχεία έχουν την μορφή λίστας με 2 στοιχεία που
αναφέρουν την πλατφόρμα και αν έχει ελεύθερη θέση στον συγκεκριμένο χώρο. Για
παράδειγμα ( 3 E (P1 NO) (P2 NO) (P3 NO) )
ΠΑΡΑΔΕΙΓΜΑ ΕΠΙΤΡΕΠΤΩΝ ΚΑΤΑΣΤΑΣΕΩΝ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ
1. ( 5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO) ) : υπάρχουν 5 ελεύθερες θέσεις, ο χώρος 1
είναι κενός και οι υπόλοιποί χώροι έχουν πλατφόρμα.
2. ( 0 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO) ) : δεν υπάρχουν ελεύθερες θέσεις, ο
χώρος 1 είναι κενός και οι υπόλοιποί χώροι έχουν πλατφόρμα.
3. ( 0 (P1 NO) Ε (P2 NO) (P3 NO) (P4 NO) (P5 NO)) : δεν υπάρχουν ελεύθερες θέσεις, ο χώρος
1 έχει την πλατφόρμα 1, ο χώρος 2 είναι κενός και οι υπόλοιποι χώροι έχουν πλατφόρμες.

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΜΕ ΤΗΝ DFS

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

SearchProblem
Αρχικοποιεί το πρόβλημα δημιουργώντας το αρχικό μέτωπο, τον στόχο και το κλειστό σύνολο
και καλεί την FindSolution με αυτές τις αρχικοποιημένες τιμές.

FindSolution_
Είναι συνάρτηση η οποία καλεί αναδρομικά την “ExpandFront” που κατευθύνει την ανάπτυξη
του δέντρου αναζήτησης.

6
MakeFront
Αρχικοποιεί τη λίστα για το μέτωπο, δηλαδή βάζει την πρώτη κατάσταση (state) μέσα σε μια
λίστα καθιστώντας την αρχικό μέτωπο.

ExpandFront
Καλεί την finfchildren με μια γονική κατάσταση για να βρει τις καταστάσεις-παιδιά και αφού
καλέσει τη συνάρτηση RemoveNils για να αφαιρεθούν τα παιδιά που είναι NIL προσθέτει τα
υπόλοιπα στην αρχή του μετώπου, αφαιρώντας το γονικό κόμβο. Η συνάτηση
διαφοποποιείται ανάλογα αν αλλάξει η μέθοδος αναζήτησης.

FindGoal
Η συνάρτηση FindGoal ελέγχει αν τα αμάξια που περιμένουν για είσοδο είναι 0 και αν ισχύει
επιστρέφει T αλλιώς επιστρέφει F.

(defun FindGoal(x)
(cond
((> (car x) 0) 'F) ; αν το πρώτο στοιχείο του x είναι αρνητικό επιστρέφει F
((< (car x) 0) 'F) ; αν το πρώτο στοιχείο του x είναι μεγαλύτερο του 0 επιστρέφει F
(T 'T) ; αν είναι 0 επιστρέφει Τ
)
)

Εξαντλητικοί Έλεγχοι Ορθότητας


DFS
Κλήση της DFS
(SearchProblem '(5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)) 'dfs ) ;; παράμετροι στη σειρά:
node method

Αν γίνει trace οι συναρτήσεις SearchProblel κι κυρίως η FindSolution που είναι η βασική


αναδρομική συνάρτηση της αναζήτησης θα πάρουμε τα παρακάτω αποτελέσματα:

0 FINDSOLUTION > ...


>> FRONT : ((5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)))
>> CLOSED : NIL
>> METHOD : DFS
1 FINDSOLUTION > ...
>> FRONT : ((5 (P1 NO) E (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5 (P5 NO) (P1 NO) (P2 NO) (P3 NO) (P4
NO) E))
>> CLOSED : ((5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)))

7
>> METHOD : DFS
2 FINDSOLUTION > ...
>> FRONT : ((4 (P1 YES) E (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5 (P1 NO) (P2 NO) E (P3 NO) (P4 NO)
(P5 NO)) (5 (P1 NO) (P4 NO) (P2 NO) (P3 NO) E (P5 NO)) (5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO))
(5 (P5 NO) (P1 NO) (P2 NO) (P3 NO) (P4 NO) E))
>> CLOSED : ((5 (P1 NO) E (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO)
(P5 NO)))
>> METHOD : DFS
3 FINDSOLUTION > ...
>> FRONT : ((4 (P1 YES) (P2 NO) E (P3 NO) (P4 NO) (P5 NO)) (4 (P1 YES) (P4 NO) (P2 NO) (P3 NO)
E (P5 NO)) (4 E (P1 YES) (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5 (P1 NO) (P2 NO) E (P3 NO) (P4 NO) (P5
NO)) (5 (P1 NO) (P4 NO) (P2 NO) (P3 NO) E (P5 NO)) (5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5
(P5 NO) (P1 NO) (P2 NO) (P3 NO) (P4 NO) E))
>> CLOSED : ((4 (P1 YES) E (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5 (P1 NO) E (P2 NO) (P3 NO) (P4 NO)
(P5 NO)) (5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)))
……………………………………..

Και η λύση είναι:


………….
3 FINDSOLUTION < ...
<< VALUE-0 : (0 (P5 YES) E (P1 YES) (P2 YES) (P3 YES) (P4 YES))
2 FINDSOLUTION < ...
<< VALUE-0 : (0 (P5 YES) E (P1 YES) (P2 YES) (P3 YES) (P4 YES))
1 FINDSOLUTION < ...
<< VALUE-0 : (0 (P5 YES) E (P1 YES) (P2 YES) (P3 YES) (P4 YES))
0 FINDSOLUTION < ...
<< VALUE-0 : (0 (P5 YES) E (P1 YES) (P2 YES) (P3 YES) (P4 YES))

Αποτέλεσμα:
(0 (P5 YES) E (P1 YES) (P2 YES) (P3 YES) (P4 YES))

Εξαντλητικοί Έλεγχοι Ορθότητας:

(SearchProblem '(0 E (P1 YES) (P2 YES) (P3 YES) (P4 YES) (P5 YES) ) 'dfs ) ; όταν δεν περιμένει
κανένα αμάξι και όλες οι θέσεις είναι γεμάτες
(SearchProblem '(2 (P1 YES) E (P2 YES) (P3 NO) (P4 YES) (P5 NO) ) 'dfs ) ;όταν περιμένουν δυο
αμαξια για εισοδο
(SearchProblem '(1 (P1 NO) E (P2 NO) (P3 NO) (P4 YES) (P5 NO) ) 'dfs ); όταν περιμένει ένα αμάξι
για είσοδο και υπάρχουν 4 ελεύθερες θέσεις

Αποτελέσματα:
(0 E (P1 YES) (P2 YES) (P3 YES) (P4 YES) (P5 YES)) ; επέστρεψε το ίδιο με την είσοδο γιατί δεν
είχε να κανει τίποτα
(0 (P5 YES) E (P1 YES) (P2 YES) (P3 YES) (P4 YES)) ; έβαλε τα αμάξια που περίμεναν στις 2
άδειες θέσεις
(0 (P1 YES) E (P2 NO) (P3 NO) (P4 YES) (P5 NO)) ;έβαλε το αμάξι που περίμενε στην θέση P1

8
ΠΡΩΤΑ ΣΕ ΒΑΘΟΣ ΑΝΑΖΗΤΗΣΗ (DFS) ΜΕ ΠΑΡΑΚΟΛΟΥΘΗΣΗ
ΜΕΤΩΠΟΥ ΚΑΙ ΟΥΡΑΣ

Για να δουλέψει το Front and Queue πρόσθεσα τους τελεστές του προβλήματος και την
συνάρτηση findchildren, έπειτα αφαίρεσα την goal από τα ορίσματα της searchProblem και
της FindSolution. Επειτα στην Findsolution εκεί που έλεγε

((equal (car front) goal) το άλλαξα ώστε να ελέγχει αν δεν έχει αλλά αμάξια στην είσοδο ,και
έπειτα πρόσθεσα την μέθοδο BFS στην ExpandQueue και στην ExtendQueue.

Εξαντλητικοί Έλεγχοι Ορθότητας


DFS
Είσοδος: (SearchProblem '(0 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO) ) 'dfs )
Αποτέλεσμα: ((0 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)))

Είσοδος: (SearchProblem '(2 (P1 YES) E (P2 ΝΟ) (P3 ΝΟ) ) 'dfs )
Αποτέλεσμα: ((2 (P1 YES) E (P2 YES) (P3 NO) (P4 YES) (P5 NO)) (2 (P1 YES) (P2 YES) E (P3 NO) (P4
YES) (P5 NO)) (2 (P1 YES) (P2 YES) (P3 NO) E (P4 YES) (P5 NO)) …….(1 E (P5 NO) (P1 YES) (P2 YES)
(P3 YES) (P4 YES)) (1 (P5 NO) E (P1 YES) (P2 YES) (P3 YES) (P4 YES)) (0 (P5 YES) E (P1 YES) (P2 YES)
(P3 YES) (P4 YES)))

Είσοδος: (SearchProblem '(1 (P2 ΝΟ) E (P3 ΝΟ) (P1 YES) ) 'dfs )
Αποτέλεσμα: ((1 (P1 ΝΟ) E (P2 YES) (P3 NO) (P4 YES) (P5 NO)) (0 (P1 YES) E (P2 YES) (P3
NO) (P4 YES) (P5 NO)))

BFS
Είσοδος: (SearchProblem '(0 (P1 YES) E (P2 YES) (P3 YES) ) 'bfs )
Αποτέλεσμα: ((0 (P1 YES) E (P2 YES) (P3 YES)))

Είσοδος: (SearchProblem '(2 (P1 YES) E (P2 ΝΟ) (P3 ΝΟ) ) 'bfs )
Αποτέλεσμα: ((2 (P1 YES) E (P2 ΝΟ) (P3 ΝΟ)) (2 E (P1 YES) (P2 ΝΟ) (P3 ΝΟ)) (2 (P3 ΝΟ) (P1
YES) (P2 ΝΟ) E) (1 (P3 YES) (P1 YES) (P2 ΝΟ) E) (1 (P3 YES) (P1 YES) E (P2 ΝΟ)) (1 (P3 YES) E
(P1 YES) (P2 ΝΟ)) (1 E (P3 YES) (P1 YES) (P2 ΝΟ)) (1 (P2 ΝΟ) (P3 YES) (P1 YES) E) (0 (P2 YES)
(P3 YES) (P1 YES) E))

Είσοδος: : (SearchProblem '(1 (P2 ΝΟ) E (P3 ΝΟ) (P1 YES) ) 'dfs )
Αποτέλεσμα: ((1 (P2 ΝΟ) E (P3 ΝΟ) (P1 YES)) (0 (P2 YES) E (P3 ΝΟ) (P1 YES)))

9
ΑΛΓΟΡΙΘΜΟΙ ΕΥΡΙΣΤΙΚΉΣ ΑΝΑΖΉΤΗΣΗΣ
Ευριστικός μηχανισμός (heuristic) είναι µία στρατηγική, βασισμένη στη γνώση για το συγκεκριμένο
πρόβλημα, η οποία χρησιμοποιείται σα βοήθημά στη γρήγορη επίλυσή του.

• Ο ευριστικός µηχανισµός υλοποιείται µε ευριστική συνάρτηση (heuristic function), που έχει


πεδίο ορισµού το σύνολο των καταστάσεων ενός προβλήµατος και πεδίο τιµών το σύνολο
τιµών που αντιστοιχεί σε αυτές.
• Ευριστική τιµή (heuristic value) είναι η τιµή της ευριστικής συνάρτησης και εκφράζει το πόσο
κοντά βρίσκεται µία κατάσταση σε µία τελική.
• Η ευριστική τιµή δεν είναι η πραγµατική τιµή της απόστασης από µία τερµατική κατάσταση,
αλλά µία εκτίµηση (estimate) που πολλές φορές µπορεί να είναι και λαν- θασµένη

ΑΛΓΟΡΙΘΜΟΣ ΠΡΩΤΗΣ ΚΑΛΥΤΕΡΗΣ ΑΝΑΖΗΤΗΣΗΣ (bestfs)

• Γενική ιδέα: Οι καταστάσεις στο µέτωπο αναζήτησης ταξινο µούνται βάση της τι µής της
ευρετικής συνάρτησης, ενώ σε κάθε επανάληψη επιλέγεται αυτή µ ε την µικρότερη ευρετική
τιµή.
• Πλεονεκτήµατα:
o Προσπαθεί να δώσει µια γρήγορη λύση σε κάποιο πρόβληµα. Το αν τα καταφέρει ή
όχι εξαρτάται πολύ από τον ευρετικό µηχανισµό.
o Είναι πλήρης.
• Μειονεκτήµατα:
o Το µέτωπο αναζήτησης µεγαλώνει µε υψηλό ρυθµό και µαζί του ο χώρος
που χρειάζεται για την αποθήκευσή του, καθώς και ο χρόνος για την
επεξεργασία των στοιχείων του.
o ∆εν εγγυάται ότι η λύση που θα βρεθεί είναι η βέλτιστη.

ΑΝΑΖΉΤΗΣΗ ΜΕ BESTFS ΣΤΟ ΠΡΌΒΛΗΜΑ ΛΑΒΎΡΙΝΘΟΥ


Στην BESTFS επιλέγεται στο μέτωπο και στην ουρά οι μικρότερες τιμές για είσοδο.

Συνάρτηση carsfront
(defun cars1(state1 state2)
(< (car state1) (car state2)) ;έλεγχος αν το πρώτο στοιχείο του state1 είναι μικρότερο του state2
)
H συνάρτηση carsfront συγκρίνει στο μέτωπο δυο state και αν το πρώτο στοιχείο της πρώτης state
είναι μικρότερο της δεύτερης state επιστρέφει True αλλιώς επιστρέφει False.

Συνάρτηση carsqueue
(defun carsqueue(state1 state2)
(< (caar state1) (caar state2)) ;έλεγχος αν το πρώτο στοιχείο του state1 είναι μικρότερο του state2
)

10
H συνάρτηση carsqueue συγκρίνει στην ουρά δυο state και αν το πρώτο στοιχείο της πρώτης state
είναι μικρότερο της δεύτερης state επιστρέφει True αλλιώς επιστρέφει False.

Οι δυο συναρτήσεις του κώδικα που πρέπει να προσαρμοστούν είναι:


(defun ExpandFront (front method)
(cond
((eq method 'DFS) (append (removeNils (findchildren (car front))) (cdr front)))
( (eq method 'BFS) (append (cdr front)(removeNils (findchildren (car front) )) ))
( (eq method 'BESTFS) (sort (append (removeNils (findchildren (car front))) (cdr front))#'cars1) )
(T "other methods to be added")
)
)

(defun ExtendQueue (queue method)


(cond
((eq method 'DFS) (append (growPath (car queue)) (rest queue)) )
((eq method 'BFS) (append (rest queue) (growPath (car queue))) )
((eq method 'BESTFS) (sort (append (growPath (car queue) ) (rest queue) )#'cars2 ))
(T "other methods to be added" )
)
)

Η FindChildren προσαρμόστηκε ώστε να δουλεύει σωστά, το in μπήκε τελευταίο.

FindChildren
(defun findchildren(state)
(list
(TR1 state)
(TR2 state)
(TR3 state)
(IN state)
))

Εξαντλητικοί Έλεγχοι Ορθότητας


BESTFS
Κλήση της DFS
(SearchProblem '(5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO) ) 'bestfs ) ;; παράμετροι
στη σειρά: node method

11
0 FINDSOLUTION > ...
>> FRONT : ((5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)))
>> QUEUE : (((5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO))))
>> CLOSED : NIL
>> METHOD : BESTFS
1 FINDSOLUTION > ...
>> FRONT : ((5 (P1 NO) E (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5 (P5 NO) (P1 NO) (P2 NO) (P3 NO) (P4
NO) E))
>> QUEUE : (((5 (P1 NO) E (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO)
(P5 NO))) ((5 (P5 NO) (P1 NO) (P2 NO) (P3 NO) (P4 NO) E) (5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5
NO))))
>> CLOSED : ((5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)))
>> METHOD : BESTFS

Και η λύση είναι:

1 FINDSOLUTION < ...


<< VALUE-0 : ((5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)) …………..(0 (P5 YES) E (P1
YES) (P2 YES) (P3 YES) (P4 YES)))
0 FINDSOLUTION < ...
<< VALUE-0 : ((5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)) ………(0 (P5 YES) E (P1 YES)
(P2 YES) (P3 YES) (P4 YES)))

Αποτέλεσμα:
((5 E (P1 NO) (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (5 (P1 NO) E (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (4 (P1
YES) E (P2 NO) (P3 NO) (P4 NO) (P5 NO)) (4 (P1 YES) (P2 NO) E (P3 NO) (P4 NO) (P5 NO)) (4 (P1 YES)
(P2 NO) (P3 NO) E (P4 NO) (P5 NO)) (4 (P1 YES) (P2 NO) (P3 NO) (P4 NO) E (P5 NO)) (4 (P1 YES) (P2 NO)
(P3 NO) (P4 NO) (P5 NO) E) (4 E (P2 NO) (P3 NO) (P4 NO) (P5 NO) (P1 YES)) (4 (P2 NO) E (P3 NO) (P4
NO) (P5 NO) (P1 YES)) (3 (P2 YES) E (P3 NO) (P4 NO) (P5 NO) (P1 YES)) (3 (P2 YES) (P3 NO) E (P4 NO)
(P5 NO) (P1 YES)) (3 (P2 YES) (P3 NO) (P4 NO) E (P5 NO) (P1 YES)) (3 (P2 YES) (P3 NO) (P4 NO) (P5 NO)
E (P1 YES)) (3 (P2 YES) (P3 NO) (P4 NO) (P5 NO) (P1 YES) E) (3 E (P3 NO) (P4 NO) (P5 NO) (P1 YES) (P2
YES)) (3 (P3 NO) E (P4 NO) (P5 NO) (P1 YES) (P2 YES)) (2 (P3 YES) E (P4 NO) (P5 NO) (P1 YES) (P2
YES)) (2 (P3 YES) (P4 NO) E (P5 NO) (P1 YES) (P2 YES)) (2 (P3 YES) (P4 NO) (P5 NO) E (P1 YES) (P2
YES)) (2 (P3 YES) (P4 NO) (P5 NO) (P1 YES) E (P2 YES)) (2 (P3 YES) (P4 NO) (P5 NO) (P1 YES) (P2 YES)
E) (2 E (P4 NO) (P5 NO) (P1 YES) (P2 YES) (P3 YES)) (2 (P4 NO) E (P5 NO) (P1 YES) (P2 YES) (P3 YES))
(1 (P4 YES) E (P5 NO) (P1 YES) (P2 YES) (P3 YES)) (1 (P4 YES) (P5 NO) E (P1 YES) (P2 YES) (P3 YES)) (1
(P4 YES) (P5 NO) (P1 YES) E (P2 YES) (P3 YES)) (1 (P4 YES) (P5 NO) (P1 YES) (P2 YES) E (P3 YES)) (1
(P4 YES) (P5 NO) (P1 YES) (P2 YES) (P3 YES) E) (1 E (P5 NO) (P1 YES) (P2 YES) (P3 YES) (P4 YES)) (1
(P5 NO) E (P1 YES) (P2 YES) (P3 YES) (P4 YES)) (0 (P5 YES) E (P1 YES) (P2 YES) (P3 YES) (P4 YES)))

Εξαντλητικοί Έλεγχοι Ορθότητας:

(SearchProblem '(0 E (P1 YES) (P2 YES) (P3 YES) (P4 YES) (P5 YES) ) 'bestfs )
(SearchProblem '(2 (P1 YES) E (P2 YES) (P3 NO) (P4 YES) (P5 NO) ) 'bestfs)

12
(SearchProblem '(1 (P1 NO) E (P2 NO) (P3 NO) (P4 YES) (P5 NO) ) 'bestfs)

Αποτελέσματα:
((0 E (P1 YES) (P2 YES) (P3 YES) (P4 YES) (P5 YES)))
((2 (P1 YES) E (P2 YES) (P3 NO) (P4 YES) (P5 NO)) …..(0 (P5 YES) E (P1 YES) (P2 YES) (P3 YES) (P4
YES)))
((1 (P1 NO) E (P2 NO) (P3 NO) (P4 YES) (P5 NO)) (0 (P1 YES) E (P2 NO) (P3 NO) (P4 YES) (P5 NO)))

13