Συνέπεια Τόξου (Arc Consistency) Προβλήματα Ικανοποίησης Περιορισμών Εργασία 2 Συνέπεια Τόξου (Arc Consistency) ΤΜΗΜΑ ΜΠΕΣ
Συνέπεια Τόξου (Arc Consistency) Μια μεταβλητή X είναι arc consistent αν για κάθε άλλη μεταβλητή Y ισχύει το εξής: Για κάθε τιμή a της Χ υπάρχει τουλάχιστον μια τιμή b της Υ τέτοια ώστε η a και b να είναι συμβατές Τότε λέμε ότι η a υποστηρίζει (supports) την b Ένας αλγόριθμος που εφαρμόζει arc consistency σβήνει τιμές από το πεδίο ορισμού μιας μεταβλητής όταν αυτές δεν υποστηρίζονται από καμία τιμή σε μια άλλη μεταβλητή Είναι η πιο ευρέως διαδεδομένη τεχνική συνέπειας (απομακρύνει αρκετές τιμές με χαμηλό κόστος) Επεξεργάζεται έναν-έναν τους δυαδικούς περιορισμού a b c a b c a b c X Y Z ΤΜΗΜΑ ΜΠΕΣ
Εργασία 2 - Arc Consistency Υλοποιήστε πρόγραμμα που εφαρμόζει συνέπεια τόξου σε δυαδικά προβλήματα ικανοποίησης περιορισμών χρησιμοποιώντας τον αλγόριθμο AC-3 Τα προβλήματα ικανοποίησης περιορισμών που θα σας απασχολήσουν ανήκουν στην κατηγορία των radio links frequency assignment problems (RLFAPs) στόχος σε ένα τέτοιο πρόβλημα είναι να ανατεθούν συχνότητες σε ένα σύνολο ραδιοφωνικών πομπών έτσι ώστε να μην υπάρχουν παρεμβολές ανάμεσα τους Υπάρχουν δύο είδη δυαδικών περιορισμών: |x - y| > a x - y = a ,όπου a μια σταθερά ΤΜΗΜΑ ΜΠΕΣ
Εργασία 2 - Arc Consistency Το σύνολο των RLFAP προβλημάτων στα οποία θα τεστάρετε τον αλγόριθμο σας βρίσκονται στο αρχείο RLFAPs.rar (http://www.icsd.aegean.gr/lecturers/konsterg/teaching/AI/AI.html) τα προβλήματα έχουν ονόματα όπως scen3-f11 και graph8-f10. Για κάθε πρόβλημα υπάρχουν 3 αρχεία με ονόματα όπως dom3-f11, var3-f11, ctr3-11 τα οποία περιέχουν τα πεδία τιμών, τις μεταβλητές, και τους περιορισμούς του προβλήματος αντίστοιχα. Το πρόγραμμα σας πρέπει να διαβάζει τα 3 αρχεία και να αποθηκεύει τις μεταβλητές με τα πεδία τιμών τους και τους περιορισμούς σε κατάλληλες δομές δεδομένων Σε κάθε αρχείο dom στην πρώτη γραμμή αναγράφεται το πλήθος x των διαφορετικών πεδίων τιμών που υπάρχουν. Σε κάθε μια από τις x επόμενες γραμμές δίνεται ένα πεδίο τιμών. Ο πρώτος αριθμός είναι ο αύξων αριθμός, μετά ακολουθεί το πλήθος των τιμών, και ακολουθούν οι τιμές. Π.χ: 4 6 142 170 240 380 408 478 τιμές 5ο πεδίο τιμών πλήθος τιμών ΤΜΗΜΑ ΜΠΕΣ
Εργασία 2 - Arc Consistency Σε κάθε αρχείο var στην πρώτη γραμμή αναγράφεται το πλήθος n των μεταβλητών που υπάρχουν στο πρόβλημα. Σε κάθε μια από τις n επόμενες γραμμές δίνεται o αύξων αριθμός της μεταβλητής και το πεδίο τιμών της. Π.χ: 680 0 0 1 0 2 0 3 0 4 1 5 0 6 0 7 0 ... Υπάρχουν 680 μεταβλητές. Η μεταβλητή 0 έχει πεδίο τιμών τύπου 0 (βλέπε dom αρχείο). H μεταβλητή 4 έχει πεδίο τιμών τύπου 1, κτλ. ΤΜΗΜΑ ΜΠΕΣ
Εργασία 2 - Arc Consistency Σε κάθε αρχείο ctr στην πρώτη γραμμή αναγράφεται το πλήθος e των περιορισμών που υπάρχουν στο πρόβλημα. Σε κάθε μια από τις e επόμενες γραμμές δίνεται ένας περιορισμός. για κάθε περιορισμό οι δύο πρώτοι αριθμοί είναι οι μεταβλητές που συμμετέχουν στον περιορισμό, το επόμενο σύμβολο είναι ο τύπος του περιορισμού (> ή =) και τέλος δίνεται η σταθερά. Π.χ. 5 378 > 247 σταθερά ο περιορισμός είναι τύπου > συμμετέχουν οι μεταβλητές 5 και 378 Ο περιορισμός είναι ο |x5 – x378| > 247 ΤΜΗΜΑ ΜΠΕΣ
Εργασία 2 - Arc Consistency Το πρόγραμμα σας πρέπει να δέχεται ως είσοδο από τον χρήστη το όνομα ενός RLFA προβλήματος, να διαβάζει τα κατάλληλα αρχεία, και να εφαρμόζει arc consistency στο πρόβλημα. πρέπει να μπορεί να το κάνει αυτό για όλα τα RLFAPs που σας δίνονται Αφού ολοκληρωθεί η εφαρμογή του arc consistency σε ένα πρόβλημα πρέπει να τυπώνεται το πλήθος των τιμών που διαγράφηκαν συνολικά. Σε περίπτωση που διαγραφούν όλες οι τιμές από το πεδίο τιμών μιας μεταβλητής πρέπει να τυπώνεται μήνυμα που ενημερώνει ότι το πρόβλημα δεν έχει λύση. Η υλοποίηση μπορεί να γίνει σε μια γλώσσα όπως η Java, η C, και η C++ σε ομάδες ως και δύο ατόμων. Προθεσμία παράδοσης άσκησης: 17/12/2008. Τρόπος παράδοσης: με υποχρεωτική παρουσίαση σε οποιοδήποτε εργαστήριο μέχρι τις 17/12 και με email στο konsterg@aegean.gr ΤΜΗΜΑ ΜΠΕΣ
Ο Arc Consistency Αλγόριθμος AC-3 procedure AC-3(a CSP) Insert in S all the (directed) arcs of the problem; while S not empty do select and remove an arc (x,y) from S; REVISE(x,y) if REVISE(x,y) deleted at least one value from the domain of x then add to S the set of all arcs (z,x) of the problem (the ones that go into x); procedure REVISE (x,y) for each value a in domain of x that has not been deleted do for each value b in the domain of y that has not been deleted if the pair (a,b) is consistent with respect to the constraint (x,y) then break; if no value of y is consistent with a then delete a from the domain of x; ΤΜΗΜΑ ΜΠΕΣ
Θέματα Υλοποίησης Η δομή S μπορεί να υλοποιηθεί ως stack ή (καλύτερα) ως queue Αρχικά στην S εισάγονται όλα τα κατευθυνόμενα τόξα Αυτό σημαίνει ότι για έναν περιορισμό (x,y) θα εισαχθούν στην S τόσο το τόξο (x,y) όσο και το (y,x) Γιατί γίνεται αυτό? Τι άλλες δομές δεδομένων χρειάζεστε? Για κάθε μεταβλητή έναν (δυναμικό) πίνακα όπου κρατάτε τις τιμές της Ένα δυσδιάστατο (n*n) πίνακα constraints για τους περιορισμούς αν στη θέση constraints[i][j] υπάρχει 0 σημαίνει ότι δεν υπάρχει περιορισμός ανάμεσα στις xi και xj. Αν υπάρχει 1 σημαίνει ότι υπάρχει περιορισμός |xi – xj| > a. Αν υπάρχει 2 τότε υπάρχει περιορισμός |xi – xj| = a Προσοχή στη συμμετρία του πίνακα! ΤΜΗΜΑ ΜΠΕΣ