İçeriğe atla
Üyelik kaydınızı yaparak son yazılan içeriklerden haberdar olun! ×

Yapay Zeka

  • makale
    55
  • yorum
    2
  • görüntüleme
    717.221

Genetik algoritmalar (GA)


Doğuhan ELMA

233 görünüm

Genetik algoritmalar (GA), doğadaki evrimsel süreçleri simüle ederek, optimizasyon ve arama problemlarını çözmek için kullanılan bir algoritma türüdür. GA'ler, genetik çeşitliliği korumak ve yeni çözüm alanlarına ulaşmak için genetik çaprazlama, mutasyon ve doğal seçilim prensiplerini kullanır.

GA'ler, bir problemi çözmek için kullanılan potansiyel çözümlerin bir "popülasyonunu" işler. Her çözüm bir "birey" veya "organizma" olarak adlandırılır ve her bireyin bir "genomu" (genetik yapısı) vardır, genellikle bir dizi sayı ya da bitlerin dizisinden oluşur. Her bireyin ayrıca bir "uygunluk" puanı vardır, ki bu genellikle çözümün problemi ne kadar iyi çözdüğünü gösterir.

Genetik algoritmanın çalışma adımları genellikle şunları içerir:

1. Başlangıç Popülasyonu: Genetik algoritma, genellikle rastgele oluşturulan bir popülasyonla başlar.

2. Uygunluk Değerlendirmesi: Her bireyin uygunluğu bir uygunluk fonksiyonuyla hesaplanır.

3. Seçilim: Yeni bir popülasyon oluşturmak için, mevcut popülasyondaki bireyler belirli bir seçilim süreci (örneğin, turnuva seçimi veya rulet çarkı seçimi) ile seçilir. Yüksek uygunluk puanına sahip bireylerin seçilme olasılığı daha yüksektir.

4. Çaprazlama: Seçilen bireyler genellikle çiftler halinde alınır ve çaprazlama (veya "eşleşme") işlemine tabi tutulurlar. Bu, genellikle iki ebeveynin genlerinin bir kısmını alarak yeni "çocuk" bireyler oluşturur.

5. Mutasyon: Her yeni bireyin genlerinde küçük rastgele değişiklikler yapılır. Bu, genetik çeşitliliği korur ve arama alanının yeni alanlarına erişim sağlar.

6. Yeni Nesil: Bu süreç, belirli bir kriter karşılanana kadar (örneğin, belirli bir sayıda nesil geçtikten veya belirli bir uygunluk seviyesine ulaşıldıktan sonra) tekrar edilir.

Genetik algoritmalar, hem kesintili hem de sürekli arama alanları için uygulanabilir ve genellikle karmaşık arama alanlarında ve kesintili optimizasyon problemlarında etkilidir. Ancak, genellikle birçok parametrenin (örneğin, çaprazlama ve mutasyon oranları) dikkatlice ayarlanması gerektirir ve karmaşık problemlar için yeterince hızlı bir çözüm sağlamakta zorlanabilir.

import random
import string

target = "hello, world"
characters = string.ascii_letters + ",.! "
pop_size = 100
generations = 5000

# Genomu (rastgele bir karakter dizisi) oluşturan bir fonksiyon
def generate_genome(length):
    return ''.join(random.choice(characters) for _ in range(length))

# Başlangıç popülasyonunu oluşturmak
population = [generate_genome(len(target)) for _ in range(pop_size)]

# Uygunluk fonksiyonu: hedefle ne kadar çok uyuşursa o kadar iyi
def fitness(genome):
    return sum(a == b for a, b in zip(genome, target))

# Genetik algoritmanın ana döngüsü
for generation in range(generations):
    print(f"Generation {generation} Top fitness: {fitness(max(population, key=fitness))}")

    # Yeni popülasyonu oluştur
    new_population = []
    for _ in range(pop_size):
        # Seçilim
        parent1, parent2 = random.choices(population, weights=[fitness(genome) for genome in population], k=2)
        # Çaprazlama
        child = ''.join(random.choice(genome) for genome in zip(parent1, parent2))
        # Mutasyon
        child = ''.join(c if random.random() > 0.01 else random.choice(characters) for c in child)
        new_population.append(child)

    population = new_population

# En iyi çözümü çıktı al
print("Best solution:", max(population, key=fitness))

Bu örnekte, uygunluk fonksiyonu bir "bireyin" hedef karakter dizisi ile ne kadar iyi eşleştiğini ölçer. Çaprazlama, bir çift ebeveynden genleri alarak yeni bir "çocuk" oluşturur, ve mutasyon, küçük rastgele değişiklikler ekler.

Çıktı, her nesilde en uygun olanın uygunluk değerini ve en sonunda en iyi çözümü görüntüler. Bu basit örnekte, genellikle birkaç yüz nesil sonra hedefe ulaşır.

Not: Bu örnekteki hedef metni bulmak için genetik algoritma kullanmak aşırı bir abartıdır ve genellikle daha karmaşık, analitik çözümü olmayan problemler için kullanılır.

Tabii ki, genetik algoritmanın temel kavramlarını aşağıda açıklıyorum:

1. Gen: Genetik algoritmanın temel birimi. Bir gen, çözümün bir bölümünü temsil eder. Örneğin, bir gen, bir karakter olabilir (önceki örnekte olduğu gibi), bir sayı, bir renk vb. olabilir. Genler bir dizi veya liste halinde düzenlenir ve bu toplam listeye genotip denir.

2. Genotip: Gen dizisi genellikle bir bireyi temsil eder. Genotip, genetik algoritmanın genel çözüm arayışını yönlendirir ve evrim sürecinde sürekli olarak güncellenir.

3. Birey: Popülasyondaki her bir öğe bir bireydir. Bireylerin genotipi üzerinde işlemler gerçekleştirilir (seçilim, çaprazlama, mutasyon vb.) ve bu işlemler sonucunda yeni bir genotip (yani yeni bir birey) elde edilir.

4. Popülasyon: Popülasyon, aynı anda var olan bireylerin toplamıdır. Bir genetik algoritma genellikle bir popülasyonla başlar ve her iterasyonda yeni bir popülasyon oluşturur.

5. Uygunluk Fonksiyonu: Bu, bir bireyin ne kadar "iyi" olduğunu belirleyen bir fonksiyondur. Yani, bir çözümün ne kadar uygun olduğunu ölçer. Genellikle, bir bireyin uygunluğu ne kadar yüksekse, bir sonraki nesle aktarılma şansı o kadar yüksektir.

6. Seçilim (Selection): Seçilim, bir sonraki nesle hangi bireylerin geçeceğinin belirlendiği süreçtir. Uygunluk değeri yüksek olan bireylerin bir sonraki nesle geçme olasılığı daha yüksektir.

7. Çaprazlama (Crossover): İki ebeveyn bireyden genlerin alınarak yeni bir birey (çocuk) oluşturulmasını ifade eder. Bu, genellikle bir bireyin genlerinin bir kısmını alarak ve diğer ebeveynden gelen genlerle birleştirerek gerçekleştirilir.

8. Mutasyon: Mutasyon, genlerde rastgele değişiklikler yapar. Bu, genetik algoritmanın çözüm alanında yeni noktaları keşfetmesine yardımcı olur ve çözümün yerel bir maksimuma takılıp kalmasını önler.

Bu kavramlar genetik algoritmanın temelini oluşturur ve genetik algoritmanın çözümü bulmasına yardımcı olur.

0 Yorum


Önerilen Yorumlar

Görüntülenecek yorum yok.

Misafir
Yorum ekle...

×   Zengin metin olarak yapıştırıldı.   Bunun yerine düz metin olarak yapıştır

  Yalnızca 75 emojiye izin verilir.

×   Bağlantınız otomatik olarak gömüldü.   Bunun yerine bağlantı olarak görüntüle

×   Önceki içeriğiniz geri yüklendi.   Düzenleyiciyi temizle

×   Görüntüleri doğrudan yapıştıramazsınız. URL'den resim yükleyin veya ekleyin.

×
×
  • Create New...