• Sonuç bulunamadı

KARESEL ÇOKLU SIRT ÇANTASI PROBLEMİ İÇİN BİR GENETİK ALGORİTMA

3.3 KÇSÇP İçin Geliştirilen Genetik Algoritma

3.3.3 Genetik işlemciler

İlk nesil oluşturma prosedürü ile kapasite kısıtlarını sağlayacak şekilde türetilen kromozomların, GA işlemcileri ile işlem görürken de uygunluklarının bozulmasının önlenmesi gerekmektedir. Bunu sağlamak amacıyla geliştirilen çaprazlama işlemcisi ve kullanılan diğer işlemciler aşağıda açıklanmıştır.

Kopyalama. Kopyalama, iyi uyum değerlerine sahip kromozomların yüksek olasılıkla yeni nesillere aktarılmasını sağlayarak başarısız özelliklerin elenmesi ve başarılı özelliklerin yaşatılmasına olanak sağlamaktadır. Bu çalışmada kopyalama işlemcisi olarak, turnuva seçim yöntemi benimsenmiş ve turnuva büyüklüğü 2 olarak belirlenmiştir. Bu yöntemde, popülasyondan, rassal olarak iki kromozom seçilmekte ve bu kromozomlardan en iyi uyum değerine sahip olanı, yeni nesile aktarılmaktadır.

Popülasyon büyüklüğüne ulaşıncaya kadar, bu işleme devam edilmektedir.

Çaprazlama. Çaprazlama işlemcisi iyi özellikleri taşıyan kromozomlardaki bilgileri bir kromozomdan diğerine aktarıp, yeniden bir araya getirerek daha üstün yeni kromozomların oluşabilmesine olanak yaratan bir işlemcidir. Bu çalışmada çok noktalı çaprazlama işlemcisi, probleme özel olarak uygunluğu bozmayacak şekilde değiştirilmiştir. Klasik çok noktalı (uniform) çaprazlama işlemcisinde, her gen için rassal bir sayı üretilir. Rassal sayı 0.5 in altında ise çaprazlanmak üzere seçilmiş iki kromozomun ilgili genleri sabit kalır, 0.5’in üzerinde ise yer değiştirir. Örneğin rassal sayı dizisi ( 0.6 0.4 0.1 0.8 0.9 0.2 0.6 ) iken [ 0 2 0 1 0 0 2 ] ve [ 2 1 1 0 1 2 0 ] dizileri ile gösterilen kromozomların koyu rakamlarla gösterilen genleri değiştirilmekte ve [ 2 2 0 0 1 0 0 ] ve [ 0 1 1 1 0 2 2 ] dizileri ile gösterilen iki yeni kromozom elde edilmektedir. Çok noktalı çaprazlama işlemcisi bu hali ile kullanıldığında, kromozomların uygunluğunu bozabileceğinden işlemci, kapasiteleri kontrol edecek

şekilde geliştirilmiştir. Önerilen çaprazlama işlemcisinde klasik çok noktalı çaprazlama işlemcisinden farklı olarak, her gen değişiminde her iki kromozomun kapasiteleri kontrol edilmektedir. Bu değişim her iki kromozomun da uygunluğu bozulmayacaksa izin verilmekte, ancak herhangi bir kromozom için kapasite aşımı söz konusu olacaksa bu durumda kapasite aşımına yol açacak olan gene sıfır değeri atanmaktadır.

Çaprazlama tamamlandıktan sonra eksik kalan kapasiteler, atanmamış parçalar içinden en yüksek amaç fonksiyonu artışını sağlayacak parça ya da parçaların seçilmesi ile tamamlanmaktadır. Önerilen çaprazlama işlemcisinin prosedürü aşağıda verilmiştir.

ps, popülasyon büyüklüğü, nk, sırt çantası sayısı, ng, gen (parça) sayısı, kapasitek, k. sırt çantasının kapasitesi, genij, i. kromozomdaki j. genin değeri, gengij, geng2ij, çaprazlama yapmak üzere oluşturulmuş geçici kromozom dizileri, tw1k, çaprazlanmak üzere seçilmiş kromozom çiftinden birincisinin k. sırt çantasına seçilen parçaların ağırlıkları toplamı, tw2k, çaprazlanmak üzere seçilmiş kromozom çiftinden ikincisinin k. sırt çantasına seçilen parçaların ağırlıkları toplamı olmak üzere çaprazlama prosedürü aşağıda verilmiştir.

Çaprazlama Prosedürü begin

t := 0 ;

for i := 1 to ps do if ci : [0,1] aralığındaki rassal sayı < çaprazlama oranı then begin

t := t + 1

for j := 1 to ng do gengtj := geni j ; end;

nc = [t / 2];

for i := 2 to nc * 2 step 2 do /* i ≥ 2 ve çift bir tamsayı begin

tw1k := 0 ; tw2k := 0 ;

for j := 1 to ng do begin

if [0,1] aralığındaki rassal sayı <= 0.5 then begin

if gengi-1, j > 0 and tw1gengi - 1, j + wj <= kapasitegeng i - 1, j then begin

geng2i - 1, j := gengi - 1, j ;

tw1gengi - 1, j := tw1gengi - 1, j + wj ; end

else geng2i -1, j := 0 ;

end

if r2 = q2 then r2 := arg min{ wj: geng2i,j = 0 };

end end end t := 1 ;

i := 1 ;

while t ≤ nc * 2 do

begin

if ci < çaprazlama oranı then begin

for j := 1 to ng do genij := geng2tj ; t := t + 1 ;

end

i := i + 1

end

end.

Mutasyon. Önerilen GA’da birbirinden farklı olasılıklarla uygulanan iki farklı mutasyon işlemcisi kullanmaktadır. Bu iki işlemci de Martello ve Toth (1981b) tarafından doğrusal amaç fonksiyonuna sahip, çoklu sırt çantası problemleri için önerilmiş olan yaklaşık (approximate) sezgiselinin mevcut çözümü iyileştirmek için kullandığı iki iyileştirme yaklaşımını temel almaktadır. Bu çalışmada bu iki iyileştirme yaklaşımı KÇSÇP’ne uyarlanmıştır. Mutasyon_1, mevcut çözümü yerel yer değiştirmelerle iyileştirir. İlk olarak, farklı sırt çantalarına atanmış tüm parça çiftleri gözden geçirilir bu parçaların yerlerinin değiştirilmesi toplam karı arttıracaksa yer değişikliği yapılır. Mutasyon_1 prosedürü aşağıda verilmiştir:

Mutasyon_1 Prosedürü begin

for i := 1 to ps do if m1i : [0,1] aralığında rassal sayı < mutasyon_1 oranı then begin

for j := 1 to ng do if genij > 0 then

for k := j +1 to ng do if 0 < genik ≠ genij then /* iki seçili gen bulunur begin

h := arg max {wj, wk };

l := arg min {wj, wk };

d := wh –wl ;

if d ≤ kkapasitel and

: m ∈ sırt çantası gen

+∑ ≠

∑ ≠

∑ ≠

∑ ≠l mplm+ h rphr h mphm l rplr ih , r ∈ sırt çantası genil then

begin g := genil ; genil := genih ; genih := g ;

kkapasiteh := kkapasiteh + d ; kkapasitel := kkapasitel - d ; end

end;

end end.

Mutasyon_2 rassal olarak seçtiği s adet parçayı seçildikleri sırt çantalarından çıkarır. Burada s mutasyon_2 işlemcisinin parametresidir. Son olarak eksik kalan kapasite çaprazlama işlemcisinde olduğu gibi tamamlanır. Mutasyon_2 prosedürü aşağıda verilmiştir:

Mutasyon_2 Prosedürü.

begin

for i := 1 to ps do if m2i : [0,1] aralığında rassal sayı < mutasyon_2 oranı then for t:= 1 to s do genit := 0 (rassal seçilmiş t : genit > 0)

for k := 1 to nk do

begin

r := arg min{ wj: genij = 0 }; /* seçilmemiş parçalar içinde en while wr ≤ ( kapasitek – twk ) do küçük kapasiteye sahip olanı

begin

for j := 1 to ng do begin

find q := arg max {

+

j l

jl

j p

p : genij = genil = k, twk + wj ≤ kapasitek };

geniq := k ; twk := twk + wq ; end

if r = q then r := arg enk{ wj: genij = 0 };

end end end

Önerilen GA’da her neslin en iyi kromozomundan bir adet bir sonraki neslin en kötü kromozomu ile değiştirilmek yolu ile elitizm kullanılmış ve elde edilen en iyi çözümlerin korunması garanti edilmiştir. İki farklı durdurma koşulu birlikte kullanılmıştır. Algoritmanın çalışabileceği nesil sayısı (nf) ve iyileşmenin yaşanmadığı

nesil sayısı (ni) sınırlandırılmıştır. ni ya da nf ten herhangi birisi belirlenen sayıya ulaştığında algoritma sonlandırılmaktadır.

İzleyen bölümde sonuçları verilmiş olan testlerde, popülasyon büyüklüğü 30, çaprazlama oranı 0.80, mutasyon_1 ve mutasyon_2 oranları sırasıyla 0.40 ve 0.10 olarak seçilmiştir. Mutasyon_2 işlemcisinin parametresi 4 olarak kullanılmıştır. Son olarak durdurma kriterleri ni = 200 ve nf = 300 olarak belirlenmiştir.

3.4 Sonuçlar

Bu bölümde öncelikle geliştirilen algoritmanın test edilmesinde kullanılan yazın problemleri açıklanmış, çaprazlama ve mutasyon işlemcilerinin uyum değerinin iyileştirilmesi üzerine etkileri araştırılmış ve son olarak ta aynı test problemleri çözülerek yazındaki mevcut GA ile önerilen GA’nın performansları karşılaştırılmıştır.