Archive for Ocak, 2015

Genetik Programlama (Genetic Programming)


Yazan: Şadi Evren ŞEKER

Yapay zeka çalışmaları ve doğal olarak genetik programlama kabul edilebilir süreç mutasyon, bilgisayar problemlerine genetik fonksiyonlar uygulayarak sonuç elde etmeyi amaçlayan yaklaşımın adıdır. Belirli bir hedef fonksiyona ulaşmak için bilgisayar programlarının nasıl çalışması gerektiğini bulmayı amaçlayan makine öğrenme yaklaşımının söylendiği söylenebilir. Genetik algoritmalar alt kol olarak görülebilir.

Genetik programlama, ağaç üzerindeki farklı işlevleri ağaç yapraklarında bulunan değerlere uygular. Hedef fonksiyon için en uygun fonksiyon dağılımını bulmak için (uygunluk fonksiyonu), ağaç düğümlerindeki fonksiyonların sırası ve içeriği değişir.

Tarihsel süreç

1954'te, özellikle ikinci dünya savaşı sırasında yapılan çalışmalardan elde edilen ivme ile, genetik algoritmaların ilk uygulamaları simülasyon alanına uygulandı. 1960'larda ve 1970'lerde optimizasyon tekniği olarak kullanılmaya başlandı.

1964 yılında Fogel tarafından sonlu durum makinesi Analiz için genetik programlama yaklaşımının uygulandığı bilinmektedir. Bu uygulamalar markov karar süreci 1985 yılında Cramer ilk modern uygulamaya benzer bir ağaç yaklaşımı ortaya koydu (1). Bu yaklaşımı takiben, çalışma Koza tarafından karmaşık iyileştirme problemleri ve keşif problemlerine uygulandı (2). Bu yaklaşım daha sonra Koza'nın bir öğrencisi olan Giavelli'nin DNA dizgilerine genişletildi (3).

1990'larda, genetik bilgi işlem yalnızca basit problemlere uygulanabilirdi, çünkü hesaplama zamanı hala o zamanlar bilgisayarlar için yoğundu. Günümüzde CPU hızları artıyor ve kuantum hesaplama Yöntem (4) gibi işlem hızını artıran yeniliklerle tekrar güncellendi.

Programın Temsili

Genetik programlama, ağaç yapısındaki bir programı bellekte tutmaya dayanır (5). Ağaçlar özyinelemeli işlevlerle işlenmesi kolay yapılar tarafından kabul edilir. Bu nedenle, tasarım özyinelemeli diller (Lisp gibi) bu yapıyı kolayca yapılandırabilir ve analiz edebilir.

Özyinelemeli olmayan genetik programlama durumundan da söz edilebilir. Bu yönteme göre doğrusal genetik programlama olarak adlandırılan zorunlu programlama dilleri kullanıma sunuldu. Örneğin, açık kaynak olarak geliştirilen mikro GP olarak adlandırılan dil özyinelemeli genetik programlama problemlerini çözmeden önce doğrusal hale getirir (7).

Genetik programlama evrimsel algoritmalar temel fonksiyonlara sahip olmak mutasyon ve karşıdan karşıya geçmek Kullanılır.

Genetik programlamanın özel bir uygulaması olan meta-genetik programlama kavramından da bahsetmeye değer. Bu yaklaşımda, önceden tanımlanmış bilgiyi bir programcı tarafından girmek yerine, geçiş, mutasyon ve kromozom gibi değerlerin algoritmanın kendisi tarafından başlatılacağı öngörülmektedir.

Numune

Örnek olarak, iki farklı denklemde uygulanan çarpı aşağıda görselleştirilmiştir (8):

genetic_programming

Resim kaynağı: geneticprogramming.com

kaynaklar

(1) GENETİK ALGORİTMALARLA İLGİLİ ULUSLARARASI BİR KONFERANSIN BİLDİRİLERİ VE UYGULAMALARI, Basit Sıralı Programların Uyarlanabilir Üretiminin Temsil Edilmesi, Nichael Lynn Cramer

(2) Genetik Programlama web sayfası: genetic-programming.com

(3) Hücresel Otomatlarda Davranışsal Özelliklerin Genetik Kodlaması. Stanford'da Yapay Yaşam 1994 Stanford, California, 94305-3079 ABD.

(4) 36 Genetik Programlamanın Ürettiği İnsani Rekabetçi Sonuçlar, http://www.genetic-programming.com/humancompetitive.html, 25 Ocak 2015 taraması

(5) Cramer, 1985, GENETİK ALGORİTMALARLA İLGİLİ ULUSLARARASI KONFERANSIN BİLDİRİLERİ VE UYGULAMALARI, Basit Sıralı Programların Adaptif Üretimi İçin Bir Temsil

Wolfgang Banzhaf, Peter Nordin, Robert E. Keller, Frank D. Francone, dpunkt, Heidelberg ve Morgan Kaufmann, San Francisco, 1997

(7) MicroGP sayfası Source Forge : http://ugp3.sourceforge.net, 26 Ocak 2015 taraması

(8) http://www.geneticprogramming.com/Tutorial/, 25 Ocak 2015 tarihine göz atın


JAVA dilinde WEKA ile kod geliştirilmesi


JAVA'da WEKA ile kod geliştirme

Yazan: Şadi Evren ŞEKER
WEKA, JAVA dilinde yazılmış açık kaynaklı bir yazılımdır. Bu, WEKA'da bu bölüme kadar olan arayüzlerden erişmiş olduğumuz tüm işlemlere JAVA'dan basit nesne tanımı ve yöntem çağrıları ile erişilebileceği anlamına gelir.
Basit bir WEKA kodu
Weka ile yazılım geliştirme sürecine basit bir kodla başlayacağız. Amacımız, bir CSV dosyasını bir ARFF dosyasına dönüştürmektir. Bunu yapmak için, daha önce Weka'da açıklanan CSV Yükleyici ve ARFF Tasarrufu sınıflarını kullanacağız (daha fazla bilgi için) Weka Bilgi Akışı ))
Weka'da, bu kütüphaneler Weka'yı indirir indirmez gelir. Weka yüklemesi ile birlikte gelen weka.jar dosyası bu kodların tümünü içerir. Bu kodda kullanacağımız kütüphanelere aşağıdaki ithalat satırları ile ulaşmak mümkündür.

weka.core dosyasını içe aktarın.
weka.core.converters.ArffSaver öğesini içe aktarın;
weka.core.converters.CSVLoader öğesini içe aktarın;

Yukarıdaki ithalat hatlarına giden tam yolu bulmak için, Weka'nın sitesinde mevcut olan API kullanılabilir.
Weka açık kaynaklı bir proje olduğundan, tüm belge bilgileri ve en son sürüm weka.sourceforge.net adresinde bulunabilir. Nitekim API adreslerine “http://weka.sourceforge.net/doc/overview-summary.html .. yazarak ulaşılabilir.

Her sınıfın altındaki sınıflara, paketlere ve bilgilere, klasik javadocs veya Java API ile oluşturulan sayfalardan geleneksel olduğu gibi bu arayüzden erişilebilir.
Kullanacağımız CSVLoader ve ARFFSaver sınıfları, ithalat hatlarında gösterildiği gibi weka.core.converter altında bulunur. Burada, kullanılacak sınıf hakkında daha ayrıntılı bilgilere erişebiliriz.
Kodumuz 3 bölümden oluşacaktır:
• Giriş dosyasını yükleme
• CSV yapısını RFF yapısına dönüştürme
• ARFF dosyasını kaydetme
Bu yapıya göre, dosyaların yüklenmesi ve kaydedilmesi temel Java bilgisi ile çözülebilir. Bu aşamadaki yeni ve önemli bilgiler dönüşüm aşamasıdır.

CSVLoader yükleyici = new CSVLoader ();
loader.setsour by (sourceFile);
Örnekler data = loader.getDataSet ();

// ARFF'ı kaydet
ArffSaver saver = new ArffSaver ();
saver.set maddeler (veri);
saver.setFile (new File (newFile));
saver.setDestination (new File (newFile));
saver.writebatch ();

Yukarıdaki kod bu dönüşümü gösterir. CSVLoader kullanılarak bir loader nesnesi oluşturuldu ve ardından kayıtlar girdi dosyasından okundu ve bir Weka sınıfı olan Instances sınıfından bir veri nesnesi tanımlandı. CSVLoader nesnesinin veri kümesi bu veri nesnesine döndürülür.
Kodun ikinci bölümünde bir ArffSaver sınıfı oluşturulur ve daha önce yarattığımız veri nesnesi parametre olarak verilir, daha sonra dosya adı ve dosya konumu koruyucu nesneye verilir ve dosya writeBatch () yöntemiyle kaydedilir. .
Yukarıda belirtilen tüm kritik kod aşağıda verilmiştir.

weka.core dosyasını içe aktarın.
weka.core.converters.ArffSaver öğesini içe aktarın;
weka.core.converters.CSVLoader öğesini içe aktarın;

java.io dosyasını içe aktarın. *;

genel sınıf csvarff {

public static void main (String () args) kural dışı bırakıyor {

// CSV yükleme aşaması
CSVLoader yükleyici = new CSVLoader ();
loader.setSource (yeni Dosya ("input.csv"));
Örnekler data = loader.getDataSet ();

// ARFF kayıt aşaması
ArffSaver saver = new ArffSaver ();
saver.set maddeler (veri);
saver.setFile (yeni Dosya ("cikti.arff"));
saver.setDestination (yeni Dosya ("cikti.arff"));
saver.writebatch ();
}
}


  • Copyright © 1996-2010 Bilgisayar Mühendisinin Notları. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress