Genetik Programlamayla Bir işlem

0
499
Genetik Programlamayla Bir işlem
Genetik Programlamayla Bir işlem

Yine bir Yapay Zekâ projesiyle karşınızadayız !

Bu sefer YSA değil genetik programlama metoduyla birşeyler yapya çalışacağız.
Ya bu genetik Programlamada nedir yahu ? diyenleriniz için linke müracat ediniz. Link!

Daha yokmu diyen için google emrinize amade sizi bekliyor, Her neyse Biz uygulamamıza dönelim

Bir Kelime Bir İşlem yarışmasını bilmeyeniniz yoktur herhalde Biz Bir işlem kısmını yapmaya çalışacağız – Bir Kelime kısmını da siz yaparsınız artık 🙂 –

Problemi analiz edersek:
3 Basamaklı bir sayıya 6 adet sayı ile ulaşmaya çalışılır

Elimizde 6 adet sayı var ve sadece bir kere kullanabiliyoruz. İşlem 4 işlem yapılabiliyor fakat her sayıyı kullanmak zorunda da değiliz

Problemin bütün çözümleri için;
sayı Num
işlem Op

Num1 Op1 Num2 Op2 Num3 Op3 Num4 Op4 Num5 Op5 Num6

Sayıların kullanılacağı sıralama = 6 * 5 * 4 * 3 * 2 * 1 =6! = 720 ihtimal.
Her iki sayı arasında 4 işlem yada kullanılmama olmak üzere 5 ihtimal 6 sayı için 5 kere 5*5*5*5*5=5^5= 3125 ihtimal.

Toplam = 720 *3125 = 62500 değişik sıralama oluyor.
Pek tabi Problemin pek çok çözümüde olabilir. Tam Çözümü olmayada bilir.

genetik algoritma bir işlem
Gelelim çözüme öncelikle bize bir Genetik Programlama kütüphanesi lazım
-tabii tekerleği yeniden icad edip debelenip durmak ta bir tercih olabilir biz kolay yoldan gidiyoruz –

FGA sadece tek bir başlık dosyasından -fga.h- oluşan kullanımı kolay template library.
Paralel çalışabilmek için POSIX thread kullanılmış yani windows altında bizim pthreads-win32 indirip kurmamız lazım zahmet edip aramayın indirin pthreads-win32 açın ve derleyiciniz için uygun olan library ve dll dosyalarını gereken kısımlara ekleyin

FGA ve pthreads-win32 indirip kurduktan sonra Kodumuzu yazmaya başlaya biliriz

Problemin kodlanması için veri yapımızı oluşturuyoruz

typedef struct {
int Num[6]; // sayılar
int Op[5]; // işlemler
}PData ;

sonra bu veri yapısıyla işlem yapacak GP için gereken fonksiyonlarımızı yazıyoruz

my_fitness // uygunluk yada sağlık değeri
my_random_chromosome // rasgele varyasyon üret
my_mutate_chromosome // değişme uğrat
my_crossover // Çaprazlama yap

Ooo yazı epey uzamış. kim okur bukadar yazıyı ? Daha fazla uzatmayayım en iyisi inirip inceleyin. Soracağınız bir şey olursa biz de bilebilirsek eğer cevaplamaya gayret ederiz

Download : GHedef

* Kullanıcı Ara birimi pek tabii ki FLUID ile FLTK kullanılarak yazıldı. IDE olarak CodeBlock kullanıldı
** www.biliyormusun.net de bugünkü (08/12/2006) Bir işlem kısmındaki günün sorusunun çözümü

9*75 = 675
675-7= 668
668-9=659
659+10=669
 
 
Facebook Yorumları