Jump to content
  • entries
    55
  • comments
    2
  • views
    281

Nüfusa Dayalı Artımlı Öğrenme (Population-Based Incremental Learning - PBIL)


Doğuhan ELMA

62 views

Population-Based Incremental Learning (PBIL), genetik algoritmaların bir türüdür ve aynı zamanda bir tür olasılıksal algoritmadır. PBIL, genetik algoritmalardan farklı olarak, bir popülasyon yerine bir olasılık dağılımı üzerinde çalışır ve bu dağılımı, belirli bir hedefe doğru iteratif bir şekilde günceller.

PBIL algoritmasının temel adımları şunlardır:

1. Başlangıçta, tüm olasılıkların eşit olduğu bir olasılık vektörü oluşturulur. Bu vektör, popülasyonun çeşitli özelliklerinin olasılıklarını temsil eder. Örneğin, bir bireyin belirli bir özelliğe sahip olma olasılığı bu vektörde saklanabilir.

2. Popülasyon oluşturma: Olasılık vektörü kullanılarak bir popülasyon oluşturulur. Her birey, olasılık vektöründen bağımsız bir şekilde örneklenebilir.

3. Değerlendirme ve seçim: Her bireyin uygunluğu bir uygunluk fonksiyonu kullanılarak değerlendirilir ve en iyi bireyler seçilir.

4. Güncelleme: Seçilen bireylerin özellikleri, olasılık vektörünü güncellemek için kullanılır. Bu genellikle, seçilen bireylerin özelliklerinin olasılıklarını artırma ve diğerlerini azaltma şeklinde gerçekleşir.

5. Yeniden örnekleme ve iterasyon: Güncellenmiş olasılık vektörü kullanılarak yeni bir popülasyon oluşturulur ve bu süreç belirlenen bir durma kriteri karşılanana kadar tekrarlanır.

Bu yaklaşımın avantajı, genetik algoritmalara kıyasla daha hızlı ve daha az karmaşık olmasıdır çünkü PBIL, bir popülasyon yerine bir olasılık dağılımını günceller. Ancak, PBIL algoritmasının genetik çeşitliliği koruma yeteneği genellikle daha düşüktür ve bu da onun yerel en iyi çözümlere takılıp kalmasına neden olabilir. Bu nedenle, PBIL genellikle genetik çeşitliliği teşvik eden bir mekanizma ile birleştirilir, örneğin mutasyonlar veya genetik çeşitlilik yönetimi stratejileri.

Population-Based Incremental Learning (PBIL) algoritmasının Python implementasyonu aşağıda örneklendirilmiştir. Bu örnekte, bir bit dizisi üzerinde çalışan basit bir PBIL algoritması gösterilmektedir. Hedefimiz, tüm bitlerin 1 olduğu bir bit dizisi elde etmektir.

import numpy as np

def generate_individual(prob_vector):
    return np.random.binomial(1, prob_vector)

def evaluate_individual(individual):
    return np.sum(individual)

def update_prob_vector(prob_vector, best_individual, lr=0.1):
    return prob_vector * (1 - lr) + best_individual * lr

# Problem parametreleri
num_bits = 10
num_individuals = 100
num_iterations = 1000

# Olasılık vektörünü başlat
prob_vector = np.full(num_bits, 0.5)

for _ in range(num_iterations):
    # Popülasyonu oluştur
    population = np.array([generate_individual(prob_vector) for _ in range(num_individuals)])
    
    # Bireyleri değerlendir
    fitnesses = np.array([evaluate_individual(individual) for individual in population])

    # En iyi bireyi bul
    best_individual = population[np.argmax(fitnesses)]

    # Olasılık vektörünü güncelle
    prob_vector = update_prob_vector(prob_vector, best_individual)

print("Final probability vector:", prob_vector)

Bu kod, bitlerin 1 olduğu bir bit dizisini elde etmeye çalışır. Her iterasyonda, bir popülasyon oluşturulur ve en iyi birey seçilir. Daha sonra, en iyi bireyin özellikleri kullanılarak olasılık vektörü güncellenir.

En sonunda olasılık vektörünün değeri, optimal çözümü temsil eden bit dizisine yakın olmalıdır. Yani, tüm bitlerin 1 olduğu bir bit dizisi elde etmek istediğimiz için, son olasılık vektörünün tüm değerleri ideal olarak 1'e yakın olmalıdır.

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  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...