Jump to content
  • entries
    55
  • comments
    2
  • views
    59,207

Arı Algoritması (Bees Algorithm)


Doğuhan ELMA

4,560 views

Arı Algoritması, arıların yiyecek arama davranışlarından esinlenerek geliştirilmiş bir optimizasyon algoritmasıdır. Algoritma genelde global optimizasyon problemlerini çözmek için kullanılır. İşlem aşamaları ve kavramları genellikle arıların gerçek hayattaki davranışlarını taklit eder.

Arı algoritmasının çeşitli versiyonları vardır, ama en yaygın olanı üç tür 'arı' kullanır: işçi arılar, izleyici arılar ve keşifçi arılar.

1. İşçi Arılar: İşçi arılar mevcut çözüm bölgelerini araştırırlar, yani bir çözüm üzerindeki yerel aramalarını yaparlar. Bir işçi arının bulduğu çözümün kalitesi, çözüm çevresinde ne kadar çok zaman harcayacağını belirler.

2. İzleyici Arılar: İzleyici arılar, işçi arıların sunduğu çözümleri değerlendirirler. Bu çözümler, işçi arılar tarafından daha önce bulunmuş ve çözüm kalitesine bağlı olarak belirli bir olasılıkla seçilmiştir. İzleyici arılar bu çözümleri değerlendirir ve en iyi çözümleri belirler.

3. Keşifçi Arılar: Keşifçi arılar tamamen yeni çözüm bölgelerini araştırırlar. Bu, genellikle rastgele bir arama işlemi ile gerçekleştirilir.

Arı Algoritması genellikle aşağıdaki adımlarla gerçekleştirilir:

1. İlk çözüm kümesini oluştur. Çözüm kümesi genellikle rastgele seçilir.

2. İşçi arılar, mevcut çözümlerin yerel bölgelerinde arama yaparlar.

3. İzleyici arılar, işçi arıların bulduğu çözümleri değerlendirir ve en iyi çözümleri belirler.

4. Keşifçi arılar, çözüm uzayında yeni bölgeler keşfeder.

5. Adım 2'ye geri dön ve belirli bir durma kriterine kadar süreci tekrarla.

Bu algoritma, doğal davranışın basit modellerini kullanarak karmaşık optimizasyon problemlerini çözebilmektedir. Ancak, bu algoritmanın etkinliği ve verimliliği belirli bir durumda ne kadar iyi çalışacağı, problemin özelliklerine ve parametrelerin doğru şekilde ayarlanmasına bağlıdır.

Bu örnekte, amacımız bir hedef fonksiyonunu eniyilemektir. Fonksiyonumuz f(x) = x^2, x'in -10 ile 10 arasında olduğu bir aralığı kapsayacak şekilde belirlenmiştir. Bu basit örnek, algoritmanın kavramlarını anlamayı kolaylaştırır.

import numpy as np

# Hedef fonksiyon
def f(x):
    return x**2

# İşçi arılar
def worker_bees(n, solutions, fitness):
    for i in range(n):
        # Yeni bir çözüm oluştur
        new_solution = solutions[i] + np.random.uniform(-1, 1)
        new_fitness = f(new_solution)
        # Eğer yeni çözüm daha iyi ise, mevcut çözümü güncelle
        if new_fitness < fitness[i]:
            solutions[i] = new_solution
            fitness[i] = new_fitness

# İzleyici arılar
def onlooker_bees(n, solutions, fitness):
    # Fitness değerlerine göre olasılıkları hesapla
    probabilities = fitness / np.sum(fitness)
    for i in range(n):
        # Olasılıklara göre bir çözüm seç
        j = np.random.choice(range(n), p=probabilities)
        # Yeni bir çözüm oluştur
        new_solution = solutions[j] + np.random.uniform(-1, 1)
        new_fitness = f(new_solution)
        # Eğer yeni çözüm daha iyi ise, mevcut çözümü güncelle
        if new_fitness < fitness[j]:
            solutions[j] = new_solution
            fitness[j] = new_fitness

# Keşifçi arılar
def scout_bees(n, solutions, fitness):
    for i in range(n):
        # Rastgele bir olasılık oluştur
        p = np.random.uniform()
        # Eğer p < 0.1 ise, rastgele bir yeni çözüm oluştur
        if p < 0.1:
            solutions[i] = np.random.uniform(-10, 10)
            fitness[i] = f(solutions[i])

# Arı Algoritması
def bee_algorithm(n, max_iter):
    # Başlangıç çözümlerini oluştur
    solutions = np.random.uniform(-10, 10, size=n)
    fitness = f(solutions)
    # İterasyonları gerçekleştir
    for iter in range(max_iter):
        worker_bees(n, solutions, fitness)
        onlooker_bees(n, solutions, fitness)
        scout_bees(n, solutions, fitness)
    # En iyi çözümü döndür
    best_solution = solutions[np.argmin(fitness)]
    return best_solution

# Test
best_solution = bee_algorithm(100, 1000)
print("En iyi çözüm: ", best_solution)

Bu kodda, her bir işçi arı rastgele bir yönde bir adım atar ve bu adım eğer çözümü iyileştirirse çözüm güncellenir. İzleyici arılar, mevcut çözümleri fitness değerlerine bağlı olarak seçer ve seçtikleri çözümün yakınında yeni bir çözüm oluşturur. Keşifçi arılar belirli bir olasılıkla (bu örnekte %10) tamamen rastgele yeni bir çözüm oluşturur.

Algoritma, belirli bir iterasyon sayısı boyunca çalıştırıldıktan sonra en iyi çözümü döndürür. Bu örnekte, en iyi çözüm f(x) = x^2 fonksiyonunu eniyileyen x = 0 olmalıdır. Bu algoritmanın performansı, işçi arılar, izleyici arılar ve keşifçi arıların sayısı ile iterasyon sayısına bağlıdır. Bu değerlerin ayarlanması, algoritmanın performansını önemli ölçüde etkiler.

2 Comments


Recommended Comments

Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...