background image

41 

 

𝛱𝜀𝛿ί𝜊 𝛰𝜌𝜄𝜎𝜇𝜊ύ:  Έ𝜎𝜏𝜔 𝐷 = {1,2,3,4}   → {[[𝑥 ≥ 1]], [[𝑥 ≤ 4]]} 

(2.13)

 

𝛱𝜀𝜌𝜄𝜊𝜌𝜄𝜎𝜇ό𝜍:  𝐶1 = [[𝑥 ≤ 𝑧]] → [[𝑥 ≤ 𝑧 + 1]]  

 

 

(2.14)

 

𝛱𝜀𝜌𝜄𝜊𝜌𝜄𝜎𝜇ό𝜍:  𝐶2 = [[𝑥 = 𝑧]] → [[𝑥 ≤ 𝑧 ]] ∧ ¬[[𝑥 ≤ 𝑧 − 1 ]] 

(2.15)

 

Οι  ατομικοί  περιορισμοί  όπως  η  ανάθεση  τιμής,  οι  αλλαγές  πεδίων  ορισμού  ή  η  αφαίρεση 

τιμών από ένα πεδίο ορισμού είναι απλά κυριολεκτικά (literals) όπως στα SAT. 

Η  αναζήτηση  ελέγχεται  από  έναν  επιλυτή  FD.  Σε  κάθε  διάδοση  περιορισμού,  ο 

επιλυτής FD καταγράφει προτάσεις επεξήγησης και τις αποστέλλει στον εσωτερικό επιλυτή 

SAT  ενεργοποιώντας  τον  με  προτεραιότητα  εκτέλεσης.  Αφού  ενεργοποιηθεί,  δρα  σαν 

καθολικός μηχανισμός διάδοσης με την υψηλότερη προτεραιότητα διάδοσης. 

Όταν  εκτελείται  ένας  μηχανισμός  διάδοσης  του  επιλυτή  FD  για  να  τροποποιήσει  το 

πεδίο  ορισμού,  δημιουργεί  μία  πρόταση  επεξήγησης  (explanation  clause)  κατά  την  οποία 

εξηγεί το λόγο που έγιναν αλλαγές σε ατομικούς περιορισμούς. Για παράδειγμα, η έκφραση 

[𝑥 ≤ 2] ∧ [𝑥 ≥ 𝑦] σημαίνει πως [𝑦 ≤ 2] και δημιουργείται η πρόταση [𝑥 ≤ 2] → [𝑦 ≤ 2] ως 

δικαιολόγηση. Σε περίπτωση αποτυχίας, δηλαδή όταν ένα πεδίο ορισμού είναι κενό ύστερα 

από  αλλαγή,  ο  μηχανισμός  διάδοσης  πρέπει  να  εξηγήσει  και  την  αποτυχία.  Οι  προτάσεις 

επεξήγησης μπορούν να χρησιμοποιηθούν για τη δημιουργία nogoods τα οποία αξιοποιούνται 

εύκολα  από  τους  μηχανισμούς  διάδοσης  του  SAT.  Τα  nogoods  επιτρέπουν  την  παράλειψη 

ενός  μεγάλου  υποσυνόλου  του  χώρου  αναζήτησης  ενώ  παράλληλα  επιτρέπουν  τη  σωστή 

επιλογή του επιπέδου που θα γίνει η (μη-χρονολογική) υπαναχώρηση. Οποιαδήποτε αλλαγή 

πραγματοποιεί ένας μηχανισμός διάδοσης μπορεί διαδοχικά να προκαλέσει την ενεργοποίηση 

άλλου μηχανισμού, με αυτόν τον κύκλο να εκτελείται έως ότου να φτάσει σε ένα ορισμένο 

σημείο. 

 

Εικόνα 2.14: Αρχιτεκτονική του LCG.