ΤΕΙ ΣΕΡΡΩΝ ΤΜΗΜΑ ΛΟΓΙΣΤΙΚΗΣ ΠΜΣ ΛΟΓΙΣΤΙΚΗΣ ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΑ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΑΛΕΞΗ 4 ΒΑΣΙΚΗ ΘΕΩΡΙΑ ΓΡΑΦΩΝ ΦΥΛΛΟ ΕΡΓΟΥ Απαραίτητη μελέτη πριν την εκπόνηση του εργαστηρίου: Το 4 ο Κεφάλαιο (χωρίς τα κατευθυνόμενα γραφήματα) του βιβλίου των Wasserman-Faust (από το dkydros.wordpress.com) Απαραίτητο λογισμικό: Δωρεάν Λογισμικό PAJEK (από το dkydros.wordpress.com) ΣΚΟΠΟΣ: 1. Βασικός τρόπος χρήσης του λογισμικού. 2. Άνοιγμα, δημιουργία, αλλαγή δικτύου. 3. Τρόποι παρουσίασης αλγόριθμοι τοποθέτησης και χρήση τους. 4. Κατηγορήματα κορυφών (attributes), σχεδιασμός 5. Βασικές πληροφορίες δικτύου (info) 6. Εύρεση διαδρομών. 7. Προσθήκη διαγραφή γραμμών - κορυφών ΠΑΡΑΔΟΤΕΑ: Το Εργαστήριο αυτό θα εκπονηθεί εξ ολοκλήρου στους υπολογιστές του ΠΜΣ. Δεν υπάρχει παραδοτέο. 1. Εγκατάσταση λογισμικού. a. Στην επιφάνεια εργασία σας βλέπετε το αρχείο PAJEK126. Διπλοπατήστε και εκτελέστε το πρόγραμμα. Απαντήστε ΟΚ διαδοχικά και <START>. Επιλέξτε ως κατάλογο εγκατάστασης το δίσκο D:\pajek και ΟΧΙ το c:\pajek b. Μόλις ολοκληρωθεί η εγκατάσταση του λογισμικού, πατήστε ΟΚ. c. Ανοίξτε το D:\pajek και εκτελέστε τη συντόμευση με το ίδιο όνομα. Η οθόνη που βλέπετε είναι η ακόλουθη:
d. Παρατηρήστε τα μενού. Δείτε επίσης τη στήλη επιλογών στα αριστερά της οθόνης ( networks, partitions, vectors, permutation, cluster, hierarchy). Για κάθε μία από αυτές τις επιλογές, μπορούμε: Να ανοίξουμε, να αποθηκεύσουμε και να επεξεργαστούμε. 2. Τα αρχεία που περιέχουν δίκτυα τελειώνουν σε.net. Πάνω στην επιφάνεια εργασίας σας υπάρχει το αρχείο lunch.net. a. Από την επιλογή Networks <<ανοίξτε>> το αρχείο lunch.net. Παρατηρήστε ότι θα διαβάσει κάποιες γραμμές (81). Κλείστε το παράθυρο Report (προσέξτε μη κλείσετε όλο το pajek αλλά μόνο το report. b. Δίπλα στο Networks θα δείτε τη γραμμή: 1. D:\...\lunch.net (26). Το 26 είναι το πλήθος των κορυφών αυτού του δικτύου. Πρόκειται για 26 κυρίες που προσκαλούν η μία την άλλη σε γεύμα. Κάθε κορυφή είναι μία κυρία. Κάθε ακμή είναι μία πρόσκληση σε γεύμα. Είναι πιθανόν να υπάρχουν περισσότερες από μία προσκλήσεις ανάμεσα στις ίδιες κυρίες. Επιπλέον, κάθε πρόσκληση δεν έχει απαραίτητα και την αντίθετη κατεύθυνση. Πρόκειται για ένα κατευθυνόμενο δίκτυο. c. Κάντε διπλό κλικ πάνω στο όνομα του δικτύου (γραμμή networks). Θα δείτε ένα παράθυρο διαλόγου με τρεις πιθανές επιλογές (1, 2 ή 3):
Δοκιμάστε με τη σειρά τις επιλογές 1, 2 και 3. Για κάθε μία θα δείτε την εσωτερική αναπαράσταση του δικτύου (1 ως απλό γράφο, 2 ως δίκτυο με βάρη, 3 σε μορφή λίστας). Βεβαιωθείτε ότι καταλαβαίνετε κάθε αναπαράσταση! Κάθε φορά κλείνετε την προηγούμενη αναπαράσταση για να προχωρήσετε στην επόμενη. 3. Πηγαίνετε στο μενού Draw. Επιλέξτε Draw. Μεγιστοποιήστε το παράθυρο που προκύπτει: Παρατηρείστε το δίκτυο. Κάθε ακμή σημειώνεται με την κατεύθυνση του βέλους. Κάποιες ακμές έχουν βέλος και προς τις δύο πλευρές (ada<->cora) ενώ άλλες μόνο προς τη μία κατεύθυνση (ada->louise). a. Επιλέξτε GraphOnly. Οι ετικέτες των κορυφών και οι κατευθύνσεις των τόξων θα εξαφανιστούν. b. Επιλέξτε options->mark vertices Using->labels. Τα ονόματα και τα τόξα θα εμφανιστούν ξανά. c. Επιλέξτε option->lines->mark lines-> with values. Πάνω από κάθε τόξο θα εμφανιστεί το πλήθος των προσκλήσεων. Για τόξα με διπλή κατεύθυνση θα εμφανιστούν δύο αριθμοί. Για παράδειγμα: στο τόξο Marion<->Martha, το 1 σημαίνει ότι η marion προσκάλεσε μία φορά τη Martha, ενώ το 2 σημαίνει ότι η Martha προσκάλεσε δύο φορές τη marion. d. Κάντε δεξί κλικ. Κρατήστε πατημένο και επιλέξτε μια «πυκνή» περιοχή. Θα γίνει μεγέθυνση της περιοχής για καλύτερη μελέτη. πατήστε previous για να κλείσει η μεγέθυνση. e. Επιλέξτε Layout->Circular->original. Όλες οι κορυφές θα τοποθετηθούν σε έναν κύκλο. Γενικά, σε αυτή την τοποθέτηση, εάν υπάρχει πλήρης κανονικότητα στις γραμμές, τότε το δίκτυο δεν εμφανίζει ιδιαίτερο ενδιαφέρον. Ωστόσο, εδώ, στα δεξιά και κάτω υπάρχει μη κανονικότητα, οπότε το δίκτυο μπορεί να έχει ιδιαίτερο ενδιαφέρον. f. Επιλέξτε Layout->energy->Fruchterman-Reingold->2d. Θα δείτε ότι οι κορυφές με περισσότερη «κίνηση» θα μετακινηθούν προς το κέντρο.
g. Επιλέξτε layout->energy->kamada-kawaii->free. Θα έχετε ένα σχέδιο όπως παρακάτω: Το σχέδιο αυτό μοιάζει πολύ με το αρχικό. Οι κορυφές έχουν τακτοποιηθεί ώστε αυτές που έχουν περισσότερους γραμμές μεταξύ τους να είναι πιο «κοντά» Παράλληλα, έχουν μειωθεί το πλήθος των τομών των γραμμών ενώ φαίνονται πιο καθαρά οι διάφορες ομάδες κορυφών με τα «κέντρα» τους. Προσοχή εδώ. Η Αρχική κατάσταση έχει πλέον χαθεί. Μαζί με το δίκτυο αποθηκεύονται και οι σχετικές θέσεις των κορυφών. Αν αποθηκεύουμε τώρα το δίκτυο, θα αποθηκευτεί και αυτό το συγκεκριμένο σχήμα. h. Κλείστε το σχέδιο. Επιλέξτε File->Network->Read και ΞΑΝΑΔΙΑΒΑΣΤΕ το lunch.net. Σχεδιάζοντάς το θα δείτε την αρχική κατάσταση. 4. Οι κορυφές μπορούν να έχουν επιπλέον χαρακτηριστικά. Στο παράδειγμά μας, σε κάθε κορυφή θα μπορούσαμε να αποθηκεύσουμε έναν ( ή και περισσότερους) αριθμούς. Θα δοκιμάσουμε να βάλουμε την ηλικία κάθε κυρίας. Στο pajek, κάθε χαρακτηριστικό αποθηκεύεται ως partition. Ένα partition είναι ένα διάνυσμα από ακεραίους, όπου μέλος του διανύσματος αντιστοιχεί σε μία κορυφή. Εάν θέλαμε να αποθηκεύσουμε πραγματικούς αριθμούς, θα χρησιμοποιούσαμε vector αντί για partition a. Επιλέξτε Partition->create constant partition. Δώστε 26 στο παράθυρο διαλόγου (ένας ακέραιος για κάθε κορυφή) και δώστε 0 στο επόμενο παράθυρο (αρχικοποίηση). b. Το βασικό παράθυρο γίνεται ως εξής:
c. Κάντε κλικ πάνω στο 1. Constant [0] partition (26) και πατήστε στα αριστερά το κουμπί της επεξεργασίας (edit partition). Θα ανοίξει ένα παράθυρο όπως το παρακάτω:
Στη στήλη val καταχωρήστε έναν ακέραιο αριθμό ως την ηλικία κάθε κυρίας. Για λόγους ομοιομορφίας, δώστε τους πιο κάτω αριθμούς. Κλείστε το παράθυρο. Οι τιμές έχουν αποθηκευτεί σε κάθε κορυφή. d. Είναι απλό να κατασκευάσουμε ένα vector (πραγματικές τιμές) από ένα partition (ακέραιες τιμές). Κάντε κλικ πάνω στο partition που έχουμε. Στη συνέχεια Partition -> Make Vector και θα δημιουργηθεί ένα διάνυσμα με τις αντίστοιχες πραγματικές τιμές. e. Κάντε Draw->Draw Partition. Κάθε κορυφή έχει χρωματιστεί με ένα χρώμα, έτσι ώστε κορυφές με το ίδιο χρώμα να έχουν την ίδια ηλικία. f. Στην ίδια οθόνη κάντε Option->Mark Vertices Using->Partition Clusters. Εκτός από το χρώμα θα δείτε ότι μέσα σε παρένθεση σημειώνεται και η τιμή (η ηλικία) κάθε κορυφής. g. Κάντε Draw->Draw Vector. Κάντε Options->Size->of vertices. Στο παράθυρο που ανοίγει γράψτε 1 στο μέγεθος. Παρατηρήστε ότι το μέγεθος κάθε κορυφής αντιστοιχεί (σχετικά) με τον αριθμό της. Έτσι, κυρίες με μεγάλη ηλικία έχουν μεγαλύτερες σε μέγεθος κορυφές και αντίστροφα. (συγκρίνετε Martha, alice, eva). 5. Στο σημείο αυτό έχουμε δημιουργήσει ένα δίκτυο, ένα partition και ένα vector. Εάν θέλουμε να χρησιμοποιήσουμε και άλλη φορά αυτά τα αποτελέσματα θα πρέπει να τα αποθηκεύσουμε. ΠΡΟΣΟΧΗ: a. Είτε θα αποθηκεύσουμε ξεχωριστά κάθε ένα από τα τρία (δίκτυο, partition, vector) οπότε θα δημιουργηθούν τρία αρχεία, οπότε θα πρέπει την επόμενη φορά να τα ανοίξουμε και τα τρία
b. Είτε θα αποθηκεύσουμε ΚΑΙ τα τρία σε ένα αρχείο τύπου project. Αυτό γίνεται με FILE->Pajek Project File->Save και δίνοντας ένα όνομα για το project (έστω πάλι lunch). Εάν κλείσουμε το Pajek μπορούμε να ξαναβρούμε τη δουλειά μας ανοίγοντας πλέον όχι το αρχείο lunch.net αλλά το αρχείο lunch.paj, μέσω του FILE->Pajek Project File->Open. 6. Έχοντας ανοίξει το project, επιλέξτε το δίκτυο lunch και κάντε Info->Network- >General. Δώστε 0 στο παράθυρο διαλόγου. Το αποτέλεσμα πρέπει να είναι: 1. C:\Users\Δημήτρης\Desktop\YLIKO PMS\dia4\lunch.net (26) Number of vertices (n): 26 Arcs Edges Number of lines with value=1 26 0 Number of lines with value#1 26 0 Total number of lines 52 0 Number of loops 0 0 Number of multiple lines 0 0 Density1 [loops allowed] = 0.0769231 Density2 [no loops allowed] = 0.0800000 a. Μελετήστε προσεκτικά τα αποτελέσματα. Βεβαιωθείτε ότι αντιλαμβάνεστε πλήρως κάθε αριθμό. b. Έχοντας επιλεγμένο το partition με τις ηλικίες, κάντε Info->Network->Partition και δώστε πάλι 0 και στη συνέχεια 1. Το αποτέλεσμα θα είναι ως εξής: 1. Constant [0] partition (26) Dimension: 26 The lowest value: 22 The highest value: 76 Frequency distribution of cluster numbers: Cluster Freq Freq% CumFreq CumFreq% Representative ---------- 22 1 3.8462 1 3.8462 Jane 24 1 3.8462 2 7.6923 Alice 27 1 3.8462 3 11.5385 Hilda 28 1 3.8462 4 15.3846 Louise 29 1 3.8462 5 19.2308 Mary 30 1 3.8462 6 23.0769 Ada 32 2 7.6923 8 30.7692 Robin 33 1 3.8462 9 34.6154 Ellen 34 1 3.8462 10 38.4615 Cora 43 1 3.8462 11 42.3077 Adele 44 1 3.8462 12 46.1538 Lena 45 2 7.6923 14 53.8462 Helen 46 1 3.8462 15 57.6923 Frances 48 1 3.8462 16 61.5385 Irene 50 1 3.8462 17 65.3846 Jean 54 1 3.8462 18 69.2308 Hazel 55 2 7.6923 20 76.9231 Marion 65 1 3.8462 21 80.7692 Betty 66 3 11.5385 24 92.3077 Martha 71 1 3.8462 25 96.1538 Ruth 76 1 3.8462 26 100.0000 Maxine ---------- Sum 26 100.0000 Βεβαιωθείτε ότι αντιλαμβάνεστε πλήρως τα νούμερα!!! c. Δώστε και πάλι Info->Network->Partition. Δώστε 5 στο πρώτο παράθυρο διαλόγου και 1 στο δεύτερο. Το αποτέλεσμα έχει αλλάξει κάπως. Τι ακριβώς σημαίνει?
7. Βεβαιωθείτε ότι στο NETWORKS έχετε επιλέξει το βασικό μας δίκτυο, δηλαδή το lunch. Σε αυτή την άσκηση θα δούμε πώς βρίσκουμε την ελάχιστη διαδρομή από μία κορυφή προς την άλλη. a. Επιλέξτε Net->Paths between 2 vertices->one shortest. Στο πρώτο παράθυρο διαλόγου επιλέξτε μία κυρία (τον αριθμό ή το όνομά της) και στο δεύτερο μια ά λλη κυρία. ΠΧ έστω ότι στο πρώτο επιλέγετε 3 ( Louise) και στο δεύτερο 19 (Jane). Στο επόμενο παράθυρο επιλέξτε ΥΕS (ώστε να μην υπολογίζεται το νούμερο κάθε γραμμής) και στο επόμενο πατήστε επίσης YES. Θα προκύψει ένα παράθυρο που θα σας λέει ότι ΔΕΝ υπάρχει τρόπος να πάμε από τη μία κυρία στην άλλη. Αν εναλλάξετε όμως και θέσετε 19 στο πρώτο παράθυρο και 3 στο δεύτερο παράθυρο, θα προκύψει η απόσταση 6: Searching paths Working... Cannot reach 19 from 3 Time spent: 12:00:00 πμ Searching paths Working... Distance is: 6.0000 Time spent: 12:00:00 πμ b. Πατήστε DRAW->Network για να δείτε ακριβώς τη διαδρομή αυτή. c. Στο μενού Net-> Paths between 2 vertices επιλέξτε All shortest, δώστε δύο κορυφές και ελέγξτε το αποτέλεσμα με το draw->network. (πρώτα βεβαιωθείτε ότι στο networks έχετε το lunch.net). d. Από το ίδιο μενού ελέγξτε και τις υπόλοιπες επιλογές. Δείτε ιδιαίτερα την επιλογή Diameter. Πόση είναι η διάμετρος του δικτύου? 8. Προσθήκη κορυφών μπορεί να γίνει από το Net->Transform->Add->Vertices. Αντίστοιχα γίνεται και διαγραφή κορυφών. Όταν διαγράφεται μια κορυφή, διαγράφονται και όλες οι γραμμές που προσπίπτουν σε αυτή. Διαγράψτε την κορυφή 10. Σχεδιάστε το νέο δίκτυο. a. Προσθέστε μία κορυφή. Στο Draw θα δείτε ότι προστίθεται πάνω αριστερά. Για να συνδεθεί αυτή η κορυφή με κάποια άλλη, θα πρέπει να κάνουμε ΔΕΞΙ κλικ πάνω της. Θα μπούμε σε ένα νέο παράθυρο διαλόγου. Στο παράθυρο που ανοίγει, θα κάνουμε διπλό κλικ στο newline και θα προσθέσουμε (με + ή τον αριθμό της δεύτερης κορυφής). Για να αλλάξουμε την τιμή, πάνω σε μια ακμή θα πατήσουμε δεξί κλικ. Για να διαγράψουμε μια ακμή θα πρέπει να κάνουμε διπλό κλικ πάνω της. Δοκιμάστε να προσθέσετε ή να διαγράψετε γραμμές. b. Κατασκευάστε εσείς ένα νέο δίκτυο με 10 κορυφές και αρκετές ακμές, Προσπαθήσετε να εφαρμόσετε μερικές από τις προηγούμενες εργασίες