Προβλήµατα Ικανοποίησης Περιορισµών Προβλήµατα ικανοποίησης περιορισµών Λογικός προγραµµατισµός µε περιορισµούς Προβλήµατα Ικανοποίησης Περιορισµών Ένα πρόβληµα ικανοποίησης περιορισµών (constraint satisfaction problem) αποτελείται από: Ένα σύνολο n µεταβλητών V 1, V 2,...,V n. Ένα σύνολο n πεδίων τιµών D 1,...D n, που αντιστοιχούν σε κάθε µεταβλητή έτσι ώστε V i D i, και Ένα σύνολο σχέσεων (περιορισµών) C 1, C 2,...C m όπου C i (V k,...,v m ) µια σχέση µεταξύ των µεταβλητών του προβλήµατος. Λύση αποτελεί µια ανάθεση τιµών στις µεταβλητές του προβλήµατος από τα αντίστοιχα πεδία, έτσι ώστε να ικανοποιούνται οι περιορισµοί Γιάννης Ρεφανίδης 2
Είδη περιορισµών Ανάλογα µε το πόσες µεταβλητές περιλαµβάνει ένας περιορισµός χαρακτηρίζεται ως: µοναδιαίος (unary) όταν περιλαµβάνει µια µεταβλητή, π.χ. V 1 >0 δυαδικός (binary) όταν περιλαµβάνει δύο µεταβλητές, π.χ. V 1 >V 2 ανώτερης τάξης (higher order) όταν περιλαµβάνει περισσότερες, π.χ. V 1 +V 2 +V 3 >0. Γιάννης Ρεφανίδης 3 Εφαρµογές Κατανοµή εργασιών(task allocation) Κατανοµή προσωπικού σε επιχειρήσεις Ωρολόγιο πρόγραµµα (timetable) Γιάννης Ρεφανίδης 4
Παράδειγµα (1/6) Έστω ότι πρέπει να ορισθεί η σειρά µε την οποία θα εκτελεστούν τέσσεριςεργασίεςα, Β, Γ,. Λόγω της φύσης του προβλήµατος, η εργασία Α πρέπει να εκτελεστεί µετά από την, η ΓπριναπότηνΒ, και η Β πριν από την Α. Μεταβλητές: Α, Β, Γ, Πεδία τιµών: D A =D B =D Γ =D ={1,2,3,4} Περιορισµοί: Α Β, Α Γ, Α, Β Γ, Β, Γ Α> Γ<Β Β<Α Γιάννης Ρεφανίδης 5 Παράδειγµα (2/6) Το πρόβληµα έχει τρεις λύσεις, τις ακόλουθες: Α=4, Β=2, Γ=1, =3, δηλαδή η σειρά είναι: ΓΒ Α Α=4, Β=3, Γ=1, =2, δηλαδή η σειρά είναι:γ ΒΑ Α=4, Β=3, Γ=2, =1, δηλαδή η σειρά είναι: ΓΒΑ Το ερώτηµα που τίθεται είναι πώς φθάνει κανείς στις παραπάνω λύσεις. Παραγωγή και δοκιµή Κλασσικοί αλγόριθµοι αναζήτησης Αλγόριθµοι ελέγχου συνέπειας Τοπική αναζήτηση Γιάννης Ρεφανίδης 6
Παραγωγή και οκιµή Η µέθοδος δηµιουργεί όλους τους πιθανούς συνδυασµούς ανάθεσης τιµών. Α=1, Β=1, Γ=1, =1 Α=1, Β=1, Γ=1, =2... Α=4, Β=4, Γ=4, =4 Στο προηγούµενο παράδειγµα οισυνδυασµοί ήταν 4 4 =256. Κάθε συνδυασµός ελέγχεται µέχρις ότου βρεθεί ένας που ικανοποιεί όλους τους περιορισµούς. Μειονέκτηµα: Ελέγχει όλο τον χώρο αναζήτησης. Γιάννης Ρεφανίδης 7 Κλασσικοί Αλγόριθµοι Αναζήτησης Μπορούν να χρησιµοποιηθούν όλοι οι γνωστοί αλγόριθµοι αναζήτησης (κατά βάθος, κατά πλάτος, πρώτα στο καλύτερο κλπ). Στην αρχική κατάσταση οι µεταβλητές δεν έχουν πάρει τιµές. Σε κάθε βήµα δίνουµε µια τιµή σε µια µεταβλητή, αρκεί να µην παραβιάζεται κανένας περιορισµός. Το βάθος του δένδρου αναζήτησης είναι ίσο µε το πλήθος των µεταβλητών. Μειονέκτηµα: Ο έλεγχος για την ικανοποίηση των περιορισµών ενός υποσυνόλου µεταβλητών γίνεται µετά την ανάθεση τιµών σε αυτό το υποσύνολο µεταβλητών. Γιάννης Ρεφανίδης 8
Αλγόριθµοι ελέγχου συνέπειας (1/2) Η βασική ιδέα των αλγορίθµων ελέγχου συνέπειας είναι η όσο το δυνατόν µεγαλύτερη µείωση του χώρου αναζήτησης πριν την ανάθεση τιµών. Γενικός αλγόριθµος: Για κάθε περιορισµό αφαίρεσε από τα πεδία τιµών των µεταβλητών τις τιµές εκείνες που δεν µπορούν να συµµετέχουν στην τελική λύση. Στο µειωµένο χώρο αναζήτησης που προκύπτει από το προηγούµενο βήµα εφάρµοσε έναν κλασσικό αλγόριθµο αναζήτησης για να βρεθεί η λύση (π.χ. πρώτακατάβάθος). Σε κάθε βήµα (ανάθεση τιµής) αυτής της αναζήτησης εφάρµοσε ξανά τον αλγόριθµο ελέγχου συνέπειας έτσι ώστε να αφαιρεθούν τυχόν τιµές από τα πεδία των µεταβλητών οι οποίες δεν µπορούν να συµµετέχουν στην λύση. Γιάννης Ρεφανίδης 9 Γράφος περιορισµών Περιορισµοί: Α > Γ < Β Β < Α Α Α>Β Β<Α Β Β>Γ Γ<Β Γ Α> <Α Γιάννης Ρεφανίδης 10
Παράδειγµα (3/6) Α Β (C1) Β Γ (C4) Α > (C7) Α Γ (C2) Β (C5) Γ < Β (C8) Α (C3) Γ (C6) Β < Α (C9) Τα αρχικά πεδία τιµών των µεταβλητών: Α {1,2,3,4} Β {1,2,3,4} Γ {1,2,3,4} {1,2,3,4} Γιάννης Ρεφανίδης 11 Παράδειγµα (4/6) Λόγω Β < Α (C9), η µεταβλητή Β δε µπορεί σε καµιά περίπτωση να πάρει την τιµή 4, αλλά ούτε και η Α να πάρει την τιµή 1: Α {2,3,4} Β {1,2,3} Γ {1,2,3,4} {1,2,3,4} Λόγω Γ < Β (C8), η Γδενµπορεί να πάρει την τιµή 3 ούτε και την τιµή 4, ενώ η Β δε µπορεί να πάρει την τιµή 1: Α {2,3,4} Β {2,3} Γ {1,2} {1,2,3,4} Γιάννης Ρεφανίδης 12
Παράδειγµα (5/6) Λόγω Α > (C7) η δενµπορεί να πάρει την τιµή 4: Α {2,3,4} Β {2,3} Γ {1,2} {1,2,3} Το πεδίο της Β έχει µεταβληθεί, οπότε ο περιορισµός C9 πρέπει να επανεξεταστεί. Λόγω του Β < Α (C9) δεν µπορεί να υπάρχει η τιµή 2 στο πεδίο της Α: Α {3,4} Β {2,3} Γ {1,2} {1,2,3} Τώρα οι πιθανοί συνδυασµοί γίνονται 2 2 2 3=24, σε σχέση µε τους 256 που υπήρχαν αρχικά. Γιάννης Ρεφανίδης 13 Αλγόριθµοι ελέγχου συνέπειας (2/2) Στο σηµείο αυτό τα πεδία τιµών των µεταβλητών δεν µπορούν να περιοριστούν παραπέρα. Επιλέγεται στην τύχη µια µεταβλητή και της αποδίδεται αυθαίρετα µία από τις τιµές της. Αυτό προκαλεί επιπλέον περιορισµούς στα πεδία των υπολοίπων µεταβλητών Η παραπάνω διαδικασία επαναλαµβάνεται µέχρι: Όλες οι µεταβλητές να πάρουν µία τιµή. Κάποια µεταβλητή να µείνει χωρίς τιµές Το σηµείο αυτό αποτελεί σηµείο υπαναχώρησης Γιάννης Ρεφανίδης 14
Παράδειγµα (6/6) Α {3,4} Β {2,3} Γ {1,2} {1,2,3} Α= 3 Α = 4 Περιορισµοί Γ Β Γ <Β Α > Αποτυχία Α=3 Β {2,3} Γ {1,2} {1,2,3} Α = 4 Β {2,3} Γ {1,2} {1,2,3} Β = 2 Β = 3 Περιορισµοί Γ Β Γ < Β Α = 4 Β = 2 Γ {1,2} {1,2,3} Α = 4 Β = 3 Γ {1,2} {1,2,3} Περιορισµοί Β Λύση: Α=4, Β=2, Γ=1, =3 Γ = 1 Γ = 2 Περιορι σµοί Γ Β Α = 4 Β = 3 Γ = 1 Α = 4 Β = 3 Γ = 2 Περιορισµοί Γ {1,2,3} {1,2,3} Β Γιάννης Ρεφανίδης 15 Λύση: Α=4, Β=3, Γ=1, =2 Λύση: Α=4, Β=3, Γ=2, =1 Παρατηρήσεις Ο γράφος αναζήτησης διασχίζεται συνήθως πρώτα-κατά-βάθος. Ευρετικές τεχνικές για αύξηση της απόδοσης: Επιλέγουµε ναδώσουµε τιµή πρώτα στις µεταβλητές µε τις λιγότερες τιµές. Εναλλακτικά, επιλέγουµε ναδώσουµε τιµή πρώτα στις µεταβλητές εκείνες που συµµετέχουν στους περισσότερους περιορισµούς. Αφού επιλέξουµε µια µεταβλητή, στη συνέχεια επιλέγουµε νατης αναθέσουµε πρώτα την τιµήεκείνηπουπροκαλείτη µικρότερη απόρριψη τιµών από τα πεδία των υπολοίπων µεταβλητών. Γιάννης Ρεφανίδης 16
Παράδειγµα: Το πρόβληµα των 8 βασιλισσών (1/3) Παριστάνουµε το πρόβληµα µε 8 µεταβλητές, µια για κάθε βασίλισσα. Κάθε βασίλισσα είναι σε διαφορετική στήλη. Το πεδίο ορισµού κάθε βασίλισσας είναι οι 8 θέσεις στη στήλη της. Γραφική αναπαράσταση των περιορισµών: 1 2 3 4 5 6 7 8 Q 1 Q 2 Q 3 Q 4 Q 5 Q 6 Q 7 Q 8 Γιάννης Ρεφανίδης 17 Παράδειγµα: Το πρόβληµα των 8 βασιλισσών (2/3) Ανάθεση τιµής στην πρώτη βασίλισσα: Ανάθεση τιµών στις δύο πρώτες βασίλισσες: Γιάννης Ρεφανίδης 18
Παράδειγµα: Το πρόβληµα των 8 βασιλισσών (3/3) Ανάθεση τιµών που δεν οδηγεί σε λύση: Λύση στο πρόβληµα των8 βασιλισσών: Γιάννης Ρεφανίδης 19 Επίλυση µε τοπική αναζήτηση(1/3) Τα προβλήµατα ικανοποίησης περιορισµών µπορούν να αντιµετωπισθούν και µε χρήση τοπικής αναζήτησης (local search). Ως τοπική αναζήτηση θεωρείται ο αλγόριθµος αναρρίχησης λόφων και διάφορες παραλλαγές του, µε χρήση κατάλληλης ευρετικής συνάρτησης. Σε πάρα πολλές περιπτώσεις η τοπική αναζήτηση δίνει εξαιρετικά αποτελέσµατα. Η γενική φιλοσοφία της τοπικής αναζήτησης είναι η εξής: ηµιούργησε µια αρχική ανάθεση τιµών για όλες τις µεταβλητές. Μέτρησε πόσοι περιορισµοί παραβιάζονται. Επέλεξε µια µεταβλητή και άλλαξέ της τη τιµή, έτσι ώστε να µειωθεί κατά το δυνατόν περισσότερο το πλήθος των περιορισµών που παραβιάζονται (ευρετική συνάρτηση). Επανέλαβε τα βήµατα 2 και 3 µέχρι να βρεις λύση. Γιάννης Ρεφανίδης 20
Επίλυση µε τοπική αναζήτηση(2/3) Ξαναθυµίζουµε έναπαράδειγµα από παλαιότερο µάθηµα. Θέλουµε ναβάλουµε 4 βασίλισσες σε µια σκακιέρα 4x4, έτσι ώστε καµία να µην απειλεί τις άλλες. Προφανώς σε κάθε στήλη θα υπάρχει µία µόνο βασίλισσα. Ξεκινάµε µε όλες τις βασίλισσες στην κάτω γραµµή. Σε κάθε βήµα µπορούµε να µετακινήσουµε µια βασίλισσα σέ µια άλλη θέση στη στήλη της, άρα οι δυνατές κινήσεις είναι 4x3=12. Χρησιμοποιούμε ως ευρετική συνάρτηση το πόσες απειλές υπάρχουν κάθε φορά (όλες οι απειλές είναι διπλές, εμείςτιςμετράμεωςμία απειλή κάθε φορά). Γιάννης Ρεφανίδης 21 Επίλυση µε τοπική αναζήτηση(3/3) 6 3 1 Στο συγκεκριµένο παράδειγµα είµασταν τυχεροί, µιας και όλες οι επιλογές µας βγήκαν σωστές. οκιµάστε να λύσετε το ίδιο πρόβληµα σε σκακιέρα 8x8 µε 8 βασίλλισες. 0 Γιάννης Ρεφανίδης 22
Προβλήµατα Ικανοποίησης Περιορισµών Προβλήµατα ικανοποίησης περιορισµών Λογικός προγραµµατισµός µε περιορισµούς Λογικός Προγραµµατισµός µε Περιορισµούς (1/3) Έστω για παράδειγµα ο παρακάτω κανόνας: triangle(x,y,z) :- X>=0, Y>=0, Z>=0, X+Y>=Z, X+Z>=Y, Y+Z>=X. Εάν υποβάλλουµε την ερώτηση:?- triangle(3,4,5). στην κλασσική Prolog θα πάρουµε τηναπάντηση: yes. Αν όµως υποβάλλουµε την ερώτηση:?- triangle(3,4,ζ). δεν θα πάρουµε καµία απάντηση (εκτόςίσωςαπόκάποιο µήνυµα λάθους). Ο λόγος είναι ότι στην κλασσική Prolog οι αριθµητικές σχέσεις (ισότητες, ανισότητες) µπορούν να ελεγχθούν µόνο εφόσον οι µεταβλητές έχουν όλες πάρει τιµή. Γιάννης Ρεφανίδης 24
Λογικός Προγραµµατισµός µε Περιορισµούς (2/3) Οι νεώτερες εκδόσεις των πιο γνωστών υλοποιήσεων της Prolog έχουν επεκτείνει τη γλώσσα µε τη δυνατότητα να χειρίζεται µεταβλητές µε πεδίο ορισµού και περιορισµούς µεταξύ των µεταβλητών (Constraint Logic Programming ή CLP). Έτσι η ερώτηση:?- triangle(3,4,ζ). αναµένεται να δώσει την απάντηση: 1=<Z=<7 Μία λύση σε ένα πρόβληµα λογικού προγραµµατισµού µε περιορισµούς είναι το σύνολο των πιο συγκεκριµένων περιορισµών πάνω στις µεταβλητές της ερώτησης. Γιάννης Ρεφανίδης 25 Λογικός Προγραµµατισµός µε Περιορισµούς (3/3) Τα συστήµατα λογικού προγραµµατισµού µε περιορισµούς συνδυάζουν την ευκολία στην περιγραφή προβληµάτων που παρέχει ο λογικός προγραµµατισµός µε τις αυξηµένες δυνατότητες επίλυσης προβληµάτων που παρέχουν οι τεχνικές ικανοποίησης περιορισµών. Φυσικά υπάρχουν πλατφόρµες επίλυσης προβληµάτων ικανοποίησης περιορισµών που δεν βασίζονται στον λογικό προγραµµατισµό. Τα διάφορα συστήµατα διαφέρουν συνήθως στο είδος των περιορισµών που υποστηρίζουν (π.χ. γραµµικές ανισότητες, µηισότητα µεταξύ 2 ή πολλών µεταβλητών κλπ). Γιάννης Ρεφανίδης 26
ECLiPSe Prolog Η ECLiPSe Prolog υποστηρίζει πολλές περιπτώσεις περιορισµών. Ειδικότερα, µεταξύ άλλων υποστηρίζει: Βιβλιοθήκη ic (Interval Constraints) Ακέραιοι και πραγµατικοί αριθµοί µε πεδία ορισµού διαστήµατα. Βιβλιοθήκη ic_global Περιορισµοί µε περισσότερες από δύο µεταβλητές Βιβλιοθήκες ic_cumulative, ic_edge_finder Ειδικοί περιορισµοί µε πολλές µεταβλητές για προβλήµατα χρονοπρογραµµατισµού Βιβλιοθήκη ic_sets Περιορισµοί σχετικοί µε πεπερασµένα σύνολα ακεραίων κλπ Γιάννης Ρεφανίδης 27 Φόρτωση βιβλιοθήκης Για να χρησιµοποιήσουµε τις δυνατότητες των βιβλιοθηκών της ECLiPSe, πρέπει πρώτα να τις «φορτώσουµε». Γιαναφορτώσουµε µια βιβλιοθήκη στην ECLiPSe, π.χ. την ic, έχουµε δύοεπιλογές. Μέσα στο πρόγραµµά µας να τοποθετήσουµε µια από τις παρακάτω εντολές: :-lib(ic). :-use_module(library(ic)). ή στην γραµµή ερωτήσεων της ECLiPSe να δώσουµε µία από τις παρακάτω «ερωτήσεις»: lib(ic). use_module(library(ic)). Γιάννης Ρεφανίδης 28
Γενική µορφή προγράµµατος Η γενική µορφή ενός προγράµµατος για επίλυση προβληµάτων ικανοποίησης περιορισµών είναι η εξής: solve(variables):- read_data(data), setup_constraints(data, Variables), labeling(variables). Το κατηγόρηµα read_data/1 ορίζεται από εµάς και διαβάζει κάποια δεδοµένα σχετικά µε το πρόβληµα. Το κατηγόρηµα setup_constraints/2 ορίζεται από εµάς και ορίζει τους περιορισµούς επί των µεταβλητών, βάσει των δεδοµένων που διαβάσαµε. Το κατηγόρηµα labeling/1 είναι ενσωµατωµένο στην ECLiPSe και λύνει το πρόβληµα. Γιάννης Ρεφανίδης 29 Παράδειγµα (1/2) Έστω το πρόβληµα κρυπταριθµητικής SEND + MORE = MONEY το οποίο ορίζεται ως εξής: Βρείτε µια ένα-προς-ένα αντιστοίχιση µεταξύ των γραµµάτων S,E,N,D,M,O,R,Y και των αριθµών 0,1,2,...,9, έτσι ώστε να ισχύει η παραπάνω ισότητα. Οι µεταβλητές µας είναι τα γράµµατα S,E,N,D,M,O,R,Y. Τα πεδία τιµών τους είναι το σύνολο ακεραίων 0,1,...,9. Οι περιορισµοί είναι ότι οι µεταβλητές πρέπει να πάρουν διαφορετικές τιµές µεταξύ τους και ότι πρέπει να ισχύει η εξίσωση. Γιάννης Ρεφανίδης 30
Παράδειγµα (2/2) Ένα πρόγραµµα που λύνει το πρόβληµα είναι το εξής: :-lib(ic). sendmore(digits):- Digits=[S,E,N,D,M,O,R,Y], Digits :: [0..9], alldifferent(digits), S #\= 0, M #\= 0, 1000*S+100*E+10*N+D + 1000*M+100*O+10*R+E #= 10000*M+1000*O+100*N+10*E+Y, labeling(digits). Γιάννης Ρεφανίδης 31 Η βιβλιοθήκη ic Η βιβλιοθήκη ic (interval constraints) υποστηρίζει περιορισµούς επί ακεραίων και πραγµατικών αριθµών, των οποίων τα πεδία ορισµού είναι διαστήµατα. Γιάννης Ρεφανίδης 32
ηλώσεις περιορισµών (1/3) ήλωση πεδίου ορισµού µιας ή περισσοτέρων µεταβλητών: Vars :: Domain. όπου: Vars µια µεταβλητή ή µια λίστα µεταβλητών Domain ένα διάστηµα της µορφής Low..High ή µια λίστα τέτοιων διαστηµάτων καθώς και µεµονωµένων τιµών. Παραδείγµατα: X :: -10..10. X :: [-2..3, 8..15, 19]. [Χ, Υ] :: -20..1.0Inf. Χ :: -10.0..15.0. Εάν όλα τα διαστήµατα στο domain είναι ακέραια, η µεταβλητή θεωρείται ακέραια (integer), αλλιώς θεωρείται πραγµατική (real). Γιάννης Ρεφανίδης 33 ηλώσεις περιορισµών (2/3) υο παραλλαγές δήλωσης του πεδίου ορισµού είναι οι: Vars #:: Domain. Vars $:: Domain. Η πρώτη δήλωση καθορίζει ότι οι µεταβλητές της Vars είναι υποχρεωτικά ακέραιες ενώ η δεύτερη ότι είναι υποχρεωτικά πραγµατικές. Μπορούµε να δηλώσουµε ότι µια µεταβλητή είναι ακέραια, χωρίς να ορίσουµε πεδίο ορισµού µε δήλωσησαντην: integer(x). Παρόµοια, µπορούµε να δηλώσουµε ότι µια µεταβλητή είναι πραγµατική, χωρίς να ορίσουµε πεδίο ορισµού µε δήλωση σαν την: real(x). Γιάννης Ρεφανίδης 34
ηλώσεις περιορισµών (3/3) Τέλος, µπορούµε να µην δηλώσουµε καθόλου το πεδίο ορισµού µιας µεταβλητής. Αρκεί να την χρησιµοποιήσουµε µέσα σε έναν περιορισµό. Εάν βρίσκεται µέσα σε περιορισµούς που αφορούν πραγµατικούς, τότε η µεταβλητή είναι πραγµατική. Y+X $>0. Εάν βρίσκεται µέσα σε περιορισµούς που αφορούν ακεραίους, τότε η µεταβλητή είναι ακέραια. Y+X #>0. Γιάννης Ρεφανίδης 35 Παρατήρηση Έστω οι δύο παρακάτω περιορισµοί: X/2+Y/2 #= 1. και X+Y #= 2. Και οι δύο περιορισµοί ορίζουν δύο µεταβλητές ακέραιες. Ωστόσο ο πρώτος επιβάλλει να είναι ακέραια και τα X/2, Y/2, άρα επιβάλλειταχκαιυναείναιάρτιοιαριθµοί! Γενικά, κάθε περιορισµός που αφορά ακεραίους επιβάλλει όλες οι εκφράσεις/υποεκφράσεις που εµφανίζονται στον περιορισµό να είναι ακέραιες ποσότητες. Γιάννης Ρεφανίδης 36
Περιορισµοί διαστηµάτων Οι παρακάτω περιορισµοί αφορούν ακέραιες εκφράσεις και υποεκφράσεις. ExprX #= ExprY ExprX #>= ExprY ExprX #=< ExprY ExprX #> ExprY ExprX #< ExprY ExprX #\= ExprY Οι παρακάτω περιορισµοί αφορούν πραγµατικές εκφράσεις και υποεκφράσεις. ExprX $= ExprY ExprX $>= ExprY ExprX $=< ExprY ExprX $> ExprY ExprX $< ExprY ExprX $\= ExprY Γιάννης Ρεφανίδης 37 Λογικοί σύνδεσµοι Μπορούµε να συνδυάσουµε περιορισµούς µε τους λογικούς συνδέσµους and, or, neg και =>. Παρακάτω φαίνονται µερικά παραδείγµατα: and: X$> 3 and X$<8 or: X$<3 or X$>8 neg: neg X$>3 =>: X $>3 => Y$<8 Γιάννης Ρεφανίδης 38
Καθολικοί περιορισµοί Οι καθολικοί περιορισµοί αφορούν συνήθως περισσότερες από δύο µεταβλητές. Υλοποιούνται στη βιβλιοθήκη ic_global. Ο πιο γνωστός περιορισµός είναι ο alldifferent: alldifferent(list): Ο περιορισµός alldifferent επιβάλλει ότι όλες οι µεταβλητές της λίστας List θα πάρουν ξεχωριστές τιµές. ΠΡΟΣΟΧΗ: Το alldifferent ορίζεται τόσο στη βιβλιοθήκη ic όσο και στην ic_global. Για να είµαστε σίγουροι ότι το πρόγραµµά µας χρησιµοποιεί τη βιβλιοθήκη ic_global το καλούµε ως: ic_global:alldifferent(list). Το alldifferent της βιβλιοθήκης ic δεν θα ανακάλυπτε ότι τρεις µεταβλητές, κάθε µια από τις οποίες έχει το ίδιο πεδίο ορισµού µε δύοµόνο τιµές, παραβιάζουν τον περιορισµό. Γιάννης Ρεφανίδης 39 Εύρεση λύσεων Υπάρχουν δύο κατηγορήµατα που ξεκινούν τη διαδικασία εύρεσης ανάθεσης τιµών στις µεταβλητές: indomain(x): Η µεταβλητή Χ είναι µια µεταβλητή για την οποία έχουν ορισθεί κάποιοι περιορισµοί. Η κλήση indomain(x) αναθέτει στην Χ µια από τις τιµές που αυτή µπορεί να πάρει, ενώ ταυτόχρονα ενηµερώνει όλες τις µεταβλητές που συµµετέχουν σε περιορισµούς µε την Χ. labeling(list): Η λίστα List περιλαµβάνει ένα σύνολο µεταβλητών για τις οποίες έχουν ορισθεί κάποιοι περιορισµοί. Η κλήση στην labeling επιχειρεί να βρει µια ανάθεση τιµών στις µεταβλητές της List, η οποία να είναι συµβατή µε όλους τους περιορισµούς όπου συµµετέχουν οι µεταβλητές. Συνήθως καλούµε τηνlabeling µε όλεςτιςµεταβλητές του προβλήµατος. Γιάννης Ρεφανίδης 40
Παράδειγµα Το παρακάτω πρόγραµµα βρίσκει µαγικά τετράγωνα 3x3. :-lib(ic). :-lib(ic_global). magic(digits):- Digits=[ A,B,C, D,E,F, G,H,I], Digits :: [1..9], ic_global:alldifferent(digits), A+B+C #= 15, D+E+F #= 15, G+H+I #= 15, A+D+G #= 15, B+E+H #= 15, C+F+I #= 15, A+E+I #= 15, C+E+G #= 15, labeling(digits). Γιάννης Ρεφανίδης 41 Πράξεις µε πραγµατικούς αριθµούς (1/2) Όταν η ECLiPSe εκτελεί πράξεις µε πραγµατικούς αριθµούς και εξάγει αποτελέσµατα, τα αποθηκεύει εσωτερικά ως ένα διάστηµα τιµών. Για παράδειγµα:?- 3*Χ $=4. X = 1.3333333333333333 1.3333333333333335 Το διάστηµα τιµών παριστάνεται µε δύοόρια, το κάτω και το πάνω όριο, τα οποία διαχωρίζονται µεταξύ τους µε δύο παύλες. Η µορφή αυτή των πραγµατικών αριθµών ονοµάζεται «φραγµένοι πραγµατικοί» (bounded reals). Μπορούµε να µετατρέψουµε µόνοι µας έναν απλό πραγµατικό αριθµό σε φραγµένο, ως εξής:?- X is breal(2). X = 2.0 2.0 Γιάννης Ρεφανίδης 42
Πράξεις µε πραγµατικούς αριθµούς (2/2) Ο λόγος χρήσης των φραγµένων πραγµατικών είναι για να µην δηµιουργούνται εσφαλµένα αποτελέσµατα λόγω περιορισµένης ακρίβειας των υπολογισµών του υπολογιστή. Συγκρίνετε τα παρακάτω δύο παραδείγµατα:?- Y is 1 / 10, X is Y + Y + Y + Y + Y + Y + Y + Y + Y + Y. X = 0.99999999999999989 Y = 0.1?- Y is breal(1) / 10, X is Y + Y + Y + Y + Y + Y + Y + Y + Y + Y. X = 0.99999999999999978 1.0000000000000007 Y = 0.099999999999999992 0.1 Μερικές φορές επιστρέφονται ιδιαίτερα µεγάλα διαστήµατα τιµών. Ωστόσο είναι προτιµότερο από το να επιστρέφεται µια συγκεκριµένη αλλά εσφαλµένη τιµή. Γιάννης Ρεφανίδης 43 Παρατηρήσεις Όταν εργαζόµαστε µε φραγµένους πραγµατικούς, χρειάζεται προσοχή όταν χρησιµοποιούµε συγκρίσεις αριθµών (προσοχή: απλές συγκρίσεις, όχι επιβολή περιορισµών), ιδιαίτερα όταν τα διαστήµατά τους επικαλύπτονται. Γενικά η ECLiPSe συγκρίνει δύο φραγµένους πραγµατικούς των οποίων τα διαστήµατα επικαλύπτονται µε βάση το κάτω τους όριο. Στο παρακάτω παράδειγµα, το κατηγόρηµα compare/3 επιστρέφει στο πρώτο του όρισµα τη σχέση διάταξης που υπάρχει µεταξύ των δύο επόµενων ορισµάτων του.?- X = 0.1 0.4, Y = 0.2 0.3, compare(r, X, Y). R = < X = 0.1 0.4 Y = 0.2 0.3 Γιάννης Ρεφανίδης 44
Περιορισµοί µε πραγµατικούς αριθµούς (1/6) Μπορούµε ναχρησιµοποιήσουµε τηνeclipse για να λύσουµε συστήµατα αριθµητικών εξισώσεων µε πολλούς αγνώστους πραγµατικούς αριθµούς. Για παράδειγµα:?- 3*Χ $=4. X = 1.3333333333333333 1.3333333333333335 Για λίγο πιο σύνθετα όµως προβλήµατα, χρειάζεται να χρησιµοποιήσουµε το κατηγόρηµα locate/2. Γιάννης Ρεφανίδης 45 Περιορισµοί µε πραγµατικούς αριθµούς (2/6) Συγκρίνετε τα παρακάτω τρία παραδείγµατα:?- X ^ 2 + Y ^ 2 $= 4, (X - 1) ^ 2 + (Y - 1) ^ 2 $= 4. X = X{-1.0000000000000004.. 2.0000000000000004} Y = Y{-1.0000000000000004.. 2.0000000000000004} There are 12 delayed goals.?- X ^ 2 + Y ^ 2 $= 4, (X - 1) ^ 2 + (Y - 1) ^ 2 $= 4, labeling([x, Y]). Abort?- X ^ 2 + Y ^ 2 $= 4, (X - 1) ^ 2 + (Y - 1) ^ 2 $= 4, locate([x, Y], 0.0001). X = X{-0.82287566035526938.. -0.82287564484820042} Y = Y{1.8228756448482004.. 1.8228756603552694} There are 12 delayed goals. Yes (0.01s cpu, solution 1, maybe more) Γιάννης Ρεφανίδης 46
Περιορισµοί µε πραγµατικούς αριθµούς (3/6) Στο προηγούµενο παράδειγµα προσπαθήσαµε να βρούµε τα σηµεία τοµής δύο κύκλων, µε κέντρατα(0,0) και (1,1) αντίστοιχα και ακτίνα 2. Το κατηγόρηµα locate/2 λειτουργεί καλά όταν υπάρχει πεπερασµένος αριθµός διακριτών λύσεων. Το δεύτερο όρισµα του locate/2 είναι η ακρίβεια µε την οποία θέλουµε ναπροσεγγίσουµε τις λύσεις. Γιάννης Ρεφανίδης 47 Περιορισµοί µε πραγµατικούς αριθµούς (4/6) 2 1-2 -1 1 2-1 -2 Γιάννης Ρεφανίδης 48
Περιορισµοί µε πραγµατικούς αριθµούς (5/6) Εάν υπάρχει άπειρος αριθµός συνεχών λύσεων, τότε χρησιµοποιούµε τοκατηγόρηµα squash/3. Στο παρακάτω παράδειγµα επιχειρούµε να βρούµε την περιοχή τοµής των δύο κυκλικών δίσκων η οποία είναι από την επάνω πλευρά της ευθείας Y=X.?- X^2 + Y^2 $=< 4, (X-1)^2 + (Y-1)^ 2 $=< 4, Y $>= X, squash([x, Y], 0.0001, lin). X = X{-1.0000000000000004.. 1.4142135999632601} Y = Y{-0.41421359996326.. 2.0000000000000004} Γιάννης Ρεφανίδης 49 Περιορισµοί µε πραγµατικούς αριθµούς (6/6) Y=X 2 1-2 -1 1 2-1 -2 Γιάννης Ρεφανίδης 50
Η βιβλιοθήκη ic_sets (1/2) Η βιβλιοθήκη ic_sets χειρίζεται σύνολα ακεραίων. Ένα σύνολο ακεραίων είναι µια διατεταγµένη λίστα ακεραίων αριθµών. S1 = [1, 3, 7] S2= [ ] Ορίζουµε µια µεταβλητή συνόλου δίνοντας τα σίγουρα και τα περισσότερα δυνατά στοιχεία της:?- S1 :: [2, 3].. [1, 2, 3, 4]. S1 = S1{[2, 3] \/ ([].. [1, 4]) : _313{2.. 4}} Η παραπάνω δήλωση σηµαίνει ότι η µεταβλητή S1 είναι ένα σύνολο το οποίο περιέχει σίγουρα τα στοιχεία 2 και 3, ενώ µπορεί ενδεχοµένως να περιέχει και τα 1 και 4. Στην απάντησή της η ECLiPSe µας δίνει και τον πληθικό αριθµό του συνόλου. Γιάννης Ρεφανίδης 51 Η βιβλιοθήκη ic_sets (2/2) Προσοχή: Εάν έχουµε φορτώσει και τη βιβλιοθήκη ic, η παραπάνω δήλωση θα έπρεπε να γραφεί ως: ic_sets:( S1 :: [ 2, 3]..[1,2,3,4] ) Γιάννης Ρεφανίδης 52
Περιορισµοί συνόλων Μπορούµε να θέσουµε περιορισµούς µεταξύ συνόλων ή µεταξύ ακεραίων και συνόλων.?x in?set : Ο ακέραιος Χ είναι µέλος του συνόλου Set?X notin?set : Ο ακέραιος Χ δεν είναι µέλος του συνόλου Set #(?Set,?Card) : Ο πληθικός αριθµός του συνόλου Set είναι Card?Set1 sameset?set2 : Τα σύνολα Set1 και Set2 είναι ίδια.?set1 disjoint?set2 : Τα σύνολα Set1 και Set2 είναι ξένα.?set1 includes?set2 : Το σύνολο Set1 είναι υπερσύνολο του Set2.?Set1 subset?set2 : Το σύνολο Set1 είναι υποσύνολο του Set2. intersection(?set1,?set2,?set3) : Το Set3 είναι τοµή τωνset1 και Set2. union(?set1,?set2,?set3) : Το Set3 είναι ένωση των Set1 και Set2. difference (?Set1,?Set2,?Set3) : Το Set3 είναι διαφορά των Set1 και Set2. symdiff (?Set1,?Set2,?Set3) : Το Set3 είναι συµµετρική διαφορά των Set1 και Set2. Γιάννης Ρεφανίδης 53