ΟΠΤΙΚΟΠΟΙΗΣΗ ΑΛΓΟΡΙΘΜΩΝ ΓΡΑΜΜΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Λαζαρίδης Βασίλειος Παπαρρίζος Κωνσταντίνος Σαμαράς Νικόλαος Τμ. Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Εγνατία 56 54006 Θεσσαλονίκη e-mail: paparriz@uom.gr Ζησόπουλος Δημήτριος Σχολή Διοίκησης και Οικονομίας ΤΕΙ Δυτικής Μακεδονίας Κοίλα 5000 Κοζάνη e-mail: drjim@kozani.teikoz.gr ΠΕΡΙΛΗΨΗ: Παρουσιάζεται ένα εκπαιδευτικό λογισμικό για διδασκαλία εξ αποστάσεως μέσω διαδικτύου (Internet) αλγορίθμου simple για γραμμικά προβλήματα. Αναλύονται τα βασικά χαρακτηριστικά του λογισμικού με έμφαση την οπτικοποίηση το animation και την κάλυψη όλων των περιπτώσεων του αλγορίθμου simple. Λέξεις Κλειδιά: Οπτικοποίηση Αλγορίθμων Τηλεκπαίδευση Εκπαιδευτικό Λογισμικό Animation.. ΕΙΣΑΓΩΓΗ Η Επιχειρησιακή Έρευνα αποτελεί βασικό γνωστικό γνωστικό αντικείμενο σε τμήματα Οικονομικών επιστημών Διοίκησης Επιχειρήσεων Μαθηματικών και Πληροφορικής. Ένα από τα πιο σημαντικά τμήματα της Επιχειρησιακής Έρευνας αποτελεί ο Γραμμικός Προγραμματισμός. Από το 947 χρονιά που ο Dantzig [4] ανακάλυψε το γνωστό αλγόριθμο simple μέχρι σήμερα έχει γίνει σημαντική πρόοδος στη δημιουργία αλγορίθμων για το Γραμμικό Προγραμματισμό. Σε όλα τα προπτυχιακά τμήματα ο πρώτος αλγόριθμος που διδάσκεται στα πλαίσια της Επιχειρησιακής Έρευνας είναι ο αλγόριθμος του Dantzig. Ο παραδοσιακός τρόπος διδασκαλίας του αλγορίθμου simple περιλαμβάνει την αλγεβρική του μορφή δηλ. τη βηματική περιγραφή του αλγορίθμου σε μορφή tableau. Η μορφή αυτή δεν είναι ότι πιο εύκολο για να κατανοηθεί πλήρως από προπτυχιακούς φοιτητές με ελάχιστο μαθηματικό υπόβαθρο. Η ευρεία διάδοση του διαδικτύου (Internet) καθώς και η ύπαρξη σύγχρονων προγραμματιστικών εργαλείων προσφέρουν νέες εναλλακτικές προτάσεις και προσεγγίσεις για την διδασκαλία γνωστικών αντικειμένων έτσι ώστε να γίνονται περισσότερο προσιτά και κατανοητά. Μία προσέγγιση η οποία χρησιμοποιείται όλο και περισσότερο μέσω του διαδικτύου για την περιγραφή αλγορίθμων και δομών δεδομένων είναι τα προγράμματα οπτικοποίησης (software visualization). Τα κύρια χαρακτηριστικά των προγραμμάτων οπτικοποίησης κατά τους Stasko and Patterson [4] και Price et al. [0] είναι η χρήση τεχνικών οπτικοποίησης και κίνησης με σκοπό να βοηθήσει το κοινό να καταλάβει τα χαρακτηριστικά και την εκτέλεση αλγορίθμων. Οι εφαρμογές οπτικοποίησης μπορούν εύκολα να αναπαραστήσουν ένα μεγάλο εύρος χαρακτηριστικών των αλγορίθμων όπως δομές δεδομένων
[8] [2] την εφαρμογή τους [2] [3] [3] και την απόδοση τους [5] []. Σύμφωνα με τον Gallagher [6] η χρήση της οπτικοποίησης παρέχει μεταφορά εμπειριών αναπαραγωγή καταστάσεων επικέντρωση σε επιλεγμένες φάσεις ενός προβλήματος έλεγχο στην εκτέλεση των γεγονότων και των ποιοτικών χαρακτηριστικών (λεπτομέρειες ή ανάλυση) επικέντρωση της προσοχής και απομόνωση χαρακτηριστικών ειδικού ενδιαφέροντος. Ο Mayers [9] τονίζει ότι οι εφαρμογές οπτικοποίησης μπορούν να χωριστούν σε δύο κατηγορίες : i) εμφάνιση δομών δεδομένων και ii) δυναμική κίνηση αλγορίθμων. Με την εμφάνιση δομών δεδομένων παρέχεται στο χρήστη να παρακολουθήσει τις αλλαγές των δεδομένων που πραγματοποιούνται κατά την εκτέλεση των αλγορίθμων. Αντίστροφα η δυναμική κίνηση των αλγορίθμων παρέχει την παρουσίαση γραφικών εικόνων των λειτουργιών και αποτελεσμάτων τους και σημαντικών δεδομένων τους δες [] [5]. Στην εργασία μας αυτή παρουσιάζουμε την οπτικοποίηση του αλγορίθμου simple σε μορφή μητρών. Η οπτικοποίηση του αλγορίθμου simple συνδυάζει σε ενιαίο γραφικό περιβάλλον την εμφάνιση δομών δεδομένων και τη δυναμική κίνησή του. Για την σχεδίαση της εφαρμογής χρησιμοποιήθηκε η γλώσσα προγραμματισμού MS J++.0 και εκτελείται μέσω του World Wide Web. Ένα κριτήριο που λάβαμε σοβαρά υπόψη κατά τη διαδικασία του σχεδιασμού της εφαρμογής οπτικοποίησης είναι η φιλικότητα της προς το χρήστη. Η διάρθρωση της εργασίας μας είναι η ακόλουθη. Στην ενότητα 2 παρουσιάζουμε σε μητρική μορφή τον αλγόριθμο simple. Στην ενότητα 3 παρουσιάζουμε την επίλυση ενός γραμμικού προβλήματος με τον αλγόριθμο simple. Στην ενότητα 4 εξηγείται η οπτικοποίηση του αλγορίθμου. Τέλος στην ενότητα 5 αναφέρουμε τα συμπεράσματά μας και πιθανές επεκτάσεις και βελτιώσεις της εφαρμογής. 2. ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΑΛΓΟΡΙΘΜΟΥ Θεωρούμε το ακόλουθο πρόβλημα γραμμικού προγραμματισμού min c T µ. π. A = b (P.) όπου A R mn c R n b R m και T σημαίνει αναστροφή. Υποθέτουμε ότι η μήτρα Α είναι πλήρους βαθμού δηλ. rank(a) = m m n. Χρησιμοποιώντας τη διαμέριση της μήτρας Α Α = (Β Ν) και των διανυσμάτων και c T = ( B N ) c T = (c B c N ) το πρόβλημα (P.) γράφεται min µ. π. c T B B B B B + + Η μήτρα Β είναι διαστάσεων mn και αντιστρέψιμη. Ονομάζεται βασική μήτρα (basic matri). Οι στήλες της μήτρας Α που ανήκουν στη βασική μήτρα ονομάζονται βασικές στήλες (basic columns). Οι εναπομείναντες Ν = { 2 n}~b ονομάζονται μη βασικές (nonbasic columns). Η λύση που αντιστοιχεί στη βασική μήτρα Β είναι c T N N 0 N N N = b 0
B B b = = () N 0 Η λύση () ονομάζεται εφικτή (feasible) αν ισχύει 0. Σε αντίθετη περίπτωση ονομάζεται μη εφικτή (non feasible). Η δυϊκή λύση του προβλήματος δίνεται από τη σχέση s = c - w T A όπου w T T = c B B οι πολλαπλασιαστές simple και s οι δυϊκές χαλαρές μεταβλητές. Η βάση Β ονομάζεται δυϊκά εφικτή αν s 0. Πριν προχωρήσουμε στη βηματική περιγραφή του αλγορίθμου simple κρίνουμε σκόπιμο να περιγράψουμε τον υπολογισμό της τρέχουσας αντίστροφης βασικής μήτρας Bˆ. Θεωρούμε στην περιγραφή μας ότι η βασική μήτρα είναι διαστάσεων nn όπου n = 2. H τρέχουσα βασική μήτρα υπολογίζεται από τη σχέση δ β Bˆ = (2) αβ γδ γ α Επίσης η i-γραμμή της μήτρας Α συμβολίζεται με Α i. και η j-στήλη με Α.j. Στη συνέχεια παρουσιάζεται σε μορφή βημάτων ο αλγόριθμος simple. Ο πρωτεύων αλγόριθμος simple σε μορφή μητρών Βήμα 0 (Ξεκίνημα). Ξεκίνα με μια εφικτή διαμέριση (B N). Υπολόγισε τις μήτρες B N B - και τα διανύσματα B w s N = c N - w T N. Βήμα (Έλεγχος βελτιστότητας). α) Θέσε J = {j : j N s j < 0}. Αν J = δηλ. s j 0 j N STOP το τρέχον σημείο είναι βέλτιστο. Διαφορετικά επέλεξε το δείκτη l = N(t) όπου το t προσδιορίζεται από τη σχέση Η μεταβλητή l είναι εισερχόμενη. s t = min{s j : j J} (3) β) Θέσε h l = B - A.l και Ι = {i : i m h il > 0}. Αν I = STOP το πρόβλημα (P.) είναι απεριόριστο. Διαφορετικά επέλεξε την εξερχόμενη μεταβλητή από τη σχέση h B[r] rl B[i] = min{ :i I} (4) h Η μεταβλητή B[r] = k είναι εξερχόμενη. Βήμα 2 (Περιστροφή). Θέσε N(t) = k και B(r) = l. Χρησιμοποιώντας τη νέα διαμέριση (B N) υπολόγισε τη νέα βάση B - από τη σχέση (2) και τα διανύσματα B w s N. Πήγαινε στο Βήμα. Η αιτιολόγηση του αλγορίθμου simple μπορεί να βρεθεί στην αναφορά [7]. 3. ΕΠΕΞΗΓΗΜΑΤΙΚΟ ΠΑΡΑΔΕΙΓΜΑ Στην ενότητα αυτή επεξηγούμε τη λειτουργία του αλγορίθμου simple σε μορφή μητρών (matri notation) με το παρακάτω παράδειγμα il
min µ. π. 2 4 + 5 3 2 2 2 2 + Ξεκινάμε με τη διαμέριση (Β Ν) όπου Β = [3 4] και Ν = [ 2]. Η βασική μήτρα είναι B = [A.3 A. 4 ] = 0 και η αντίστροφη της βασικής μήτρας είναι Β - = Β Η βάση Β είναι πρωτεύοντος εφικτή γιατί T T B = N = ( 0 6 0 0) 0 Επίσης έχουμε w = (0 0) και s N = (-2-5). Τώρα μπορούμε να περάσουμε στον έλεγχο βελτιστότητας. Το σύνολο δεικτών J είναι J = {j : j N s j < 0} = { 2} Επειδή J το τρέχον σημείο δεν είναι βέλτιστο. Από τη σχέση (3) υπολογίζουμε το δείκτη της εισερχόμενης μεταβλητής. Θα έχουμε Άρα t = 2 και l = N(t) = 2. 3 3 0 s t = min{s j : j J} = min{-2-5} = -5 Θέτουμε = 3 h 2 B A. 2 = και I = { 2}. Από τη σχέση (4) επιλέγουμε την εξερχόμενη μεταβλητή. Θα έχουμε h B[r] rl = min{ h B[i] il 4 4 = = 0 6 0 :i I} = min{ } = 3 3 Άρα r = και η μεταβλητή B[r] = k B[] = 3 είναι εξερχόμενη. Η νέα διαμέριση που προέκυψε από την εκτέλεση του αλγόριθμου είναι Β = [2 4] και Ν = [ 3]. Η νέα αντίστροφη βασική μήτρα είναι Επίσης έχουμε Β - = / 3 0 / 3 T B = (0 / 3 8 / 3) και s N = (-/3 5/3) Στη δεύτερη επανάληψη έχουμε l = και k = 4. Άρα εισέρχεται η μεταβλητή και εξέρχεται η μεταβλητή 4. H νέα διαμέριση είναι Β = [2 ] και Ν = [4 3]. Για τη διαμέριση αυτή έχουμε s N = (/ 8/) 0 6 0
Επειδή s N 0 STOP το παρόν σημείο είναι βέλτιστο. Η βέλτιστη λύση είναι = (8/ 34/ 0 0) και η βέλτιστη αντικειμενική τιμή είναι z = -86/. 4. ΟΠΤΙΚΟΠΟΙΗΣΗ ΑΛΓΟΡΙΘΜΟΥ Η πλατφόρμα υλοποίησης της εφαρμογής οπτικοποίησης του αλγορίθμου simple είναι Client Server σε περιβάλλον Internet. Η εφαρμογή βρίσκεται στον υπολογιστή Server στον οποίο εκτελείται η HTTP υπηρεσία. Ο χρήστης για να εκτελέσει την εφαρμογή χρειάζεται ένα πρόγραμμα Client (Browser) είτε τον Netscape Navigator είτε τον Microsoft Internet Eplorer. Ο μοναδικός περιορισμός για την χρήση της εφαρμογής είναι η ύπαρξη νέων εκδόσεων των Browser (Netscape Navigator 4.06 ή νεώτερο και Microsoft Internet Eplorer 5.0 ή νεώτερο) για τη σωστή εμφάνιση των ελληνικών χαρακτήρων. Στις παραπάνω εκδόσεις περιλαμβάνεται η δυνατότητα εκτέλεσης εφαρμογών Java δηλ. την JVM (Java Virtual Machine) που απαιτείται για τη λειτουργία της εφαρμογής οπτικοποίησης αλγορίθμου Simple. Την εφαρμογή οπτικοποίησης την υλοποιήσαμε σε Java έκδοση. Η Java είναι μια αντικειμενοστραφής γλώσσα προγραμματισμού (object oriented programming language) που σχεδιάστηκε από τη Sun Microsystems. Η Java παρέχει αρκετά χαρακτηριστικά που την καθιστούν ιδανική γλώσσα για την οπτικοποίηση αλγορίθμων σε δικτυακό περιβάλλον. Έχει δική της διαχείριση μνήμης έτσι ώστε να μην παρουσιάζει προβλήματα στην εξάρτηση από δείκτες (pointers) και απώλειες μνήμης. Επίσης η Java υποστηρίζει νήματα και δυναμική φόρτωση τμημάτων κώδικα από οποιοδήποτε σημείο του δικτύου. Συγκεκριμένα είναι κατάλληλη για την ανάπτυξη εφαρμογών Internet γιατί είναι ανεξάρτητη από λειτουργικά συστήματα και από διαφορετικούς τύπους υπολογιστών. Το παράθυρο της εφαρμογής δες (Εικόνα ) απαρτίζεται από τέσσερα τμήματα τα οποία παραμένουν σταθερά καθ' όλη τη διάρκεια εκτέλεσης του αλγορίθμου. Εικόνα. Τα τμήματα του παραθύρου της εφαρμογής οπτικοποίησης Αυτά είναι :
. Χώρος εμφάνισης των δομών δεδομένων και δυναμικής κίνησης του περιγραφόμενου αλγορίθμου. Στο χώρο αυτό εμφανίζονται όλες οι απαραίτητες πληροφορίες και υπολογισμοί που λαμβάνουν χώρα κατά την εκτέλεση του αλγορίθμου. 2. Χώρος περιγραφής του αλγορίθμου σε μορφή ψευδοκώδικα. 3. Περιοχή μηνυμάτων και επεξηγήσεων της λειτουργίας του αλγορίθμου. 4. Περιοχή ελέγχου της εκτέλεσης του αλγορίθμου. Περιλαμβάνει πλήκτρα συνεχούς και βηματικής εκτέλεσης του καθώς και πλήκτρο σταματήματος. Επίσης δίνεται η δυνατότητα επιλογής συγκεκριμένου γραμμικού προβλήματος από ένα pop-up menu. Η εφαρμογή λειτουργεί ως εξής. Πρώτα χρειάζεται να επιλέξουμε ένα από τα έτοιμα παραδείγματα που περιλαμβάνονται στην εφαρμογή. Αμέσως εμφανίζεται το γραμμικό πρόβλημα στο τμήμα (δες Εικόνα ). Στο σημείο αυτό ο χρήστης θα πρέπει να επιλέξει τον τρόπο που θέλει να εκτελεστεί ο αλγόριθμος. Υπάρχουν δύο επιλογές. Συνεχείς εκτέλεση (πλήκτρο Run) και βηματική εκτέλεση (πλήκτρο Net Step). Τα πλήκτρα αυτά καθώς και η επιλογή του γραμμικού προβλήματος βρίσκονται στην περιοχή ελέγχου (τμήμα 4). Στην περίπτωση που επιλεγεί συνεχείς εκτέλεση (δες Εικόνα 2) ο έλεγχος περνά στην περιοχή του ψευδοκώδικα και τονίζεται με κόκκινο χρώμα το τρέχον βήμα που εκτελείται. Ταυτόχρονα εμφανίζονται οι υπολογισμοί του τρέχοντος βήματος στο τμήμα και κατάλληλα επεξηγηματικά μηνύματα στο τμήμα 3. Η εκτέλεση θα σταματήσει με έναν από τους τρεις τρόπους: i) εντοπισμός βέλτιστου σημείου ii) προσδιορισμός απεριοριστότητας iii) πλήκτρο STOP. Εικόνα 2. Παράθυρο εκτέλεσης βήματος του αλγορίθμου simple. Στην περίπτωση που επιλεγεί βηματική εκτέλεση (δες Εικόνα 3) ο έλεγχος περνά πάλι στην περιοχή του ψευδοκώδικα και τονίζεται με κόκκινο χρώμα το βήμα 0. Στη συνέχεια
εκτελείται το βήμα 0 και οι υπολογισμοί φαίνονται στο τμήμα. Στο σημείο αυτό διακόπτεται προσωρινά η εκτέλεση του αλγορίθμου και ενεργοποιείται το πλήκτρο Net Step. Για να συνεχιστεί η εκτέλεση του επόμενου βήματος όπως περιγράφεται στο τμήμα του ψευδοκώδικα θα πρέπει ο χρήστης να πατήσει το πλήκτρο Net Step. Η εκτέλεση του αλγορίθμου θα σταματήσει πάλι με έναν από τους τρεις προηγούμενους τρόπους. Εικόνα 3. Παράθυρο εκτέλεσης βήματος 2 του αλγορίθμου simple. 5. ΣΥΜΠΕΡΑΣΜΑΤΑ Στην εργασία αυτή παρουσιάσαμε μια εφαρμογή οπτικοποίησης του αλγορίθμου Simple μέσω του διαδικτύου. Η κύρια ωφελιμότητα αυτής της εφαρμογής είναι η χρήση της ως εκπαιδευτικού εργαλείου στο γνωστικό αντικείμενο του γραμμικού προγραμματισμού. Η διδασκαλία αλγορίθμων σε συνδυασμό με την οπτικοποιημένη παρουσίαση τους καθιστούν την διαδικασία κατανόησης τους πιο εύκολη και γρήγορη σε σχέση με παραδοσιακούς τρόπους διδασκαλίας των αλγορίθμων. Κατά τη διαδικασία υλοποίησης της εφαρμογής δόθηκε ιδιαίτερη προσοχή στη σχεδίαση του γραφικού περιβάλλοντος και της παρεχόμενης πληροφορίας προς τον εκπαιδευόμενο χρήστη έτσι ώστε να μην είναι κουραστική και πολύπλοκη η παρακολούθηση της εκτέλεσης του αλγορίθμου. Στην εφαρμογή αυτή μπορούν να γίνουν περαιτέρω βελτιώσεις και επεκτάσεις. Μια σημαντική επέκταση κατά τη γνώμη μας είναι να προστεθούν περισσότεροι αλγόριθμοι επίλυσης γραμμικών προβλημάτων έτσι ώστε να καλύπτεται πλήρως η διδακτέα ύλη του γραμμικού προγραμματισμού. Επίσης κρίνουμε σκόπιμο να μπορεί να εισάγει τα δικά του γραμμικά προβλήματα ο χρήστης καθώς και να επιλέγει μεταξύ διαφορετικών κανόνων περιστροφής. Τέλος ενδιαφέρον παρουσιάζει και η ανάπτυξη εφαρμογής για τη γεωμετρική επίλυση ενός γραμμικού προβλήματος. ΒΙΒΛΙΟΓΡΑΦΙΑ []. Brown H. M. (988). "Algorithm Animation" MIT Press Cambridge MA
[2]. Brown H. M. (988). "Eploring algorithms using Balsa-II" Computer Vol. 2(5) pp. 4-36. [3]. Brown H. M. (99). "ZEUS: A system for algorithm animation and multi-view editing" In Proceedings of the IEEE Workshop on Visual Languages pp. 4-9. [4]. Dantzig B. G. (982). "Reminiscences about the Origins of Linear Programming" Operations Research Letters Vol. pp. 43-48. [5]. Duisberg A. R. (987). "Visual programming of program visualizations. A gestural interface for animating algorithms" In Proceedings of the 987 IEEE Computer Society Workshop on Visual Languages pp. 55-66. [6]. Gallagher S. R. (Ed). (995). "Computer Visualization: Graphics Techniques for Scientific and Engineering Analysis" CRC Press Inc. pp. 285-287. [7]. Heath T. M. Etheridge A. J. (992). "Visualizing the performance of parallel programs" IEEE Software Vol. 8(5) pp. 29-39. [8]. Mayers A. B. (983). "A system for displaying data structures" Computer Graphics: SIGGRAPH 83 Vol. 7(3) pp.5-25. [9]. Mayers A. B. (990). "Tainomies of visual programming and program visualization" Journal of Visual Languages and Computing Vol. () pp. 97-23. [0]. Price A. B. Baecker M. R. Small S. I. (993). "A principled taonomy of software visualization" Journal of Visual Languages and Computing Vol. 4(3) pp. 2-266. []. Rover T. D. Wright T. C. (993). "Visualizing the performance of SPMD and dataparallel programs" Journal of Parallel and Distributed Computing Vol. 8(2) pp. 29-46. [2]. Shimomoura T. Isoda S. (99). "Linked-list visualization for debugging" IEEE Software Vol. 8(3) pp. 44-5. [3]. Stasko T. J. (990). "TANGE: A framework and system for algorithm animation" Computer Vol. 23(9) pp.27-39. [4]. Stasko T. J. Patterson C. (992). "Understanding and characterizing software visualization systems" In Proceedings of the IEEE Workshop on Visual Languages pp. 3-0. [5]. Παπαρρίζος K. (999). "Γραμμικός Προγραμματισμός Αλγόριθμοι και Εφαρμογές" Εκδόσεις Ζυγός Θεσσαλονίκη.