Αυτή η ερώτηση μας ζητά να φτιάξουμε μια φωλιά, στην μέση του "κόσμου"
ή γύρω από την "πηγή" , εννέα κομματιών
και θα χρωματίσουμε την φωλιά με πορτοκαλί χρώμα.
Πάμε λοιπόν στον κώδικα και προσθέτουμε μια καινούρια "turtle" μεταβλητή.
Στην πρώτη γραμμή γράφουμε "turtles-own" και μέσα στις αγκύλες γράφουμε "[return-to-nest?]"
Μετά θα δημιουργήσουμε μία καινούρια μεταβλητή "patch".
Τυπώστε "patches own" και μετά "nest?".
Τώρα θα προσθέσουμε κάποιες γραμμές στην διαδικασία "setup",
στην εντολή "ask turtles", ας γράψουμε "set return-to-nest?false".
αν δεν το κάνουμε αυτό η Netlogo θα θέσει κάθε νέα μεταβλητή ως αληθής (true) ως προεπιλογή.
Τώρα θα προσθέσουμε μια νέα γραμμή που θα είναι μία καινούρια διαδικασία
και θα την ονομάσουμε "set-up-nest"
Για να προσθέσουμε αυτή την διαδικασία, γράφουμε "to set-up-nest"
και από κάτω "ask patches", που μας οδηγεί στο πλαίσιο των patches
και θέτουμε την μεταβλητή "nest" ως αληθή, (set nest?), εαν βρίσκεται ως δύο τετράγωνα απόσταση από το κέντρο.
Για να το κάνουμε αυτό γράφουμε την απόσταση ως "set nest? (distancexy 0 0) < 2
και εαν κάποιο κομματι έχει αυτά τα κριτήρια γράφουμε
"if nest? [set pcolor orange]" (αν η μεταβλητή nest? είναι αληθής χρωμάτισε το τετράγωνο πορτοκαλί).
Και πάντα τερματίζουμε την διαδικασία γράφοντας "end"
Ας δούμε αν δουλεύει (πατάμε "check"), δεν υπάρχει αγκύλη που κλείνει. Ξέχασα την αγκύλη, την προσθέτω και βλέπω αν δουλεύει.
Φαίνεται να είναι σωστό. Πάμε λοιπόν στην διεπαφή (interface), πατάμε "setup"
και βλέπουμε, αν και είναι δύσκολο να το δούμε, ότι υπάρχουν εννέα κομμάτια. Θα υποθέσω ότι είναι εννέα.
Τώρα υπάρχει μία πορτοκαλί φωλιά στο κέντρο του "κόσμου".
Μετά μας ζητάτε να γράψουμε έναν κώδικα για να γυρίζουν τα μυρμήγκια στη φωλιά, αφού έχουν φάει φαγητό,
πριν να ξαναφύγουν για αναζήτηση τροφής
Υπάρχουν πολλοί τρόποι να το κάνετε αυτό, ο τρόπος που θα το κάνω εγώ είναι ο ακόλουθος:
Πρώτα θα ήθελε να απλοποιήσω λίγο την διαδικασία "go"
Έτσι θα δημιουργήσω μία νέα διαδικασία και θα την ονομάσω "look-for-food" (ψάξε για φαγητό).
Θα κάνω cut (περικοπή) αυτό το τμήμα,
θα γράψω μία νέα γραμμή διαδικασίας "to-look-for-food" και θα κάνω επικόλληση (paste). (Σημ. πάντα γράφω end για να κλείσει η διαδικασία)
Και τώρα θα πάω πάλι στην διαδικασία "go" και θα προσθέσω "ifelse return-to-nest? false" και "[look-for-food]" (αν δεν γυρίσω στην φωλιά τότε συνεχίζω να ψάχνω για τροφή).
Και επομένως αν η εντολή "return-to-nest" είναι αληθής, τότε θα επιστρέψουμε στην φωλιά.
Δεν έχουμε γράψει ακόμη αυτή την διαδικασία "return-to-nest" και αυτό θα είναι το επόμενο που θα κάνουμε.
Πριν όμως το κάνουμε αυτό, καλό είναι να ελέγξουμε αν έχουμε κάνει ως τώρα κάποιο λάθος στον κώδικα.
Θα πατήσω λοιπόν check και μας λέει ότι δεν έχουμε ακόμη την διαδικασία "return-to-nest"
Παρατηρώ επίσης ότι έχω ξεχάσει ένα ίσον (=) μετά από αυτή την γραμμή, έτσι θα το βάλω εδώ
και μετά θα γράψουμε την "return-to-nest" διαδικασία
Γι' αυτή (την διαδικασία) θα γράψουμε απλά "face patch 0 0" (που είναι το κέντρο) και " fd1"
και αυτό θα δώσει εντολή σε κάθε μυρημήγκι για το οποίο η πρόταση "return-to-nest" είναι αληθής, να κοιτάξει προς το κέντρο και να κάνει ένα βήμα προς αυτή την κατεύθυνση.
Και μετά θέλουμε να του πούμε να βγει να συλλέξει πάλι τροφή, εαν βρίσκεται στην φωλιά.
Έτσι γράφουμε "if pcolor = orange", το οποίο σημαίνει ότι έχει γυρίσει στη φωλιά και "set return-to-nest? false",
γιατί είναι ήδη εκεί....
κλείνουμε τις αγκύλες και γράφουμε "end"
Μέχρι στιγμής δεν έχουμε κάποια μυρμήγκια που να τα έχουμε δώσει οδηγίες τι να κάνουν όταν η πρόταση "return-to-nest" είναι αληθής. Επομένως πρέπει να το κάνουμε
Αφότου έχουν φάει την τροφή ας γράψουμε "set return-to-nest? true"
Θα ελέγξουμε αυτό τον κώδικα (πατάμε check). Φαίνεται σωστός.
Πάμε πίσω στην διεπαφή, πατάμε "setup" και μετά "go".
Υπάρχουν αρκετά μυρμήγκια. Είναι δύσκολο να δεις τί κάνουν.
Ας μειώσουμε λοιπόν τον αριθμό των μυρμηγκιών και να δοκιμάσουμε πάλι.
Ελλατώνουμε κάπως την ταχύτητα.
Ίσως βλέπετε ότι τα μυρμήγκια συμπεριφέρονται όπως θα έπρεπε.
Τρώνε τροφή και επιστρέφουν στη φωλιά, πριν να βγουν πάλι έξω. Μπορούμε να αλλάξουμε πάλι το χρώμα σε κόκκινο, για να το κάνουμε πιο εμφανές, αλλά ας το αφήσουμε αυτό γι' αργότερα.