Τώρα που έχουμε δει λίγο πως λειτουργεί το NetLogo,
θα φτιάξουμε το δικό μας απλό μοντέλο.
Αυτό το μοντέλο θα αποτελείται από ένα μυρμήγκι
που κινείται τυχαία γύρω γύρω. Ας ανοίξουμε το NetLogo.
Θα κλικάρω στο φάκελο NetLogo και μετά στο NetLogo 5.0.3.
Μπορείτε να κλικάρετε σε όποια εκδοχή έχετε.
Το πρώτο πράγμα που θα κάνω είναι να δημιουργήσω τα "setup" και "go" κουμπιά.
Οπότε πηγαίνω στο μέρος του μενού που λέει "button".
Εκεί είναι άλλωστε και το μέρος δημιουργίας της διεπαφής, γιατί όταν
κλικάρουμε πάνω του μπορούμε να δούμε όλα τα
διαφορετικά αντικείμενα που μπορούμε να προσθέσουμε στην διεπαφή.
Οπότε θα προσθέσουμε το "button". To επιλέγουμε και
συμπληρώνουμε ότι το κουμπί θα είναι για "setup".
Μετά ξαναεπιλέγουμε το "button" και συμπληρώνουμε "go".
Τώρα μπορώ να επιλέξω αυτό το κουμπί κάνοντας δεξί κλικ
και μπορώ να το μετακινήσω. Μπορώ μάλιστα να αλλάξω το μέγεθός
του άμα επιθυμώ επιλέγοντάς το και σέρνοντας τον κέρσορα.
Οπότε τώρα έχουμε τα "setup" και "go" κουμπιά.
Είναι κόκκινα γιατί δεν υπάρχει κάποιος κώδικας συνδεδεμένος με αυτά.
Δεν κάνουν τίποτα προς το παρόν όταν τα πατάμε, οπότε πρέπει να γράψουμε ένα πρόγραμμα.
Τώρα ας δημιουργήσουμε τον κώδικα που συνοδεύει τα "setup" και "go".
Για να το κάνουμε αυτό πηγαίνουμε στην καρτέλα "Code",
και γράφουμε τις διαδικασίες.
Το πρώτο που θα κάνουμε είναι το "setup". Οπότε γράφουμε "to setup".
Και αυτό είναι που θα κάνουμε όταν επιλέξουμε το κουμπί.
Γράφουμε "clear-all", που είναι μια εντολή που αδειάζει τον κόσμο που υπάρχουν
τα μυρμήγκια από προηγούμενες εκτελέσεις.
Γράφουμε "reset-ticks", που σημαίνει ότι επαναφέρουμε το χρόνο στο 0.
Τώρα πρέπει να δημιουργήσουμε ένα μυρμήγκι.
Πρέπει να ξέρετε ότι κάθε παράγοντας στο NetLogo
λέγεται "turtle" (χελώνα). Αυτό συμβαίνει για ιστορικούς λόγους.
Προέρχεται από την πρωτότυπη γλώσσα Logo,
στην οποία βασίστηκε το NetLogo. Εκεί όλοι
οι παράγοντες ήταν χελώνες. Μάλιστα στη γλώσσα Logo
υπήρχε μόνο μία χελώνα. Στο NetLogo μπορούμε και
έχουμε πολλές χελώνες. Αλλά προς το παρόν,
θα γράψουμε "create-turtles" και θα πούμε πόσες θέλουμε να δημιουργήσουμε.
Εμείς θέλουμε μόνο 1. Και μετά θα ζητήσουμε από το πρόγραμμα
να εκτελέσει κάποιες εντολές. Γράφουμε "ask turtle"
και θα του δώσουμε μια λίστα από πράγματα για να εκτελέσει.
Η λίστα ξεκινάει με τον χαρακτήρα "[".
Γράφουμε "set shape "bug" ". Αυτό είναι το
σχήμα του μυρμηγκιού που είναι ενσωματωμένο στο NetLogo.
Γράφουμε "set size 3". Είναι ένα καλό
μέγεθος για να το βλέπουμε.
Γράφουμε "set color red". Αυτές είναι όλες οι εντολές
που θέλουμε να εκτελέσει οπότε βάζουμε τον χαρακτήρα "]".
Και γράφουμε "end" στο τέλος.
Εδώ υπάρχει ένα κουτί που λέει "Check", το οποίο ελέγχει
τον κώδικα για σφάλματα. Το επιλέγουμε και μας λέει
ότι υπάρχει ένα σφάλμα στο πρόγραμμα. Μας λέει που είναι το σφάλμα
και παρατηρώ ότι έπρεπε να είχα γράψει "ask turtles".
Ξέχασα ένα "s" και ο λόγος είναι ότι το NetLogo
πάντα υποθέτει ότι υπάρχει ένας πληθυσμός από
χελώνες ή παράγοντες και όποτε γράφουμε μια εντολή
αφορά ολόκληρο τον πληθυσμό. Τουλάχιστον για αυτόν το βρόχο
θα συμπεριλάβουμε όλον το πληθυσμό, αν και υπάρχει μόνο ένας παράγοντας.
Αλλά θα μπορούσαμε να το αλλάξουμε αυτό αργότερα.
Ας ξανατσεκάρουμε τον κώδικα. Και μας πηγαίνει πίσω στο σημείο διεπαφής
που σημαίνει ότι όλα λειτουργούν καλά. Ας επιλέξουμε το ¨setup".
Και εδώ βλέπουμε το μυρμήγκι μας, ακριβώς στη μέση.
Το "go" είναι ακόμη κόκκινο, που σημαίνει ότι δεν έχουμε
γράψει ακόμα τον κώδικα για αυτό.
Τώρα ας γράψουμε τη διαδικασία για το "go".
Πηγαίνουμε πίσω στην καρτέλα "Code".
Και γράφουμε "to go". Γράφουμε "ask turtles" για να εκτελέσουμε ορισμένες εντολές.
Θα τους ζητήσουμε να στρίψουν δεξιά 30 μοίρες.
Οπότε γράφουμε "right 30". Μετά θα τους ζητήσουμε να
κινηθούν μπροστά 4 βήματα. Και γράφουμε "forward 4".
Μετά θα αυξήσουμε τα χρονικά βήματα κατά 1. Αυτό το κάνει η εντολή "tick".
Οπότε θυμηθείτε ότι επαναφέραμε τα χρονικά βήματα στο 0 και μετά γράφουμε
"tick", το οποίο προσθέτει 1 κάθε φορά που επαναλαμβάνουμε την διαδικασία.
Και μετά γράφουμε "end". Ας το τσεκάρουμε.
Όλα δείχνουν καλά. Ας επιστρέψουμε στο σημείο διεπαφής.
Και επιλέγουμε "go". Βλέπουμε ότι η χελώνα έστριψε κατά 30 μοίρες.
Και μετά μετακινήθηκε μπροστά 4 βήματα.
Μπορούμε να συνεχίσουμε να πατάμε το "go" και βλεπουμε
ότι πηγαίνει γύρω γύρω σε έναν κύκλο.
Θα θέλαμε να συνεχίζει να κινείται χωρίς να χρειάζεται να πατάμε το "go" κάθε φορά.
Για να το κάνουμε αυτό πατάμε δεξί κλικ και επιλέγουμε "Edit" (Επεξεργασία).
Και βλέπουμε την επιλογή "Forever", την οποία επιλέγουμε.
Με αυτό το πρόγραμμα θα επαναλαμβάνει το "go" για πάντα.
Οπότε ας το κάνουμε. Και αν το επιβραδύνουμε βλέπουμε
ότι το μυρμήγκι κινείται μόνο του γύρω γύρω.
Πατάμε ξανά το "go" για να το σταματήσουμε.
Τώρα αν θέλουμε να ξαναρχίσει, μπορούμε να πατήσουμε "go"
ή αν θέλουμε να ξαναρχίσουμε από το μηδέν
πατάμε "setup". Βλέπουμε ότι αν συνεχίσουμε να πατάμε το "setup"
αρχίζει στο ίδιο μέρος (στο κέντρο), αλλά έχει διαφορετική κατεύθυνση κάθε φορά.
Αυτό συμβαίνει γιατί το "setup" τοποθετεί το μυρμήγκι στο κέντρο
κοιτώντας σε μια τυχαία κατεύθυνση. Τώρα μπορούμε
να αποθηκεύσουμε το μοντέλο πηγαίνοντας στην καρτέλα "File" ("Αρχείο")
και επιλέγοντας "Save as" ("Αποθήκευση ως").
Το αποθηκέυουμε ως "Ant1". To βλέπετε εδώ, εμφανίζεται
στην επιφάνεια εργασίας. Οπότε τώρα μπορώ να πάω στο μενού του NetLogo
και να κλείσω το πρόγραμμα. Και αν θέλω να το ξανανοίξω,
διπλοκλικάρω στο "Ant1" και το NetLogo θα ανοίξει.
Υπάρχει μόνο ένα πρόβλημα με το μοντέλο μας.
Και αυτό είναι ότι είναι βαρετό.
Το μόνο που κάνει το μυρμήγκι είναι να κινείται σε έναν κύκλο.
Ας το κάνουμε λίγο πιο ενδιαφέρον.
Αυτό μπορώ να το κάνω πηγαίνοντας στο "Code"
και προσθέτοντας μια απλή εντολή.
Αντί να στρίβει δεξιά 30 μοίρες, θα προσθέσουμε τη λέξη "random".
Οπότε τώρα το μυρμήγκι θα επιλέγει έναν τυχαίο αριθμό
μεταξύ 0 και 30-1 (29) μοίρες. Αυτό κάνει η εντολή "random".
Και κάθε φορά που το πρόγραμμα τρέχει αυτή την εντολή
θα επιλέγει έναν διαφορετικό αριθμό. Μπορούμε να κάνουμε το ίδιο
πράγμα εδώ. Μπορούμε να κάνουμε το μυρμήγκι να μετακινείται μπροστά
έναν τυχαίο αριθμό βημάτων μεταξύ 0 και 4-1 (3).
Ας δούμε τι γίνεται τότε. Πηγαίνουμε πίσω στην επιφάνεια διεπαφής.
Ας πατήσουμε το "setup" και μετά "go".
Και μπορείτε να δείτε ότι ακόμη κινείται στο περίπου κυκλικά, αλλά
κάνει τη συμπεριφορά του λίγο πιο ενδιαφέρουσα.
Ένα πράγμα που μπορεί να παρατηρήσετε είναι ότι
το μυρμήγκι φαίνεται να περνάει μέσα από τον τοίχο
σε αυτή την πλευρά και να βγαίνει στην άλλη πλευρά.
Και, στην πραγματικότητα ο "κόσμος", αυτη η μαύρη περιοχή
αναδιπλώνεται γύρω στις άκρες. Οπότε όλος ο κόσμος
έχει το σχήμα ενός ντόνατ ή μιας κυκλικής βάσης.
Αυτός ο τοίχος που βλέπουμε στην πραγματικότητα δεν είναι επίπεδος
αλλά διπλώνει και εφάπτεται στον απέναντι τοίχο.
Οπότε το μυρμήγκι αν περάσει μέσα από τον τοίχο (πηγαίνει λίγο γρήγορα),
αν περάσει από πάνω, θα βγει από κάτω. Και άν περάσει από το πλάι, θα βγει απο την άλλη πλευρά.
Αυτό το κάνει να φαίνειται λίγο περίεργο. Αυτό που μπορώ να κάνω
είναι δεξί κλικ στον "κόσμο", πάνω σε αυτήν τη
μαύρη περιοχή και να πατήσω "Edit". Αυτό το παράθυρο δίνει πολλές πληροφορίες
για το σύστημα συντεταγμένων αυτού του κόσμου,
τον αριθμό των σημείων που φτιάχνουν το πλέγμα του κόσμου του μυρμηγκιού.
Αυτό όμως που μας ενδιαφέρει είναι οι βασικές επιλογές:
" World wraps horizontally" (ο κόσμος διπλώνει οριζόντια) και
"World wraps vertically" (ο κόσμος διπλώνει κάθετα).
Τις αποεπιλέγουμε, πατάμε "Apply" και "OK".
Και ας δούμε τι γίνεται τότε. Τώρα, όταν
το μυρμήγκι χτυπάει στον τοίχο, κολλάει εκεί πέρα
και δεν μπορεί να κινηθεί μέχρι να καταφέρει να στρίψει.
Οπότε αυτό κάνει το μυρμήγκι λίγο πιο ρεαλιστικό.
Παρόλο που το μυρμήγκι μας μπορεί να κινηθεί τυχαία,
ακόμη δεν είναι πολύ ενδιαφέρον γιατί στρίβει μόνο προς τα δεξιά.
Οπότε ας γράψουμε έναν κώδικα που του επιτρέπει
να διαλέγει τυχαία αν θα στρίψει δεξιά ή αριστερά.
Ουσιαστικά θα είναι σαν να ρίχνει κορώνα-γράμματα
κάθε φορά που θα αποφασίζει να κινηθεί και θα
διαλέγει μεταξύ δεξιά ή αριστερά.
Οπότε ας εφαρμόσουμε την διαδικασία για την ρίψη του νομίσματος.
Θα χρησιμοποιήσω την εντολή "to report coin-flip" . H διαδικασία "to report"
είναι διαφορετική από τη διαδικασία "to" γιατί αυτήν (δλδ. η πρώτη)
επιστρέφει μια τιμή. Η συγκεκριμένη θα επιστρέψει
"True or False" (Σωστό ή Λάθος), που αντιστοιχεί σε κορώνα ή γράμματα.
Και το μόνο που πρέπει να γράψουμε εδώ είναι
"report random 2 = 0". Αυτό που κάνει αυτή η εντολή ειναι...
Λοιπόν το "random 2" αν θυμάστε επιστρέφει έναν ακέραιο αριθμό
μεταξύ 0 και αυτού του αριθμού (δλδ. 2) μείον ένα.
Οπότε αυτό θα επιστρέφει 0 τις μισές φορές
και 1 τις άλλες μισές φορές, αλλά τυχαία.
Αν είναι 0, τότε αυτό που λέει "random 2 = 0", θα είναι μία αληθής πρόταση,
αλλιώς θα είναι λανθασμένη, και αυτό αναφέρει αν είναι Σωστό ή Λάθος.
Οπότε η τιμή όλης αυτής της "to report" διαδικασίας
θα είναι αληθής τις μισές φορές και
λανθασμένη τις άλλες μισές, βασισμένο στην τύχη.
Μπορούμε να το χρησιμοποιήσουμε αυτό εδώ πάνω,
γράφοντας "ifelse coin-flip". Αυτή η εντολή λέει ότι αν
η ρίψη του νομίσματος είναι αληθής, κάνε την
πρώτη πρόταση που βάζω σε παρένθεση "[right random 30]",
αλλιώς αν είναι λανθασμένη κάνε το
δεύτερο πράγμα που βάζω σε παρένθεση "[left random 30]".
Οπότε αν η ρίψη του νομίσματος είναι αληθής κάνουμε "right random 30"
και αν είναι λανθασμένη κάνουμε "left random 30".
Οπότε κάθε φορά που τρέχουμε το πρόγραμμα
πατώντας "go", αυτό θα αποφασίζει τυχαία
αν είναι να στρίψει δεξιά ή αριστερά.
Ας δούμε πως δουλεύει.
Πατάμε "setup" και "go".
Και μπορούμε να δούμε ότι γυρνάει προς διαφορετική κατεύθυνση.
Κολλάει, αλλά γυρνάει μπροστά δεξιά και αριστερά.
Και το μόνο μας πρόβλημα είναι ότι κολλάει πολύ συχνά.
Μπορούμε να το διορθώσουμε και να το
κάνουμε λίγο καλύτερο αλλάζοντας τις 30 μοίρες σε 60.
Να αφήσουμε δηλαδή το μυρμήγκι να έχει
μεγαλύτερη ακτίνα περιστροφής,
να στρίβει περισότερο κάθε φορά.
Το ξαναδοκιμάζουμε, και για να δούμε...Ναι!!
Φαίνεται να κολλάει λιγότερο συχνά.
Και μοιάζει πιο ρεαλιστικό.
Κάθε φορά που γράφετε ένα πρόγραμμα,
είναι καλή ιδέα να βάζετε μέσα κάποια σχόλια.
Οπότε ας επιστρέψω στην καρτέλα " Code".
Το σχόλιο είναι απλά ένα μικρό κείμενο που
προσθέτετε στο πρόγραμμα, αλλά το οποίο
αγνοείται από τον υπολογιστή. Είναι για την
ανάγνωση και τη διευκόλυνση των ανθρώπων.
Και στο NetLogo το σχόλιο είναι απλώς ένα
κείμενο που ακολουθεί τον χαρακτήρα " ; ".
Οπότε μπορώ να βάλω εδώ ";" και μετά να γράψω
ότι θέλω και ο υπολογιστής θα το αγνοήσει.
Οπότε ας γράψουμε "returns true or false at random" (επιστρέφει σωστό ή λάθος στην τύχη),
διότι αυτό κάνει. Και εδώ μπορούμε να γράψουμε ένα άλλο σχόλιο
"if coin-flip is true, turn right else turn left"
(αν η ρίψη του νομίσματος είναι αληθής στρίψε δεξιά, αλλιώς αριστερά).
Οπότε εκεί έχουμε μια μικρή υπενθύμιση
είτε για τον εαυτό μας, είτε για όποιον διαβάσει
το πρόγραμμα, σχετικά με το τι αυτές οι εντολές κάνουν.
Τώρα, αυτό είναι πολύ βοηθητικό αν έχετε ένα
αρκετά περίπλοκο πρόγραμμα, ειδικά αν επιστρέψετε
να το διαβάσετε μετά από κάποιες μέρες. Και βοηθάει
αρκετά στο να θυμηθείτε τι κάνατε.
Οπότε τα σχόλια είναι άκρως απαραίτητα, ακόμη
και αν κανένας άλλος, παρά μόνο εσείς
διαβάσει το πρόγραμμα.
Τώρα είμαστε έτοιμοι να αποθηκεύσουμε
το μοντέλο μας. Πρώτα θα το ονομάσω.
Αυτό είναι απλά για αισθητικούς λόγους.
Αλλά θα πάω στο μενού της επιφάνεια διεπαφής
και θα επιλέξω "Note" (Σημείωση).
Θα βάλω εδώ πέρα ένα μικρό κείμενο
το οποίο λέει το όνομα του μοντέλου "Ant 1".
Θα κάνω το μέγεθος λίγο μεγαλύτερο, στο 18.
Οκ, και μετά μπορώ να επιλέξω τα κουτιά
και να τα μετακινήσω προς τα κάτω
ή να τα κεντράρω. Μπορώ να κάνω ό,τι θέλω με αυτά.
Και τώρα τελειώσαμε. Επιλέγουμε "Save" (Αποθήκευση).
Kαι μπορούμε να κλείσουμε το NetLogo.
Θέλω να αναφέρω ότι ο σκοπός που διδάσκω το NetLogo
είναι για να σας δώσω μια αίσθηση του
πως δουλεύουν τα πράγματα. Χρησιμοποιούμε πολλές
προσομοιώσεις του NetLogo σε αυτό το μάθημα.
Δεν θα γράψουμε πολλές αλλά θέλω να
αντιληφθείτε πως λειτουργεί ο κώδικας και η επιφάνεια διεπαφής, κ.λπ.
Εσείς θα κάνετε μάλλον κάποιες τροποποιήσεις
σε κάποια από τα μοντέλα που θα δούμε.
Και αν είστε πιο προχωρημένοι ή πιο ενθουσιώδης
μπορείτε να γράψετε τα δικά σας μοντέλα.
Ως εργασία έναντι ένός κουίζ για αυτήν την ενότητα
θα ήθελα να εφαρμόσετε το ακριβώς ίδιο μοντέλο
που μόλις έκανα (Ant 1), χρησιμοποιώντας τις
ίδιες προτάσεις που χρησιμοποιήσα και
να το κάνετε να δουλέψει.
Αυτό δε θα βαθμολογηθεί, αλλά είναι προς το καλύτερο
να δείτε ότι καταλάβατε αυτό που μόλις σας έδειξα.
Και μην διστάσετε να γράψετε τις ερωτήσεις σας
στο φόρουμ αν σας προκύψουν κάποιες.
Για αυτό είναι εκεί άλλωστε.