Mehmet Emin KAYA - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Çalışmalarım | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim
İçerik Kategorileri
Makale Kategorileri
Arama

Tema
Kaynaklar
Takip Ettiklerim

EsinKap Proje pazarına katıldık


Eskişehir İli İnovasyon Stratejileri İçin Kapasite Oluşturma Projesi (ESİNKAP) 2. Ar-Ge Proje Pazarı Etkinliği Gerçekleştirildi.

 Hazırladığım SEGENYOL(Genetik Algoritma ile ilgili bir çalışma) adlı projeyle oradaydım.

ESİNKAP 2010 ar-ge proje pazarı etkinliğine Türkiye genelinde faaliyet gösteren sanayi firmalarının, kurum ve kuruluşlarının yanı sıra pek çok akademisyen katıldı. Etkinliğin gerçekleştirilme amacı genelde ekonominin, özelde sanayinin ihtiyacı olan bir araya gelişi ve birlikteliği oluşturmaktı. ESİNKAP 2010 Ar-Ge Proje Pazarı etkinliğinin sempozyum bölümünde “Bölgesel Ekonomi, Sanayi ve İnovasyon İlişkisi”, “Seçilmiş Sektörlerde İnovasyonla Rekabetçilik” ile “Ar-Ge, Teknoloji Geliştirme ve Fikrî Haklar” konulu oturumlar yapıldı. Etkinliğin ikinci gününde gerçekleştirilen ar-ge proje pazarı bölümünde 100’ün üzerinde sunuş yapıldı. Planlamaya uygun olarak sunuşlar; metal şekillendirme ve üretim teknolojileri, makine ve tasarımı teknolojileri, seramik ve refrakter teknolojileri, kimya ve proses teknolojileri, tekstil teknolojileri, bilişim teknolojileri, çevre, gıda, biyoteknoloji, enerji verimliliği, temiz enerji, otomasyon, kontrol, koruma ve işletme verimliliği temalarına göre düzenlenmiş oturumlarda yer aldı.  

projePazarı_esinkap_mehmeteminkaya

Benden | Bu yazıya henüz yorum yapılmamış. | 03.06.2010 08:46:58

avea 3g windows 7 driver problemi


Avea 3g problemi  ve TTNET 3g USB modem driver problemi çözüldü.

sürücüyü indirn ve kurun Windows 7 de çalismayan ZTE HSUPA USB modem çalisir duruma gelecektir.

 

Sürücü Indir

 

Teknoloji haberleri | Bu yazıya 6 yorum yapılmış. | 25.12.2009 17:22:35

Genetik Algoritmalar (Genetic Algorithms)


Genetik Algoritmalar
Genetik Algoritmalar evrimsel hesaplamanın bir parçasıdır. Bu alan Yapay Zekâ’nın hızla gelişen bir dalıdır. Genetik algoritmalar Darwin’ in evrim teorisinden etkilenerek geliştirilmiştir. Basitçe açıklayacak olursak problemler evrimsel bir süreç kullanılarak bu süreç sonunda en iyi sonucu veren çözüme erişmeye çalışmaktadır. Başka bir ifadeyle çözüm evrimleşmektedir. Evrimsel hesaplama 1960’larda I.Rechenberg’in Evrim Stratejileri (“
Evolutionsstrategie”) adlı çalışmasında tanıtılmıştır. Daha sonra fikri diğer araştırmacılar tarafından geliştirilmiştir. Genetik algoritmalar John Holland tarafından icat edilmiş ve öğrencileri ve iş arkadaşları tarafından geliştirilmiştir. 1992 yılında John Koza, genetik algoritmaları kullanarak programları evrimleştirerek belli işleri yapmakta kullandı. Bu yönteme “genetik programlama” adını verdi. LISP dilinde programlar Ayrıştırma Ağaçları” (“Parse Tree”) şeklinde ifade edildiği için LISP diliyle geliştirilmiştir. Ayrıştırma Ağaçları genetik algoritmaların çalıştığı temel nesnedir.

Biyolojik Altyapı
Kromozom: Tüm yaşayan organizmalar hücrelerden oluşur. Her hücrede aynı kromozom kümeleri bulunur. Kromozomlar DNA dizileri olup, tüm organizmanın örneği olarak hizmet ederler. Bir kromozom gen adı verilen DNA bloklarından oluşur. Her gen belirli bir proteini kodlar. Basitçe, her genin, örneğin göz rengi gibi bir özelliği kodladığı söylenebilir. Bir özellik için olası ayarlar, (Örn. Mavi, Yeşil) alel olarak adlandırılır. Her gen kromozom üzerinde kendine ait bir konuma sahiptir. Bu konuma yörünge (“locus”) adı verilir. Tüm genetik malzeme kümesine (tüm kromozomlar) genom adı verilir. Genom üzerindeki belli gen kümelerine genotip adı verilir. Genotipler, doğumdan sonra gelişmeyle fenotiplere - canlının göz rengi, zekâ v.b. fiziksel ve zihinsel özellikleri- dönüşür.
Tekrar Üretim: Tekrar üretim sırasında, yeniden birleşme (veya çaprazlama) ilk önce ortaya çıkar. Atalardan gelen genler yepyeni bir kromozom üretmek için bir araya gelirler. Bu yeni yaratılmış nesil daha sonra mutasyona uğrayabilir. Mutasyon DNA elemanlarının değişmesidir. Bu değişimler genellikle atalardan gen kopyalanması sırasındaki hatalardan kaynaklanır. Bir organizmanın uygunluğu (“fitness”) organizmanın yaşamındaki başarısıyla (hayatta kalma) ölçülür.
Arama Uzayı Eğer bir problemi çözüyorsak, genellikle çözümler arasındaki en iyi olanını arıyoruz demektir. Mümkün tüm çözümlerin uzayına (istenen çözümün aralarından bulunduğu çözümler kümesi) arama uzayı (durum uzayı) adı verilir. Arama uzayındaki her nokta bir olası çözümü temsil eder. Her olası çözüm değeri (uygunluğu) ile problem için “işaretlenebilir”. Genetik algoritmalar yardımıyla arama uzayındaki olası çözümler arasından en iyi çözümü araştırırız. Çözümü aramak, arama uzayında aşırı noktaları (azami veya asgari) aramak ile aynı anlamdadır. Zaman zaman arama uzayı iyi tanımlanmış olabilir, ama bu arama uzayında sadece bir kaç noktayı biliyor olabiliriz. GA kullanma sürecinde, çözüm bulma süreci diğer noktaları (olası çözümleri) evrim sürdükçe üretir. Sorun, arama çok karmaşık olabilir. Nereden başlanacağı veya nereye bakılacağı bilinemeyebilir. Uygun çözümün bulunması için birçok yöntem vardır, fakat bu yöntemler en iyi çözümü üretmeyebilir. Bu yöntemlerin bazıları, tepe tırmanma (“
hill climbing”), yasak arama (“tabu search”), benzetimli tavlama (“simulated annealing”) ve genetik algoritmalardır. Bu yöntemler sonucu bulunan çözümler genellikle iyi çözümler olarak kabul edilir, çünkü sık sık en iyiyi bulmak ve ispatlamak mümkün değildir.
NP-Zor (“
NP-Hard”) Problemler: “Geleneksel” yolla çözülemeyecek problem sınıfına bir örnek NP (“Non-deterministic Polynomial Time”) problemlerdir. Hızlı (Çokterimli) algoritmaların uygulanabildiği birçok görev vardır. Ancak algoritmik olarak çözülemeyen bazı problemler de vardır. Çözüm bulmanın çok zor olduğu önemli problemler vardır, fakat çözüm bulununca bu çözümü kontrol etmek kolaydır. Bu gerçek “NP-Complete” Problemleri ortaya çıkarır. NP Nondeterministic Polynomial anlamına gelir ve bunun anlamı çözüm (Nondeterministic algoritma yardımıyla) “tahmin” edilebilir ve kontrol edilebilir. NP Problemlere örnek olarak tatmin problemini, gezgin satıcı problemini veya sırt çantası problemini verebiliriz. Daha fazla örnek için “A Compendium of NP Optimization Problems” sitesi incelenebilir.
Genetik Algoritma
Genetik algoritmalar Darwin’in Evrim teorisinden esinlenilerek üretilmiştir. Bir problemin çözümü evrimsel süreç kullanılarak çözülmektedir.
Algoritma toplum adı verilen ve kromozomlarla temsil edilen bir çözüm kümesi ile başlamaktadır. Bir toplumdaki çözümler yeni toplumların üretilmesinde kullanılmaktadır. Bu işlem, yeni toplumun eskisinden daha iyi olacağı umuduyla yapılmaktadır. Yeni çözümler (yavru) üretmek için alınan çözümler uygunluklarına (fitness) göre seçilmektedir. Daha uygun olan tekrar üretim için daha fazla şansa sahiptir. Bu süreç belli bir durum (örneğin belli sayıda toplum veya en iyi çözümün gelişmesi) karşılanana kadar tekrar edilmektedir.
Basit Genetik Programlama Taslağı

  1. Başlangıç: n kromozom oluşan rasgele toplum oluşturulur (problemin olası çözümleri)
  2. Uygunluk: Toplumdaki her x kromozomu için f(x) uygunluk değeri değerlendirilir.
  3. Yeni Toplum: Aşağıdaki adımlar izlenerek yeni toplum üretilir;
    1. Seçim: Toplumdan uygunluklarına göre iki ata seçilir (daha uygun olanın seçilme şansı daha fazladır)
    2. Çaprazlama: Çaprazlama olasılığı ile ataları yeni yavru oluşturmak için birbirleriyle eşleştirilir. Eğer çaprazlama yapılmazsa, yavru ataların tıpatıp aynısı olacaktır.
    3. Mutasyon: Mutasyon olasılığı ile yeni yavru üzerinde her yörünge için mutasyon işlemi yapılacaktır.
    4. Kabul: Yeni yavru, yeni topluma eklenir.
  4. Değiştir: Yeni toplum algoritmanın tekrar işlenmesinde kullanılır.
  5. Deney: Eğer bitiş durumu sağlandıysa, durup toplumdaki en iyi çözüm döndürülür.
  6. Döngü: Adım 2’ye gidilir. (Kaynak)

Yukarıda da görüldüğü gibi, genetik algoritmanın akışı oldukça kolaydır. Birçok parametre ve ayar farklı problemler için farklı şekillerde gerçekleştirme için vardır. Sorulması sorulan ilk soru kromozomun nasıl kodlanacağıdır. Daha sonra çaprazlama ve mutasyon, GA’nın iki basit işleci adreslenecektir. Bir sonraki soru çaprazlama için ataların nasıl seçileceğidir. Bu farklı birçok yolla yapılabilir, ancak ana fikir daha iyi ataların daha iyi yavrular üreteceği düşüncesiyle seçilmesidir. Bu şekilde en iyi çözümün kaybedilmemesi için seçkinlik, en iyi çözümün değiştirilmeden yeni nesle aktarılması, böylece en iyi çözümün yaşatılması uygulanabilir.
GA İşleçleri
Genetik algoritma taslağında görebileceğimiz gibi, çaprazlama ve mutasyon genetik algoritmanın en önemli kısımlarıdır. Başarım en çok bu iki işleçten etkilenir. Bu işleçlerden bahsetmeden önce kromozomlardan daha fazla bahsetmek gereklidir.
Kromozomun Kodlanması: Bir kromozom temsil ettiği çözüm hakkında bir şekilde bilgi içermelidir. En çok kullanılan kodlama ikili karakter dizisidir. Bu yöntemle kromozom şu şekilde görülmektedir:
Kromozom 1 : 1101100100110110
Kromozom 2 : 1101111000011110
Her kromozom ikili karakter dizisi şeklinde temsil edilmektedir. Karakter dizisindeki her bit çözümün bir özelliğini temsil eder. Bir başka olasılık tüm karakter dizisinin bir sayıyı temsil etmesidir. Elbette, birçok başka kodlama yöntemi vardır. Kodlama daha çok çözülen probleme bağlıdır. Örneğin bazı problemler için tamsayı veya gerçek sayı şeklinde kodlamak gerekirken, bazı problemlerde permütasyon şeklinde kodlamaya ihtiyaç vardır.
Çaprazlama: Kodlamaya karar verdikten sonra, çaprazlama işlemiyle devam edebiliriz. Çaprazlama, atalardaki seçili genler üzerinde işlem yapar ve yeni yavrular oluşturur. Bunun en basit şekli, rasgele bir kesme noktası (çaprazlama noktası) seçip, bu noktadan önceki her şeyi ilk atadan, sonraki her şeyi ikinci atadan alıp birleştirerek yavruyu oluşturmaktır.

 


Çaprazlama aşağıdaki şekilde gösterilebilir: ( | kesme noktasıdır):
Kromozom 1: 11011 | 00100110110
Kromozom 2: 11011 | 11000011110
Yavru 1 : 11011 | 11000011110
Yavru 2 : 11011 | 00100110110


Çaprazlamanın birçok yolu mevcuttur, örneğin birden fazla kesme noktası seçilebilir. Çaprazlama daha da karmaşık olabilir ve tamamen kromozomların kodlanmasına bağlıdır. Özel problemler için yapılmış özel çaprazlamalar genetik
algoritmanın başarımını arttırabilir.
Mutasyon: Çaprazlama işlemi gerçekleştirildikten sonra, mutasyon işlemi yapılır. Mutasyonun amacı, toplumdaki tüm çözümlerin çözülen problemlerin bir yerel uygun değerine düşmesinin önüne geçmektir. Mutasyon işlemi çaprazlama sonucu oluşan yavruyu rasgele değiştirmektedir. İkili kodlamada rasgele seçilmiş bir kaç biti 1’i 0’a, 0’ı 1’e şeklinde değiştirmek bir mutasyondur.


Asıl Yavru 1: 1101111000011110
Mutasyon Geçirmiş Yavru 1:1100111000011110
Asıl Yavru 2: 1101100100110110
Mutasyon Geçirmiş Yavru 2:1101101100110110


Mutasyon tekniği (çaprazlama tekniği de) kromozomların kodlamasına çoğunlukla bağlıdır. Örneğin permütasyon şeklinde kodlamada mutasyon rasgele seçilen iki genin yer değiştirmesi olarak gerçekleştirilir.


GA’nın Parametreleri

Çaprazlama Olasılığı: Bu parametre çaprazlamanın ne kadar sıklıkla yapılacağını belirtir. Eğer herhangi bir çaprazlama yoksa yavrular ataların aynısı olacaktır. Eğer bir çaprazlama yapılırsa yavrular ataların parçalarından oluşur. Eğer çaprazlama olasılığı %100 ise yavrular tamamen çaprazlama ile yapılır. Eğer %0 ise yavrular ataların kromozomlarının aynısına sahip olurlar. (Bu yeni toplumun aynı olduğu anlamına gelmez) Çaprazlama, yeni kromozomların eski kromozomların iyi parçalarını alıp daha iyi olacakları düşüncesiyle yapılır, ancak eski toplumun bazı parçalarının bir sonraki nesle aktarılması da iyidir.
Mutasyon Olasılığı: Kromozom parçalarının ne kadar sıklıkla mutasyon geçireceğini belirtir. Eğer mutasyon yoksa yavrular çaprazlamadan hemen sonra değiştirilmeden üretilir (veya doğrudan kopyalanır). Eğer mutasyon varsa, yavruların kromozomlarının bir veya daha fazla parçası değişir. Eğer mutasyon olasılığı %100 ise tüm kromozom değişecektir. %0 ise hiçbir şey değişmez. Mutasyon genellikle GA’nın yerel aşırılıklara düşmesini engeller. Mutasyonlar çok sık oluşmamalıdır, çünkü GA rasgele aramaya dönüşebilir.
Toplum Büyüklüğü: Toplumdaki kromozom (birey) sayısını belirtir. Eğer çok az birey varsa, GA’nın çaprazlama yapacağı olasılıklar azalacaktır ve arama uzayının çok küçük bir kısmı araştırılacaktır. Eğer çok fazla birey varsa, GA bayağı yavaşlayacaktır. Araştırmalar bazı sınırlardan sonra çok büyük toplumların kullanılmasının yararlı olmadığını göstermiştir, bu problemin daha hızlı bir şekilde çözülmesine yardımcı olmamaktadır.


Kodlama
Kromozomların kodlanması bir problem çözümüne başlarken sorulması gereken ilk sorudur. Kodlama problemin kendisine yoğun şekilde bağlıdır.
İkili kodlama: İkili kodlama en çok kullanılan yöntemdir, çünkü ilk GA araştırmaları bu kodlama yöntemini kullanıldı ve görece basit bir yöntemdir. İkili kodlamada, her kromozom bit (0 veya 1) karakter dizilerinden oluşmaktadır.


Kromozom A: 101100101100101011100101
Kromozom B: 111111100000110000011111


İkili kodlama, fazla olasılıkta kromozomlar verir, bunlara düşük sayıda alel içerenler de dahildir. Ancak, bu yöntem çoğu problem için doğal bir kodlama değildir ve çaprazlama ve/ya mutasyondan sonra düzeltmeler yapılması gerekir.


Örnek Problem: Sırt çantası problemi
Problem: Elimizde değeri ve boyutu verilmiş olan nesneler var. Sırt çantasının kapasitesi verilmiştir. Elimizdeki nesneler sırt çantasına azami sayıda çantanın kapasitesini aşmayacak şekilde yerleştirilmelidir.
Kodlama: Her bit, şeyin sırt çantasında olup olmadığını belirtiyor.
Çaprazlama Yöntemleri:
Tek Noktalı Çaprazlama: Tek bir kesme noktası seçilir, ilk atanın kromozomundan kesme noktasına kadar baştan itibaren alınır ve geri kalan kısım ikinci atanın kesme noktasından sonraki kısmıyla birleştirilip yavrunun kromozomu oluşturulur (11001011+11011111 = 11001111 ).
İki Noktalı Çaprazlama: İki kesme noktası seçilir, kromozomun başından ilk kesme noktasına kadar olan ikili karakter dizisi ilk atadan, iki kesme noktası arasındaki kısım ikinci atadan ve ikinci kesme noktasından sonraki kısım tekrar ilk atadan alınarak yeni yavru oluşturulur (11001011 + 11011111 = 11011111).
Tek biçimli çaprazlama: Bitler atalardan rasgele olarak seçilip kopyalanır (11001011 + 11011101 = 11011111 ).
Aritmetik çaprazlama: Bazı aritmetik bit işlemleri atalar üzerinde uygulanarak yeni yavru oluşturulur (VE işlemi 11001011 + 11011111 = 11001001).
Mutasyon Yöntemleri:
Bit ters çevirme: Seçilen bitler terslerine çevrilir. (Bkz. Şekil 4.8 Yeni Bit= (NOT)Eski Bit işlemi 11001001 => 100010001)


Permütasyon Kodlama: Permütasyon kodlama, gezgin satıcı problemi veya görev sıralama gibi sıralama problemlerinde kullanılabilir. Permütasyon kodlamada, her kromozom sıra’da konum belirten numara karakter dizisinden oluşur.
Kromozom A: 1 5 3 2 6 4 7 9 8
Kromozom B: 8 5 6 7 2 3 1 4 9
Permütasyon kodlama, sıralama problemleri için yararlıdır. Bazı problemlerde bazı çaprazlama ve mutasyon türleri için kromozomların tutarlılığı için (örneğin içerisinde gerçek sırayı tutan) düzeltmeler yapılması gerekmektedir.


Örnek Problem: Gezgin satıcı problemi
Problem: Şehirler ve bu şehirler arasındaki uzaklıklar verilmektedir. Gezgin satıcı tüm bu şehirleri dolaşmak zorundadır. Fakat gereğinden fazla dolaşmamalıdır. En küçük dolaşma uzunluğunu verecek olan şehir dolaşma sırası bulunmalıdır. Kodlama: Kromozom şehirlerin gezgin satıcının dolaşacağı sırasını tutar.
Çaprazlama yöntemleri (Tek Noktalı Çaprazlama): Bir kesme noktası seçilir, kesme noktasına kadar ilk atadan, kesme noktasından sonraki kısımlar da ikinci atadan olmak üzere permütasyonlar kopyalanır. Aynı sayılar olmayan sayılarla değiştirilerek tutarlı yeni yavru elde edilir. Bundan çok farklı, daha fazla sayıda yöntem de uygulanabilir. (1 2 3 4 5 6 7 8 9) + (4 5 3 6 8 9 7 2 1) = (1 2 3 4 5 6 8 9 7)
Mutasyon Yöntemi (Sıra Değiştirme): İki sayı seçilir ve yerleri değiştirilir. (1 2 3 4 5 6 8 9 7) => (1 8 3 4 5 6 2 9 7)


Değer kodlama: Gerçek sayılar gibi karmaşık değerlerin kullanıldığı problemlerde doğrudan değer kodlama kullanılabilir. İkili kodlamanın bu tip problemler için kullanılması problemlerin zorlaşmasına neden olacaktır. Değer kodlamada, her kromozom bazı değerlere eşittir. Değerler problemle ilgili herhangi bir şey olabilir. Gerçek sayılar, karakterler veya herhangi nesneler olabilir.

Değer kodlama ile kodlanmış kromozom örnekleri:
Kromozom A: 1.2324 5.3243 0.4556 2.3293 2.4545
Kromozom B: ABDJEIFJDHDIERJFDLDFLFEGT
Kromozom C: (geri), (geri), (sağ), (ileri), (sol)
Değer kodlama bazı özel problemler için iyi bir seçimdir. Ancak, bu tip kodlamada probleme özgü yeni çaprazlama ve mutasyon yöntemleri geliştirmek gereklidir.
Örnek Problem: Bir sinir ağı için ağırlıkları bulma
Problem: Bir sinir ağı belirlenmiş mimariyle birlikte verilmektedir. Ağdan beklenen değeri almak için sinir ağındaki sinirler arasındaki ağırlıklar istenmektedir.
Kodlama: Kromozomlardaki gerçek değerler sinir ağındaki ağırlıkları temsil eder.
Çaprazlama yöntemi: İkili kodlamadaki tüm çaprazlamalar kullanılabilir.
Mutasyon Yöntemi (Küçük bir sayı ekleme -Gerçek sayı kodlama için-): Seçilen değerlere küçük bir sayı eklenir (veya çıkarılır). (1.29 5.68 2.86 4.11 5.55) => (1.29 5.68 2.73 4.22 5.55)


Ağaç Kodlama: Ağaç kodlama genellikle evrimleşen program veya ifadeler için kullanılmaktadır. Örneğin genetik programlama için Ağaç kodlamada her kromozom bazı nesnelerin ağacıdır, örneğin işlevler veya programlama dilindeki komutlar gibi. Ağaç kodlama evrimleşen programlar veya ağaç şeklinde kodlanabilecek herhangi diğer yapılar için uygundur. LISP programlama dilinde programların ağaç şeklinde temsil edilmesi nedeniyle LISP bu iş için en çok kullanılan dildir. LISP’te bu ağaçlar kolayca ayrıştırılıp, çaprazlama ve mutasyon kolayca yapılmaktadır.
Örnek Problem: Verilen değer çiftlerini yaklaştıran fonksiyonu bulma
Problem: Girdi ve çıktılar verilmektedir. Görev tüm girdiler için en iyi çıktıları veren fonksiyonun üretilmesidir.
Kodlama: Kromozomlar ağaçta fonksiyonlar şeklinde temsil edilir.
Çaprazlama: Bir kesme noktası her iki atada da seçilir, atalar bu noktada bölünür ve kesme noktasının altında kalan parçalar değiştirilerek yeni yavrular oluşturulur.
Mutasyon (İşlev veya Numara değiştirme): Seçilen düğümler yer değiştirilir.


Seçim
GA Akış şemasından da bildiğimiz gibi, kromozomlar toplum içerisinden çaprazlama için ata olmak için seçilmektedir. Problem bu kromozomları nasıl seçileceğidir. Darwin’in evrim teorisine göre en iyi olan yeni yavruyu yaratmak için yaşamına devam eder. Seçim düzeneklerine
rulet tekeri seçimi, Boltzman seçimi, turnuva seçimi, sıralama seçimi, sabit durum seçimi ve diğerleri verilebilir.


Rulet Tekeri Seçimi: Atalar uygunluklarına göre seçilirler. Daha iyi kromozomlar, daha fazla seçilme şansına sahip olanlardır. Toplumdaki tüm kromozomların yerleştirildiği bir rulet tekerini hayal edelim. Rulet tekeri üzerindeki kromozomun yerinin boyutu kromozomun uygunluğuyla orantılıdır. Daha uygun olan kromozom daha geniş bir kısma sahip olur. Bir bilye rulet tekerine atılmakta ve bilyenin durduğu yerdeki kromozom seçilir. Daha uygun olan kromozomlar böylece daha fazla sayıda seçilecektir. Süreç aşağıdaki algoritma ile anlatılabilir. Toplam: Toplumdaki tüm kromozomların uygunluk toplamını hesaplar - S. Seçim: (0,S) aralığından rasgele bir sayı üretilir - r. Döngü: Toplum üzerinden gidip 0’dan itibaren uygunlukların toplamını al - s, s r’den büyük olduğu zaman dur ve bulunduğumuz yerdeki kromozomu döndür. Elbette, aşama bir her toplum için bir kez yapılmaktadır.
Sıralama Seçimi: Bir önceki seçim düzeneğinde uygunluk değerleri arasında büyük farklar oluşunca problemler ortaya çıkacaktır. Örneğin, eğer en iyi kromozomun uygunluğu diğer tüm kromozomların toplamının %90’ı ise diğer kromozomların seçilme şansı çok azalacaktır. Sıralama seçimi ilk önce toplumu sıralar ve her kromozom uygunluk değeri olarak sırasını kullanır. En kötü 1 uygunluğunu, ikinci kötü 2,…., en iyi N (toplumdaki kromozom sayısı) uygunluğunu alır. Uygunluk sıraya göre belirlendiği zaman durum değişmektedir. Bu şekilde tüm kromozomların seçilme şansı olacaktır. Ancak bu yöntem daha yavaş yakınsama neden olabilir, çünkü en iyi kromozomlar birbirlerinden çok farklı değillerdir. Sabit Durum Seçimi: Bu özel bir ata seçme yöntemi değildir. Bu tip seçimin ana fikri, toplumun var olan kromozomlarının büyük bir kısmının yeni nesle aktarılmasıdır. Sabit durum seçimi şu şekilde çalışmaktadır. Her yeni nesilde yüksek uygunluk değerine sahip kromozomlar yeni yavruları oluşturmak için seçilir ve düşük uygunluk değerine sahip yavrular kaldırılarak yerlerine bu yeni oluşturulan yavrular koyulur. Toplumun geri kalan kısmı aynen yeni nesle aktarılır.
Seçkinlik (Elitizm): Seçkinliğin ana fikri daha önce açıklandı. Çaprazlama ve Mutasyon yöntemleriyle yeni bir nesil oluştururken, en iyi kromozomları kaybetme olasılığımız vardır. Seçkinlik, en iyi kromozomların (ya da bir kısmının) ilk önce kopyalanıp yeni nesle aktarıldığı yöntemin adıdır. Geri kalan kromozomlar yukarıda anlatılan yöntemlerle üretilir. Seçkinlik GA’nın başarımını hızlı bir şekilde arttırabilir, çünkü bulunan en iyi çözümün kaybolmasını önler.

Kaynaklar

 
 

Optimizasyon Teknikleri | Bu yazıya henüz yorum yapılmamış. | 03.12.2009 08:51:05

ASP.NET MVC Framework'ü tanımak ve çalışmaya başlamak


Nedir? Ne zaman çıktı? Sürümleri? Nasıl Kullanılır?

.NET Framework ile ilk günden itibaren web uygulamları geliştirmek için ASP.NET WebForms kullanılmaktaydı. ASP.NET WebForms alt yapısının genişleyebilir yapısından faydalanarak geliştirilmiş açık kaynak kodlu ya da ticari MVC alt yapıları mevcuttu.Farklı platformlarda ya da open source bazı projelerde MVC tasarım kalıbı deneyimine sahip yazılım geliştiriciler tarafından Microsoft'dan MVC tasarım kalıbı desteği istenmekte ve beklenmekte idi. Microsoft bu bekletiye karşılık Microsoft Ekim 2007'de ASP.NET MVC Framework'den bahsetmeye başlatı (
http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx) ve 2009 Nisan'ında da ASP.NET MVC Framework 1.0 release sürümü duyuruldu. (http://weblogs.asp.net/scottgu/archive/2009/04/01/asp-net-mvc-1-0.aspx)

ASP.NET Framework 1.0 ile bir çok web sitesi/uygulaması geliştirildi. Ve Microsoft web uygulaması geliştirme kanadında ki bilinen isimlerinin blogları ve twitter gibi iletişim araçları ile MVC Framework üzerinde ki desteklerinin devam ettiği gözlemlenirken Microsoft ASP.NET MVC Framework 2'nin Preview 1 sürümünü duyurdu. (
http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx)

ASP.NET MVC Framework 1.0 ile 2 (evet 2.0 değil) birlikte çalışmaktadır. Yukarıda verdiğim linklerde verilen nasıl kurulur bilgilerini tekrar etmek niyetinde değilim. Visual Studio üzerine
http://www.asp.net/mvc/download/ adresinden setup dosyasını indirerek yada Microsoft Web Platform Installer aracılığı ile kurabilirsiniz.

Microsoft ASP.NET MVC Framework açık kaynak kodludur. Yani Microsoft geliştirdiği bu frameworkün kaynak kodlarını yazılım geliştiricilere açmıştır. Burada ki stratejik kararları daha detaylı değerlendirmek gerekir. Ancak MVC framework gibi bir ortamda çalışmayı yeğleyecek kitlenin genellikle
ALT.NET diye nitelendirilen sadece Microsoft tarafından sağlanmış .NET araç/kütüphane/frameworklerini kullanmayan open source sever camiasının sempatisini kazandığı bir gerçektir.

Webforms'a ne olacak? WebForms kullanmayı bırakıp MVC mi kullanmamız gerekiyor?

ASP.NET WebForms desteklenmeye devam edecektir. Ki zaten şu an piyasada component desteği ve diğer 3.parti bileşenlere bakıldığında WebForms için büyük bir destek mevcut, MVC Framework için bu destek büyüyene kadar bir çok yeni projede halen WebForms tercih edilmeye devam edecek MVC Framework ise alternatif oluşturacak ve projenizin gereksinimlerini ve tercihlerinize göre uygun yapıyı seçebiliyor olacaksınız.

Peki neden MVC Framework ne sunuyor?
 

  • ASP.NET WebForms ile kullandığınız master page yapısını, kullanıcı kontrollerini,session,membership vb yapıları kullanmaya devam edebiliyorsunuz.
  • ViewState yoktur. MVC Framework mimarisi ViewState mantığına ters düşmektedir.
  • MVC Framework HTML çıktısı üzerinde yazılım geliştiriciye tam kontrol sunmaktadır. Bu webforms sayfasına bir webcomponenti ekledikten sonra o kontrolün HTML çıktısının ne olacağını kontrol edememekten rahatsız olan web developerların çok seveceği bir özelliktir. Ancak webcomponentilerinin getirdiği bazı kolaylılardan şimdilik mahrum kalınması da bir dezavantaj olarak gözükebilmektedir. MVC Framework için helper methodları ve web control kütüphaneleri geliştirilmeye devam etmektedir bunların sayısı ve yetenekleri artıktıkça tüm html çıktısını kendisi yönetmek istemeyen ve web kütüphanelerin sağladığı kolaylıkları kullanmaya devam etmek isteyen yazılım geliştiriciler de MVC Framework'e daha sıkcak bakmaya başlayacaktır.
     
  • MVC framework test edilebilirlik sunmaktadır. WebForms uygulamaları da test edilebilirdi ancak unit testing ile değil uygulama deploy edildikten sonra kaydedilen scriptleri tekrar run ederek ve http requestlerini kaydedip tekrar etme mantığı ile çalışan test yöntemleri ile test edilebiliyordu. MVC Framework yapısı itibariyle controller sınıflarında yazılan her sayfa aksiyonun test edilebilir olmasını sağlamaktadır.
  • MVC Framework tasarımı itibariyle pluggable bir yapıdadır, dependency injection framework kütüphaneleri ile birlikte çalışılabilmektedir.
  • URL routing sistemi üzerine kurulu olan MVC Framework ile arama motorları ile uyumlu bir yapıdadır. URL routing ile tanımlanan adresler yapısına bir örnek vermek gerekir ise /kullanici/goster/1 şeklinde bir adres tanımlanabilir. Bu şekilde tanımlanan bir adrese istek yapıldığında kullanicicontroller sınıfında ki goster method çağrılır parametre olarak 1 değeri geçilir. kullanicicontroller sınıfında ki duzenle methodunu çağırmak için kullanici/duzenle/1 adresi kullanılmaktadır. Bu örneklerden anlaşıldığı gibi gelen bir http isteği webforms mimarsinden farklı olarak html markup içeren .aspx dosyasına değil doğrudan c# sınıfı olan controller sınıflarına gider, controller sınıfı ise bir aspx sayfası mı oluşturağına ya da bir nesneyi xml, json gibi mi döneceğine karar vererek view katmanını aktive eder.


Model - View - Controller kavramları

 


*msdn.microsoft.com



Model katmanı veriyi ve bu veriyi işlemek iş mantığı çalıştıran katmandır. Daha pratik olarak örneklendirmek gerekir ise sisteminizde ki kullanıcı entitynizi temsil eden sınıfdır, kullanıcı bilgilerine erişmek, kullanıcı kaydetmek, kullanıcıyı kaydederken işlettiğiniz iş kuralı/mantığının yer aldığı sınıflardır.

Controller katmanı http requestleri ile gelen isteklerin eşleştirildiği action methodlarının yer aldığı katmandır. Gelen bir http isteği routing tablosuna bağlı olarak doğrudan controller sınıflarına ve o sınıflarda ki action methodlarına aktarılır. Controller sınıfı içinde yer alan action method içerisinde Model katmanı da kullanılarak yapılması gereken işler (bir veriye erişmek,güncellemek vs. gibi) yapılır ve view'ın nasıl döneceğine göre bir geri dönüş türü ile view katmanı aktive edilir.

View katmanı kullanıcı arayüzünün oluşturulduğu katmandır. Model her zaman bir .aspx dosyası olmak zorunda değildir tanımlanmış başka bir viewengine ile view katmanı oluşturulabilir. ASP.NET MVC Framework ile gelen .aspx dosyaları ile çalışan standart view engin yanında internet üzerinden genellikle open source olan bazı view engine kütüphanelerine erişebilirsiniz. Bu viewengine değiştirilebilme durumu da MVC Framework'ün pluggable olan tasarımı sayesinde olmaktadır. Örnek bir kaç viewengine kütüphanesinden bahsetmek gerekir ise; Nahml (
link1,link2), Spark(link1, link2), Brail (link1, link2), String Template (link1,link2).


Bundan sonra ne olacak? WebForms mu? MVC Framework mü? Hangisini seçmeliyim?

ASP.NET MVC Framework, WebForms yerine gelmiş bir teknoloji değildir. Projenizin gerekliliklerini de göz önünde bulundurarak hangisini seçeceğinize karar verirsiniz.

MVC Framework seçmenin avantajlar

 

  • Model, view, controller gibi katmanların ayrılması ile iş mantığı kodlarının yönetilmesi daha kolaylaşmıştır.
  • Web sitenizde yer alan farklı bölümlerin farklı yazılımcılar tarafından geliştirilmesini bir adım daha kolaylaştırmıştır.
  • Test driven development desteği vardır, TDD yapılacak ise mutlaka MVC kullanılmalıdır. Zira controllerlar webforms da olduğu gibi view etkileşimi (btnSave.Click gibi) ile çalışmamaktadır.
  • ViewState ve sunucu taraflı web componenetleri çalışmadığı için istemciye giden HTML markup çıktısı üzerinde tam kontrolünüz vardır.
  • Bir internet sitesi geliştiriyorsanız REST (Representational State Transfer) url yapısı ile çalıştığı için arama motorlarının indexlemesi ve tekrar bulabilmesi için avantaj sağlar. show.aspx?id=1 gibi bir adres yerine makale/asp.net/aspnet_ile_mvc_uygulamalari gibi bir adres arama motorları tarafından içeriğine göre daha tercih edilirdir. Bu sayede arama sonuçlarında yukarılarda çıkabilirsiniz.
  • İstemciye giden html çıktısı daha küçüktür çünkü hidden inputlar içinde, viewstate gibi veriler istemciye aktarılmaz ve tabiki geriye de post edilmez. Herkese açık ve yoğun kullanıcı trafiği olan sitelerde ölçülebilir bir performans kazandıracaktır.
  • jQuery vb. javascript kütüphaneleri ile daha kolay çalışabilirsiniz. Zira Html çıktısında oluşturulan elementlerin id değerleri tamamen sizin kontrolünüzdedir. WebForms'da her web componentinin istemci tarafında ki id si ClientID sunucu taraflı propertysi ile alınıp javascript kodlarının arasına basılması gerekiyordu.


WebForms seçmenin avantajları

 

  • Bir windows uygulamasında olduğu gibi olay tabanlı programlama desteği sunmaktadır. (button.click gibi)
  • İlk günlerinden itibaren gelişmiş ve büyümüş (gerek Microsoft tarafından sağlanan, gerek üçüncü parti -telerik,devexpress- vb) bir web component desteği mevcuttur. Çok güçlü yeteneklere sahip datagrid gibi listeme kontrollerine sahiptir. Bugüne kadar ASP.NET ile geliştirme yapmış yazılım geliştiriciler ise benzeri web componentlarını kullanmaya aşinadır.
  • RAD ortamlarından uygulama geliştirmiş tüm yazılım geliştiricinin aşina olduğu bir yapıda çalışmaktadır. Örneğin hiç web development yapmamış bir yazılım geliştiricinin adapte olması daha kolaydır.
  • Sayfa bazında durum yönetimi kolaydır, viewstate kullanır.


Uygulama geliştirirken unit test yapacağım, kullanıcıya giden çıktının kontrolüne sahip olmalıyım diyorsanız MVC Framework seçebilirsiniz.
Daha hızlı biçimde RAD toolları kullanarak, veri yoğunluklu ve windows forms da ki olay tabanlı yaklaşım ile uygulama geliştireceğim diyorsanız WebForms seçebilirsiniz.
 

ASP.NET | Bu yazıya henüz yorum yapılmamış. | 02.12.2009 21:46:59

İnternet mucidinin en büyük hatası


World Wide Web Konsorsiyum'unun direktörü ve M.I.T. profesörü Tim Berners-Lee, bir röportajda kendisine yöneltilen ilginç bir soruya daha ilginç bir cevapla karşılık verdi.

İnternetin mucidi olarak tanınan Tim'e "Her şeyi yeniden yapma şansınız olsa neyi farklı yapardınız? Pişmanlıklarınız var mı?" şeklinde bir soru soruldu. Lee ise bugünkü aklı olsa http'den sonraki çift kesme " //" işaretinden bir tanesini çıkartmayı istediğini söyledi. Çift kesme işaretinin o günlerde bir programcılık standardı olduğunu, ancak sonradan bunun gerekli olmadığının anlaşıldığını belirten Lee, eğer çift kesme yerine tek kesme kullanılmış olsaydı insanların ek zahmetten kurtulacağını ve kağıda yapılan baskıda kapladığı yer yüzünden kesilen ağaçların olmayacağını söyledi.



Kaynak: http://www.milliyet.com.tr/Dunya/SonDakika.aspx?aType=SonDakika&KategoriID=19&ArticleID=1150214&Date=14.10.2009&b=Internet%20mucidinin%20en%20buyuk%20hatasi

Benden | Bu yazıya henüz yorum yapılmamış. | 17.10.2009 01:43:58

Ana Sayfa | Hakkımda | Çalışmalarım | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Mehmet Emin KAYA