Diferansiyel evrim algoritmasını multi-objective şeklinde belirtilen, grafik boyama yöntemi ile olan kısmını açıklayacağım. Ama hepsinin detaylarına girmeden önce, diferansiyel evrim nedir, neye hizmet eder açıklayalım. Temel olarak genetik algoritmaya oldukça benzemektedir. Zaten genetik algoritmanın bir bölümüdür.

DE, ana kişiyi ve aynı popülasyondaki diğer birkaç kişiyi birleştirerek yeni aday çözümler üreten basit bir evrimsel algoritmadır. Bir aday, ebeveyni ancak daha iyi olması durumunda değiştirir. Bu, genellikle geleneksel EA'lardan daha iyi performans gösteren başka bir açgözlü seçim şemasıdır. Bazen, yeni oluşturulan aday değişken alanın sınırlarının dışında kalmaktadır. Bu gibi durumlarda, birçok kısıtlama yönetimi yaklaşımı mümkündür

Bu problemi, yalnızca sınır kısıtlamaları ihlal eden aday değerini, en yakın sınır değeriyle değiştirerek çözüyoruz. Bu şekilde, aday mümkün olduğu kadar az değişiklik yaparak uygulanabilir hale gelir. Ayrıca, bu yaklaşım yeni bir adayın inşasını gerektirmez.

Bu algoritma için adımlar,

Giriş

Bu kısım da datasetimizi uygun koşullara göre okumamız gerekmektedir. Diferensiyel evrim algortiması, multi-object ve aynı zaman da grafik boyama tekniğini içermektedir. Bu durum bizim için kontrol etmemiz gereken bir çok durumun olduğunu göstermektedir. Ilk aşama olarak data’yı okuturken birbiri ile bağlantısı olan düğümleri bağlantıları göstermemiz gerekmektedir. Diferansiyel algoritmanın kontrol etmeye çalıştığı her bir bağlantının doğru bir şekilde olması hatanın en az olmasıdır.

Populasyon Yaratmak

Burada rastgele bir sayıda popülasyon değeri belirliyoruz. Popülasyonun içerisinde bulunan değerler rastgele olarak belirlenmektedir.

F1 ve F2 değerleri

Bizim için iki boyutlu array’in içinde bulunması gereken iki adet değer vardır. Bunlar f1 ve f2 değerleri diyorum. F1 bizim için hatalı kolların sayısını tutarken f2 de hatalı olan kollarda ki değerleri tutar. Burada kolların değerleri rastgele olarak verilebilir. Peki burada bahsedilen hata nedir? Popülasyonun içerisinde birbiri ile bağlantısı olan düğümlerin grafik renklendirmesinde bulunan değerin az olmasını istemekteyiz. Bu değerler bunları tutmaktadır.

Dominant Olanı Bulmak

En iyi değerlerden hangisinin diğerinden daha iyi olduğunu bulmak için önce bulduğumuz fitness değerlerini kullanırız. Amaç, burada bulduğumuz değerleri geliştirmek için yeni bireylerimizi kullanmaktır.

Bu değerleri bulduğumuzda, onları arşiv adı verilen bir bölümde tutarız, böylece son adımda, yeni bireyler eskilere hükmederken, arşivimizi günceller ve daha düzenli bir nüfus ortamı yaratırlar.

Bir x ve y ekseni göz önüne alındığında, aşağıdaki değerler ne kadar düşük olursa, en iyi sonuçlarımız o kadar iyi olur. Başka bir deyişle, uygunluk hesaplamasında f1 değerinde bulduğumuz değerler iyidir, ancak f2 değerine verdiğimiz kolların değerinin değeri bizim için iyi bir sonuç değildir. Daha iyi bir sonuç bulmak için, hem f1 hem de f2 değerlerini birbirleriyle karşılaştırırken kullanırız.

Bu sayede arşivin değerlerine göre iyi ve kötü değerleri göz önünde bulunduruyoruz. Bu değerler rastgele seçilen popülasyonumuzdan rastgele seçilir. Bu sonuçlara göre uygunluk değerlerimiz elde edildi.

Üç adet rastgele değer belirmek

Diğer evrimsel algoritmalardan farklı olarak, bu adım tüm popülasyon içinde gezinmek yerine, rastgele seçilen 3 değerin üzerinde yeni bireyler yaratmayı amaçlamaktadır. Onları R1 R2 ve R3 olarak adlandırılır.

Çaprazlama(Crossover)

Bu adımda, süreç birkaç adımda ilerler. Elimizde bir çaprazlama yüzdesi belirleriz. Örneğim 0.7 gibi. Bu geçiş sağlanırsa, çaprazlamaya izin verilir.

Crossover ayrıca, iki yeni kişiyi kurduğumuzdan sonra R2 ve R3 arasında önceden belirlenen ilkidir.

Daha önce yaptığımız 2 yeni bireyden en iyisini yaptığımız gibi, aralarındaki uygunluk değerlerine bakarak en iyisini belirliyoruz. Ve bunu C'ye atıyoruz. Bu sefer R1 ile birlikte yarattığımız en iyi C değerine geri dönüyoruz.

En iyi kişiyi seçmek için aynı işlemi tekrarlayın. Ve C'ye ekleyin. O zaman popülasyonda bulduğumuz bir çözümle birlikte geçiyoruz. En iyisini C'ye ekliyoruz. Bu süreci toplumlar için tekrarlıyoruz. C i 'de bulunan değerden daha iyiyse, C i değerini de ekleriz.

Mutasyon

Bu, bu algoritmadaki son adımımız. Bu çözümü bütün bir popülasyon değeri kadar uygulamamız gerekmektedir. Hepsi için uygulandıktan sonra baskın olan değerin içinden rastgele popülasyonda bir gen değiştirilir.

Bu oldukça küçük bir adım olsa da baştan aynı işlemler uygulandığına popülasyonun iyileşmesini sağlamaktadır.