Sayfalar

Genetik Algoritma etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Genetik Algoritma etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Pazartesi, Kasım 08, 2010

Zeki Tahmin Sistemleri Ve Yapay Zeka

Bir önceki yazımızın sonundaki sorudan başlayalım
Hangi Yapay Zeka metodlarını,  nasıl ne şekilde kullanabiliriz ? 
Aslında sorunun cevabı öyle bir çırpıda verilecek gibi değil elbet, yinede bir giriş yapmaya çalışacağız.

Yapay Sinir Ağları :
Sitemizdeki ilgili yazılar ve örneklerden görebelieceğiniz gibi YSA çok esnek bir YZ metodu. Sabit bir Giriş ve Çıkış değişkenleri şekline dönüştürülen hemen her probleme uygulanabilir.  Tahmin edilecek değerin Kendisinden önce gelen değerlerle ilişkili olduğu kabulunü düşünürsek zaten basitçe bir uygulamada mümkün. Daha gelişkin bir sistem için geçmiş değerlerin yanında dış etkenlerin de giriş değerlerine eklemek gerekir.

Zeki Optimizasyon Teknikleri 
Zeki Optimizasyon Tekniklerinden kastım arama tipi metodlar yani Genetik, Karınca Kolonisi, Parçacık Sürü  optimizasyonları gibi. Bu metodların kullanımı ise ; tahmin edilecek değere ulaştıracak fonksiyon oluşturulması yada ( İstatistik veya Kaos teorisi kaynaklı ) Fonksiyonların parameterelerinin bulunması şeklinde olabilir mesela.

Bulanık Mantık ve Uzman sistemler
Tahmin konusundaki Uzman insanların tecrübelerini Bulanık mantıkda kullanarak Modellenip Tahminler için kullanmakdan ibaret.

SVM ve benzeri Sınıflandırma Metodları :
Problemin Tahminden sınıflandırmaya dönüştürülmesiyle kullanılabilir. Mesela,  "A" ürünün fiyatlarını tahmin etmek istemiş olalım.  "A" nın bir "C " kadar zaman sonraki  fiyatı  şimdiki fiyatından
"%b" kadar fazlaysa artmış,
"%b" kadar azalmışsa düşmüş 
değilse sabit kalmış şeklinde

Bahsettiğimiz metodların dışında daha adını bile bilmediğimiz metodlarada ( mesela HMM geliyor aklıma ) bakmak gerekebilir. Hatta  birlikte kullanımlarıda mümkün elbet. Sonuçda bütün bunlara uygulama ve uygulamadaki ulaşılan sonuçlara göre karar vermek gerekiyor...

 Evet Bu yazı dizimiznden sonuna gelmiş bulunuyoruz. Oldukça teorik olduğunun farkındayım fakat şimdilik imkanlarımız ( vakit ve insan gücü ) bu kadar.
Daha sonra neler olur bilemeyiz elbet Nasip artık...

Perşembe, Nisan 30, 2009

Modern Sezgisel Teknikler ve Uygulamaları

Geçenlerde yeni bir kitap keşfettim Dr. Tunçhan CURA'nın "Modern Sezgisel Teknikler ve Uygulamaları" adlı kitabı Papatya yayıncılıktan çıkmış. Kitap Mart 2008 baskısı olmasına rağmen kitabı ilk defa gördüm. Sebebine gelirsek Ne hikmetse Kitap yayın evinin "İşletme / Sosyal Bilimler" başlıklı kitaplar gurubunda yayınlanmış. Ve büyük bir ihtimalle Kitapçılarda o gurup kitaplarının bulunduğu raflarda tutuluyordu. Keşfettim dememin sebebi bu...

Genelde kitabı beğendim Teorik konularla okuyucuyu çok boğmadan algoritmalar vererek pratik uygulamalar göstermiş. Yazar

"Herhangi bir programlama dili kullanılarak algoritma geliştirme yeteneğini kazanmış herkes bu kitabın okuyucusu olabilir."

diyerek hitap çevresini epey geniş tutmuş.

"bu kitapta algoritmalar kaba-kod (pseudo code) şeklinde verilmiştir. Kitapta yer alan uygulamalar Java programlama diliyle sınanmıştır"

diyerek okuyucularınıda yüreklendirmiştir.

Konularına gelirsek
  • Yapay Sinir Ağları (YSA) ve Kredi Talebi Değerlendirme Problemi
  • Benzetilmiş Tavlama (BT) ve Kümeleme Analizi Giriş
  • Tabu Arama ve Kapasite Kısıtsız Tedarikçi Seçme Problemi
  • Genetik Algoritmalar ve Üç Boyutlu Cisimlerin Kısıtlı Yük Taşıma
  • Dayanıklılığına Göre Yüklenmesi Problemi
  • Karınca Kolonileri Optimizasyonu ve Tek Makine Toplam Ağırlıklı Gecikme Problemi
  • Parçacık Sürü Optimizasyonu (PSO) ve Finansal Portföy Optimizasyonu

Konuyla ilgilendiğinize göre - Bu blogda bu yazıyı okumuş olmanız ilgilendiğinizi gösterir - Kitabı alın elinizin altında bulunsun. Zaten şunun şurasında kaç türkçe kitap varki piyasada

Perşembe, Temmuz 05, 2007

FGA 1.3.3 çıktı

Bizim Fatih Presta FGA – Fast Genetic Algorithm'nın yeni versiyonunu çıkarmış
Epey bir yenilik ve bir kılavuz eklenmiş.
FGA da neymiş diyorsanız bakınız 1 2

Cumartesi, Mart 03, 2007

Genetik metodla 4 Bilinmiyenli Denklem Çözümü

Genetik metoda epey bir ilgi var. Şu an itibarıyla Örnek Programlarım arasında ençok indirilen bu oldu. Genetik Programlamayla Bir İşlem = 395 (windows) + 72 (Linux) olmak üzere toplam 467 kere indirildi. Hatta Java versiyonunu da yazıldı.

Neyse biz konumuza geçelim geçenlerde bana bir mesaj geldi
... sizden genetik algoritma ile ilgili yardınızı istiyorum.Mezuniyet projem için genetik algoritma kullanilarak c veya c++ dort bilinmeyen denklemi cözen program yazmam gerekiyor ama nasil yapilacagi konusunda hic fikrim yok...
- Ahh Şöhreti kazibe -
Ben de yardımcı olmaya çalışacağımı bildirip konuyla ilgili detaylı bir mail atmasını istemiştim. cevap gecikmedi.
... o projeden vazgectim beni cok fazla zorlayacak. ... kare bulmaca (puzzle creator)yapmam daha dogru olucak ...
Bunun üzerine aslında korkulacak bir şey olmadığını göstermek ve bizim Fatih Presta'nın FGA
kütüphanesinin kullanımını anlatmak için basit bir örnek yazmaya karar verdim.

y=KatSayı1*x1+KatSayı2*x2+KatSayı3*x3+KatSayı4*x4+Sabit

denklemi 1 dereceden 4 bilinmeyenli bir denklemdir.
y=0 için x1,x2,x3,x4 değerlerinin bulunması lazım.

İşin teorik kısmını başkalarına bırakıp ben uygulamaya geçeceğim.

1) Bulmamız gereken 4 değer var. Kromozom uzunluğumuz 4 . Çözüm tamsayı olmaya bileceğine göre değişken tipi olarak da float seçiyoruz.
2) Olası çözümlerin kodlandığı bir çözüm gurubu oluşturmamız lazım - Population -

PopulationMT my_population(
number_of_threads, // Thread sayısı
number_of_chromosomes, // Kromozom Sayısı
length_of_chromosomes, // Kromozom Uzunluğu
my_fitness, // Uygunluk Fonksiyonu
NULL,
NULL,
my_crossover_operator, // Çaprazlama Fonksiyonu
my_mutate_chromosome, // Mutasyon Fonksiyonu
my_random_chromosome // Rasgele Kromozom Oluşturma Fonksiyonu
);


Göreceğiniz gibi Uygunluk Fonksiyonu, Çaprazlama Fonksiyonu, Mutasyon Fonksiyonu ve Rasgele Kromozom Oluşturma Fonksiyonu yazmamız lazım.

// Uygunluk Fonksiyonu
// Denklemin değerini hesaplıyoruz.
// Sonucun 0 olması kökün bulunması demektir.
// Sonucu biraz matematikle (0,1) arasına çekiyoruz
// 1'e ne kadar yakınsa çözüme o kadar uygun - sağlıklı -
float my_fitness(float *chromosome)
{
float *x=chromosome;
float y=kat[0]*x[0]+kat[1]*x[1]+kat[2]*x[2]+kat[3]*x[3]+Sabit;
if(y<0 br="br"> y=-1.0 *y;
y=1/(1+y);
return y;
}
// Çaprazlama Fonksiyonu
// FGA'nın Kendi sağladığı Fonksiyon da işimizi görebilir aslında
// Biz öğrenmek bakımından yazıyoruz
void my_crossover(float *chromosome1, float *chromosome2)
{
float tmp;
if(rand()%2){
// Tek Noktadan çaprazlama
//
1010 ----> 0110
//
0101 ----> 1001
tmp=chromosome1[0];
chromosome1[0]=chromosome2[0];
chromosome2[0]=tmp;
tmp=chromosome1[1];
chromosome1[1]=chromosome2[1];
chromosome2[1]=tmp;
}
else {
// İki Noktadan çaprazlama
//
1010 ----> 1111
//
0101 ----> 0000
tmp=chromosome1[1];
chromosome1[1]=chromosome2[1];
chromosome2[1]=tmp;
tmp=chromosome1[2];
chromosome1[2]=chromosome2[2];
chromosome2[2]=tmp;

}

}


// Mutasyon Fonksiyonu
void my_mutate_chromosome(float *chromosome)
{
int a;
int b;
float tmp;
a = rand() % 4;
do{
b = rand() % 4;
}while(a==b);

if(rand()%2)
tmp=1.001;
else
tmp=0.999;
chromosome[a]=chromosome[a]*tmp;

if(rand()%2)
tmp=1.001;
else
tmp=0.999;
chromosome[b]=chromosome[b]*tmp;
}

// Rasgele Kromozom Oluşturma Fonksiyonu
// Arama yapacağımız aralığı seçiyoruz ben (-20,20) aralığını seçtim.
// Bütün X değerleri bu aralıkta seçiliyor.
void my_random_chromosome(float *chromosome)
{
float *x=(float *)chromosome;
for(int i=0; i<4 i="i">


Artık Gurubumuzu oluştura biliriz.

PopulationMT my_population(10, 400, 4, my_fitness, NULL, NULL, my_crossover, my_mutate_chromosome, my_random_chromosome);
3) gerisi Bir döngü içinde yeterince iyi sonuca ulaşana kadar.
yada belli kuşak sayısına kadar, işleme devam etmek.
Bunun için önce cycle fonksiyonu çağrılıyor.
sonra ulaşılan en iyi sonucu almak için
get_all_time_best_score fonksiyonu çağrılıyor.


while ((1.0-score)>0.00001) {
my_population.cycle();
score = my_population.get_all_time_best_score();
}
hepsi bu kadar.
Gördüğünüz gibi çekinilecek hiç bir şey yok. Bence Kare Bulmaca hazırlamaktan daha kolay ;)
Indirmek için : Download Denklem

Not:
1) FGA'nın Threadlı versiyonunu kullanın düz olan kısmında problem var. POSIX thread konusu daha önceki yazımda anlatmıştım.

2) Konuyla ilgili sorularınız olursa, Biz buradayız bekleriz.

Çarşamba, Aralık 13, 2006

Yapay Zeka Optimizasyon Algoritmaları



Geçen haftasonu kitapçıları gezerken rastladım bu kitaba "Yapay Zeka Optimizasyon Algoritmaları".
Derviş KARABOĞA'nın yazdığı kitap herhalde bu konuda Türkçe yazılmış tek kaynak. Uygulamaya dönük örnekler verilmesine rağmen anlatımı bence biraz akademik olmuş ama yinede alın bir inceleyin, destekleyin.
Bu kitap yapay zeka optimizasyon algoritmaları olarak adlandırılan tabu araştırma, genetic programlama, yapay ısıl işlem, karınca koloni ve yapay bağışıklık algoritmalarını kapsamaktadır.
...

Kitap, önce optimizasyonla ilgili temel kavramları tanımakta ve sonra bu beş optimizasyon algoritmasının temel prensiplerini vererek her birisiyle ilgili değişik mühendislik alanlarından uygulamalar sunmaktadır.
google da Derviş beyin adından ufak bir araştırmayla aşağıdaki makalelerede ulaştım özellikle ilki çok ilginç, Kitapda da bahsedilen Ders Programı sistemi için Genetic Programlama kullanılmış.

Perşembe, Aralık 07, 2006

Genetik Programlamayla Bir işlem



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

Salı, Ağustos 15, 2006

Genetik metodla optimizasyon problemlerinin çözümü

Genetik,Yapay zeka konusunda kullanılan algorithmalardandır.
http://ai-depot.com/Articles/48/Programming-Linear.html
http://ai-depot.com/Articles/48/Programming-Linear.html
http://ai-depot.com/Articles/48/Programming-Evolution.html

C örnek kodu da bulunuyor