Πρόγραμμα σε Prolog για την επιλογή ενοικίασης διαμερίσματος από πελάτες ενός μεσιτικού γραφείου.
Το πρόγραμμα αυτό αναπτύχθηκε στο πλαίσιο εργασίας για το μάθημα "Υπολογιστική Λογική & Λογικός Προγραμματισμός".
Να αναπτύξετε ένα πρόγραμμα σε Prolog για την επιλογή ενοικίασης διαμερίσματος από πελάτες ενός μεσιτικού γραφείου. Τα διαθέσιμα διαμερίσματα καθώς και οι απαιτήσεις των πελατών θα βρίσκονται καταχωρημένα ως γεγονότα σε δύο αρχεία με όνομα houses.pl και requests.pl, αντίστοιχα, τα οποία θα φορτώνονται αυτόματα. Τα διαθέσιμα στοιχεία για κάθε διαμέρισμα είναι τα εξής:
- Διεύθυνση διαμερίσματος (συμβολοσειρά, παίζει το ρόλο του μοναδικού ονόματος, θεωρήστε
- ότι υπάρχει ένα διαμέρισμα ανά διεύθυνση)
- Αριθμός υπνοδωματίων (θετικός ακέραιος)
- Όροφος (θετικός ακέραιος ή μηδέν)
- Εμβαδόν (θετικός ακέραιος σε m² )
- Ενοίκιο (ανά μήνα, θετικός ακέραιος σε €)
- Εμβαδόν κήπου (θετικός ακέραιος ή μηδέν σε m² )
- Ύπαρξη ανελκυστήρα (yes/no)
- Βρίσκεται στο κέντρο της πόλης; (yes/no)
- Επιτρέπονται κατοικίδια ζώα στην πολυκατοικία; (yes/no)
Τα διαμερίσματα που θα υπάρχουν στη βάση γνώσης του συστήματος ορίζονται στο αρχείο houses.pl.
Οι παραπάνω πληροφορίες θα συνδυάζονται με τις απαιτήσεις του επίδοξου ενοικιαστή. Θα υπάρχουν 2 τρόποι λειτουργίας του συστήματος:
- Διαδραστικά με τον χρήστη (interactive mode), οπότε οι απαιτήσεις του ενοικιαστή θα ερωτώνται από το σύστημα κατά τη διάρκεια της εκτέλεσης. .Μαζικά (batch mode), οπότε οι απαιτήσεις των ενοικιαστών θα βρίσκονται καταχωρημένες στα γεγονότα που θα φορτώνονται από το αρχείο requests.pl.
- Απαιτήσεις σχετικές με το διαμέρισμα
- Ελάχιστο επιθυμητό εμβαδόν διαμερίσματος (π.χ. 45m 2 )
- Ελάχιστος αριθμός υπνοδωματίων (π.χ. 2)
- Απαίτηση για ύπαρξη ανελκυστήρα
- Ο ενοικιαστής θέτει ένα όριο στον όροφο που θα πρέπει να βρίσκεται το διαμέρισμα από τον οποίο και πάνω η πολυκατοικία πρέπει να έχει ανελκυστήρα (π.χ. αν το διαμέρισμα βρίσκεται από τον 3 ο όροφο και πάνω πρέπει να έχει ανελκυστήρα, ενώ αν βρίσκεται κάτω από τον 3 ο όροφο τότε μπορεί και να μην έχει ανελκυστήρα)
- Απαίτηση για κατοικίδια ζώα (π.χ. στο διαμέρισμα πρέπει να επιτρέπονται κατοικίδια)
- Απαιτήσεις σχετικές με το ενοίκιο
- Μέγιστο διαθέσιμο ποσό για διαμέρισμα που καλύπτει τις ελάχιστες απαιτήσεις του σχετικά με το εμβαδόν και βρίσκεται στο κέντρο της πόλης (π.χ. αν το διαμέρισμα βρίσκεται στο κέντρο ο πελάτης διατίθεται να δώσει μέχρι 300€)
- Μέγιστο διαθέσιμο ποσό για διαμέρισμα που καλύπτει τις ελάχιστες απαιτήσεις του σχετικά με το εμβαδόν και βρίσκεται στα προάστια (π.χ. αν το διαμέρισμα βρίσκεται στα προάστια ο πελάτης διατίθεται να δώσει μέχρι 250€)
- Μέγιστο επιπλέον διαθέσιμο ποσό για κάθε τετραγωνικό μέτρο εμβαδού διαμερίσματος πέραν της ελάχιστης απαίτησης (π.χ. αν το διαμέρισμα έχει εμβαδόν ΧΧm 2 παραπάνω από την ελάχιστη απαίτηση τότε ο πελάτης διατίθεται να δώσει ΧΧ*5€ παραπάνω από τα προηγούμενα ποσά)
- Μέγιστο επιπλέον διαθέσιμο ποσό για κάθε τετραγωνικό μέτρο κήπου (π.χ. αν το διαμέρισμα έχει κήπο με εμβαδόν ΧΧm 2 τότε ο πελάτης διατίθεται να δώσει ΧΧ*2€ παραπάνω από τα προηγούμενα ποσά)
- Άνω όριο διαθέσιμου ποσού (π.χ. μετά το βασικό ποσό και τις προσαυξήσεις λόγω παραπάνω τετραγωνικών και κήπου, ο πελάτης δεν μπορεί να δώσει πάνω από 400€ το μήνα)
Οι απαιτήσεις των επίδοξων ενοικιαστών που θα υπάρχουν στη βάση γνώσης του συστήματος για τη
λειτουργία σε batch mode ορίζονται στο αρχείο requests.pl.
Στη διαδραστική λειτουργία, το πρόγραμμα θα ζητάει μία-μία τις απαιτήσεις και στο τέλος θα τυπώνει
ένα ή περισσότερα διαμερίσματα που ικανοποιούν τις απαιτήσεις του υποψήφιου ενοικιαστή, τυπώνοντας
τα στην οθόνη με ευανάγνωστο τρόπο. Αν δεν υπάρχουν σπίτια που ταιριάζουν στον ενοικιαστή, τότε να
τυπώνεται το ανάλογο μήνυμα, το οποίο θα πρέπει όμως να μην τυπώνεται όταν υπάρχουν κατάλληλα
διαμερίσματα.
Αφού τυπωθούν τα διαμερίσματα που ικανοποιούν τις απαιτήσεις του υποψήφιου ενοικιαστή, στη συνέχεια το σύστημα θα πρέπει να τυπώνει στην οθόνη τις διευθύνσεις (μόνο) των διαμερισμάτων που προτείνει προς ενοικίαση βάσει των ακόλουθων προτιμήσεων (οι οποίες υποτίθεται ότι είναι κοινές για όλους τους ενοικιαστές):
- Αν υπάρχει ένα διαμέρισμα φθηνότερο από όλα τα άλλα τότε να προτείνεται αυτό.
- Αν υπάρχουν περισσότερα του ενός φθηνότερα διαμερίσματα, τότε να προτείνεται αυτό που έχει το μεγαλύτερο κήπο.
- Αν υπάρχουν περισσότερα του ενός διαμερίσματα με τα παραπάνω χαρακτηριστικά, τότε να προτείνεται το μεγαλύτερο από αυτά (σε εμβαδόν).
Στη λειτουργία batch mode, το πρόγραμμα θα τυπώνει ΟΛΑ τα παραπάνω, για ΚΑΘΕ υποψήφιο
ενοικιαστή, χωρίς να ζητάει τις απαιτήσεις από τον χρήστη, αφού οι απαιτήσεις θα έχουν "φορτωθεί" από
το αρχείο requests.pl.
Τέλος, το πρόγραμμα θα πρέπει να υποστηρίζει και μία τρίτη λειτουργία επιλογής πελατών για κάθε σπίτι
βάσει δημοπρασίας. Στη λειτουργία αυτή, όταν υπάρχουν σπίτια τα οποία "διεκδικούν" παραπάνω από
ένας υποψήφιοι ενοικιαστές (δηλαδή σπίτια που προτείνονται ως "προτιμότερα" για παραπάνω από έναν
ενοικιαστές), τότε το πρόγραμμα θα "κατοχυρώνει" κάθε διεκδικούμενο σπίτι στον πλειοδότη, δηλαδή σε
αυτόν που είναι διατεθειμένος να προσφέρει το μεγαλύτερο ενοίκιο, με βάση τις "Απαιτήσεις σχετικές με
το ενοίκιο", παραπάνω. Στην περίπτωση αυτή, οι υπόλοιποι υποψήφιοι ενοικιαστές που δε "κερδίζουν" το
σπίτι, θα πρέπει να "διεκδικήσουν" ένα από τα υπόλοιπα σπίτια που πληρούν τις απαιτήσεις τους,
ξεκινώντας από το προτιμότερο, με βάση τα κριτήρια προτίμησης που φαίνονται παραπάνω. Η διαδικασία
τερματίζει όταν όλοι οι υποψήφιοι ενοικιαστές έχουν κατοχυρώσει κάποιο σπίτι ή αν δεν μπορεί να
κατοχυρωθεί κανένα σπίτι για αυτούς. Για παράδειγμα, έστω ένας ενοικιαστής με βάση τις απαιτήσεις του
μπορεί να νοικιάσει 3 σπίτια (με σειρά προτίμησης), αλλά και τα 3 αυτά σπίτια με βάση την παραπάνω
διαδικασία κατοχυρώνονται σε άλλους υποψήφιους ενοικιαστές. Στην περίπτωση αυτή ο συγκεκριμένος
ενοικιαστής δε θα μπορεί να νοικιάσει κανένα σπίτι. Όταν υπάρχουν σπίτια τα οποία "διεκδικεί" μόνο
ένας υποψήφιος ενοικιαστής, τότε προφανώς αυτά κατοχυρώνονται στους μοναδικούς υποψήφιους
ενοικιαστές τους. Το πρόγραμμα θα πρέπει να τυπώνει για κάθε υποψήφιο ενοικιαστή το διαμέρισμα το
οποίο του κατοχυρώθηκε ή ότι δεν του κατοχυρώθηκε κανένα διαμέρισμα.
Το όλο πρόγραμμα θα λειτουργεί με τη χρήση της εντολής run, η οποία θα δίνεται από το prompt της SWI Prolog. Στη συνέχεια θα εμφανίζεται μενού από το οποίο ο χρήστης θα μπορεί να επιλέγει τη λειτουργία που θα εκτελεστεί. Οι λειτουργίες που θα πρέπει να επιτελεί το πρόγραμμα είναι οι εξής:
- Διαδραστική λειτουργία με την εισαγωγή προτιμήσεων ενός πελάτη.
- Λειτουργία batch mode με τις μαζικές προτιμήσεις των πελατών.
- Λειτουργία δημοπρασίας.
- Έξοδος από το πρόγραμμα.
- Αν η επιλογή του χρήστη δεν είναι κάποια από τις παραπάνω, τότε να τυπώνεται μήνυμα και να επανέρχεται το πρόγραμμα στο μενού. Επίσης, μετά το τέλος κάθε εργασίας να επανέρχεται το πρόγραμμα στο μενού.
Μενού:
======
1. - Προτιμήσεις ενός πελάτη
2. - Μαζικές προτιμήσεις πελατών
3. - Επιλογή πελατών μέσω δημοπρασίας
0. - Έξοδος
Επιλογή: 1.
Δώσε τις παρακάτω πληροφορίες:
==============================
Ελάχιστο Εμβαδόν: |: 45.
Ελάχιστος αριθμός υπονοδωματίων: |: 2.
Να επιτρέπονται κατοικίδια; (yes/no) |: yes.
Από ποιον όροφο και πάνω να υπάρχει ανελκυστήρας; |: 3.
Ποιο είναι το μέγιστο ενοίκιο που μπορείς να πληρώσεις; |: 400.
Πόσα θα έδινες για ένα διαμέρισμα στο κέντρο της πόλης (στα ελάχιστα τετραγωνικά); |: 300.
Πόσα θα έδινες για ένα διαμέρισμα στα προάστια της πόλης (στα ελάχιστα τετραγωνικά); |: 250.
Πόσα θα έδινες για κάθε τετραγωνικό διαμερίσματος πάνω από το ελάχιστο; |: 5.
Πόσα θα έδινες για κάθε τετραγωνικό κήπου; |: 2.
Κατάλληλο σπίτι στην διεύθυνση: Κηφισίας 10
Υπνοδωμάτια: 2
Εμβαδόν: 65
Εμβαδόν κήπου: 0
Είναι στο κέντρο της πόλης: no
Επιτρέπονται κατοικίδια: yes
Όροφος: 2
Ανελκυστήρας: no
Ενοίκιο: 350
Κατάλληλο σπίτι στην διεύθυνση: Τσιμισκή 97
Υπνοδωμάτια: 3
Εμβαδόν: 55
Εμβαδόν κήπου: 15
Είναι στο κέντρο της πόλης: yes
Επιτρέπονται κατοικίδια: yes
Όροφος: 0
Ανελκυστήρας: no
Ενοίκιο: 350
Κατάλληλο σπίτι στην διεύθυνση: Ερμού 22
Υπνοδωμάτια: 3
Εμβαδόν: 65
Εμβαδόν κήπου: 12
Είναι στο κέντρο της πόλης: yes
Επιτρέπονται κατοικίδια: yes
Όροφος: 1
Ανελκυστήρας: no
Ενοίκιο: 375
Προτείνεται η ενοικίαση του διαμερίσματος στην διεύθυνση: Τσιμισκή 97
Μενού:
======
1. - Προτιμήσεις ενός πελάτη
2. - Μαζικές προτιμήσεις πελατών
3. - Επιλογή πελατών μέσω δημοπρασίας
0. - Έξοδος
Επιλογή: 1.
Δώσε τις παρακάτω πληροφορίες:
==============================
Ελάχιστο Εμβαδόν: |: 100.
Ελάχιστος αριθμός υπονοδωματίων: |: 5.
Να επιτρέπονται κατοικίδια; (yes/no) |: yes.
Από ποιον όροφο και πάνω να υπάρχει ανελκυστήρας; |: 0.
Ποιο είναι το μέγιστο ενοίκιο που μπορείς να πληρώσεις; |: 100.
Πόσα θα έδινες για ένα διαμέρισμα στο κέντρο της πόλης (στα ελάχιστα τετραγωνικά); |: 50.
Πόσα θα έδινες για ένα διαμέρισμα στα προάστια της πόλης (στα ελάχιστα τετραγωνικά); |: 25.
Πόσα θα έδινες για κάθε τετραγωνικό διαμερίσματος πάνω από το ελάχιστο; |: 2.
Πόσα θα έδινες για κάθε τετραγωνικό κήπου; |: 1.
Δεν υπάρχει κατάλληλο σπίτι!
Μενού:
======
1. - Προτιμήσεις ενός πελάτη
2. - Μαζικές προτιμήσεις πελατών
3. - Επιλογή πελατών μέσω δημοπρασίας
0. - Έξοδος
Επιλογή:
Δώσε τις παρακάτω πληροφορίες:
==============================
Ελάχιστο Εμβαδόν: |: 50.
Ελάχιστος αριθμός υπονοδωματίων: |: 3.
Να επιτρέπονται κατοικίδια; (yes/no) |: yes.
Από ποιον όροφο και πάνω να υπάρχει ανελκυστήρας; |: 1.
Ποιο είναι το μέγιστο ενοίκιο που μπορείς να πληρώσεις; |: 500.
Πόσα θα έδινες για ένα διαμέρισμα στο κέντρο της πόλης (στα ελάχιστα τετραγωνικά); |: 350.
Πόσα θα έδινες για ένα διαμέρισμα στα προάστια της πόλης (στα ελάχιστα τετραγωνικά); |: 300.
Πόσα θα έδινες για κάθε τετραγωνικό διαμερίσματος πάνω από το ελάχιστο; |: 7.
Πόσα θα έδινες για κάθε τετραγωνικό κήπου; |: 5.
Κατάλληλο σπίτι στην διεύθυνση: Τσιμισκή 97
Υπνοδωμάτια: 3
Εμβαδόν: 55
Εμβαδόν κήπου: 15
Είναι στο κέντρο της πόλης: yes
Επιτρέπονται κατοικίδια: yes
Όροφος: 0
Ανελκυστήρας: no
Ενοίκιο: 350
Προτείνεται η ενοικίαση του διαμερίσματος στην διεύθυνση: Τσιμισκή 97
Μενού:
======
1. - Προτιμήσεις ενός πελάτη
2. - Μαζικές προτιμήσεις πελατών
3. - Επιλογή πελατών μέσω δημοπρασίας
0. - Έξοδος
Επιλογή: 5.
Επίλεξε έναν αριθμό μεταξύ 0 έως 3!
Μενού:
======
1. - Προτιμήσεις ενός πελάτη
2. - Μαζικές προτιμήσεις πελατών
3. - Επιλογή πελατών μέσω δημοπρασίας
0. - Έξοδος
Επιλογή: 2.
Κατάλληλα διαμερίσματα για τον πελάτη: John Smith:
=======================================
Κατάλληλο σπίτι στην διεύθυνση: Κηφισίας 10
Υπνοδωμάτια: 2
Εμβαδόν: 65
Εμβαδόν κήπου: 0
Είναι στο κέντρο της πόλης: no
Επιτρέπονται κατοικίδια: yes
Όροφος: 2
Ανελκυστήρας: no
Ενοίκιο: 350
Κατάλληλο σπίτι στην διεύθυνση: Τσιμισκή 97
Υπνοδωμάτια: 3
Εμβαδόν: 55
Εμβαδόν κήπου: 15
Είναι στο κέντρο της πόλης: yes
Επιτρέπονται κατοικίδια: yes
Όροφος: 0
Ανελκυστήρας: no
Ενοίκιο: 350
Κατάλληλο σπίτι στην διεύθυνση: Ερμού 22
Υπνοδωμάτια: 3
Εμβαδόν: 65
Εμβαδόν κήπου: 12
Είναι στο κέντρο της πόλης: yes
Επιτρέπονται κατοικίδια: yes
Όροφος: 1
Ανελκυστήρας: no
Ενοίκιο: 375
Προτείνεται η ενοικίαση του διαμερίσματος στην διεύθυνση: Τσιμισκή 97
Κατάλληλα διαμερίσματα για τον πελάτη: Nick Cave:
=======================================
Κατάλληλο σπίτι στην διεύθυνση: Κηφισίας 10
Υπνοδωμάτια: 2
Εμβαδόν: 65
Εμβαδόν κήπου: 0
Είναι στο κέντρο της πόλης: no
Επιτρέπονται κατοικίδια: yes
Όροφος: 2
Ανελκυστήρας: no
Ενοίκιο: 350
Κατάλληλο σπίτι στην διεύθυνση: Τσιμισκή 97
Υπνοδωμάτια: 3
Εμβαδόν: 55
Εμβαδόν κήπου: 15
Είναι στο κέντρο της πόλης: yes
Επιτρέπονται κατοικίδια: yes
Όροφος: 0
Ανελκυστήρας: no
Ενοίκιο: 350
Κατάλληλο σπίτι στην διεύθυνση: Ερμού 22
Υπνοδωμάτια: 3
Εμβαδόν: 65
Εμβαδόν κήπου: 12
Είναι στο κέντρο της πόλης: yes
Επιτρέπονται κατοικίδια: yes
Όροφος: 1
Ανελκυστήρας: no
Ενοίκιο: 375
Προτείνεται η ενοικίαση του διαμερίσματος στην διεύθυνση: Τσιμισκή 97
Κατάλληλα διαμερίσματα για τον πελάτη: George Harris:
=======================================
Κατάλληλο σπίτι στην διεύθυνση: Τσιμισκή 97
Υπνοδωμάτια: 3
Εμβαδόν: 55
Εμβαδόν κήπου: 15
Είναι στο κέντρο της πόλης: yes
Επιτρέπονται κατοικίδια: yes
Όροφος: 0
Ανελκυστήρας: no
Ενοίκιο: 350
Προτείνεται η ενοικίαση του διαμερίσματος στην διεύθυνση: Τσιμισκή 97
Κατάλληλα διαμερίσματα για τον πελάτη: Harrison Ford:
=======================================
Κατάλληλο σπίτι στην διεύθυνση: Πλαστήρα 72
Υπνοδωμάτια: 2
Εμβαδόν: 55
Εμβαδόν κήπου: 15
Είναι στο κέντρο της πόλης: no
Επιτρέπονται κατοικίδια: no
Όροφος: 1
Ανελκυστήρας: yes
Ενοίκιο: 330
Κατάλληλο σπίτι στην διεύθυνση: Τσικλητήρα 13
Υπνοδωμάτια: 3
Εμβαδόν: 65
Εμβαδόν κήπου: 0
Είναι στο κέντρο της πόλης: no
Επιτρέπονται κατοικίδια: no
Όροφος: 2
Ανελκυστήρας: yes
Ενοίκιο: 320
Προτείνεται η ενοικίαση του διαμερίσματος στην διεύθυνση: Τσικλητήρα 13
Κατάλληλα διαμερίσματα για τον πελάτη: Will Smith:
=======================================
Δεν υπάρχει κατάλληλο σπίτι!
Μενού:
======
1. - Προτιμήσεις ενός πελάτη
2. - Μαζικές προτιμήσεις πελατών
3. - Επιλογή πελατών μέσω δημοπρασίας
0. - Έξοδος
Επιλογή: 3.
Ο πελάτης John Smith θα νοικιάσει το διαμέρισμα στην διεύθυνση: Ερμού 22
Ο πελάτης Nick Cave θα νοικιάσει το διαμέρισμα στην διεύθυνση: Κηφισίας 10
Ο πελάτης George Harris θα νοικιάσει το διαμέρισμα στην διεύθυνση: Τσιμισκή 97
Ο πελάτης Harrison Ford θα νοικιάσει το διαμέρισμα στην διεύθυνση: Τσικλητήρα 13
Ο πελάτης Will Smith δεν θα νοικιάσει κάποιο διαμέρισμα!
Μενού:
======
1. - Προτιμήσεις ενός πελάτη
2. - Μαζικές προτιμήσεις πελατών
3. - Επιλογή πελατών μέσω δημοπρασίας
0. - Έξοδος
Επιλογή: 5.
true .