Kaosu Kodlamak: Rastgelelik Gerçekten Kontrolden Bağımsız mı?
Hepimiz hayatımızda "rastgelelik" kavramıyla karşılaşıyoruz. Bir zar atınca çıkan sayı, bir yazılımda oluşan beklenmedik bir hata veya doğadaki o mükemmel kaotik görüntü... Hepsi rastlantı gibi görünüyor. Ancak bir donanım meraklısı ve yazılımcı olarak benim kafamı kurcalayan şey şu oluyor: Bu gerçekten de tamamen rastgele mi, yoksa biz sadece henüz kontrol altına alamadığımız kadar karmaşık bir mekanizmanın sonucunu mu görüyoruz?
Bu serideki önceki yazılarımda, kontrolü bıraktığımız o zarif anları inceledik. Belki de bir sistemin tüm parametrelerinin belirlendiği, ancak sonucun bizim için öngörülemez olduğu anları. Şimdi ise bu soyut kavramı, elimdeki mikrodenetleyiciye ve basit bir fizik prensibine indirgemeye çalışıyorum.
Gerçek Rastlantı Var mı? (Tahminim: Hayır)
Dijital dünyada karşılaştığımız "rastgele" kavramı, genellikle her şeyi basitleştirme eğilimindedir. Birçok kişi rastgele sayı üreticisini (RNG) kullanır ve bu, bize bir bütün olarak entropiymiş gibi gelir. Ancak benim incelediğim şey, kullanılan algoritmanın kalitesidir.
Eğer bir yazılımda gerçekten saf rastgelelik istiyorsanız, fiziksel dünyadan veri almanız gerekir. Bir termal sensörden gelen gürültü, bir mikrofonun arka plan sesini veya tahrip edilmiş bir devre kartının çıkış voltajını okumak gibi. Bu, fiziksel dünyadaki kaosu yakalamaktır.
Ancak çoğu zaman bizler, deterministik bir sistemi kullanıyoruz. Yani girdilerimiz belirli ise, çıktılarımız her zaman aynı olmalıdır. İşte bu noktada devreye, döngüsel bağlılıkları olan sayı üreteçleri giriyor.
Fizik ve Yazılımın Kesişimi: Gerçek Rastgelelik Simüle Edilebilir
Benim ilgimi çeken kısım burası. Eğer bir sistemi gerçekten rastgele olmaya zorluyorsanız, ona başlangıç için çok iyi gizlenmiş bir karmaşa vermelisiniz.
Mikrodenetleyicilerimizle bu durumu simüle etmeye başladık. Temelde, bir sürecin çıktısının, kendisinin sonraki girdisini belirlemesi prensibine dayanarak LCG (Linear Congruential Generator) gibi basit algoritmalara takılıyoruz. Bu algoritmalar, gözle görülür bir döngüye sahiptir; yani girdi olarak sonsuz sayıda karmaşık veri verseydiniz bile, sonunda tekrar eden bir noktaya düşerlerdi.
Buradaki o ilk birkaç bin sayının birbirine benzememesi, bizim için "rastlantı" gibi gelmesini sağlıyor. Bu algoritmaların kendisi rastgele değildir; sadece başlangıç koşuluna o kadar duyarlıdır ki, pratikte öngörülemez hale gelmiştir.
Donanımdan Yazılıma Bir Köprü Kurmak
Bu beni en çok heyecanlandıran nokta. Sanal bir döngüyü yazılımla simüle etmek güzeldir, ama o sistemi fiziksel olarak tasarlamak bambaşka bir meydan okuma.
Bir sonraki projemde, bu dijital "gürültüyü" fiziksel bir devre üzerinden oluşturmayı düşünüyorum. Belki de iki farklı frekansta titreşen transistörlerin çıkış akımını okuyarak, bu analog sinyali dijitalleştirip onu bir sayı üreticisine besleyeceğiz. İşte o zaman, teorik determinizmden kopup, entropiyi gerçekten vücudumuzun içine alacağız.
Rastlantı, ya mükemmel bir matematiksel modelin sonucu olarak ortaya çıkar ya da entropi kaynaklı doğal bir olaydır. Arada ince ayrımı yapmak, bizi sadece kod yazmaktan çıkarıp mühendislik tasarımlarının kalbine götürüyor. Sizin en son rastgelelik deneyiminiz ne oldu? Yazın aşağıdaki satırlarda buluşalım.