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.