Kuantum Rastgelelikten Arduino'nun Kararlarına: Kontrol Kaybetmek ve Geri Kazanmak
Merhaba sevgili okuyucularım ve devre tahtalarının tozunu alınmış ellerim.
Bu blogun belki de en zorlu konularından biri, bahsettiğimiz "rastgelelik" kavramı. Hayatın kendisi bir rastlantılar silsilesi gibi görünür bazen. Bir proje beklenmedik bir aksaklıkla karşılaştığında, bütün sistemin çöküşünü izlemek bazen o kadar doğal ki, sanki kontrol tamamen kaybolmuş gibi hissederiz. İşte tam da bu noktada, benim de son birkaç haftadır mücadele ettiğim bir durum var: Bilgisayar bilimindeki saf rastgelelik ile fiziksel donanımın katı, deterministik kuralları arasındaki gerilim.
Geçen ay bir IoT projesine başlamıştık. Görevimiz, sıcaklık verilerini belirli aralıklarla bir sensörden okuyup, bu okunma sıklığını rastgeleleştirmekti. Bu basit bir fikir gibi görünse de, uygulamada ince bir çatışma yaşıyorduk. Yazılım tarafında, iyi bilinen algoritmalarla (örneğin Mersenne Twister gibi yüksek kaliteli pseudo-random number generator’lar) mükemmel bir dağılım elde ediyordum. Sayısal olarak her şey olması gerektiği gibiydi. Ancak projeye fiziksel bir katman eklediğimizde, yani bu sayıyı alıp onu mikrodenetleyicinin zamanlayıcısına (timer) girmekte, sistemin "gerçekten rastgele" davranması gerekiyordu.
İlk denemelerimizde, küçük sapmalarımız vardı. Bazen aynı sıcaklık değerini içeren iki veri paketi çok yakın zamanlarda gönderiliyor, bazen de beklenenden çok daha uzun aralıklarla geliyordu. Bu, benim gibi analitik düşünen biri için tam bir sinir testidir. Bir hata mı var, yoksa algoritmamızın sunduğu rastgelelik seviyesi mi fiziksel gürültünün/gürültüye karşı dayanıklılığın altında kalıyor?
Bu durumu çözmek için, sıfırdan bir yaklaşım benimseyerek konuyu "kontrol edilemeyen girdiler" üzerine kurmaya karar verdim. Eğer tamamen yazılımsal bir rastgelelik bizi tatmin etmiyorsa, belki de bizi doğaya yakınlaştırmalıyız.
Donanım Gürültüsünden Tohum Almak
Bu noktada, Raspberry Pi'nin I/O pinlerinden gelen çok düşük seviyeli gürültüyü yakalama fikrine geldim. Birçok elektronik projesinde en büyük düşmanınız, beklediğinizden daha güçlü olan arka plan gürültüsüdür. Bu gürültü, aslında entropi kaynağı olabilir.
Birkaç gün boyunca deneme yanılma yoluyla, düşük seviyeli Analogdan Dijitale Dönüştürücü (ADC) okumalarından çıkan, tamamen öngörülemez mikro-voltaj oynamalarını yakalamaya başladık. Bunlar, sadece termal gürültüydü; herhangi bir bilgi içermiyorlardı. Ancak bu sürekli, kaotik girdiyi doğru filtrelerle ve uygun bir örnekleme hızıyla yakalayıp, bunu bizim sayımızın "başlangıç tohumu" (seed) olarak kullanınca... ortaya çıkan değişim inanılmazdı.
Kontrolün Teslimiyeti ve Zaferin Tanımı
Bu deneyim, benim için sadece bir kodlama problemi olmaktan çıktı; felsefi bir dönüşüme sahne oldu. Bilgisayar biliminde hepimiz, her şeyin simüle edilebilir olduğu, girdiğimiz parametrelerle çıktıyı öngörebileceğimiz deterministik bir evrende yaşıyoruz. Ancak bazen, doğanın o göz ardı ettiğimiz en küçük kaosu bile, bizim için yeni bir bilgi kaynağına dönüşebiliyor.
Öğrendiğim şey şu oldu: Mükemmel kontrol, bazen ulaşılmazdır. Gerçek kaosla uğraşmak zorunda kaldığınızda, sizin göreviniz o kaosu yönetmek değil, onunla diyalog kurmak oluyor. Donanımın bize sunduğu o mikro-gürültü, bizim öngörülemezlik haritamız oldu.
Şimdi bu projede, yazılımımız o gürültüden besleniyor ve böylece hem teorik mükemmelliği (Pseudo-Random) hem de fiziksel gerçeğin ham ruhunu (Thermal Noise) bir araya getirmiş olduk.
Siz de projelerinizde bazen "kontrol dışı" gördüğünüz bir detayın, aslında bütün sistemi taşıyan en değerli parçası olabileceği hissini yaşadınız mı?
Selda.