Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεAnstiss Panos Τροποποιήθηκε πριν 10 χρόνια
1
Αλγόριθμοι CSPs – Κώδικας Μάθημα Τεχνητής Νοημοσύνης ΥΣ02 Χειμερινό εξάμηνο 2008-2009
2
26/11/2008 CSPLIB Βιβλιοθήκη με ρουτίνες για την επίλυση δυαδικών προβλημάτων ικανοποίησης περιορισμών http://ai.uwaterloo.ca/~vanbeek/software.h tml
3
26/11/2008 Βασικές δομές δεδομένων και συναρτήσεις N : αριθμός μεταβλητών K : το μέγεθος του πεδίου ορισμού (θεωρούμε ίδιο μέγεθος για κάθε πεδίο ορισμού) current : μεταβλητή που περιέχει το νούμερο της τρέχουσας μεταβλητής v : μονοδιάστατος πίνακας μεγέθους Ν που περιέχει τις τρέχουσες αναθέσεις τιμών των μεταβλητών consistent(current) : επιστρέφει 1 εάν η τρέχουσα ανάθεση τιμής είναι συνεπής με τις προηγούμενες αναθέσεις ή 0 διαφορετικά check(i,j) : επιστρέφει 1 εάν ο έλεγχος συνέπειας μεταξύ των v[i] και v[j] επιτύχει, διαφορετικά 0 solution() : επεξεργάζεται τη λύση που βρίσκεται στον πίνακα v και εάν μόνο μία λύση ζητείται τερματίζει τον αλγόριθμο. empty(S): S = {}. add(x, S): προσθέτει το x στο σύνολο S. merge(S 1, S 2 ): S 1 := S 1 U S 2. max(S): επιστρέφει το μέγιστο στοιχείο του συνόλου S. Η κύρια συνάρτηση κάθε αλγορίθμου επιστρέφει την μεταβλητή (δηλαδή το νούμερο της μεταβλητής) που επιλέχθηκε ως σημείο υπαναχώρησης
4
26/11/2008 Χρονολογική υπαναχώρηση (Chronological Backtracking - BT) // τέλος // για κάθε τιμή του πεδίου ορισμού // έλεγξε αν είναι συνεπής και αν ναι // συνέχισε με την επόμενη μεταβλητή // βάλε αυτήν την τιμή στον v // για κάθε μία από τις προηγούμενες //μεταβλητές // έλεγξε εάν είναι συνεπής Προσοχή: έλεγχος συνέπειας σε σχέση με τις ήδη αποτιμημένες μεταβλητές
5
26/11/2008 Επιπλέον δομές και συναρτήσεις για τον πρώιμο έλεγχο domains : πίνακας ακεραίων μεγέθους Ν × Κ. Κάθε στοιχείο του πίνακα δείχνει ποια μεταβλητή προκάλεσε αφαίρεση της τιμής αυτής από το πεδίο ορισμού της μεταβλητής, αλλιώς περιέχει 0. checking : πίνακας boolean μεγέθους Ν × Ν, όπου η γραμμή δηλώνει τη μεταβλητή που αναθέτουμε τιμή και η στήλη δηλώνει τη μεταβλητή της οποίας πρέπει να αφαιρέσουμε κάποια τιμή από το πεδίο ορισμού. Αρχικά και οι δύο πίνακες μηδενίζονται. consistent(current): ελέγχει τη μεταβλητή current με τις επόμενες μεταβλητές και επιστρέφει τη μεταβλητή η οποία έμεινε με κενό πεδίο ορισμού διαφορετικά 0. restore(i): αναιρεί ό,τι ενέργεια είχε γίνει λόγω της ανάθεσης τιμής της μεταβλητής x i.
6
26/11/2008 Πρώιμος έλεγχος I (Forward Checking - FC) // εάν αφαιρέσαμε τιμή από την //μεταβλητή j // για όλες τις τιμές που της //αφαιρέσαμε λόγω της //μεταβλητής i της //ξαναπροσθέτουμε
7
26/11/2008 Πρώιμος έλεγχος II (Forward Checking - FC) // εάν υπάρχει η τιμή στο πεδίο ορισμού // εάν δεν είναι συνεπής η τιμή // αφαίρεσέ την // και σημείωσέ το // αφαιρέσαμε όλες τις τιμές και //άρα το πεδίο ορισμού μένει κενό
8
26/11/2008 Πρώιμος έλεγχος IΙΙ (Forward Checking - FC) // τέλος // για κάθε τιμή στο πεδίο ορισμού // εάν η τιμή έχει αφαιρεθεί από το πεδίο // ορισμού αδιαφορεί για την τιμή αυτή // έλεγχος συνέπειας // εάν η τιμή είναι συνεπής // συνέχισε με την επόμενη μεταβλητή // αλλιώς αναίρεσε ό,τι έκανες Προσοχή: έλεγχος συνέπειας σε σχέση με τις μη αποτιμημένες μεταβλητές
9
Επιπλέον δομές και συναρτήσεις για την υπαναχώρηση με άλμα max_check : πίνακας ακεραίων μεγέθους Ν. Κάθε στοιχείο του πίνακα δείχνει σε ποια μεταβλητή θα υπαναχωρήσουμε σε περίπτωση αδιεξόδου, αλλιώς περιέχει 0. conf_set : πίνακας ακεραίων μεγέθους Ν×N. Κάθε γραμμή περιέχει το σύνολο συγκρούσεων για κάθε μεταβλητή. 26/11/2008
10
Υπαναχώρηση με άλμα (Backjumping - BJ) // για κάθε μία από τις προηγούμενες //μεταβλητές // αν δεν είναι συνεπής // αν είναι συνεπής, θέλουμε //σημείο υπαναχώρησης να //είναι το αμέσως προηγούμενο Αν δεν είναι συνεπής και είναι πιο κοντά στην τρέχουσα μεταβλητή κρατάμε αυτή τη μεταβλητήσ
11
26/11/2008 Υπαναχώρηση με άλμα II (Backjumping - BJ) // τέλος // αν δοκίμασες όλες τις τιμές // επέστρεψε το σημείο υπαναχώρησης // αν το σημείο υπαναχώρησης δεν είναι το // τωρινό τότε πήγαινε σε αυτό
12
26/11/2008 Υπαναχώρηση με άλμα κατευθυνόμενο από τη σύγκρουση I (Conflict-directed backjumping - CBJ) // άδειασε το conflict set της τωρινής μεταβλητής // αν το σημείο υπαναχώρησης δεν είναι το // τωρινό τότε πήγαινε σε αυτό // σημείο υπαναχώρησης το h // απορρόφηση του συνόλου // συγκρούσεων της current // από την h
13
26/11/2008 Υπαναχώρηση με άλμα κατευθυνόμενο από τη σύγκρουση II (Conflict-directed backjumping - CBJ) // πρόσθεσε το i στο σύνολο // συγκρούσεων και επέστρεψε
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.