ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 231: Δομές Δεδομένων και Αλγόριθμοι Εαρινό Εξάμηνο 2013 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 3 Διδάσκων Καθηγητής: Παναγιώτης Ανδρέου Ημερομηνία Υποβολής: 05/04/2013 Ημερομηνία Παράδοσης: 19/04/2013 ΠΕΡΙΓΡΑΦΗ Σε αυτή την άσκηση καλείστε να υλοποιήσετε το πρόγραμμα Προσομοίωσης Ασύρματου Δικτύου Αισθητήρων (Wireless Sensor Network Simulator) για την ανταλλαγή και διαχείριση μέσα σε ένα τέτοιο δίκτυο. Το πρόγραμμά σας θα ονομάζεται WSNSimulator. Ένα Ασύρματο Δίκτυο Αισθητήρων (ΑΔΑ) είναι ένα σύνολο από υπολογιστικές μονάδες με περιορισμένη υπολογιστική δύναμη και μικρή μνήμη. Τα ΑΔΑ μπορούν να τοποθετηθούν σε δάση, εργοστάσια, κτλ. διασκορπίζοντας τους ασύρματους αισθητήρες με κάποιο τρόπο ο οποίος επιτρέπει την αποδοτική επικοινωνία μεταξύ τους και ανταλλαγή δεδομένων. Οι ασύρματοι αισθητήρες διαθέτουν ασύρματες αντένες που επιτρέπουν επικοινωνία ανάμεσα σε κάποιο αισθητήρα/κόμβο και στους κόμβους που βρίσκονται εντός του εύρους επικοινωνίας του. Επίσης, κάθε κόμβος διαθέτει ένα κυκλώματα τα οποία μετρούν διάφορες περιβαλλοντολογικές παραμέτρους όπως θερμοκρασία, υγρασία, κτλ. Στο συγκεκριμένο πρόβλημα, θεωρήστε ότι θα αναπτύξουμε ένα ΑΔΑ σε ένα δάσος με σκοπό να ελέγχουμε τη θερμοκρασία σε συγκεκριμένες περιοχές εντός του δάσους και να ενημερώνουμε τυχόν πυροσβεστικά κέντρα σε περίπτωση ανίχνευσης πυρκαγιάς.
Το πρόβλημα Θεωρήστε ένα δίκτυο ΑΔΑ όπως περιγράφεται πιο πάνω το οποίο αποτελείται από ένα σύνολο από ασύρματους αισθητήρες (sensors) και ένα σύνολο από κεντρικές μονάδες ελέγχου (πυροσβεστικούς σταθμούς). Κάθε μια από αυτές τις οντότητες διαθέτει κάποια τοποθεσία η οποία δίνεται ως ζεύγος από συντεταγμένες (x, y). Με βάση τις τοποθεσίες αυτές ορίζουμε την απόσταση στην οποία βρίσκονται δύο κόμβοι του δικτύου ως την μεταξύ τους Ευκλείδεια απόσταση. Δηλαδή, αν δύο κόμβοι βρίσκονται στα σημεία (x1, y1) και (x2, y2), αντίστοιχα, τότε η μεταξύ τους απόσταση είναι ίση με: Επιπλέον, υποθέτουμε ότι δύο κόμβοι μπορούν να επικοινωνήσουμε μεταξύ τους αν η μεταξύ τους απόσταση είναι μικρότερη του d, για κάποια τιμή d. Με άλλα λόγια το σύστημα μπορεί να θεωρηθεί ως ένας μη κατευθυνόμενος γράφος με βάρη: Κάθε κόμβος του γράφου αντιστοιχεί σε κάποιο sensor ή κέντρο ελέγχου και η ύπαρξη ακμής ανάμεσα στους κόμβους συνεπάγεται ότι η μεταξύ τους απόσταση είναι μικρότερη του d. Το βάρος της ακμής ανάμεσα σε δύο κόμβους αντιστοιχεί στη μεταξύ τους απόσταση. Το δίκτυο θα πρέπει να παρέχει τις πιο κάτω λειτουργίες: Σε περίπτωση που κάποιος κόμβος ανιχνεύσει ψηλές θερμοκρασίες στο περιβάλλον του θα πρέπει να αποστείλει μήνυμα συναγερμού πάνω στο δίκτυο με τελικό επιδιωκόμενο παραλήπτη του μηνύματος το κοντινότερο πυροσβεστικό κέντρο. Κατά τακτά διαστήματα, τα πυροσβεστικά κέντρα στο δάσος ζητούν να ενημερωθούν για την ψηλότερη θερμοκρασία που υπάρχει στο δάσος. Αυτό προϋποθέτει επικοινωνία με όλους τους κόμβους του δικτύου και υπολογισμό αυτής της μέγιστης τιμής. Για σκοπούς ελαχιστοποίησης του αριθμού μηνυμάτων που στέλλονται και κατ επέκταση της υπολογιστικής δύναμης (μπαταρία) που καταναλώνεται, οι λειτουργίες αυτές επιτυγχάνονται με την κατασκευή ενός ελάχιστου γεννητορικού δένδρου και τη χρήση του ως βάση για τους ζητούμενους υπολογισμούς. Για παράδειγμα, θεωρείστε το πιο κάτω δίκτυο, το οποίο αποτελείται από 5 κόμβους (Α,, Ε), όπου η ύπαρξης ακμής ανάμεσα σε δύο κόμβους δηλώνει την δυνατότητα ασύρματης επικοινωνίας ανάμεσα σε αυτούς και το βάρος της ακμής την απόσταση ανάμεσα στους κόμβους.
Το ελάχιστο γεννητορικό δένδρο του γράφου είναι το εξής: Αν ο κόμβος Α ζητήσει ενημέρωση για την ψηλότερη θερμοκρασία του δικτύου, θα ακολουθήσει μια επικοινωνία μηνυμάτων πάνω στο δένδρο έτσι ώστε: στην πρώτη φάση να ενημερωθούν όλοι οι κόμβοι για το αίτημα του Α και, στη δεύτερη φάση να επιστραφεί από κάθε κόμβο η μέγιστη θερμοκρασία στο δένδρο που ριζώνει στον κόμβο. Στο πιο κάτω σχήμα, σημειώνεται μια δυνατή σειρά μηνυμάτων που υλοποιούν αυτή την ιδέα: Ο κόμβος Α ενημερώνει τον κόμβο Β, ο οποίος με τη σειρά του ενημερώνει τον κόμβο C και στη συνέχεια ο C τους D και E για το αίτημα προς επεξεργασία (μηνύματα 1 4). Στη συνέχεια οι κόμβοι Ε και D ενημερώνουν τον πατέρα τους (κόμβος C) για τις θερμοκρασίες τους (μηνύματα 5 και 6 αντίστοιχα), ενώ ο κόμβος C ενημερώνει τον κόμβο Β για την μέγιστη θερμοκρασία στο υπό δενδρο που ριζώνει σε αυτόν (μήνυμα 7) και, τέλος, ο κόμβος Β ενημερώνει τον κόμβο Α για τη μέγιστη θερμοκρασία του δικτύου που ριζώνει στον Β. Σημειώστε ότι για να στείλει κάποιος κόμβος απάντηση στον πατέρα του θα πρέπει να έχει πάρει απαντήσεις από όλα τα παιδιά του.
Το πρόγραμμα Το πρόγραμμά σας θα πρέπει να παίρνει σαν όρισμα (στη γραμμή εντολής), την τιμή του d και το όνομα ενός αρχείου το οποίο θα περιέχει στοιχεία κόμβων: ID ΣΥΝΤΕΤΑΓΜΕΝΕΣ ΘΕΡΜΟΚΡΑΣΙΑ 01 (42, 85) 30 123 (210, 50) 32 353 (12, 345) 28 02 (190, 300) 30 12 (48, 105) 58 821 (153, 46) 25 όπου οι εγγραφές αυτές δηλώνουν την ύπαρξη κόμβου με ταυτότητα το πρώτο πεδίο (π.χ., 123), τοποθεσία τις συντεταγμένες που εμφανίζονται στο δεύτερο πεδίο (π.χ. (210,50)), και μέτρηση θερμοκρασίας που βρίσκεται στο τρίτο πεδίο (π.χ. 32). Σημειώστε ότι αν η ταυτότητα του κόμβου ξεκινά από 0 τότε ο κόμβος είναι κόμβος ελέγχου, διαφορετικά, είναι υπολογιστικός κόμβος. Κατά την εκκίνηση της εκτέλεσης του προγράμματος, τα στοιχεία του αρχείου που δόθηκε ως παράμετρος στο πρόγραμμα θα πρέπει να διαβάζονται και να κτίζεται ο γράφος που αντιστοιχεί σε αυτά. Αμέσως μετά, το πρόγραμμά σας θα πρέπει να κτίζει ένα ελάχιστο γεννητορικό δένδρο του γράφου. Στη συνέχεια το πρόγραμμά σας θα πρέπει προσφέρει μέσω ενός μενού τις πιο κάτω διαδικασίες: 1. Εκτύπωση του ελάχιστου γεννητορικού δένδρου του γράφου. 2. Εισαγωγή νέου κόμβου (ταυτότητα, συντεταγμένες και θερμοκρασία). Η διαδικασία αυτή θα πρέπει να κάνει τις απαραίτητες αλλαγές στο ελάχιστο γεννητορικό δένδρο που υπάρχει αποθηκευμένο. 3. Αποχώρηση κόμβου (ταυτότητα). Η διαδικασία αυτή θα πρέπει και πάλι να κάνει τις απαραίτητες αλλαγές στο ελάχιστο γεννητορικό δένδρο που υπάρχει αποθηκευμένο. 4. Αλλαγή θερμοκρασίας κόμβου (ταυτότητα, νέα θερμοκρασία). 5. Ενημέρωση του πυροσβεστικού κέντρου Α για πιθανή πυρκαγιά στον κόμβο Β, όπου τα Α και Β είναι ταυτότητες κόμβων και δίνονται ως παράμετρος από τον χρήστη. Η διαδικασία θα πρέπει να ελέγχει τη θερμοκρασία του κόμβου Β και, σε περίπτωση που η θερμοκρασία
αυτή υπερβαίνει τους 50 βαθμούς Κελσίου, να υπολογίζει και να εκτυπώνει μονοπάτι που να ξεκινά στον κόμβο Β και να καταλήγει στον κόμβο Α. Το μονοπάτι αυτό θα πρέπει να ανήκει στο ελάχιστο γεννητορικό δένδρο του γράφου. 6. ΒΟΝUS! Ενημέρωση του πυροσβεστικού κέντρου Α για πιθανή πυρκαγιά στον κόμβο Β, όπου τα Α και Β είναι ταυτότητες κόμβων και δίνονται ως παράμετρος από τον χρήστη μέσω του συντομότερου μονοπατιού. Η διαδικασία θα πρέπει να ελέγχει τη θερμοκρασία του κόμβου Β και, σε περίπτωση που η θερμοκρασία αυτή υπερβαίνει τους 50 βαθμούς Κελσίου, να υπολογίζει και να εκτυπώνει μονοπάτι που να ξεκινά στον κόμβο Β και να καταλήγει στον κόμβο Α. Το μονοπάτι αυτό θα πρέπει να είναι το συντομότερο μονοπάτι ανάμεσα στους δύο κόμβους. Δεν χρειάζεται να ανήκει στο ελάχιστο γεννητορικό δένδρο του γράφου. 7. Έξοδος από το πρόγραμμα επαναγράφοντας τα στοιχεία των κόμβων στο αρχείο όπως διαμορφώθηκαν κατά την εκτέλεση του προγράμματος. Το πρόβλημα πιθανόν να μην είναι πλήρως προδιαγραμμένο. Στην περίπτωση που αποφασίσετε ότι χρειάζεται επιπλέον διασαφήνιση του προβλήματος, μπορείτε να κάνετε οποιαδήποτε (λογική) υπόθεση εφόσον την δικαιολογήσετε στην έκθεσή σας.
ΑΞΙΟΛΟΓΗΣΗ Για την αξιολόγηση του προγράμματος σας, θα ληφθούν οι πιο κάτω παράμετροι: 50% Ορθότητα: ο πρόγραμμα σας πρέπει τρέχει ορθά για οποιαδήποτε είσοδο. 10% Κατανοητά σχόλια: Γράφετε κατανοητά σχόλια που να εξηγούν την λειτουργία της κάθε κλάσης/πεδίου/μεθόδου. 10% Αναφορά Προγράμματος: Θα πρέπει να παραδώσετε μία αναφορά η οποία να περιγράφει συνοπτικά τα διάφορα συστατικά (κλάσεις, μεθόδους, διαπροσωπείες, κτλ.) του προγράμματος σας. Επίσης, η αναφορά θα πρέπει να καταγράφει τυχόν υποθέσεων τις οποίες έχετε κάνει. 30% Αποδοτικότητα: το πρόγραμμα σας θα πρέπει να χρησιμοποιήσει αποδοτικές δομές δεδομένων και αλγόριθμους όπου αρμόζει. ΟΔΗΓΙΕΣ Στο πάνω μέρος της κάθε κλάσης να γράψετε με σχόλια το ονοματεπώνυμο και τον αριθμό ταυτότητας σας. Βεβαιωθείτε ότι τα προγράμματα σας είναι ορθά και τρέχουν. H άσκηση σας θα πρέπει να παραδοθεί στον υπεύθυνο βοηθό μέσω moodle σαν ένα zip αρχείο (που να περιλαμβάνει όλες τις κλάσεις που θα υλοποιήσετε και το έγγραφο τεκμηρίωσης) σε ηλεκτρονική μορφή και σε έντυπη μορφή την ημερομηνία παράδοσης. Το zip αρχείο θα πρέπει να περιλαμβάνει τον κώδικα σας που θα γίνει μέσω export από το eclipse σαν archive file και την αναφορά σας. Το zip αρχείο θα ονομάζεται με τον εξής τρόπο: epl231.pex3.<ταυτότητα>.zip Η αναφορά θα πρέπει να ονομάζεται με τον εξής τρόπο: epl231.pex3.<ταυτότητα>.[doc pdf] Μη τήρηση των ημερομηνιών παράδοσης των εργασιών συνεπάγεται τις ανάλογες βαθμολογικές επιπτώσεις (μέχρι τον μηδενισμό της εργασίας). Οι προγραμματιστικές ασκήσεις θα ελέγχονται από ειδικό πρόγραμμα για την ανίχνευση των αντιγραφών. Οι αντιγραμμένες εργασίες θα μηδενίζονται και για τους αντιγραφείς θα εφαρμόζονται οι κανόνες τού Πανεπιστημίου. Αποφύγετε λοιπόν την αντιγραφή προγραμμάτων από άλλους συναδέλφους σας, διότι έτσι εκτίθετε και αυτούς και τον εαυτό σας στον κίνδυνο μηδενισμού και πειθαρχικής δίωξης. ΚΑΛΗ ΕΠΙΤΥΧΙΑ!!!