Bu Sayfayı Paylaş:

Kavram

Genetik Algoritma - GA

Tanım: Farklı olasılıklar içinden en iyi çözümü (bir işi daha az maliyete veya daha fazla verimlilikle yapılması gibi) bulmayı hedefleyen, bunun için doğadaki genetik ve doğal seçilim ilkelerinden ilham alınarak geliştirilmiş bir sezgisel algoritma. Her aşamada rasgele olasılıklar üretilip sonuçlara bakılmakta sonuçlardan daha doğru olanlarından yeni değerler üretilmektedir. Temel ilkeleri 1975 yılında ilk kez Michigan Üniversitesi'nde John Holland tarafından ortaya atılmıştır.

Kavram

Rulet Çemberi Seçimi - Rulet Çarkı Seçimi - Roulette Wheel Selection - Fitness Proportionate Selection

Tanım: Farklı olasılıklardan birbirine göre daha fazla uygun olanları seçmeye yönelik bir genetik algoritma. Örneğin bir rulet çarkında bir topun bir bölmeye gelme ihtimali bölmenin toplam bölmeler içindeki büyüklüğüne (uygunluk) bağlıdır. Örneğin %20 A, %50 B ve %30 C bölmesi olan bir rulet çarkında top %50 olasılıkla B bölmesine düşecektir.

Veri

Rulet Çemberi Seçimi Algoritması

Rulet Çemberi Seçimi algoritmasında her bölmenin büyüklüğü hesaplanır. Örneğin tüm rulet için %20 A, %50 B ve %30 C bölmesi olsun. Topun hangi bölgeye düşeceğini belirlemek için öncelikle rastgele bir sayı üretilir. Örneğin 0 ile 100 arasında bir sayı üretilsin. Eğer bu sayı 0-20 arasında ise A, 20 ile 70 arasında ise B, 70 ile 100 arasında ise C bölgesi seçilmiş olunur. Java ile aşağıdaki gibi bir algoritma yazılabilir :
public static int select(int[] probabilityAsPercent){
	
	double p = Math.random();
	double cumulativeProbability = 0.0;
	
	for (int i=0;i<probabilityAsPercent.length;i++) {
					
		cumulativeProbability += ((double)probabilityAsPercent[i]/(double)100);
		if (p <= cumulativeProbability) {
			return i;
		}
	}
	
	return 0;
}
Select() yöntemine her bölümün toplam büyüklüğü yüzde olarak verilir. 0 ile 1 arasında rastgele bir sayı üretilir. Sırayla yüzdeler toplanılarak ilerlenir. Önce %20 olan A için bakılır. Eğer sayı 0.2'den küçük ise A seçilmiştir ve çıkılır. Değil ise toplama devam edilir ve bir sonraki değer 20 + 50 (B) ile 70 e çıkar. Eğer üretilen sayı 0.7 den küçükse bulunan B anlamına gelir ve çıkılır. B de değilse bir toplama daha yapılır (70 + 30) ve 100 e ulaşılır. Zaten başka bir ihtimal kalmaz ve C seçilir.

İpucu

Rulet Çemberi Birim Testi

Rulet Çemberi Seçimi algoritmasi olasılığa dayanan bir algoritma olduğu için birim testini yapmak zor. Örneğin şuradaki algoritmayı test etmek isteyelim : Rulet Çemberi Seçimi Algoritması
Junit 5 ile aşağıdaki gibi bir test yapılabilir :
@RepeatedTest(100)
public void testRouletteWheelSelector() {
	
	int[] values=new int[]{0,100};
	
	int index = RouletteWheelSelector.select(values);
	
	assertEquals(1, index);
			
}
Bu test 100 kere tekrarlandığında hep başarılı olmalıdır. Çünkü ile değer 0 olasılıktır ve hep ikinci seçilecektir.
Olasılıkta örnekler ne kadar fazla ise sonuç olasılık değerlerine yaklaşır. Bir yazı turayı bir milyon kez atarsanız yaklaşık 500 bin kez tura ve yazı gelir. Yüz milyona çıkarırsanız daha da değerler yaklaşır birbirine. Bunu şu şekilde kullanabiliriz :
static int index1Count=0;
static int index2Count=0;
@BeforeAll
public static void init() {
	index1Count=0;
	index2Count=0;
}
@RepeatedTest(10000)
public void testRouletteWheelSelector50Percent() {
	
	int[] values=new int[]{50,50};
	
	int index = RouletteWheelSelector.select(values);
	
	if(index==0) {
		index1Count++;
	}if(index==1) {
		index2Count++;
	}			
}
@AfterAll
public static void beforeAll() {
	
	System.out.println(index1Count+":"+index2Count);
}

Değerler %50 ve %50 verilmesinden dolayı çıkan sonuçlar birbirine yakın olmalıdır. Örneğin 5100 - 4900 gibi değerler çıkacaktır. Yüz bin kez de yapılabilir test. Tabi burada çıkan sonucu insan gözüyle değerlendirdik. Halbuki bir hata payı verip kod ile test etmeliydik.



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir