Ας κατασκευάσουμε ένα δεύτερο μοντέλο,
που βασίζεται στο πρώτο.
Το πρώτο πράγμα που θα κάνουμε είναι
να κάνουμε ένα αντίγραφο του "Ant 1.nlogo" .
Για να το κάνω αυτό, πατάω δεξί κλικ
και επιλέγω "Copy" (Αντιγραφή).
Και μετά μπορώ να πατήσω command+V,
ή ctrl+A, όποιον τρόπο χρησιμοποιείται για να αντιγράψετε αρχεία.
Και θα μετονομάσω το αντίγραφο σε "Ant 2.nlogo".
Μετά θα κάνω διπλό κλικ πάνω του
για να το ανοίξω και θα αλλάξουμε το όνομα
κάνοντας δεξί κλικ στο όνομα.
Επιλέγουμε "Edit" (Επεξεργασία) και το λέμε Ant 2.
Τώρα που έχουμε ένα μυρμήγκι που κινείται
ας του δώσουμε κάτι να φάει.
Ας πάμε στην καρτέλα "Code", και ας βάλουμε
λίγο φαγητό για το μυρμήγκι.
Οπότε στην διαδικασία "setup" θα γράψουμε
"grow-food". Αλλά τώρα πρέπει να πούμε στο σύστημα
πως να παράξει το φαγητό.
Οπότε πηγαίνουμε εδώ κάτω και γράφουμε
μια νέα διαδικασία "to grow-food" . Και θα γράψουμε
"ask patches [set pcolor green] end".
Οπότε θα εξηγήσω τα patches (κομμάτια).
Εάν πάμε πίσω στην επιφάνεια διεπαφής
βλέπουμε εδώ πέρα τον "κόσμο", που είναι
αυτή η μαύρη περιοχή. Μπορούμε να κάνουμε δεξί κλικ
και να επιλέξουμε "Edit". Aυτό δείχνει το
σύστημα συντεταγμένων για τον κόσμο.
Είναι μάλλον δύσκολο να το δείτε στην οθόνη σας,
αλλά μπορείτε να το κάνετε στο NetLogo και να το δείτε.
Οι συντεταγμένες (0,0) είναι στη μέση και πηγαίνει από
-16 σε 16 καθέτως και από -16 σε 16 οριζοντίως.
Οπότε το κουτί αυτό είναι ένα πλέγμα από
33x33 τετραγωνάκια που λέγονται patches.
Εδώ είναι ο αριθμός των πίξελς σε κάθε patch.
Εδώ είναι 13, κ.λπ. Οπότε κάθε patch έχει
τις δικές του ιδιότητες, όπως π.χ. χρώμα.
Αν πάω πίσω στον κώδικα, έχω ζητήσει από όλα τα patches να αλλάξουν
το χρώμα τους σε πράσινο ("pcolor" είναι το χρώμα τον patches).
Ας δούμε τι γίνεται όταν πατάω "setup".
Όντως όλα έχουν γίνει πράσινα.
Οπότε μπορούμε να το δούμε ως ένα μοντέλο
ενός μυρμηγκιού που ζει σε έναν κόσμο από γρασίδι.
Τώρα ας πάμε πίσω στην καρτέλα "Code".
Θα γράψουμε έναν κώδικα που θα κάνει τα
μυρμήγκια να τρώνε το γρασίδι.
Για να το κάνουμε θα γράψουμε τα παρακάτω ακριβώς εδώ:
"if pcolor = green" που σημαίνει ότι...
...θα γράψω ένα σχόλιο εδώ πέρα
" ; if the turtle is located on a green patch" (αν η χελώνα βρίσκεται σε ένα πράσινο τετράγωνο)
Οπότε αυτό ζητάει από τις χελώνες να δουν
το τετράγωνο στο οποίο βρίσκονται
και αν αυτό είναι πράσινο, πρέπει
να κάνουν τα παρακάτω: να φάνε το κομμάτι γρασίδι
μέσω της εντολής "set pcolor black".
Και μετά πρέπει να παρακολουθήσουν πόσο γρασίδι έφαγαν.
Οπότε γράφουμε "set food-eaten (food-eaten + 1)".
Και μετά θα κάνουμε ένα ακόμη πράγμα που θα
τοποθετήσει μια ετικέτα στο σώμα του κάθε παράγοντα
που θα μας λέει πόσο φαγητό έφαγε.
Γράφουμε "set label food-eaten".
Παρατηρείστε ότι αυτές είναι εντολές
που ζητάμε από τις χελώνες να τις κάνουν.
Και συνηδειτοποίησα ότι πρέπει να βάλω αυτήν την
παρένθεση ( [ ) εδώ κάτω. Και θα πατήσω "Tab",
γιατί κάθε φορά που πατάω "Tab" ενδοπαραγραφοποιεί
το κείμενο στο σημείο που πρέπει.
Οπότε τώρα έχω αυτές τις δύο παρενθέσεις (δείχνει τις παρενθέσεις)
γύρω από τις εντολές που θα ρωτήσουμε τις χελώνες.
Θα τις ρωτήσουμε να στρίψουν δεξιά ή αριστερά,
να κινηθούν μπροστά 4, να κοιτάξουν το
τετράγωνό τους και αν είναι πράσινο
να το αλλάξουν σε μαύρο, να αυξήσουν την
ποσότητα φαγητού κατά 1 και να βάλουν μια ετικέτα
που λέει πόσο φαγητό έχουν καταναλώσει.
Τώρα έμεινε ένα πράγμα να κάνουμε που αφορά
το "food-eaten", το οποίο πρέπει να το ορίσουμε.
Οι χελώνες πρέπει να έχουν κάποιο είδος
μεταβλητής συνδεδεμένο με αυτές. Η μεταβλητή είναι
το "food-eaten". Μπορείτε να την σκεφτείτε ως το
στομάχι της χελώνας, που παρακολουθεί πόσο
φαγητό έχει καταναλωθεί. Και οι χελώνες δεν
χωνεύουν ποτέ κάτι σε αυτό το μοντέλο.
Οπότε για να το κάνω αυτό θα γράψω
"turtles-own [food eaten]". Αυτό που κάνει
είναι... μια τέτοια μεταβλητή είναι συγκεκριμένη σε
κάθε χελώνα. Κάθε χελώνα έχει τη δική της
"food-eaten" μεταβλητή. Οπότε κάθε χελώνα θα
έχει καταναλώνει διαφορετική ποσότητα φαγητού.
Εδώ πάνω στο "setup" θα το ορίσω ως
"set food-eaten 0". Σιγουρευτείτε ότι ξεκινάει από το 0.
Και καθώς προχωράμε, κάθε χελώνα ή μυρμήγκι
θα συσσωρεύει την ποσότητα φαγητού που έφαγε.
Οπότε ας το τσεκάρουμε. Φαίνεται καλό.
Πηγαίνουμε πίσω στην επιφάνεια διεπαφής.
Ας επιβραδύνουμε λίγο την κίνηση για να
μπορούμε να δούμε τη χελώνα να τρώει.
Οπότε η χελώνα,...συγγνώμη το μυρμήγκι, κινείται στον κόσμο
και κάθε φορά που προσγειώνεται σε ένα πράσινο τετράγωνο
τρώει το φαγητό. Θυμηθείτε ότι προχωρά από 0 έως 3
βήματα κάθε φορά. Οπότε τρώει το φαγητό μόνο όταν έχει κάνει
όλα του τα βήματα κάθε φορά.
Το είδατε να πηγαίνει γύρω γύρω και
γι'αυτό θα το επιταχύνω λίγο. Και μπορείτε να δείτε
το μυρμήγκι να κινείται και να τρώει.
Πιθανότατα δεν θα μπορείτε να το δείτε στην οθόνη σας,
αλλά το μυρμήγκι έχει πάνω του μια ετικέτα
για το πόσο φαγητό έχει καταναλώσει.
Είναι πολύ φαγητό για ένα μικρό μυρμήγκι
και το επόμενο που θα κάνουμε είναι να δώσουμε
στο μυρμήγκι μια αποικία. Ας προσθέσουμε παραπάνω μυρμήγκια.
Ο τρόπος να το κάνουμε αυτό είναι να προσθέσουμε
το κουμπί "population" (πληθυσμός)
Και θα επιτρέψουμε στον χρήστη του NetLogo να γράψει
το δικό του μέγεθος πλήθυσμού κάθε φορά. .
Οπότε θα πάω εδώ στην καρτέλα της επιφάνειας
και πηγαίνω στο "Slider". Θα προσθέσω το slider
και θα γράψω στο "Global Variable" την λέξη population.
Θα βάλω το "minimum population" (ελάχιστος πληθυσμός)
να είναι 1 και το "maximum population" (μέγιστος πληθυσμός)
ας πούμε 200. Μπορείτε να επιτρέψετε να αυξηθεί κατά 1.
Και αυτό δίνει την αρχική τιμή 50. Αυτό ακούγεται σωστό.
Και πατάμε "Apply" (Εφαρμογή) και "OK".
Αυτό το μετακινούμε, το επιλέγουμε και το μετακινούμε εδώ πάνω.
Αλλά τώρα πρέπει να πούμε στο πρόγραμμα
τι να κάνει με αυτόν τον μεταβλητό πληθυσμό.
Οπότε πάμε στην καρτέλα "Code",
και αντί να λέμε "create turtles 1" θα γράψουμε
"create turtles population". Οπότε ο χρήστης
θα θέσει τον αριθμό του πληθυσμού
και το πρόγραμμα θα δημιουργήσει ακριβώς αυτό τον αριθμό χελώνων.
Για να δούμε τι γίνεται όταν πατάμε "setup".
Τώρα έχουμε όλα τα μυρμήγκια εδώ στη μέση.
Έχουμε 50 και πατάμε "go".
Μπορούμε να τα δούμε να κινούνται γύρω γύρω.
Το επιβραδύνω. Όλα κάνουν το ίδιο πράγμα,
αλλά εφόσον το καθένα έχει μια σειρά τυχαίων επιλογών που κάνει
τα βλέπουμε όλα να συμπεριφέρονται διαφορετικά μεταξύ τους.
Και αν το επιταχύνουμε, αρχίζουμε να βλέπουμε
ότι μοιάζουν σχεδόν με πραγματικά μυρμήγκια που κινούνται και τρέφονται.
Ας αυξήσουμε τον πληθυσμό. Το 130 φαίνεται καλός αριθμός.
Ουυυ, τώρα υπάρχει μεγάλος συνωστισμός.
Λοιπόν, είναι τόσο συνωστισμένα που θεωρώ
ότι πρέπει να πάμε στον κώδικα και να τα κάνουμε μικρότερα.
Ας τα κάνουμε μέγεθος 1 ("set size 1").
Ας δούμε τι γίνεται τώρα.
Τώρα τα μυρμήγκια είναι πολύ μικρότερα.
Μάλλον δε θα μπορείτε να τα δείτε πολύ καλά,
αλλά σίγουρα έχουν περισσότερο χώρο.
Ξανά είναι πολύ μικρό για να το δείτε στην
οθόνη σας, αλλά κάθε μυρμήγκι έχει μια ετικέτα
που λέει πόσο φαγητό έχει καταναλώσει.
Ένα πράγμα που θα θέλαμε να ξέραμε είναι
πόσο φαγητό έχει καταναλωθεί
από ολόκληρη την αποικία.
Οπότε θα προσθέσω ένα διάγραμμα που δείχνει,
με την πάροδο του χρόνου, την συνολική
ποσότητα φαγητού που έχει καταναλωθεί.
Οπότε πάμε ξανά στην περιοχή της επιφάνειας που έχει τις επιλογές του μενού,
επιλέγουμε "Plot". Θα βάλω το διάγραμμα εδώ κάτω.
Και θα με ρωτήσει διάφορα πράγματα για το διάγραμμα.
Θα το ονομάσω "Total Food Eaten" (Συνολικό Φαγητό που Καταναλώθηκε).
Θα καθορίσει τις ελάχιστες και μέγιστες τιμές από μόνο του.
Στο "X axis label" βάζω τον τίτλο "Total Food Eaten".
Στο "Y axis label" βάζω τον τίτλο "Time".
Θα αφήσουμε το χρώμα μαύρο και θα αλλάξουμε
το "Pen name". Εκεί θα γράψουμε "total-food-eaten".
Και θα γράψω επίσης μια εντολή για το διάγραμμα.
Οπότε θα γράψω "plot sum [food-eaten] of turtles".
Οπότε αυτό είναι σαν να λέει στο πρόγραμμα
να κοιτάξει πόσο έχει φάει η κάθε χελώνα
και να αρθροίσει όλες αυτές τις τιμές
και μετά να σχεδιάσει αυτό το άρθροισμα έναντι του χρόνου.
Πατάμε "Apply". Ουπς, έδωσα λάθος ονόματα.
Θα έπρεπε να είναι ο y-άξονας το "Total Food Eaten"
και ο x-άξονας το "Time".
Ωραία, τώρα όλα είναι καλά.
Ας το επιλέξουμε και ας το μετακινήσουμε.
Ας το κάνουμε λίγο μεγαλύτερο για να
μπορούμε να δούμε. Και τώρα για να δούμε αν δουλεύει.
Πατάμε "setup" και "go".
Μπορείτε να δείτε ότι το διάγραμμα προσαρμόζεται
από μόνο του, αυτός ο αριθμός συνεχίζει να αλλάζει.
Και αυτό δείχνει πόσο γρήγορα καταναλώνεται το φαγητό.
Και μπορείτε μάλιστα να παίξετε με
το μέγεθος του πληθυσμού και να δείτε
κατά πόσο αυτό επηρρεάζει τον
ρυθμό κατανάλωσης του φαγητού.
Για να τελειώσουμε το μοντέλο μας,
ας αφήσουμε το χρήστη να καθορίσει
κάποιες άλλες μεταβλητές,
στις οποίες υπακούν τα μυρμήγκια.
Για παράδειγμα ας έχουμε ένα slider
που επιτρέπει στον χρήστη να καθορίσει
και τον μέγιστο αριθμό βημάτων και
την μέγιστη γωνία περιστροφής.
Κάντε "Select" (Επιλογή) στο διάγραμμα
και μετακινήστε το προς τα κάτω
για να κάνετε χώρο σε περισσότερα sliders.
Μετά θα πάω εδώ πάνω και θα επιλέξω "Slider".
Έχουμε μια μεταβλητή. Ας την ονομάσουμε
"max-step-size". Ας βάλουμε την ελάχιστη τιμή στο 1,
και την μέγιστη τιμλη στο 10.
Η αρχική τιμή θα είναι 4.
Ας το μετακινήσουμε αυτό εδώ. Και ας επιλέξουμε
και τα δύο για να τα μετακινήσουμε προς τα πάνω.
Και μετά ας βάλουμε ένα ακόμη slider.
Θα το ονομάσουμε "max-turn-angle".
Και η ελάχιστη τιμή θα είναι 1 μοίρα
και η μέγιστη τιμή θα είναι 180 μοίρες.
Η αρχική τιμή θα είναι 60 (γιατί αυτήν είχαμε βάλει στον κώδικα).
Επιλέγουμε το κουτί και το μετακινούμε.
Τώρα πρέπει να βάλουμε αυτές τις μεταβλητές στον κώδικα.
Οπότε εδώ αντί να λέμε 60, θα γράψουμε "max-turn-angle".
Και το ίδιο και εδώ, γράφουμε "max-turn-angle".
Οπότε τώρα έχουμε "right random max-turn-angle" και "left random max-turn-angle".
Αν προσέχετε τι κάνουμε μπορεί να
παρατηρήσετε ότι η πρόταση random
επιστρέφει έναν ακέραιο αριθμό μεταξύ
του 0 και του "max-turn-angle" μείον 1.
Οπότε, στην πραγματικότητα το max-turn-angle
είναι άκυρη ονομασία, γιατί η πραγματικά
μέγιστη γωνία περιστροφής είναι το
"max-turn-angle" μείον 1.
Αλλά δεν χρειάζεται να ανησυχούμε γι' αυτό.
Και εδώ θα κάνω το ίδιο πράγμα.
Αντί για 4 θα γράψω "max-step-size".
Ας τσεκάρουμε αυτόν τον κώδικα,
και παρεμπιμπτόντως μόλις συνειδητοποίησα
ότι μπορεί να είναι δύσκολο για εσάς να δείτε
τον κώδικα στην οθόνη σας. Θα τον ανεβάσω στη
σελίδα "Course Materials" του μαθήματος.
Θα είναι με το όνομα "Ant 2.nlogo".
Οπότε μπορείτε να το κατεβάσετε μόνοι σας.
Και μάλιστα θα το χρησιμοποιήσετε για το ΗW (τις ασκήσεις στο τέλος της ενότητας).
Για να δούμε τώρα αν αυτό λειτουργεί.
Ξανά, οκ, φαίνεται να δουλεύει.
Μια χρήσιμη συμβουλή που πρέπει
να σας πω για το ΝetLogo είναι ότι μερικές
φορές κολλάει, και ακόμη και αν πατάτε το "go",
δεν σταματάει γιατί εκτελεί όλες αυτές τις εντολές.
Αλλά άμα πάτε στο "Tools" (Εργαλεία), υπάρχει
η εντολή "Halt", την οποία μπορείτε να
χρησιμοποιήσετε για να σταματήσετε
ένα πρόγραμμα. Και πάντα δουλεύει.
Αυτό είναι χρήσιμο σε περίπτωση
που για κάποιο λόγο το πρόγραμμα κολλήσει.
Ας κάνουμε ένα πείραμα. Ας αυξήσουμε το max-step-size
στο 10. Για να δούμε τι γίνεται.
Τώρα όλο και περισσότερα μυρμήγκια
φαίνεται να κολλάνε στις άκρες
και μπορείτε να παίξετε με τις 3 διαφορετικές
μεταβλητές και να δείτε πόσος χρόνος χρειάζεται
για όλο το φαγητό να καταναλωθεί.
Αλλά θέλουμε το πρόγραμμα να σταματάει
από μόνο του όταν όλο το φαγητό τελειώνει.
Έτσι μπορούμε να δούμε ακριβώς πόσα ticks
χρειάστηκαν για να καταναλωθεί το φαγητό.
Θα βάλω μια εντολή στο πρόγραμμα για
να το κάνω αυτό. Πάω, λοιπόν, στην διαδικασία "go"
και η εντολή που θα χρησιμοποιούσατε για να σταματήσει είναι
"if not any? patches with [pcolor = green] [stop]".
Αυτό είναι το είδος της σύνταξης που
χρησιμοποιείται από το NetLogo.
Μπορείτε να γράψετε "not" ακολουθούμενο από
"any? patches", ακολουθούμενο από κάποια ιδιότητα
και "[stop]". Ας τα δοκιμάσουμε όλα αυτά.
Ας θέσουμε τον πληθυσμό στο 200,
τον αριθμό βημάτων στο 4 και την
γωνία περιστροφής στο 60 και να δούμε πόσο
γρήγορα μπορούν τα μυρμήγκια να
φάνε το φαγητό.
Το έκαναν σε μόνο 105 ticks.
Τώρα ας αποθηκεύσουμε το μοντέλο μας,
πηγαίνοντας στο "File" (Aρχείο) και επιλέγοντας
"Save" (Aποθήκευση).
Αυτό είναι το τέλος του δεύτερου μοντέλου μας.