Sıfırdan Kod Satırına

Rastgelelikteki Kontrol İllüzyonu: Tamamlanmış Bir Simüle Edilmiş Donanım Mimarisi

Selamlar sevgili okuyucu. Bu serideki önceki yazılarım, rastgeleliğin sadece bir "tesadüf" olarak algılanan yüzeydeki etkisine odaklanmıştı. Oysa benim için her rastgele olay, altında yatan yapısal bir sorunun veya sürecin sonucudur. Bir devre kartında gördüğünüz o mükemmel kararsızlık bile, eğer doğru girdi ve algoritmaya sahipseniz, tamamen belirlenebilir bir çıktı akışıdır. İşte bu düşünceyle, fiziksel dünyadaki gürültüyü dijital alana taşıyarak basit bir rastgele sayı üretme sürecini, sanki onu fiziksel olarak tasarlıyormuşuz gibi adım adım inceledim.

Bu yazıda ele alacağımız kısım, bir donanımın (veya simülasyonunun) nasıl "rastgele" davranabildiğinin mimari gösterimidir. Basit bir MCU üzerinde, kısıtlı kaynaklarla nereden başlayıp istediğimiz entropiyi üretmeye çalışacağımızı göreceğiz.

Gürültü Kaynağını Tanımlamak: Entropinin Tohumu

Gerçek anlamda rastgele bir sayı üretmek istiyorsak, ya doğadan (örneğin termal gürültü veya zamanlama gecikmeleri) girdi almalıyız ya da matematiksel olarak saf bir kaynaktan başlamalıyız. Benim bu deneyimde, bunu yazılımsal olarak simüle ettim; yani her şeyi hesaplama döngüsüne sıkıştırmak zorunda kaldım.

Adım 1: Tohum (Seed) Belirleme. Her deterministik sistem bir tohumla başlar. Eğer aynı tohumu kullanırsanız, her zaman aynı "rastgele" diziyi alırsınız. Bu, bilgisayar tarafından üretilen rastgele sayıların (PRNG - Pseudo-Random Number Generator) doğasıdır ve bunu bilmek, onun bir yazılım olarak tasarlanmış olduğunu gösterir. Bizim bu projede amacımız, bu tohumu mümkün olduğunca az önyargıyla ayarlamaktır.

Adım 2: Dönüşüm Fonksiyonu (Transition Function). Bu, sistemin kalbidir. Alınan mevcut durum bilgisini (state), bir sonraki olası duruma taşıyan matematiksel işlemdir. Basit bir LCG (Linear Congruential Generator) kullanmak, öğrenme sürecindeki en hızlı yoldur çünkü çok az işlem gücü gerektirir.

$X_{n+1} = (a X_n + c) \mod m$

Burada $X_n$, mevcut sayımız; $a, c,$ ve $m$ ise sistemin karakterini belirleyen sabit parametrelerdir. Bu üç değeri seçmek, bizim "donanımımızın" kimliğini tanımlamaktır. Yanlış seçilen katsayılar, periyodun kısa olmasına ve kolay tahmin edilebilirliğe yol açar.

Çıktıyı Doğrulama: Gürültü Filtreleme Gibi Bir Süreç

Sadece bir sonraki sayıyı üretmek yetmez; bu sayının bizim algımızda "rastgele" hissettirmesi gerekir. İşte burası, bir devre kartındaki analog sinyali dijitalleştirmeye benzer bir ince ayar gerektirir.

Adım 3: Çıkış Karıştırma (Output Mixing). Eğer sadece LCG kullanırsak, üretilen dizinin dağılımı beklentimizin altında kalabilir. Bu yüzden, ürettiğimiz sayıyı basit bir kaydırma veya XOR (Exclusive OR) işlemiyle karıştırarak, düşük etkili bitlerin yüksek etkili bitleri etkilemesini sağlıyoruz. Bu küçük işlem, çıktımızın daha "gürültülü" ve gözle görülür olarak rastgele görünmesini sağlar.

Özet Akış:

  1. Tohum alındı.
  2. LCG ile bir sonraki durum hesaplandı ($X_{n+1}$).
  3. Bu yeni $X_{n+1}$ değeri, bir bit kaydırma ve XOR işlemiyle sonuca ulaştı.
  4. Bu çıktı, bizim "rastgele olayımızdır."

Bu döngüyü kurduğunuzda anlıyorsunuz ki, gördüğünüz o sonsuz varyasyonlar bile, başlangıç noktamız olan o tek bir tohumla belirlenmiş nicel bir süreçti. Donanım da bu mantığa çok benzer; siz ona belirli bir enerji veriyorsunuz, o da fizik kuralları çerçevesinde size öngörülebilir ancak karmaşık bir çıktı sunuyor.

Sizin projenizde bu basitleştirilmiş simülasyonu fiziksel devreye aktarmak isterdim; belki bir osilatörün frekansını bu matematiksel modele bağlamak... Bu, her zaman böyle derinleşiyor.