MATLAB'da rastsallığı kontrol etme
Rastsal (random) bir algoritma yazmaya çalışıyorum. Veriyi de belli parametrelere göre yine rastsal hazırlıyorum. Sonra bilinmeyenleri kestirmeye çalışıyorum. Yazdığım kodu her çalıştırdığımda farklı bir veri ile karşılaştığım için "algoritma iyi mi, kötü mü", "hangi durumlarda zayıf kalıyor" gibi sorulara cevap bulmak zor oluyor. Rastsallığın başlangıcını kontrol etmeyi zaten biliyordum ama her nedense başka şeylere kafa yormaktan bu aklıma gelmemiş. Bunun için rastsal sayı üreticisine ilk tohumu (seed) elle verebiliyorsunuz. Böylelikle tohumu değiştirmediğiniz sürece aynı veri üretiliyor. Siz de kodun değişik yerlerini güncelleyip sonucu gözlemleyebiliyorsunuz. Uzun lafın kısası MATLAB ile bunu yapmanın yolu rng
fonksiyonunu bilmekten geçiyor. Önceden state
gibi parametrelerle rand
ve randn
fonksiyonları ayrı ayrı ayarlanabiliyordu, fakat son sürümlerdeki üreteçler için önerilen fonksiyon rng
. Basitçe:
% Ayarları öğrenelim s = rng; % [0,1] arası birörnek dağılımdan bir örnek çekelim a = rand % Birim normal dağılımdan örnek çekelim b = randn % İlk tohumu tekrar verelim % Buradaki tohumları elle rng(5) gibisinden de verebilirdik rng(s); % Dağılımlardan birer örnek daha çekelim ve öncekilerle aynı olduklarını görelim x = rand y = randn
İlk tohumu verdikten sonraki süreç her çalışmada aynı olacak. Veriyi üretirken bu mantıklı olacaktır, fakat sonrasında çalışan algoritmanın da hep aynı çalışacağını unutmamak lazım. Örneğin üretilen veri için yerel bir optimuma her seferinde aynı biçimde takılabilir. Böyle durumlarda aynı veride farklı çalışmasını isteyebiliriz. Bunun için veriyi ürettikten sonra rng('shuffle')
ile tohumu şu anki saniyeden alabilir ve algoritmanın ilklendirilmesindeki rastsallığı tekrar sağlayabiliriz.