• Sonuç bulunamadı

5. YAZILIM VE ARAYÜZ

5.8 Kodlama Sürecindeki Đyileştirmeler

Uygulamanın gerçeklenmesi sürecinde kodlamanın etkili ve verimli bir şekilde yapılabilmesi için şu noktalara dikkat edilmiştir:

Uygulamanın gerçeklenmesi sürecinde nesneleri içeren ArrayList veri yapısı ve dizi değişkenler kullanılmamıştır. ArrayList veri yapısının kullanılmama sebebi, tüm uygulama sürecinde kullanılan tüm dizi gruplarının aynı türde değişkenler içermesidir. Veri yapıları üzerinde ikili arama (binary search) ve veri yapılarına verileri sıralı ekleme amaçlı özel işlemleri uygulayabilmek için listeler (List veri yapısı) kullanılmıştır. ArrayList veri yapısına nesne olarak aktarılan veriler kullanılmak için daha sonra ilgili veri ya da veri yapısı türüne tekrar çevrilmelidirler (casting) ve bu durum süreci uzatır.

• Kodlamada kullanılan tüm döngü yapıları gözden geçirilerek döngülerdeki her çevrimde ele alınması gerekmeyen durumlar bu yapılardan çıkarılmıştır. Döngü süresince aynı değere sahip değerlerin her seferinde hesaplanmasının ya da tanımlanmasının önüne geçilmiştir.

• Uygulamanın çalıştırılması sürecinde yapılacak görüntü aramaları için gerekli veri ve veri yapıları en aza indirilerek bu ifadeler için bellekte ayrılacak yer de en aza indirilmiştir. Kullanılmayan değişkenler için bellekte alan tahsis edilmesine ve yeni tanımlamalara gerek yoktur. Bu sebeple, tanımlı olan ve söz konusu işlemlerin yapılması esnasında kullanılmayan değişkenlerden faydalanılmıştır. Bu yolla, tüm işlemler için tanımlı tüm değişkenler ve veri yapıları en verimli şekilde kullanılmıştır.

• Sıralı listelerde indeks ya da anahtar kullanarak nesnelere erişmek hızlıdır. Bu çalışmada GA ile akıllı aramalar yapabilmek için kullanılan liste yapılarına elemanlar sıralı bir şekilde eklenmektedir. Böylece, her nesilde tüm bireyler oluşturulduktan sonra ayrıca ebeveyn ve çocuk nesil için listelerin sıralanmasına gerek kalmamaktadır.

• Nesli içeren listenin bir sonraki nesil için tahsis edilen listeye kopyalanıp kopya nesli içeren bu liste üzerinde işlemler yapılması, nesli içeren listedeki veriler (bireyler) üzerinde gerekli işlemlerin yapılıp bir sonraki nesil olarak bu verilerin yeni listeye aktarılması şeklinde uygulanmıştır. Böylelikle kopyalama işlemine gerek kalmamıştır.

• Nesne tabanlı programlama dili kullanılarak gerçekleştirilen uygulamada, nesne örneklerinin gerekmedikçe yaratılmamasına özenle dikkat edilmiştir. Nesne örnekleri, nesnenin başka bir örneği yok iken gerekli ise ya da mevcut örneklerinden farklı bir örnek elde edilmeli ise yaratılmalıdır.

• Kodlama sürecinde örneği oluşturulması gerekmeyen durumlar için statik alanlar kullanılmıştır. Örneğin kaba kuvvet ya da akıllı yolla paralel arama yapmak için ilgili sınıfın birden fazla örneğinin oluşturulması gerekir. Đş parçacıklarının bütünlük içinde, ama bağımsız olarak çalışabilmesi kullandıkları değişken ve veri yapılarının ayrı birer örnek olmasını gerektirir. Her iş parçacığı için ilgili sınıfın bir örneğini yaratma yoluyla tüm veriler ve veri yapıları da her ayrı sınıfın kendine ait ve bellekte ayrı yerlere sahip olurlar. Sözü geçen bu verilere ve veri yapılarına her sınıftan ayrı ayrı erişebilmek için bu alanları statik olarak tanımlamamak gereklidir. Öte yandan her sınıf örneği için aynı değere sahip (örneğin nesil sayısı her sınıf için aynı değere sahiptir ve değeri değiştirilirse yine aynı durum geçerli olur) alanlar statik olarak tanımlanırlar.

• Etkili ve verimli bir uygulama için kodun çalışma zamanında optimizasyonu önemlidir. Uygulamanın çıkış dosyasını daha küçük, daha hızlı ve daha verimli yapmak için derleyici tarafından gerçekleştirilen optimizasyonlar etkinleştirilmiştir.

Çalışmada referans tipindeki değişkenler arasındaki dönüşümler için (int) x yapısı yerine x as1 int yapısı kullanılmıştır.

• GA için kodlamanın ikilik sistemde yapılması, genetik işlemcileri ile elde edilen yeni bireylerin içerdiği değerlerin kontrol edilmesini gerektirir. Bu durumun sürekli kontrol edilmesi ve işlemlerin tekrarlanması, arama süresini gereksiz yere çok uzatabilir. Bu sebeple mod alma (%) işlemi kullanılarak değerlerin istenen sınırlarda kalması sağlanmıştır. Böylece, elde edilen her birey için ilgili alt görüntü referans görüntüde yer almış olur.

Görüntü eşlemenin ve aramalarının, YSA sürecinin, paralel arama ile akıllı arama işlemlerinin gerçekleştirilmesi için tasarlanan fonksiyonlar, çeşitli iyileştirmelere gereksinim duyarlar. Bu süreçlerden en verimli şekilde faydalanılması, sistemi olası her durumda en uygun şekilde çalışabilecek bir hâle getirmekle mümkün olur. Uygulama sonuçları;

• problemin olası giriş görüntülerine, • üzerinde çalışılan sistemin özelliklerine, • seçilen eşleme fonksiyonuna ve

• arama şekline bağlıdır.

Bu sebeplerden ötürü kodlama süreci, farklı görüntülerde ve ölçeklendirmelerde, aramaların paralel yapılıp yapılmaması durumlarında ve farklı görüntü eşleme yöntemleri ile farklı sistemlerde gürbüz bir şekilde sonuçların elde edilebileceği şekilde tasarlanmalıdır.

1 as işlemcisi referans türündeki (veriyi saklamak yerine verinin hafızada saklanacağı adresi saklayan

değişken türü) uygun (uyumlu) değişkenler arasında dönüşüm işlemlerinin yapılmasını sağlar. Dönüşüm işlemi mümkün değil ise bu durumda boş değer (null) döndürülür. Bu işlemci null olabilen türler için de kullanılabilir.

Bu çalışmada, YSA için dört farklı aktivasyon fonksiyonu olması ve YSA’nın eğitiminin GY öğrenme ve GA ile iki farklı yolla yapılabilmesi, bu işlemcinin kullanımını gerektirir. Örneğin aktivasyon fonksiyonları için tanımlı veri yapısına bu işlem uygulanarak dört aktivasyon fonksiyonundan hangisi söz konusu ise o aktivasyon fonksiyonu ve öğrenme algoritmaları için tanımlı veri yapısına bu işlemci uygulanarak iki öğrenme yönteminden hangisi söz konusu ise o yöntem belirlenerek kullanılabilir.

Benzer Belgeler