Yine bir yapay zeka 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.
iş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
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 -
İhtiyacınıza göre kütüphane bulmak için size freshmeat'i önerebilirim
Efendim biz bukonuda FGA -Fast Genetic Algorithm - kullanacğız
FGA sadece tek bir başlık dosyasından -fga.h- oluşan kullanımı kolay template library.
Paralel çalışa bilmek 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 yada daha kolay 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
675-7= 668
668-9=659
659+10=669
9 yorum:
gerçekten güzel bir çalışm olmuş. Kaç senedir bilgisayarla uğraşıyorsunuz merak ettim. ilk yazılardan Fortran, Basic kokuyor buram buram...
ihtiyarlık işte kaç sene geçti hatırlamıyorum ;)
Programlamaya Basicle başladım - GW daha sonra Quick - sonra Okul yüzünden mecburen Fortran 77
Fakat hiç birini uzun boylu kullanmadım C daha sonra C++ o koku anlattığım anılarımdandır
öncelikle tebrik ederim,ardından hayret ederim :).hakkaten çok şaşırdım .gerçekten çok hızlı çalışıyor.genetik programlama hakkkında bi bilgim yoktu verdiğin linkten öğrendiğim kadarıyla bile şaşkınlığım daha da arttı.Bu, bizim bu dönem c++ da proje ödevimiz ve biz klasik yöntemlerle yapmaya çalıştık recursive falan kullanarak ama bizimkiler çok yavaş hatta ölü döngüye bile giriyor.zamanın varsa ve zahmet olmazsa programı biraz daha açıklayabilirmisin yorum satırlarıyla.bir de eğer mümkünse sadece console application olarak çalışacak kodlar varmı elinde yada çıkrabilir misin şimdiden teşekkür ederim...
yazıda yeterince açıklama var
cb_Solve fonksiyonu çözümün yapıldığı kısım bu ve yazıda da belirttiğim gibi my_fitness, my_random_chromosome,
my_mutate_chromosome,my_crossover
fonksiyonları probleme uygun şekilde
kromozomlarla işlem yapıyor
consol uygulaması haline kolayca çevrilebilir yani
kolay gelsin
Merhaba,
Projenizi inceledik ve çok beğendik,sizi tebrik ederiz,yalnız bir sorumuz olacaktı.
Bu projeyi hangi programı kullanarak yazdınız,.net ortamında denedim ama projeyi acamadım sadece exe'sini görebildim.
Bu konuda bilgilendirirseniz sevinirim...
Saygılarımla...
biraz değişiklik yaptım itoi benim linuxumde çalışmayan satırlar.. Ama kodu hala tam inceleyemedim.. Yarın işte inşallah..
atoi
itoa
ikiside standart fonksiyon
problem çıkarmaz
Linklerde sorun var. Rica etsem yeniler misiniz?
blog un faq sayfasındaki 5. soru ve cevabı okuyunuz
Yorum Gönder