Μα, πάλι για τυχαιότητα να γράψω; Έχω ήδη γράψει ένα, δύο, τρία άλλα posts.
Αλλά γιατί όχι; Η τυχαιότητα πάντα θεωρώ ότι έχει ενδιαφέρον, κι επιπλέον δεν ξέρω τι άλλο να γράψω σήμερα.
Τις προάλλες, έλεγα ότι κατάφερα τελικά να φτιάξω έναν αλγόριθμο που σου δίνει τυχαίους αριθμούς. Αλλά έκανα λάθος. Τελικά, είναι πολύ πιο δύσκολο απ’ό,τι φαίνεται το να βάλεις το μηχάνημα να σου δίνει πραγματικά καλούς τυχαίους αριθμούς. Ανακάλυψα ένα bug στο πρόγραμμα και το διόρθωσα, και μετά τσέκαρα πάλι τους τυχαίους αριθμούς (με το πρόγραμμα για τυχαίες εικόνες, όπως έχω ήδη αναφέρει) και είδα ότι τώρα χάνονται πάλι κάποιοι αριθμοί. Χάνονται σταθερά. Δεν μπορούν καθόλου να εμφανιστούν. Ή, ίσως, οι πιθανότητες είναι τόσο μικρές να εμφανιστούν που το θέμα δεν έχει νόημα ούτως ή άλλως – είναι σαν να μην υπάρχουν. Το σκάλισα λίγο αλλά δεν παρουσιάστηκε καμιά σοβαρή λύση. Έτσι το παράτησα και αποφάσισα να χρησιμοποιώ στο εξής το Mersenne Twister, ένα PRNG που είναι και το default της AutoHotKey, της γλώσσας που χρησιμοποιώ για προσωπικά προγράμματα (είναι γρήγορη, δυνατή, με σύνταξη σαν απλουστευμένη C++, και μέσα στα Windows μπορείς μ’αυτήν να κάνεις σχεδόν ό,τι σου κατεβαίνει στο κεφάλι χωρίς να θέλεις 5 ώρες για μια απλή λειτουργία).
Το Mersenne Twister, παρότι αρκετοί λένε πως έχει προβλήματα, μέχρι στιγμής είναι το καλύτερο που έχω συναντήσει. Κατά πρώτον, κάνει κάτι πολύ βασικό: δεν χάνει αριθμούς. Το δοκίμασα. Δεν έχασα ούτε μια εικόνα από τριψήφιο αριθμό τυχαίων εικόνων· τις παρουσίασε τελικά όλες, και δεν άργησε και τόσο. Το Mersenne Twister είναι βασισμένο σε κάτι περίεργες μαθηματικές ακολουθίες που με κάνουν να ζαλίζομαι, αλλά φαίνεται να δουλεύει καλά.
Όταν το έβαζα να ρίχνει ζάρια (τουτέστιν, μικρούς τυχαίους αριθμούς), ορισμένες φορές μού έδινε μια περίεργη εντύπωση, και ακόμα μπορεί να μου δώσει μια τέτοια εντύπωση. Αλλά, από την άλλη, γιατί αυτοί οι αριθμοί να μην είναι τυχαίοι;
Έπιασα και έριξα μερικά ζάρια με τα χέρια μου πέντ’ έξι φορές και παρατήρησα τα αποτελέσματα σαν απλούς αριθμούς, αγνοώντας ότι είχα πραγματικά ζάρια μπροστά μου. Αν αυτά τα αποτελέσματα σ’τα είχε δώσει το μηχάνημα τι θα έλεγες; ρώτησα τον εαυτό μου. Και σε αρκετές απ’αυτές τις περιπτώσεις η απάντηση ήταν ότι μάλλον θα έλεγα πως κάτι δεν πηγαίνει καλά, πως ο αριθμός δεν είναι αρκετά τυχαίος.
Αλλά αυτά ήταν πραγματικά ζάρια που είχα ρίξει...
Επομένως, τα αποτελέσματα του Mersenne Twister, ακόμα και για μικρούς τυχαίους αριθμούς, δεν είναι και τόσο άσχημα, κατέληξα.
Τώρα, για το αν όλοι οι αριθμοί έχουν ίσες πιθανότητες να εμφανιστούν, αυτό δεν το ξέρω, και δεν το νομίζω. Αλλά δεν έχει πραγματικά μεγάλη σημασία. Εξάλλου, PRNG σημαίνει pseudorandom number generator.
Έκανα, από περιέργεια, και ένα πείραμα με τη Javascript που είναι μια πιο ευρέως χρησιμοποιούμενη γλώσσα, να δω τι αποτελέσματα μπορεί να μου δώσει. Την έβαλα να μου δημιουργήσει, μέσα σε ένα αρχείο HTML, 500 τυχαίους αριθμούς από το 1 μέχρι το 156. Πήρα τα αποτελέσματα από εκεί και τα καθάρισα από όμοιους αριθμούς και τα έβαλα κατά αριθμητική σειρά, το ένα κάτω από το άλλο, μέσα σε ένα αρχείο ΤΧΤ, και κοίταξα πόσες σειρές είχε το αρχείο. Αν είχαν βγει όλοι οι αριθμοί, θα έπρεπε να είναι 156. Δεν ήταν 156. Έχανε, αν θυμάμαι καλά, 15 ή 16 αριθμούς. Δεν έψαξα να βρω ποιους.
Το ξανάκανα το πείραμα και πάλι το ίδιο αποτέλεσμα είχα: έχανε πάλι αριθμούς.
Και το να χάνει 15 αριθμούς στους 150 είναι σαν να λέμε ότι χάνει το 10%. Δεν είναι λίγο. Μπορεί να μην έχει μεγάλη σημασία αν θες απλά έναν αριθμό που να είναι πιο μεγάλος ή πιο μικρός από κάτι, ή έναν ό,τι νάναι αριθμό για την ονομασία μιας μεταβλητής πχ. Αλλά έχει σημασία αν ο κάθε αριθμός αντιστοιχεί σε κάτι το ξεχωριστό και θες να μπορούν να βγουν όλοι κάποια στιγμή.
Βλέπεις αυτό το πλαίσιο πάνω από το post, που παρουσιάζει τον τίτλο ενός τυχαίου post από το blog; Αν πατήσεις το κουμπάκι που γράφει «Τυχαίο» θα σου δώσει ένα άλλο τυχαίο post. Είναι φτιαγμένο με Javascript, και να είσαι σίγουρος ότι κάποια post δεν μπορούν να εμφανιστούν μέχρι πάλι να προσθέσω ένα καινούργιο post στο blog, οπότε και τα τυχαία αποτελέσματα αλλάζουν πάλι, και χάνονται κάποια άλλα...
Αξιοσημείωτο, επίσης, ότι μέχρι στιγμής το μόνο ηλεκτρονικό πράγμα που υποτίθεται ότι μπορεί να σου δώσει πραγματικά τυχαίους αριθμούς είναι το hardware random number generator που δημιουργεί τυχαίους αριθμούς από εξωτερικά φυσικά δεδομένα, όχι μέσω αλγόριθμου.