Γειά σας!
Είμαι ο John Bawler και πάλι. Θα ασχοληθούμε με το
Πρόβλημα αριθμός 3, της Μέσης Ενότητας του κεφαλαίου:
"Θεωρία της Πληροφορίας", σε αυτή τη σειρά μαθημάτων. Το Πρόβλημα 3 μας ζητάει να τροποποιήσουμε
το μοντέλο "CoinFlipInformationContent.nlogo" της NetLogo και να το μετατρέψουμε στο
"DiceRollInformationContent.nlogo"
Δηλαδή, αντί να "στρίβουμε" ένα νόμισμα, θα ρίχνουμε ένα ζάρι.
Ωραία, ας δούμε πώς θα το κάνουμε.
Εδώ είναι το μοντέλο μας. Και θα το κάνω λίγο μεγαλύτερο,
ώστε να μπορούμε να βλέπουμε καλύτερα.
Το πρώτο που θα κάνουμε είναι να φτιάξουμε ένα αρχείο - να το αποθηκεύσουμε.
Ας το πούμε:
DiceRoll.nlogo. Ok, οπότε θα το αποθηκεύσουμε αυτό...... και...
Εντάξει, οπότε το πρώτο πράγμα που θέλω να κάνω, αντί να "στρίψω" ένα νόμισμα, είναι.....
Θα αφήσω πολλά πράγματα από την επιφάνεια διεπαφής και
από τον κώδικα άθικτα, απλά επειδή θα τα χρησιμοποιήσουμε με ανάλογο τρόπο, για να φτιάξουμε το δικό μας κώδικα.
Πρώτον, αντί να στρίβουμε εδώ ένα αμερόληπτο νόμισμα,
σαφώς θα χρειαστούμε ένα καινούργιο κουμπί,
που να λέει "ρίξε" και θα το ονομάσουμε "ρίψη ενός ζαριού".
Οπότε θα έχουμε μία εντολή που λέγεται "ρίξε".
Άρα, αντί να στρίβουμε το αμερόληπτο νόμισμα, ας δούμε τι έκανε αυτό
Εδώ λέει: "Στρίψε Ένα Αμερόληπτο Νόμισμα", και υπάρχει μία διαδικασία στον κώδικα που λέγεται αντίστοιχα
"Στρίψε Ένα Αμερόληπτο Νόμισμα".
Η δικά μας αντίστοιχη διαδικασία θα είναι το "Ρίξε". Και αυτό εδώ το κουτάκι είναι σημαντικό.
Αυτό το ανοίγει για επεξεργασία και αντί για "αποτέλεσμα του νομίσματος" θα το ονομάσουμε...
αν χτυπάω το σωστό... θα το πούμε "Αποτέλεσμα της Ρίψης" (του ζαριού)
Ωραία...
Άρα, ας δούμε πάλι την επιφάνεια διεπαφής. Πολλά πράγματα χάλασαν όταν έκανα την αλλαγή,
οπότε, ας δούμε αν μπορούμε να τα φτιάξουμε.
Αλλά ξέρουμε ότι θα έχουμε ένα κουτί που να συγκεντρώνει τα αποτελέσματα των ρίψεων
και... ας πάμε πίσω για λίγο, για να δούμε πώς δούλευε το αρχικό πρόγραμμα,
γιατί όταν στρίβαμε το νόμισμα, εμφανιζόταν και εδώ μία ένδειξη "κορώνα ή γράμματα"
και μετρούσε ουσιαστικά το ποσό της πληροφορίας,
χρησιμοποιώντας την εξίσωση πληροφορίας του Shannon.
Και ας δω αν μπορώ να το κάνω πάλι πιο μικρό, ώστε να βλέπουμε.
Ναι, και αυτό το περιεχόμενο πληροφορίας εμφανιζόταν εδώ κάτω, αν κοιτούσατε αυτό το κουτάκι.
Εδώ, θα δείτε ότι υπάρχει ένας αναφορέας (reporter) που κοιτούσε μόνο την τιμή του h.
Οπότε, στον κώδικα από πίσω, μπορούμε να δούμε ότι όλη η ενδιαφέρουσα δουλειά -
όχι η "ενδιαφέρουσα", αλλά ας πούμε όλο το βαρύ κουβάλημα - γινόταν από αυτές εδώ τις διαδικασίες,
οι οποίες ουσιαστικά υπολόγιζαν την πληροφορία κατά Shannon, από ένα πίνακα πιθανοτήτων.
Ok, και αυτός ο πίνακας πιθανοτήτων δημιουργιόταν εδώ, από τον πίνακα συχνοτήτων μας
και ο πίνακας συχνοτήτων με τη σειρά του φτιάχτηκε εδώ, και στηριζόταν σε μία λέξη ή σε μία σειρά
λέξεων, οι οποίες δημιουργήθηκαν από αυτήν τη διαδικασία.
Ευτυχώς, δε χρειάζεται να μπλέξουμε με κάποια από αυτές τις διαδικασίες, γιατί
αυτό που έχουμε μόνο να κάνουμε είναι να αλλάξουμε σε ένα σύνολο λέξεων, οι οποίες θα αναπαριστούν
τις τιμές που δίνει το ζάρι που ρίχνουμε, και θα βάλουμε αυτές τις τιμές στο "Αποτέλεσμα της Ρίψης".
Και θα χρησιμοποιήσουμε τις ίδιες αυτές διαδικασίες, για να υπολογίσουμε το...
Άρα, το καθήκον μας εδώ είναι να δημιουργήσουμε - με μορφή κινούμενης εικόνας υποθέτω - μία εικόνα ενός ζαριού
και να κάνουμε αυτή την εικόνα να δίνει τιμές- αντί για κορώνα ή γράμματα - το 1, το 2, το 3 το 4 το 5 ή το 6.
Εντάξει;
Οπότε, είναι στην ουσία μία αρκετά εύκολη δουλειά
επειδή οι υπολογισμοί θα γίνουν από τον υπολογιστή για μας.
Χρειάζεται απλά να μπορούμε να βάλουμε κείμενο σε αυτό το παράθυρο, που να ειναι ...
Έτσι, ας κοιτάξουμε πάλι εδώ.
Θα ξανακοιτάξω το πώς υλοποιεί το "Ρίξε ένα Δίκαιο Νόμισμα".
Οπότε μετά θα πάμε στον ενσωματωμένο κώδικα και θα δούμε πώς δουλεύει η διαδικασία "Ρίξε ένα Αμερόληπτο Νόμισμα".
Είναι μία πολύ απλή διαδικασία που απλά ορίζει το αποτέλεσμα,
το οποίο είναι μία καθολική μεταβλητή, στην τιμή "κορώνα" ή "γράμματα".
Οπότε θα φτιάξουμε μία δική μας διαδικασία, που θα είναι ανάλογη με αυτό το "Ρίξε"...
Και αυτή θα ορίζει τα αποτελέσματα να είναι - αντί για "κορώνα" ή "γράμματα" -
θα χρησιμοποιούμε τα: 1, 2, 3, 4, 5 και 6.
Οπότε θα χρησιμοποιήσουμε αυτές τις μεταβλητές - όχι, δεν είναι μεταβλητές..... είναι σειρές.
Και θα αφορούν αυτό το σχήμα, που θα δημιουργήσουμε τώρα.
Τώρα,...., όποτε βλέπω έναν όρο σαν αυτό, τότε υποψιάζομαι ότι μπορούμε να τον χρησιμοποιήσουμε
πολλές φορές. Στην πράξη, θα το αντιγράψω και θα το βάλω μέσα στη διαδικασία εκκίνησης της προσομοίωσης...
ή μάλλον πρώτα θα το κάνω καθολική μεταβλητή. Ας το ονομάσουμε: "η λίστα".
Επειδή θα το χρησιμοποιήσουμε πάνω από μία φορά, θα το ονομάτισω .....
και θα το κάνουμε μία σταθερά τιμή που μας επιτρέπει να ... το χρησιμοποιήσουμε ξανά και ξανά.
Οπότε τώρα, αντί να γυρνάμε και να λέμε όλα αυτά, αναφέρομαι σε αυτό ως"λίστα".
Αυτό είναι μία συντομογραφία, επειδή ξέρω ότι θα χρησιμοποιήσω αυτή τη λίστα
αυτών των τιμών / μεταβλητών, ξανά. Οπότε, είναι όμορφο να το έχουμε σε ένα μέρος. Ok;
Άρα, θέτουμε το αποτέλεσμα να είναι ένα από τη λίστα. Είναι το ίδιο όπως τό 'χουν κάνει εδώ.
Τώρα, θα έχουμε μία άλλη διαδικασία που να δείχνει τι κάνει η ρίψη του ζαριού. Εντάξει;
Θα θέλουμε να ζωντανέψουμε στην οθόνη αυτή τη ρίψη, αφότου συμβαίνει. Ok.... τώρα, ας δούμε....
Θα χρειαστεί να έχουμε ένα σύνολο από εικόνες, οπότε θα μπώ στον
επεξεργαστή σχημάτων της NetLogo, θα σας δείξω πώς γίνεται η πρώτη
και θα σας αφήσω να κάνετε μόνοι σας τις υπόλοιπες.
Γρήγορα, θα το κάνουμε πηγαίνοντας στον επεξεργαστή εικόνων.
Ααα... κοιτάξτε, εδώ υπάρχει κάτι που ήδη μοιάζει αρκετά με ένα ζάρι.
Θα κάνω κλικ πάνω του, θα αλλάξω το χρώμα σε άσπρο, θα αλλάξω το κορδόνι σε πλέγμα,
......., θα φτιάξω ένα μικρό κυκλάκι. Θα κάνω διπλό αυτόν τον κύκλο εκεί
Θα τον διπλασιάσω εκεί... κι εκεί .... κι εκεί... κι εκεί...
Εάν ήμουν "ψείρας", θα έφτιαχνα γραμμές κάπως έτσι, για να δω
αν όσα έκανα είναι ευθυγραμμισμένα. Αλλά δεν είμαι "ψείρας"... σωστά; Οπότε..
Ok, θέλουμε να είμαστε σίγουροι ότι τα ονοματίζουμε σωστά.
Αυτό θα ονομαστεί "ένα", ... εντάξει...
και εφόσον έχουμε την ταμπέλα "ένα" μπορούμε να την αναπαράγουμε και να δημιουργήσουμε... την επόμενη ταμπέλα.
Και απλά μετακινούμε πράγματα, μέχρι να φαίνεται και σε σας σωστό.
..... Aς δούμε αν αυτό είναι το "δύο", μετά ας κάνουμε αυτήν την πλευρά να είναι το "τέσσερα"..
Ναι,.. αυτό είναι λιγάκι κουραστικό αλλά, γιατί να μην το προχωρήσετε εσείς
και να ξεκουραστώ εγώ, οπότε να προχωρήσετε και να τελειώσετε εσείς και με τα έξη αυτά;
Θα χρειαστούμε 6 ζάρια, που να δείχνουν 1, 2, 3, 4, 5, και 6. Αυτό είναι προφανώς το νούμερο 2
Και, ... ναι, οπότε τελειώστε με αυτά, ονοματίστε τα και όταν τα 'χετε
κάνει αυτά, επστρέψτε εδώ σε μένα (στο βίντεο).
Ωραία, τώρα γυρίσατε και τώρα αποθηκεύω κι εγώ το τελευταίο μου - τον αριθμό 6.
Τα έχουμε λοιπόν κάνει όλα - 1, 2, 3, 4, 5 και 6. Είναι ένα σύνολο από σχήματα στον επεξεργαστή σχημάτων και
... είμαστε τώρα έτοιμοι να επιστρέψουμε πίσω στο μοντέλο μας και
ας δούμε την "εκκίνηση" που αντιστοιχεί σε μία διαδικασία και .... στο παλιό μοντέλο
αρχικοποιούσε και όριζε το σχήμα σε "κορώνα",....
Έχουμε αυτό το πράγμα που ονομάζουμε "λίστα", οπότε μπορούμε να ορίσουμε το σχήμα σε ..... αντί να είναι "κορώνα"
να είναι ... ας πούμε ... ένα από τη λίστα μας.
....... Οπότε, ας δούμε τι συμβαίνει τώρα, όταν
κάνουμε κλικ στην επιφάνεια διεπαφής και βλέπουμε την εκκίνηση...
όχι εκεί.....
Ορίζουμε το σχήμα να είναι ένα από τη λίστα και είναι αυτό...
Διερωτώμαι: έχουμε κάποιο πρόβλημα με τα κεφαλαία γράμματα;
[Ελέγχει τον κώδικα] Τα σχήματα επιτρέπεται να είναι μόνο με μικρά γράμματα.
Ας δούμε αν όντως έχουμε πρόβλημα.
Μπορεί να είναι το ότι έχουμε άλλα προβλήματα με τον κώδικα,
που χρειάζεται να τα λύσουμε προτού να μπορούμε να τρέξουμε την "αρχικοποίηση".
Νομίζω ότι πιθανόν αυτό είναι που συμβαίνει.
Τίποτα λάθος με τα αποτελέσματα του νομίσματος, οπότε ας αλλάξουμε το "coinresults" σε "rollresults".
Συνεπώς, μπορούμε μόνο να χρησιμοποιήσουμε την αναζήτηση και να αντικαταστήσουμε εδώ.......
Αλλά συμβαίνει μόνο για λίγα λεπτά. [Ελέγχει τον κώδικα].
Και δεν υπάρχει το "δείξε το ζάρι".... "δείξε το ζάρι".... δεν υπάρχουν "αποτελέσματα του νομίσματος". [Ελέγχει τον κώδικα].
Ας θέσουμε : "αποτελέσματα της ρίψης του ζαριού"
Ωραία, ας δούμε αν αυτό δουλεύει.
Τώρα, πατάμε: "αρχικοποίηση". Ωραία! Τώρα δουλεύει!
Οπότε παίρνουμε αυτά τα διαφορετικά τυχαία ζάρια. Ωραία. Τώρα, αυτό που δεν έχουμε είναι
αυτό που υπήρχε στο παλιό σενάριο: Βάζαμε "αποτέλεσμα" εκεί, και μετά "δείξε το στρίψιμο".
Τώρα βάζουμε τα αποτελέσματα και δείχνουμε το ρίξιμο του ζαριου. Δεν το κάνουμε αυτό. Το "δείξε τη ρίψη", έκανε στην πραγματικότητα πιο πολλά από το να δείχνει απλά το ρίξιμο.
Το "δείξε" - ή καλύτερα το "στρίψε" - μετρούσε πόσες κορώνες ή γράμματα υπήρχαν.
Και τελικά, το πιο σημαντικό, έβαζε την τιμή αυτού του παραθύρου, "roll results", σε μία σειρά (ακολουθία), κάπως έτσι.
Συνεπώς θα το αντιγράψω αυτό, είναι μία σημαντική γραμμή. Είναι το τελευταίο πράγμα που πρέπει να δείξω.
Τώρα, χρειάζεται να βεβαιωθούμε ότι οτιδήποτε άλλο και αν κάνει το "ρίξε", θα βάζει τα αποτελέσματα σε αυτή τη θέση.
Ας δούμε τι συμβαίνει: Όταν αρχικοποιούμε και ρίχνουμε το ζάρι, φαίνεται να βάζει τα αποτελέσματα εκεί.
Τώρα, φαίνεται να μπορούμε να χρησιμοποιήσουμε το "διάστημα" εκεί. Πάω στο "set roll-results" και
χρησιμοποιώ τον τελεστή "word", που είναι ένας τελεστής σύνδεσης. Βασικά δημιουργεί μία ακολουθία (σειρά), απο ό,τι ήδη υπάρχει στο "roll results".
Αναλαμβάνει αυτό το "roll results". Αυτό που θα κάνω τώρα είναι να χρησιμοποιήσω την άλλη μορφή αυτού, τη μορφή με την παρένθεση και αντί για
"διάστημα" τώρα, χρησιμοποιώ το "σειρά με διάστημα". Ωραία. Για να δούμε αν αυτό λύνει αυτό το πρόβλημα.
Τώρα, όταν ρίχνουμε το ζάρι, στα σίγουρα, παίρνουμε τιμές που έχουν μπει εκεί. Εεεε... Ok, η πρώτη μου προσπάθεια να το επισκευάσω αυτό,
ήταν να αλλάξω αυτά... αλλά δεν πειράζει. Ήταν κόκκινο εδώ... Ωραία.... Και τώρα ας δούμε τι γίνεται...
Πρέπει να ..... Δεν έχουμε όμως καμιά καθόλου κινούμενη αναπαράσταση. Ας φτιάξουμε μία μικρή κινούμενη εικόνα,
για να το κάνουμε όμορφο. Είχαμε το "στρίψε", που έστριβε ανάμεσα σε αυτό και σε ένα άλλο σχήμα.
Μπορούμε επίσης να κάνουμε κι αυτό. Εδώ είναι το "show roll", με το "results" να είναι ίσο με 1.
Και τώρα να τι θα κάνουμε: θα ζητήσουμε από τις "χελώνες" να επαναλάβουν τέσσερις φορές. ... Και μετά να πάρουν το σχήμα.... έχουμε τη λίστα.
Οπότε τους ζητάμε τέσσερις φορές να αλλάξουν το σχήμα τους.
Και μετά θα τους ζητήσουμε να περιμένουν, για λίγο πάνω από μια στιγμή. Ωραία....
Και μετά θα τους ζητήσουμε να βάλουν το ζάρι (σχήμα) στο "ένα".
Οπότε, αυτό θα μας δώσει μία όμορφη, μικρή κινούμενη απεικόνιση. Θα στρίβει τυχαία το σχήμα σε λίγα πράγματα....
θα περιμένει λίγο και τελικά θα θέτει το σχήμα στο "ένα".
Συνεπώς, αυτό θα κάνει αν έχει την τιμή "ένα". .... Ας δούμε: είναι αυτό σωστό; Φαίνεται σαν να μου λείπει μία αγκύλη.
Άρα, εφόσον έχουμε κάνει ένα από αυτά σωστά, μπορούμε να το αντιγράφουμε και να το επικολλάμε.
[Αντιγράφει και επικολλά τμήμα κώδικα].
Και αυτό είναι το δύο, αυτό είναι το τρία, αυτό είναι το τέσσερα, αυτό, αν θέλετε, το πέντε, το έξι.
Τέσσερα, τρία και δύο.
Ωραία, έχουμε κατασκευάσει την κινούμενη εικόνα. Ας δούμε αν δουλεύει..
Οπότε, γυρνάμε εδώ, τίποτα στα αποτελέσματα. Χμ,... ας κοιτάξουμε αυτό το σύνολο των αποτελεσμάτων [Εμφανίζει τον κώδικα]. Ok.
Ωραία, ας δούμε αν δουλεύει τώρα.
[Κάνει κλικ, ο κώδικας εκτελείται].
Φαίνεται ότι δουλεύει. Ok, οπότε, τι κάνει αυτό; γεννάει μία λίστα και εάν υπολογίσουμε την πληροφορία σε αυτή τη λίστα... Μου φαίνεται ότι είναι σωστό.
Άρα, θα ρίξουμε το ζάρι ξανά και θα υπολογίσουμε την πληροφορία.
Συνεπώς, συνίσταται απλά στο να υπολογίζουμε την πληροφορία της συχνότητας αυτής εδώ της λίστας... ωραία, οπότε ας το ξανακάνουμε όλο από την αρχή:
Τώρα, εάν το ρίξουμε δύο φορές, θα πρέπει πάλι να έχουμε περιεχόμενο πληροφορίας ίσο με μηδέν.
Ρίξτε το ζάρι μία φορά. Θα πρέπει να 'χουμε περιεχόμενο πληροφορίας μηδέν, όταν υπάρχει μόνο ένα.
Είναι η ίδια τιμή.
Ω Θεέ μου! Εεε. .. εντάξει. Πάμε ! Οπότε, ... φαίνεται ότι δουλεύει.
Ξεκινήστε !