Page 1 of 13 υαδικά δίκτυα Σκοπός της εργασίας Υλοποίηση της πλατφόρµας Οδηγίες Βιβλιογραφία είτε ακόµη... Σκοπός της εργασίας Σκοπός της εργασίας είναι ο πειραµατισµός µε διάφορα µοντέλα δυαδικών δικτύων τύπου Kauffman (Ν-Κ) και παραλλαγές τους. Πιο συγκεκριµένα, ζητείται να υλοποιηθούν µελέτες attractors, µελέτες διαταραχών, µελέτες χρονισµού εκτέλεσης δικτύου (σύγχρονα, ασύγχρονα), καθώς και µελέτες συµπεριφοράς άλλων γονιδιακών τύπων. Βλέπε αναλυτικά οδηγίες. Υλοποίηση της πλατφόρµας Κάνετε "κλικ" µέσα στην εικόνα για να παίξετε
Page 2 of 13 Source Java code 14/07/2005 Βλέπε διευκρινήσεις Εγχειρίδιο χρήσης Η οθόνη του applet περιλαµβάνει έναν αριθµό συνιστωσών ελέγχου της προσοµοίωσης: Το ρολόι του συστήµατος. Τρία κουµπιά ελέγχου της προσοµοίωσης. Το κουµπί Start/Stop εκκινά/σταµατά την προσοµοίωση και σε κάθε βήµα της προσοµοίωσης εκτελεί όλο το δίκτυο. Το κουµπί Step προχωρά την προσοµοίωση κατά µία µονάδα χρόνου. Τέλος, το κουµπί Restart επανεκκινεί την προσοµοίωση, δηλαδή αρχικοποιεί το ρολόι στο 0 και κάνει reset το δίκτυο και τους συλλογείς των στατιστικών δεδοµένων. Ορισµός του Ν (αριθµός γονιδίων) του δικτύου. Εµφανίζεται το τρέχον N του δικτύου. Μπορούµε να το αλλάξουµε και να πατήσουµε το κουµπί Set οπότε θα επαναρχικοποιηθεί το δίκτυο. Ορισµός του K (συνδετικότητα) του δικτύου. Εµφανίζεται το τρέχον K του δικτύου. Εάν επιλέξουµε άλλη τιµή από τον επιλογέα (από 1 έως 10), επαναρχικοποιείται αυτόµατα το δίκτυο. Το checkbox Expand/shrink εάν είναι επιλεγµένο ορίζει ότι κατά την επαναρχικοποίηση του δικτύου µε νέο N ή/και K θα
Page 3 of 13 χρησιµοποιηθεί η υπάρχουσα δοµή και θα επεκταθεί ή θα συρρικνωθεί κατάλληλα (µε τυχαίο τρόπο) ώστε να προκύψουν οι νέες τιµές των N και K. Αυτο-είσοδος (self-input). Υποδηλώνει εάν επιτρέπεται ένα γονίδιο να παίρνει σαν είσοδο των εαυτό του. Αυτή η δυνατότητα µπορεί να είναι On (όλα τα γονίδια παίρνουν σαν είσοδο τον εαυτό τους), Off (κανένα γονίδιο δεν παίρνει σαν είσοδο τον εαυτό του) ή Random (µερικά γονίδια παίρνουν σαν είσοδο τον εαυτό τους). Τρία κουµπιά ελέγχου και οπτικοποίησης των κανόνων του δικτύου. Με το κουµπί View ανοίγει ένα παράθυρο όπου εµφανίζονται σε µορφή κειµένου οι κανόνες του δικτύου: για κάθε γονίδιο, εµφανίζεται µία σειρά bits που είναι οι έξοδοι του γονιδίου για κάθε γραµµή εισόδου του λογικού κανόνα που αντιστοιχεί (βλέπε επόµενη εικόνα πάνω). Με το κουµπί Reset επαναρχικοποιούνται µε τυχαίο τρόπο όλοι οι κανόνες του δικτύου. Τέλος, µε το κουµπί Edit ανοίγει ένας εξειδικευµένος επεξεργαστής κανόνων (βλέπε επόµενη εικόνα κάτω). Τρία κουµπιά ελέγχου και οπτικοποίησης της δοµής του δικτύου. Με το κουµπί View ανοίγει ένα παράθυρο όπου εµφανίζεται σε µορφή κειµένου η δοµή του
Page 4 of 13 δικτύου: για κάθε (αριθµηµένο) γονίδιο, εµφανίζεται µία σειρά αριθµών που είναι οι αριθµοί των γονιδίων που παίρνει σαν είσοδο το γονίδιο (βλέπε επόµενη εικόνα πάνω). Με το κουµπί Reset επαναρχικοποιείται µε τυχαίο τρόπο η δοµή (οι συνδέσεις) του δικτύου. Τέλος, µε το κουµπί Edit ανοίγει ένας εξειδικευµένος επεξεργαστής δοµής (βλέπε επόµενη εικόνα κάτω). Μοντέλο συµπεριφοράς (mode). Είναι αρχικά ένα από τρία: Μοντέλο KAUFFMAN. Πιθανοτικό µοντέλο(probabilistic). (Ενδεικτικό) µοντέλο µε µνήµη (MEMORIFUL). Ο κώδικας των τριών µοντέλων δίνεται παρακάτω.
Page 5 of 13 Checkbox "asynchronous". Εάν είναι επιλεγµένο η εκτέλεση των γονιδίων γίνεται µε ασύγχρονο τρόπο και µε τυχαία σειρά, αλλιώς γίνεται σύγχρονα. Ο κώδικας των δύο τρόπων εκτέλεσης δίνεται παρακάτω.
Page 6 of 13 Συνιστώσες ελέγχου θορύβου. Το checkbox On δείχνει εάν υπάρχει θόρυβος στο δίκτυο, ενώ το text field δείχνει το ποσοστό του θορύβου. Μπορούµε να αλλάξουµε αυτή την τιµή και να πατήσουµε το κουµπί Set, οπότε θα αλλάξει η τρέχουσα τιµή του θορύβου. Συνιστώσες ελέγχου πιθανοτήτων κόµβων στο PROBABILISTIC µοντέλο γονιδίου. Με την επιλογή Random ορίζουµε ότι τα γονίδια θα έχουν διαφορετικές (τυχαίες) πιθανότητες επιλογής, ενώ µε την επιλογή Fixed ορίζουµε ότι τα γονίδια θα έχουν την ίδια πιθανότητα επιλογής που ορίζουµε δίπλα και επιβεβαιώνουµε µε το κουµπί Set. Τέλος, µε το κουµπί View All ανοίγει ένα παράθυρο κειµένου όπου εµφανίζονται οι πιθανότητες των διαφόρων κόµβων.
Page 7 of 13 Συνιστώσες ελέγχου τρέχουσας διάταξης (configuration, δηλαδή συνδυασµού καταστάσεων) του δικτύου. Με την επιλογή Random ορίζουµε ότι τα γονίδια θα έχουν τυχαίες δυαδικές καταστάσεις, ενώ µε την επιλογή Fixed ορίζουµε ότι τα γονίδια θα έχουν κάποια συγκεκριµένη διάταξη που ορίζουµε δίπλα και επιβεβαιώνουµε µε το κουµπί Set. Current. Η τρέχουσα κατάσταση του δικτύου. Last. Η προηγούµενη (πριν την τρέχουσα) κατάσταση του δικτύου. Συνιστώσες ελέγχου ίχνους ή διαδροµής ή ιστορίας (trace) του συστήµατος. Με το κουµπί View ανοίγει ένα παράθυρο κειµένου όπου εµφανίζεται το ίχνος (η διαδροµή) του δικτύου: για κάθε χρονική στιγµή, δίνεται η κατάσταση του συστήµατος. Με το κουµπί Clear "καθαρίζουµε" το ίχνος, δηλαδή αδειάζουµε το αντίστοιχο κείµενο, ενώ, τέλος, µε το κουµπί Open ανοίγουµε έναν επεξεργαστή κειµένου πάνω στο ίχνος (χρησιµεύει π.χ. όταν θέλουµε να σβήσουµε µέρος του ίχνους που είναι άχρηστο για να µπορέσουµε να επικεντρώσουµε το ενδιαφέρον µας σε κάτι που θεωρούµε σηµαντικό, π.χ. έναν attractor). Βλέπε επόµενη εικόνα. Κουµπιά εµφάνισης στατιστικών δεδοµένων του δικτύου. Με το κουµπί On εµφανίζονται τα στατιστικά του ποσοστού ενεργών γονιδίων για κάθε χρονική στιγµή, ενώ µε το κουµπί Changed εµφανίζονται τα στατιστικά του ποσοστού γονιδίων που άλλαξαν τιµή σε κάθε χρονική στιγµή. Βλέπε επόµενη εικόνα.
Page 8 of 13 Οι δυνατότητες αυτές της πλατφόρµας επιτρέπουν στο χρήστη να πειραµατισθεί συστηµατικά µε διάφορα µοντέλα δυαδικού δικτύου, σε διατάξεις ή συνθήκες της επιλογής του. Οδηγίες Η πλατφόρµα περιλαµβάνει τεσσάρων ειδών κλάσεις: Κλάση BNGUI. Αυτή είναι η κλάση που υλοποιεί το interface του συστήµατος (applet) και το χειρισµό του προσοµοιωµένου δυαδικού δικτύου. Ο χρήστης δε χρειάζεται να ξέρει τα εσωτερικά της λειτουργίας αυτής της κλάσης, αλλά την χρησιµοποιεί αυτούσια. Κλάση BNSimulation. Αυτή είναι η κλάση που υλοποιεί την προσοµοίωση αυτή καθεαυτή και συνδέει το interface µε το µοντέλο του δυαδικού δικτύου (η κλάση αυτή τρέχει την προσοµοίωση, µαζεύει και εµφανίζει τα στατιστικά δεδοµένα και ενηµερώνει το interface). Ο χρήστης δε χρειάζεται να ξέρει τα εσωτερικά της λειτουργίας αυτής της κλάσης, αλλά την χρησιµοποιεί αυτούσια. Κλάσεις µοντελοποίησης. Αυτές είναι οι κλάσεις BooleanNetwork, που υλοποιεί το δυαδικό δίκτυο αυτό καθεαυτό (συνδέσεις γονιδίων, τρόποι εκτέλεσης του δικτύου, επεξεργασία δοµής και κανόνων του δικτύου) και BooleanGene που υλοποιεί το γονίδιο-συνιστώσα του παραπάνω δικτύου (που µπορεί να ακολουθεί ένα από πολλά διαφορετικά µοντέλα λειτουργίας). Βοηθητικές κλάσεις. Αυτές είναι οι κλάσεις Observer, History, Curve, CurveViewer, ListModifierDialog, ListModifierListener και TextAreaDialog, που υλοποιούν τη δυνατότητα
Page 9 of 13 συλλογής στατιστικών δεδοµένων σαν σειρά τιµών που µπορεί να µεταφρασθεί σαν καµπύλη και να παρουσιασθεί σε αντίστοιχο γράφηµα. Είναι επίσης οι κλάσεις TextEditor και TextEditorListener που χρησιµοποιούνται για την εµφάνιση κειµένου (λειτουργία trace, βλέπε παραπάνω). Ο χρήστης δε χρειάζεται να ξέρει τα εσωτερικά της λειτουργίας αυτών των κλάσεων, αλλά τις χρησιµοποιεί αυτούσιες. Για τις κλάσεις αυτές δίνονται µόνο τα class files. Ζητούνται 1. Για ένα µικρό δίκτυο της επιλογής σας να βρεθούν όλοι οι ελκυστές (attractors) του. Υπόδειξη. οκιµάστε όλες τις δυνατές καταστάσεις εισόδου, που είναι 2 N για δίκτυο N γονιδίων, π.χ. για N=8, είναι 256 καταστάσεις. Εκµεταλλευτείτε το γεγονός ότι µία κατάσταση που βρίσκεται µέσα στη λεκάνη ελκυσµού (basin of attraction) ενός attractor θα οδηγεί στον ίδιο attractor, για να µην ελέγξετε ορισµένες καταστάσεις. Μπορείτε να απαριθµήσετε όλες τις δυνατές καταστάσεις και να διαγράφετε όσες ελέγχετε µέσω προσοµοίωσης και όσες εµφανίζονται στους attractors που προκύπτουν σταδιακά. Παραδοτέo. Κείµενο περιγραφής του δικτύου που περιέχει λίστα attractors (σαν ακολουθία καταστάσεων, π.χ. 10010-11100-11001) και λίστα καταστάσεων που οδηγούν σε αυτούς. Π.χ. για ένα δίκτυο 256 καταστάσεων µε 3 attractors, καθεµία από τις 256 καταστάσεις πρέπει να συναντάται σε µία και µόνο από τις τρεις λίστες που αντιστοιχούν στους attractors. 2. Για το παραπάνω δίκτυο να βρείτε µία τουλάχιστον παραλλαγή δοµής (πρόσθεση, αφαίρεση ή τροποποίηση σύνδεσης) που να δηµιουργεί νέο attractor. Αν είναι δυνατό, να βρείτε και µία τουλάχιστον παραλλαγή δοµής που να αφαιρεί attractor. Παραδοτέo. Κείµενο περιγραφής του τροποποιηµένου δικτύου και του νέου attractor µαζί µε µία τουλάχιστον αρχική κατάσταση που οδηγεί σε αυτόν. Για την αφαίρεση attractor θα χρειασθεί αναλυτική παρουσίαση όλων των attractors του δικτύου όπως προηγούµενα ή κάποια έξυπνη απόδειξη. 3. Για το ίδιο δίκτυο να βρείτε µία τουλάχιστον παραλλαγή κανόνα ενός γονιδίου που να δηµιουργεί νέο attractor. Αν είναι δυνατό, να βρείτε και µία τουλάχιστον παραλλαγή κανόνα που να αφαιρεί attractor. Παραδοτέo. Κείµενο περιγραφής του τροποποιηµένου δικτύου και του νέου attractor µαζί µε µία τουλάχιστον αρχική κατάσταση που οδηγεί σε αυτόν. Για την αφαίρεση attractor θα χρειασθεί αναλυτική παρουσίαση όλων των attractors του δικτύου όπως προηγούµενα ή κάποια έξυπνη απόδειξη. 4. Για το ίδιο δίκτυο να συγκρίνετε τους attractors στη σύγχρονη και στην ασύγχρονη εκτέλεση. Παραδοτέo. Κείµενο περιγραφής των attractors και λίστες καταστάσεων όπως πριν. 5. Προαιρετικά (προγραµµατιστική). Υλοποιείστε ένα νέο µοντέλο γονιδίου από τα παρακάτω ή αντίστοιχο: Πιθανοτικό ως προς τον κανόνα. Π.χ. σύµφωνα µε το µοντέλο Shmulevich, ένα γονίδιο διαθέτει περισσότερους από έναν κανόνες και επιλέγει πιθανοτικά κάποιον προς εκτέλεση, π.χ. επιλέγει έναν από τρεις κανόνες ισοπίθανα, δηλαδή µε πιθανότητα 33.33% τον καθένα. Πιθανοτικό ως προς τις συνδέσεις. Αντίστοιχα µε το προηγούµενο, αλλά το γονίδιο επιλέγει κάθε φορά Κ από τις >Κ πραγµατικές συνδέσεις του. Π.χ. διαθέτει 2Κ συνδέσεις και επιλέγει κάθε φορά τις µισές από αυτές και χρησιµοποιεί για την εκτέλεσή του. Γονίδιο µε µνήµη. Σκεφθείτε τι είδους µνήµη θα είχε ενδεχοµένως νόηµα σε ένα γονιδιακό δίκτυο. Εµπνευσθείτε από το απλό µοντέλο MEMORIFUL που δίνεται. Κάνετε τη σύγκριση συµπεριφοράς του µοντέλου KAUFFMAN µε το δικό σας µε βάση ένα τουλάχιστον κριτήριο της επιλογής σας. Π.χ. ένα τέτοιο καλό (εννοιολογικά) γενικό κριτήριο είναι η ανοχή σε διαταραχές, δηλαδή µε µικρές παραλλαγές κατάστασης να µην αλλάζει
Page 10 of 13 δραστικά ο attractor του δικτύου. Παραδοτέo. Κείµενο περιγραφής όπως πριν και το αρχείο BooleanGene.java συµπληρωµένο. Περιγραφή της κλάσης BooleanNetwork Η κλάση BooleanNetwork ορίζει τα εξής κύρια δεδοµένα: int N int K Ο αριθµός των γονιδίων του δικτύου και η συνδετικότητά του (αριθµός συνδέσεων ανά γονίδιο), σύµφωνα µε την κλασική θεώρηση δικτύου Ν-Κ. int[][] inputs Ο πίνακας συνδετικότητας (connectivity matrix) του δικτύου. Η τιµή inputs[i][j] δίνει για το γονίδιο-i (i από 0 έως Ν-1) και τη σύνδεση j (j από 0 έως K-1) το γονίδιο εισόδου που αντιστοιχεί (από 0 έως Ν-1). double noise Το ποσοστό θορύβου του δικτύου (πιθανότητα µε την οποία αντιστρέφεται η κανονική έξοδος ενός γονιδίου). boolean isnoisy Μεταβλητή που δείχνει εάν υπάρχει θόρυβος. boolean asynchronous Μεταβλητή που δείχνει εάν το δίκτυο εκτελεί ασύγχρονα ή σύγχρονα (όταν η µεταβλητή έχει την τιµή true ή false, αντίστοιχα). int selfinput Μεταβλητή που δείχνει ποιο µοντέλο εισόδων χρησιµοποιείται από τα παρακάτω τρία. final static int SELF_INPUT_ON final static int SELF_INPUT_OFF final static int SELF_INPUT_RANDOM Τα τρία µοντέλα εισόδων γονιδίων (πάντα µε είσοδο από τον εαυτό τους, ποτέ µε είσοδο από τον εαυτό τους, τυχαία µε είσοδο από τον εαυτό τους). Οι πιο σηµαντικές µέθοδοι τις οποίες υλοποιεί η κλάση BooleanNetwork είναι οι εξής: public void setn(int,boolean) public void setk(int,boolean) public void shrinkstructure(int,int,int) Επαναρχικοποίηση του δικτύου µε νέο Ν ή Κ που δίνεται σαν όρισµα (int) και µε µία επιλογή τύπου boolean που δείχνει εάν το δίκτυο θα επεκταθεί/συρρικνωθεί ή θα αρχικοποιηθεί εξ ολοκλήρου. Για τη συρρίκνωση σε µικρότερο Ν χρησιµοποιείται η συνάρτηση shrinkstructure µε ορίσµατα τα παλιά Ν και Κ και το νέο Ν. public void resetstructure(int,int,int,int) Γενική µέθοδος αρχικοποίησης από ένα αρχικό ζεύγος Ν και Κ σε νέο ζεύγος Ν και Κ που δίνονται σαν ορίσµατα. public void execute() Εκτέλεση του δικτύου σύγχρονα ή ασύγχρονα ανάλογα µε την τιµή της µεταβλητής asynchronous. Χρησιµοποιεί τις επόµενες δύο συναρτήσεις.
Page 11 of 13 public void executeasynchronous() public void executesynchronous() Εκτέλεση του δικτύου ασύγχρονα ή σύγχρονα. public float getongenes() public float getchangedgenes() Υπολογισµός του ποσοστού ενεργών γονιδίων και του ποσοστού γονιδίων που άλλαξαν κατάσταση. public String getcurrentstatestring(int) public String getlaststatestring(int) Μετατροπή της τρέχουσας ή της προηγούµενης κατάστασης του δικτύου σε String (δυαδικού τύπου 01001...). Το όρισµα είναι ο αριθµός χαρακτήρων ανά γραµµή του String. public String getstructurestring() public String getrulesstring() Μετατροπή της δοµής ή των κανόνων του δικτύου σε String. Στην πρώτη περίπτωση είναι σειρά αριθµών (που είναι οι αριθµοί των γονιδίων εισόδου ανά γονίδιο), ενώ στη δεύτερη περίπτωση είναι σειρά κανόνων ανά γονίδιο σε µορφή String (δυαδικού τύπου 01001...). public void resetrules() Επαναρχικοποίηση όλων των κανόνων του δικτύου µε τυχαίο τρόπο. public void setrules(string[]) Επαναρχικοποίηση όλων των κανόνων του δικτύου πάνω στον πίνακα των String που δίνεται σαν όρισµα (ένας κανόνας ανά γονίδιο). public void setstructure(int[][]) Επαναρχικοποίηση της δοµής του δικτύου πάνω στον διδιάστατο πίνακα των int που δίνεται σαν όρισµα (αρχικοποιεί τη µεταβλητή inputs[][]). public void setrandomconfiguration() public void setfixedconfiguration(boolean[]) Επαναρχικοποίηση της κατάστασης του δικτύου µε τυχαίο τρόπο ή πάνω στον πίνακα που δίνεται σαν όρισµα (µία boolean τιµή ανά γονίδιο), αντίστοιχα. public void editrules() public void editstructure() Ανοιγµα του editor για τους κανόνες και τη δοµή του δικτύου, αντίστοιχα. Περιγραφή της κλάσης BooleanGene Η κλάση BooleanGene ορίζει τα εξής δεδοµένα: boolean state boolean laststate Η τρέχουσα και η προηγούµενη κατάσταση του γονιδίου (true ή false). boolean[] rule Ο κανόνας του γονιδίου σε µορφή πίνακα αληθείας. Η αρίθµηση των εισόδων γίνεται από τη µικρότερη στη µεγαλύτερη, π.χ. για το γονίδιο µε εισόδους τα 6 και 3 και κανόνα τον xyzw, το x αντιστοιχεί στο γονίδιο-3=false και γονίδιο-6=false, το y αντιστοιχεί στο γονίδιο-3=false και γονίδιο-6=true, το z αντιστοιχεί στο γονίδιο-3=true και γονίδιο-6=false και το w αντιστοιχεί στο γονίδιο-3=true και γονίδιο-6=true.
Page 12 of 13 int mode Το µοντέλο συµπεριφοράς του γονιδίου. Ενα από τα παρακάτω. final static int KAUFFMAN final static int PROBABILISTIC final static int MEMORIFUL Τα τρία µοντέλα συµπεριφοράς γονιδίου που περιγράφονται στο εγχειρίδιο χρήσης παραπάνω. double r Μία µεταβλητή που δηλώνει ρυθµό µεταβολής κατάστασης και χρησιµοποιείται στο µοντέλο γονιδίου MEMORIFUL. History statehistory Η "ιστορία" της κατάστασης του γονιδίου (σειρά από 0 ή 1). Οι πιο σηµαντικές µέθοδοι τις οποίες υλοποιεί η κλάση BooleanGene είναι οι εξής: void setrandomrule() Αρχικοποίηση του κανόνα του γονιδίου µε τυχαίο τρόπο. void setrule(string) Αρχικοποίηση του κανόνα του γονιδίου πάνω στο String που δίνεται σαν όρισµα. String rulestring(int) Μετατροπή του κανόνα του γονιδίου σε String (δυαδικού τύπου 01001...). Η συνδετικότητα Κ δίνεται σαν όρισµα. void setstate(boolean) void setrandomstate() Αρχικοποίηση της κατάστασης του γονιδίου στην τιµή που δίνεται σαν όρισµα ή σε τυχαία τιµή. void execute() Υλοποιεί τα συµπεριφορικά µοντέλα γονιδίου. Μερικά ενδιαφέροντα επιπλέον άρθρα R.J.Bagley, L.Glass. Counting and classifying attractors in high dimensional dynamical systems, Journal of Theoretical Biology 183(1996):269-284. L.G.Volkert, M.Conrad. The role of weak interactions in biological systems: the dual dynamics model, Journal of Theoretical Biology 193(1998):287-306. W.R.Stark, W.H.Hughes. Asynchronous, irregular automata nets: the path not taken, Biosystems 55(2000):107-117. είτε ακόµη... Discrete Dynamics Lab, by Andy Wuensche
Page 13 of 13 Τελευταία ενηµέρωση 10 Ιουλίου 2005. Στείλτε µου mail (brensham@softlab.ece.ntua.gr)