Β Ομάδα Ασκήσεων "Λογικού Προγραμματισμού" Ακαδημαϊκού Έτους

Σχετικά έγγραφα
Λογικός Προγραμματισμός Ασκήσεις

Β Ομάδα Ασκήσεων "Λογικού Προγραμματισμού" Ακαδημαϊκού Έτους

Β Ομάδα Ασκήσεων "Λογικού Προγραμματισμού" Ακαδημαϊκού Έτους

Λογικός Προγραμματισμός Ασκήσεις

Λογικός Προγραμματισμός Ασκήσεις

Λογικός Προγραμματισμός Ασκήσεις

Λογικός Προγραμματισμός Ασκήσεις

Λογικός Προγραμματισμός Ασκήσεις

Λογικός Προγραμματισμός Ασκήσεις

Α Ομάδα Ασκήσεων "Λογικού Προγραμματισμού" Ακαδημαϊκού Έτους Άσκηση 1

Λογικός Προγραμματισμός Ασκήσεις

turnin Lab4.pro

Λογικός Προγραμματισμός Ασκήσεις

Σειρά Προβλημάτων 1 Λύσεις

Λογικός Προγραμματισμός Ασκήσεις

Λογικός Προγραμματισμός Ασκήσεις

Αριθμήσιμα σύνολα. Μαθηματικά Πληροφορικής 5ο Μάθημα. Παραδείγματα αριθμήσιμων συνόλων. Οι ρητοί αριθμοί

Λογικός Προγραμματισμός Ασκήσεις

Λογικός Προγραμματισμός Ασκήσεις

ΕΦΑΡΜΟΓΕΣ ΔΙΟΙΚΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ

Λογικός Προγραμματισμός Ασκήσεις

Θεωρία Γραφημάτων 10η Διάλεξη

Λογικός Προγραμματισμός Ασκήσεις

Αλγόριθμοι για ανάθεση συχνοτήτων και έλεγχο αποδοχής κλήσεων σε κυψελικά ασύρματα δίκτυα

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

Πανεπιστήμιο Στερεάς Ελλάδας Τμήμα Πληροφορικής ΘΕΩΡΙΑ ΓΡΑΦΩΝ. 9 η Διάλεξη Χρωματισμός γράφων Θεωρήματα Τεχνικές Εφαρμογές

n ίδια n διαφορετικά n n 0 n n n 1 n n n n 0 4

Δρομολόγηση Και Πολύχρωματισμός. Γραφημάτων ΚΑΡΑΓΕΩΡΓΟΣ ΤΙΜΟΘΕΟΣ Α.Μ 1026

Θεωρία Γραφημάτων 8η Διάλεξη

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

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Προγραμματισμός Υπολογιστών με C++

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Δισδιάστατη ανάλυση. Για παράδειγμα, έστω ότι 11 άτομα δήλωσαν ότι είναι άγαμοι (Α), 26 έγγαμοι (Ε), 12 χήροι (Χ) και 9 διαζευγμένοι (Δ).

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

... a b c d. b d a c

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

ΣΤΑΤΙΣΤΙΚΗ ΠΙΘΑΝΟΤΗΤΕΣ

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Χρήστος Ι. Σχοινάς Αν. Καθηγητής ΔΠΘ. Συμπληρωματικές σημειώσεις για το μάθημα: «Επιχειρησιακή Έρευνα ΙΙ»

Γνωστό: P (M) = 2 M = τρόποι επιλογής υποσυνόλου του M. Π.χ. M = {A, B, C} π. 1. Π.χ.

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ, ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εργαστήρια Αριθμητικής Ανάλυσης Ι. 7 ο Εργαστήριο. Διανύσματα-Πίνακες 2 ο Μέρος

Chapter 9: NP-Complete Problems

χ(k n ) = n χ(c 5 ) = 3

Τυχαία μεταβλητή (τ.μ.)

Οντοκεντρικός Προγραμματισμός II C++ Project Xειμερινό Εξάμηνο Organisms

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Υλοποίηση Εφαρμογής Εστιατορίου (take-away)

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

Προγραμματισμός ΙI (Θ)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

Μεταπτυχιακό Πρόγραμμα «Γεωχωρικές Τεχνολογίες» Ψηφιακή Επεξεργασία Εικόνας. Εισηγητής Αναστάσιος Κεσίδης

P(n, r) = n r. (n r)! n r. n+r 1

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ

Επικοινωνία:

Κουτσιούμπας Αχιλλέας U. Adamy, C. Ambuehl, R. Anand, T. Erlebach

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 3 η

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Παράλληλη Επεξεργασία Εργαστηριακή Ασκηση Εαρινού Εξαµήνου 2008

ΕΠΛ 434: Λογικός Προγραμματισμός

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Αριθμητική Ανάλυση και Εφαρμογές

Τεχνητή Νοημοσύνη Ι. Εργαστηριακή Άσκηση 4-6. Σγάρμπας Κυριάκος. Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστων

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

Ημερομηνία Ανάρτησης: 08/1/2018 Ημερομηνία Παράδοσης: - Αρχές Γλωσσών Προγραμματισμού

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ

Βασικά ζητήματα μιας βάσης δεδομένων

ΑΣΚΗΣΕΙΣ ΔΥΝΑΜΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Θεωρία Πληροφορίας. Διάλεξη 5: Διακριτή πηγή πληροφορίας με μνήμη. Δρ. Μιχάλης Παρασκευάς Επίκουρος Καθηγητής

Μορφές αποδείξεων Υπάρχουν πολλά είδη αποδείξεων. Εδώ θα δούμε τα πιο κοινά: Εξαντλητική μέθοδος ή μέθοδος επισκόπησης. Οταν το πρόβλημα έχει πεπερασμ

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

Περιγραφή Προβλημάτων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Κεφάλαιο 6 Λογικός προγραμματισμός με περιορισμούς


ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

dtw(a, B) = dtw(a n, B m )

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog

Τα στοιχεία του παιχνιδιού : Σκηνικό

Διακριτά Μαθηματικά. Άγγελος Κιαγιάς. aggelos. Τμήμα Πληροφορικής & Τηλεπικοινωνιών. π.

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

Διακριτά Μαθηματικά. Απαρίθμηση. Βασικές τεχνικές απαρίθμησης Αρχή Περιστεριώνα

5 ΠΡΟΟΔΟΙ 5.1 ΑΚΟΛΟΥΘΙΕΣ. Η έννοια της ακολουθίας

Transcript:

Page 1 of 10 ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ Β Ομάδα Ασκήσεων "Λογικού Προγραμματισμού" Ακαδημαϊκού Έτους 2015-16 Οι ασκήσεις της ομάδας αυτής πρέπει να αντιμετωπισθούν με τη βοήθεια της τεχνολογίας του προγραμματισμού με περιορισμούς. Ένα σύστημα λογικού προγραμματισμού που υποστηρίζει την τεχνολογία αυτή είναι η ECL i PS e (http://www.eclipseclp.org). Μπορείτε να χρησιμοποιήσετε είτε την παλιότερη βιβλιοθήκη fd είτε την νεώτερη ic. Η βιβλιοθήκη fd τεκμηριώνεται στο κεφάλαιο 2 του Obsolete Libraries Manual και η ic στα κεφάλαια 3 και 4 του Constraint Library Manual. Αν χρησιμοποιήσετε την ic, θα σας χρειαστεί και η βιβλιοθήκη branch_and_bound, ιδιαιτέρως το κατηγόρημα bb_min/3, το οποίο τεκμηριώνεται, όπως και όλα τα κατηγορήματα που παρέχει η ECL i PS e, στο Alphabetical Predicate Index. Εναλλακτικά συστήματα λογικού προγραμματισμού με περιορισμούς που μπορείτε να χρησιμοποιήσετε για τις ασκήσεις αυτής της ομάδας είναι η GNU Prolog (http://www.gprolog.org) και η SWI-Prolog (http://www.swi-prolog.org), αλλά δεν προτείνονται, διότι οι βιβλιοθήκες περιορισμών τους είναι περιορισμένης λειτουργικότητας και όχι ιδιαίτερα αποδοτικές. Σε κάθε περίπτωση, στα αρχεία που θα παραδώσετε, θα πρέπει να αναφέρεται στην αρχή τους, σαν σχόλιο, για ποιο σύστημα Prolog έχουν υλοποιηθεί τα αντίστοιχα προγράμματα, εάν αυτό είναι διαφορετικό από την ECL i PS e. Άσκηση 4 Το πρόβλημα του χρωματισμού γράφου συνίσταται στην εύρεση του ελάχιστου αριθμού χρωμάτων που πρέπει να χρησιμοποιήσουμε για να χρωματίσουμε τους κόμβους δεδομένου γράφου, έτσι ώστε να μην υπάρχει ζευγάρι γειτονικών κόμβων που να έχουν το ίδιο χρώμα. Ο ελάχιστος αριθμός απαιτούμενων χρωμάτων ονομάζεται χρωματικός αριθμός του γράφου. Για την αντιμετώπιση του προβλήματος αυτού, πρέπει να χρησιμοποιήσετε γράφους που κατασκευάζονται μέσω του κατηγορήματος create_graph(n, D, G), όπως αυτό ορίζεται στο αρχείο http://www.di.uoa.gr/~takis/graph.pl. Κατά την κλήση του κατηγορήματος δίνεται το πλήθος N των κόμβων του γράφου και η πυκνότητά του D (σαν ποσοστό των ακμών που υπάρχουν στον γράφο σε σχέση με όλες τις δυνατές ακμές) και επιστρέφεται ο γράφος G σαν μία λίστα από ακμές της μορφής N1-N2, όπου N1 και N2 είναι οι δύο κόμβοι της ακμής (οι κόμβοι του γράφου

Page 2 of 10 παριστάνονται σαν ακέραιοι από το 1 έως το N). Ένα παράδειγμα εκτέλεσης του κατηγορήματος αυτού είναι το εξής: 1?- seed(1), create_graph(9, 30, G). G = [1-5, 2-4, 2-6, 3-4, 3-6, 3-9, 4-7, 5-7, 6-7, 6-8, 6-9] Για την άσκηση αυτή, θα πρέπει να ορίσετε ένα κατηγόρημα color_graph/4, το οποίο όταν καλείται σαν color_graph(n, D, Col, C), αφού δημιουργήσει ένα γράφο N κόμβων και πυκνότητας D, καλώντας το κατηγόρημα create_graph/3, να βρίσκει ένα βέλτιστο χρωματισμό του γράφου, επιστρέφοντας στο Col τη λίστα με τα χρώματα (ακέραιοι αριθμοί) των κόμβων και στο C τον χρωματικό αριθμό του γράφου. Κάποια παραδείγματα εκτέλεσης είναι τα εξής:?- seed(1), color_graph(10, 80, Col, C). Col = [2, 6, 2, 3, 3, 5, 1, 5, 4, 4] C = 6?- seed(2016), color_graph(15, 60, Col, C). Col = [3, 6, 6, 2, 4, 2, 1, 1, 2, 3, 4, 4, 5, 3, 5] C = 6?- seed(12345), color_graph(20, 70, Col, C). Col = [8, 8, 2, 1, 3, 2, 7, 3, 1, 4, 7, 7, 1, 6, 4, 5, 2, 4, 5, 6] C = 8?- seed(1000), color_graph(25, 50, Col, C). Col = [2, 7, 4, 1, 2, 6, 5, 3, 5, 5, 2, 1, 6, 2, 1, 3, 5, 3, 1, 4, 5, 4, 5, 6, 6] C = 7?- seed(9876), color_graph(50, 20, Col, C). Col = [5, 4, 1, 2, 3, 5, 2, 3, 1, 5, 4, 1, 1, 4, 3, 2, 4, 3, 4, 5, 4, 2, 1, 1, 1, 4, 3, 3, 3, 1, 5, 3, 1, 2, 3, 3, 2, 5, 3, 4, 5, 2, 1, 1, 2, 4, 5, 5, 5, 1] C = 5?- seed(10), color_graph(40, 34, Col, C). Col = [4, 3, 1, 4, 6, 2, 1, 2, 6, 3, 3, 6, 5, 3, 5, 5, 3, 2, 1, 2, 4, 5, 2, 1, 1, 6, 2, 3, 5, 5, 4, 5, 4, 5, 1, 6, 4, 4, 4, 3] C = 6 1 Το κατηγόρημα seed/1 αρχικοποιεί τη γεννήτρια τυχαίων αριθμών. Η συγκεκριμένη εκτέλεση, όπως και όσες ακολουθούν στην άσκηση αυτή, έγινε σε μηχάνημα Linux του εργαστηρίου του Τμήματος.

Page 3 of 10?- seed(1111), color_graph(60, 30, Col, C). Col = [4, 7, 4, 1, 5, 6, 5, 2, 6, 6, 6, 6, 2, 3, 7, 4, 7, 4, 1, 4, 5, 2, 1, 5, 3, 2, 4, 2, 7, 5, 3, 3, 1, 5, 4, 1, 4, 5, 3, 6, 4, 6, 2, 7, 7, 5, 1, 5, 2, 6, 3, 2, 4, 1, 6, 3, 5, 3, 4, 1] C = 7?- seed(171717), color_graph(100, 20, Col, C). 2 Col = [7, 4, 5, 3, 4, 7, 2, 2, 4, 6, 5, 5, 3, 3, 6, 2, 1, 3, 1, 5, 2, 2, 6, 4, 3, 2, 7, 7, 4, 6, 5, 4, 7, 1, 7, 7, 4, 2, 5, 6, 5, 7, 5, 2, 4, 1, 1, 1, 6, 3, 2, 7, 1, 7, 4, 3, 5, 7, 5, 6, 3, 3, 3, 1, 2, 5, 5, 5, 4, 5, 1, 4, 6, 6, 4, 1, 2, 6, 4, 1, 1, 2, 7, 3, 6, 1, 5, 3, 4, 1, 7, 4, 2, 6, 7, 2, 1, 4, 7, 3] C = 7 Παραδοτέο για την άσκηση είναι ένα πηγαίο αρχείο Prolog με όνομα color_graph.pl. Άσκηση 5 Αντιμετωπίστε την 3 η άσκηση της Α ομάδας ασκήσεων μέσω της τεχνικής του λογικού προγραματισμού με περιορισμούς. Συγκεκριμένα, ορίστε ένα κατηγόρημα ο games_csp/5, με τις ίδιες ακριβώς προδιαγραφές με το games/5 της 3 ης άσκησης. Κάποια παραδείγματα εκτέλεσης (συμπεριλαμβανομένων και ορισμένων από την 3 η άσκηση) είναι τα εξής:?- games_csp([4, -1, -2, 3], 5, 2, Gs, P). Gs = [5, 1, 1, 4] P = 29 --> ;?- games_csp([3, -2, 4, -5, 2, 0, 4, -1, 3, 4], 5, 2, Gs, P). Gs = [3, 1, 5, 1, 1, 1, 5, 1, 1, 4] P = 62 --> ; Gs = [3, 1, 5, 1, 1, 1, 4, 1, 1, 5] P = 62 --> ;?- games_csp([1, 2, 3, 4, 5, 0, -1, -2, -3, -4, -5], 5, 4, Gs, P). Gs = [4, 4, 4, 4, 5, 4, 1, 1, 1, 1, 1] P = 50 --> ; Gs = [4, 4, 4, 4, 5, 3, 1, 1, 1, 1, 1] P = 50 --> ; Gs = [4, 4, 4, 4, 5, 2, 1, 1, 1, 1, 1] P = 50 --> ; Gs = [4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1] 2 Η ερώτηση αυτή ενδέχεται να χρειάζεται υπερβολικά πολύ χρόνο για να απαντηθεί.

Page 4 of 10 P = 50 --> ;?- games_csp([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], 1, 1, Gs, P). Gs = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] P = -35 --> ;?- findall(gs, games_csp([1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3], 5, 1, Gs, _152), L), length(l, N)............ N = 210?- games_csp([2, 7, -1, 5, 0, 2, 1, 4, 3], 8, 5, Gs, P). Gs = [5, 8, 1, 8, 2, 8, 2, 8, 5] P = 170 --> ; Gs = [5, 8, 1, 8, 1, 8, 2, 8, 5] P = 170 --> ;?- games_csp([1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1], 10, 8, Gs, P). Gs = [8, 8, 8, 8, 8, 10, 8, 8, 8, 8, 8] P = 300 --> ;?- games_csp([5, 3, -1, 2, 4, 6, -7, 5, 6, 7, 8, 2, -3, 4], 16, 12, Gs, P). Gs = [16, 12, 1, 12, 12, 16, 1, 12, 12, 12, 16, 12, 1, 16] P = 705 --> ; Παραδοτέο για την άσκηση είναι ένα πηγαίο αρχείο Prolog με όνομα games_csp.pl. Άσκηση 6 Μία αεροπορική εταιρεία έχει προγραμματίσει να εκτελέσει για μία προκαθορισμένη χρονική περίοδο N πτήσεις, στις οποίες μπορεί να αναφέρεται κανείς με τους κωδικούς 1, 2, 3,, N. Επιπλέον, μέσω κάποιας μεθόδου που εφάρμοσε, έχει δημιουργήσει M συνδυασμούς πτήσεων (pairings) P i (1 i M). Δηλαδή, κάθε P i περιλαμβάνει κάποιες από τις πτήσεις 1, 2, 3,, N και, επίσης, τα P i δεν είναι κατ' ανάγκη ξένα μεταξύ τους. Οι συνδυασμοί αυτοί είναι έτσι κατασκευασμένοι ώστε να είναι δυνατόν λόγω κανονισμών, συμβάσεων κλπ. να πραγματοποιηθούν ο καθένας, δηλαδή όλες οι πτήσεις που περιλαμβάνει, με έναν από τους διαθέσιμους κυβερνήτες της εταιρείας. Το ζητούμενο είναι να επιλεγούν κάποιοι συνδυασμοί που καλύπτουν ακριβώς τις πτήσεις της εταιρείας, με σκοπό να ανατεθούν σε συγκεκριμένους κυβερνήτες. Δηλαδή, δεν πρέπει ούτε να μείνει πτήση χωρίς κυβερνήτη, ούτε κάποια πτήση να έχει δύο ή περισσότερους κυβερνήτες. Τέλος, αν ένας συνδυασμός πτήσεων

Page 5 of 10 P i έχει ένα κόστος (έξοδα διανυκτερεύσεων, αποζημιώσεις εκτός έδρας, πληρωμή υπερωριών κλπ.) στην εταιρεία C i, οι συνδυασμοί που θα επιλεγούν πρέπει να είναι αυτοί που προκαλούν το ελάχιστο συνολικό κόστος. Εφαρμόστε τη μέθοδό σας για εισόδους που προκύπτουν από το get_flight_data(i,n,p,c) του προγράμματος http://www.di.uoa.gr/~takis/flight_data.pl, δίνοντας έναν αύξοντα αριθμό εισόδου (1, 2, ) στο I και παίρνοντας το πλήθος των πτήσεων στο N, μία λίστα συνδυασμών πτήσεων στο P και τη λίστα κοστών των συνδυασμών αυτών στο C. Αν θελήσετε να δουλέψετε και με δεδομένα σημαντικού μεγέθους, θα σας χρειαστεί και το αρχείο http://www.di.uoa.gr/~takis/acsdata.zip. Για την άσκηση αυτή, θα πρέπει να ορίσετε ένα κατηγόρημα flights/3, το οποίο όταν καλείται σαν flights(i, Pairings, Cost), θα πρέπει, για το σύνολο δεδομένων με αύξοντα αριθμό I, να βρίσκει τη βέλτιστη λύση του προβλήματος (Pairings ζευγάρια επιλεγέντων συνδυασμών πτήσεων με τα κόστη τους) κόστους Cost. Μία ενδεικτική εκτέλεση, για όλα τα σύνολα δεδομένων που σας διατέθηκαν, φαίνεται στη συνέχεια:?- member(i, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), write('i = '), writeln(i), flights(i, Pairings, Cost), write('pairings = '), writeln(pairings), write('cost = '), writeln(cost), nl, fail. I = 1 Pairings = [[1, 2, 3, 7] / 10, [5, 8] / 12, [4, 9, 10] / 34, [6] / 34] Cost = 90 I = 2 Pairings = [[1, 2, 5, 8] / 10, [3, 6, 9] / 25, [4, 7, 10] / 20] Cost = 55 I = 3 Pairings = [[6, 9] / 32, [2, 5, 8] / 10, [1, 3, 4, 7, 10] / 28] Cost = 70 I = 4 Pairings = [[1, 5, 11] / 2, [7, 10, 12] / 3, [2, 9, 15, 16] / 1, [4, 8, 14] / 2, [3, 6, 13] / 1] Cost = 9

Page 6 of 10 I = 5 Pairings = [[3, 4, 5] / 4, [1] / 1, [6, 8, 11] / 5, [10, 12, 13] / 6, [2, 7, 9] / 2] Cost = 18 I = 6 Pairings = [[1, 3, 5, 7, 9, 11, 13, 15] / 1, [17, 19, 21, 23, 25, 27, 29] / 10, [16, 18, 20, 22, 24, 26, 28, 30] / 4, [2, 4, 6, 8, 10, 12, 14] / 5] Cost = 20 I = 7 Pairings = [[1, 3, 4, 8, 10] / 2259, [2, 7, 11] / 2112, [5, 16, 17] / 1158, [6, 12, 13] / 2445, [9, 14, 15] / 3333] Cost = 11307 I = 8 Pairings = [[1] / 3384, [2, 9] / 2793, [3] / 630, [4, 5, 16] / 2112, [6, 7, 11, 15] / 2109, [8, 14] / 1047, [10, 12, 13, 17, 18, 19] / 2802] Cost = 14877 I = 9 Pairings = [[1, 7, 13, 18] / 3333, [2, 3, 5, 10] / 3093, [4, 6, 11, 12, 14, 15] / 2826, [8, 9, 16, 17, 19] / 1557] Cost = 10809 I = 10 Pairings = [[1, 2, 3, 9, 14, 24] / 2750, [4, 5] / 1622, [6, 13, 21] / 1144, [7] / 76, [8] / 9790, [10, 18] / 120, [11, 20] / 300, [12] / 70, [15] / 9510, [16, 19, 23] / 352, [17] / 720, [22] / 9440] Cost = 35894

Page 7 of 10 I = 11 Pairings = [[1] / 1875, [2] / 1800, [3, 5, 12, 14, 22, 26, 29] / 8334, [4, 8, 16, 23] / 4725, [6, 7, 9, 10] / 9900, [11, 13, 18, 19, 24] / 28428, [15, 17, 20, 21, 25, 27, 28, 30, 31] / 12681] Cost = 67743 I = 12 Pairings = [[1] / 1156, [2, 12] / 1032, [3, 5] / 804, [4, 6, 8, 9, 20, 23, 24] / 822, [7, 10, 13, 17, 19, 21, 22] / 1874, [11, 18, 25] / 1226, [14, 15, 16] / 494] Cost = 7408 I = 13 Pairings = [[1, 13, 15, 16] / 712, [2, 10, 17, 18, 19, 20] / 2668, [3] / 240, [4, 5] / 190, [6, 9] / 192, [7, 8] / 1032, [11, 12, 14, 21, 22, 23] / 1950] Cost = 6984 I = 14 Pairings = [[1] / 156, [2, 6] / 2504, [3, 7] / 2396, [4, 5] / 2394, [8] / 1218, [9] / 1208, [10] / 688, [11, 17, 20] / 2316, [12] / 70, [13, 16] / 216, [14, 15] / 352, [18, 19] / 112, [21, 25, 26, 27] / 270, [22, 23] / 152, [24] / 66] Cost = 14118 I = 15 Pairings = [[1] / 908, [2, 3, 4] / 936, [5] / 438, [6, 8, 9, 19] / 3178, [7] / 406, [10] / 548,

Page 8 of 10 [11, 12, 16, 18] / 3992, [13, 14, 15, 17] / 2128] Cost = 12534 I = 16 Pairings = [[1] / 4797, [2, 4, 5, 7, 8, 12, 15] / 3015, [3] / 2466, [6, 9, 13, 14, 16, 18, 21] / 4236, [10, 11, 17, 19, 20, 22] / 2298] Cost = 16812 Παραδοτέο για την άσκηση είναι ένα πηγαίο αρχείο Prolog με όνομα flights.pl. Άσκηση 7 Στις αυτοκινητοβιομηχανίες, τα αυτοκίνητα κατασκευάζονται σε μία γραμμή συναρμολόγησης (assembly line). Σ ένα δεδομένο χρονικό διάστημα, π.χ. μία ημέρα, πρέπει να κατασκευασθεί ένας συγκεκριμένος αριθμός αυτοκινήτων από κάποιο μοντέλο που παράγει η εταιρεία, τα οποία δεν είναι κατ ανάγκη απολύτως όμοια στον εξοπλισμό τους. Κάποια αυτοκίνητα μπορεί να διαθέτουν κλιματισμό, κάποια άλλα όχι. Κάποια μπορεί να έχουν ηλιοροφή, άλλα όχι. Γενικώς, υπάρχει ένα σύνολο από επιλογές (κλιματισμός, ηλιοροφή, ηχοσύστημα, δερμάτινα καθίσματα, ζάντες αλουμινίου, κλπ.), που, με βάση τις παραγγελίες προς την εταιρεία, άλλα αυτοκίνητα πρέπει να διαθέτουν κάποια επιλογή, ενώ άλλα όχι. Δύο αυτοκίνητα που απαιτούν τις ίδιες ακριβώς επιλογές λέμε ότι ανήκουν στην ίδια σύνθεση (configuration). Για κάθε πιθανή επιλογή στον εξοπλισμό του μοντέλου, υπάρχει μία ομάδα εργασίας που δουλεύει σε κάποια περιοχή της γραμμής συναρμολόγησης. Όμως, για να μπορεί η κάθε ομάδα εργασίας να φέρει σε πέρας το έργο της, πρέπει, όσον αφορά την επιλογή με την οποία ασχολείται, να μην υπάρχουν ποτέ σε κάθε M συνεχόμενα αυτοκίνητα στη γραμμή συναρμολόγησης περισσότερα από K που να απαιτούν την επιλογή. Τα M και K είναι συγκεκριμένα για κάθε δυνατή επιλογή. Η απαίτηση αυτή ονομάζεται περιορισμός χωρητικότητας (capacity constraint). Το πρόβλημα της δρομολόγησης παραγωγής αυτοκινήτων (car sequencing) συνίσταται στον καθορισμό της σειράς με την οποία πρέπει να παραχθούν N αυτοκίνητα σε μία γραμμή συναρμολόγησης, έχοντας επίσης δεδομένες τις δυνατές επιλογές, τους περιορισμούς χωρητικότητάς τους και τα πλήθη των αυτοκινήτων που αντιστοιχούν σε επιθυμητές συνθέσεις (συνδυασμοί επιλογών). Ορίστε ένα κατηγόρημα carseq/1, το οποίο όταν καλείται σαν carseq(s), να επιστρέφει στο S τη σειρά με την οποία πρέπει να τοποθετηθούν αυτοκίνητα των διαφόρων πιθανών συνθέσεων σε μία γραμμή συναρμολόγησης. Το S που επιστρέφεται πρέπει να είναι μία λίστα, κάθε στοιχείο της οποίας είναι ο αύξων αριθμός της σύνθεσης στην οποία ανήκει το αντίστοιχο αυτοκίνητο στη γραμμή συναρμολόγησης. Τα δεδομένα του προβλήματος δίνονται μέσω των κατηγορημάτων classes/1 και options/1. Ένα παράδειγμα δεδομένων είναι το εξής: classes([1,1,2,2,2,2]).

Page 9 of 10 options([2/1/[1,0,0,0,1,1], 3/2/[0,0,1,1,0,1], 3/1/[1,0,0,0,1,0], 5/2/[1,1,0,1,0,0], 5/1/[0,0,1,0,0,0]]). Τα παραπάνω δεδομένα περιγράφουν την εξής κατάσταση: Υπάρχουν 6 πιθανές συνθέσεις, όσα είναι τα στοιχεία της λίστας που είναι όρισμα στο κατηγόρημα classes/1. Η πρώτη σύνθεση περιλαμβάνει 1 αυτοκίνητο, η δεύτερη επίσης 1, η τρίτη 2 αυτοκίνητα, κοκ. Συνολικά πρέπει να κατασκευασθούν 10 αυτοκίνητα, όσο είναι το άθροισμα των στοιχείων της λίστας που δίνεται μέσω του classes/1. Υπάρχουν 5 πιθανές επιλογές, όσα είναι τα στοιχεία της λίστας που είναι όρισμα στο κατηγόρημα options/1. Κάθε επιλογή ορίζεται μέσω μίας τριάδας Μ/Κ/Ο, όπου τα M και K εκφράζουν τον περιορισμό χωρητικότητας της επιλογής (το πολύ K αυτοκίνητα σε κάθε M συνεχόμενα στη γραμμή συναρμολόγησης πρέπει να απαιτούν την επιλογή) και το O είναι μία λίστα από 1 και 0, μήκους όσο το πλήθος των πιθανών συνθέσεων, που εκφράζει το αν η εν λόγω επιλογή περιλαμβάνεται στην αντίστοιχη σύνθεση (τιμή 1) ή όχι (τιμή 0). Για παράδειγμα, το πρώτο στοιχείο της λίστας που δίνεται μέσω του options/1 αντιστοιχεί σε μία επιλογή (π.χ. κλιματισμός) και εκφράζει ότι πρέπει να υπάρχει το πολύ 1 αυτοκίνητο σε κάθε 2 συνεχόμενα στη γραμμή συναρμολόγησης που να απαιτεί την επιλογή και ότι η εν λόγω επιλογή περιλαμβάνεται στην 1 η, την 5 η και την 6 η σύνθεση. Ομοίως και για τις άλλες επιλογές. Τα γεγονότα classes/1 και options/1 που δίνονται παραπάνω μπορείτε να τα βρείτε στο αρχείο http://www.di.uoa.gr/~takis/carseq_data1.pl. Τα αποτελέσματα εκτέλεσης για τα δεδομένα αυτά είναι:?- carseq(s). S = [1, 2, 6, 3, 5, 4, 4, 5, 3, 6] --> ; S = [1, 3, 6, 2, 5, 4, 3, 5, 4, 6] --> ; S = [1, 3, 6, 2, 6, 4, 5, 3, 4, 5] --> ; S = [5, 4, 3, 5, 4, 6, 2, 6, 3, 1] --> ; S = [6, 3, 5, 4, 4, 5, 3, 6, 2, 1] --> ; S = [6, 4, 5, 3, 4, 5, 2, 6, 3, 1] --> ; Το πρώτο από τα αποτελέσματα ([1, 2, 6, 3, 5, 4, 4, 5, 3, 6]) εκφράζει ότι η αλυσίδα συναρμολόγησης πρέπει να αποτελείται κατά σειρά από ένα αυτοκίνητο της 1 ης σύνθεσης, ένα της 2 ης, ένα της 6 ης, ένα της 3 ης, κοκ. Όπως παρατηρείτε, για τα δεδομένα αυτά, υπάρχουν έξι δυνατές λύσεις. Δεδομένα για άλλο στιγμιότυπο του προβλήματος, μεγαλύτερου μεγέθους, βρίσκονται στο http://www.di.uoa.gr/~takis/carseq_data2.pl. Κάποιες λύσεις για αυτό το στιγμιότυπο είναι οι εξής:?- carseq(s). S = [1, 4, 7, 15, 3, 16, 2, 10, 8, 15, 1, 13, 2, 15, 8, 9, 2, 17, 3, 15, 6, 10, 3, 17, 5, 9, 7, 11, 5, 17, 1, 10, 8, 15, 5, 12, 5, 10, 7, 11, 5, 16, 3, 10, 7, 11, 5, 16, 3, 10, 7, 11, 5, 16, 3, 15, 7, 11, 1, 17, 3, 15, 7, 9, 5,

Page 10 of 10 17, 5, 11, 6, 15, 5, 17, 7, 9, 8, 15, 7, 11, 1, 17, 8, 17, 14, 11, 7, 16, 7, 11, 14, 17, 11, 14, 17, 11, 14, 17, 11, 14, 17, 18] --> ; S = [1, 4, 7, 15, 3, 16, 2, 10, 8, 15, 1, 13, 2, 15, 8, 9, 2, 17, 3, 15, 6, 10, 3, 17, 5, 9, 7, 11, 5, 17, 1, 10, 8, 15, 5, 12, 5, 10, 7, 11, 5, 16, 3, 10, 7, 11, 5, 16, 3, 10, 7, 11, 5, 16, 3, 15, 7, 11, 1, 17, 3, 15, 7, 9, 5, 17, 5, 11, 6, 15, 5, 17, 7, 9, 8, 15, 7, 11, 1, 17, 8, 17, 14, 11, 7, 16, 7, 11, 14, 17, 11, 14, 17, 11, 14, 17, 11, 17, 14, 18] --> ;... Μην αποπειραθείτε να βρείτε όλες τις λύσεις για τα προηγούμενα δεδομένα. Είναι υπερβολικά πολλές. Για τα δεδομένα στο αρχείο http://www.di.uoa.gr/~takis/carseq_data3.pl, έχουμε (με κάποιο μη αμελητέο χρόνο εκτέλεσης):?- carseq(s). Παραδοτέο για την άσκηση είναι ένα πηγαίο αρχείο Prolog με όνομα carseq.pl.