Uyarlanabilir Rastgele Arama (Adaptive Random Search)
Uyarlanabilir Rastgele Arama algoritması, Stokastik Optimizasyon ve Global Optimizasyon olarak bilinen genel yaklaşımlar grubuna aittir. Arama uzayında gezinmek için türevlere ihtiyaç duymaması bakımından doğrudan bir arama yöntemidir. Uyarlanabilir Rastgele Arama, Rastgele Arama ve Yerelleştirilmiş Rastgele Arama algoritmalarının bir uzantısıdır.
Uyarlanabilir Rastgele Arama (Adaptive Random Search) Algoritması, standart rastgele arama algoritmasının bir varyantıdır. Standart rastgele arama algoritması, çözüm alanındaki tüm noktaları eşit olasılıkla göz önünde bulundururken, uyarlanabilir rastgele arama algoritması, daha önce bulunan iyi çözümlere yakın bölgeleri daha yoğun bir şekilde araştırır.
Bu algoritma, her iterasyonda, mevcut çözümün biraz dışında rastgele bir nokta seçer. Bu yeni nokta, eğer daha iyi bir çözümse, yeni mevcut çözüm olarak kabul edilir. Ayrıca, uyarlanabilir rastgele arama algoritması, arama alanındaki adım büyüklüğünü dinamik olarak ayarlar. Eğer yeni bir çözüm bulunamıyorsa, adım büyüklüğü artırılır (arama daha geniş bir alana yayılır). Eğer birçok yeni çözüm bulunuyorsa, adım büyüklüğü azaltılır (arama daha odaklı hale gelir).
Uyarlanabilir rastgele arama algoritması, daha geniş arama alanlarından iyi çözümler bulmayı ve bunları daha ayrıntılı bir şekilde incelemeyi sağlar. Bu nedenle, genellikle standart rastgele arama algoritmasına kıyasla daha verimlidir. Ancak, yine de karmaşık optimizasyon problemlarında genellikle gradient descent, genetik algoritmalar, simulated annealing vb. gibi daha gelişmiş yöntemlerin kullanılması önerilir.
Aşağıda uyarlanabilir rastgele arama algoritmasının basit bir Python uygulamasını bulabilirsiniz. Bu örnekte, belirli bir hedefe yaklaşan bir değeri rastgele bir adımla güncelliyoruz. Her adımda, eğer yeni tahmin eski tahminden daha iyiyse (yani hedefe daha yakınsa), adım boyutunu azaltıyoruz. Aksi takdirde, adım boyutunu artırıyoruz.
import random def adaptive_random_search(target, guess, step, n_iterations): for _ in range(n_iterations): guess_new = guess + random.uniform(-step, step) if abs(target - guess_new) < abs(target - guess): guess = guess_new step *= 0.9 # eğer tahmin iyileştiyse, adım boyutunu azalt else: step *= 1.1 # eğer tahmin kötüleştiyse, adım boyutunu artır return guess # Hedef değeri 100, başlangıç tahmini 50, başlangıç adım boyutu 10, iterasyon sayısı 1000 olan bir örnek print(adaptive_random_search(100, 50, 10, 1000))
Bu kod parçası, uyarlanabilir rastgele arama algoritmasının temel bir örneğidir. Gerçek dünyada bu algoritmayı kullanırken, çeşitli hiperparametreleri (örneğin, adım boyutunu ne kadar hızlı değiştireceğinizi belirleyen çarpanlar) deneyerek en iyi sonuçları elde etmek için ayarlamanız gerekebilir. Ayrıca, farklı problemler için farklı başlangıç tahminlerini, adım boyutlarını ve iterasyon sayılarını denemek isteyebilirsiniz.
Bu tahmin edilecek oyunda tahmin sahibinin ilk söylenen tahmine aşağı yukarı ya artır demesine benzetebiliriz.
Görsel Olarak ise;
Bu örnekte, basit bir karesel fonksiyonu (x^2) eniyileyeceğiz:
import random # Optimizasyon yapmak istediğimiz fonksiyon def function(x): return x**2 def adaptive_random_search(guess, step, n_iterations): for _ in range(n_iterations): guess_new = guess + random.uniform(-step, step) if function(guess_new) < function(guess): guess = guess_new step *= 0.9 # eğer fonksiyon değeri iyileştiyse, adım boyutunu azalt else: step *= 1.1 # eğer fonksiyon değeri kötüleştiyse, adım boyutunu artır return guess # Başlangıç tahmini 10, başlangıç adım boyutu 1, iterasyon sayısı 1000 olan bir örnek print(adaptive_random_search(10, 1, 1000))
Çıktı:
0.031509219561774604
Bu örnekte, function(x) karesel bir fonksiyondur ve amacımız bu fonksiyonu minimize etmektir (yani fonksiyonun en küçük değerini bulmaktır). Uyarlanabilir rastgele arama algoritması, bu amaca ulaşmak için her iterasyonda tahmini ve adım boyutunu günceller.
0 Comments
Recommended Comments
There are no comments to display.