top of page

Jaya Algoritması

Yazarın fotoğrafı: ibrahim ışıklıibrahim ışıklı

Herkese merhaba ! Sizlere optimizasyon teknikleri dersi ile ilgilenirken tanıştığım jaya algoritmasından bahsetmek ve örnekleyerek açıklamak istiyorum. Jaya algoritması tıpkı genetik, parçacık sürü ve tabu arama algoritması gibi meta-sezgisel bir algoritmadır. Peki sıklıkla duyduğumuz bu "meta-sezgisel" kavramı tam olarak nedir ? Öncelikle bunu anlamakla başlayalım.

Nedir bu meta-sezgisel algoritmalar ?


Meta-sezgisel algoritmalar, belirli bir problem için kesin ve analitik çözümler yerine mevcut çözüme yakınsamayı amaçlar.


Diyelim ki, minimize edilmesi gereken basit bir fonksiyonumuz var:

Bunu minimize etmek istiyoruz ve bizim çözüm uzayımız x∈[−10,10].

Çözüm uzayında sonuca yani 0'a yakınsamaya çalışıyoruz.


Özellikle karmaşık problemlerde, klasik algoritmaların sonuç veremediği durumlarda iterasyonlar boyunca dene-yanıl mantığı kullanarak sezgisel bir yaklaşım sergiliyoruz. İşte bu da tam olarak meta-sezgisel algoritma oluyor.


Jaya Algoritması ve Adımları


Sanskritçede "zafer" anlamına gelen jaya, 2016 yılında Hindistan kökenli bir akademisyen olan Rao R. Venkata tarafından önerilmiştir. Bu algoritmanın temel felsesi şu şekilde açıklanabilir:


" Popülasyon içindeki her bireyi en iyi çözüm yönünde iyileştirirken en kötü çözümden uzaklaştır."


Şimdi de bu algoritmanın adımlarını inceleyelim:


1) Çözüm uzayının sınırlarını belirle ve rastgele bir çözüm popülasyonu oluştur.


2) En iyi ve en kötü çözümleri belirle


3) Çözümleri güncelle


Her birey aşağıdaki formülle güncellenir:


Burada:


4) Yeni çözümleri mevcut çözümlerle karşılaştır, daha iyi çözümleri popülasyona dahil et


5) Durdurma kriterine ulaşılana kadar tekrarla



Jaya Algoritması Örneği


Genelde yeni bir algoritma ile ilgilenirken birkaç iterasyonu oturur kendim çözerim, aşağıda jaya algoritması için basit bir örnek çalışmam mevcut. Umarım konuyu daha iyi kavramamıza yardımcı olur.



Çok Boyutlu Optimizasyon Problerinde Jaya Algoritmasının Kullanımı


 



import numpy as np


def jaya_algorithm(obj_function, dim, bounds, population_size, max_iter):

# cozum uzayinin sinirlarina gore baslangic populasyonu olustur

population = np.random.uniform(

[b[0] for b in bounds],

[b[1] for b in bounds],

(population_size, dim)

)

for iteration in range(max_iter):

# populasyonun uygunluk degerlerini belirle (her birinin fitness value'su)

fitness = np.apply_along_axis(obj_function, 1, population)

# en iyi ve en kotu cozumu belirle

best_idx = np.argmin(fitness)

worst_idx = np.argmax(fitness)

best_solution = population[best_idx]

worst_solution = population[worst_idx]

# cozumleri formule gore guncelle

# x_new = x_old + r1*(x_best-abs(x_old)) - r2*(x_worst-abs(x_old))

for i in range(population_size):

r1, r2 = np.random.rand(), np.random.rand()

new_solution = (

population[i]

+ r1 * (best_solution - abs(population[i]))

- r2 * (worst_solution - abs(population[i]))

)

# yeni cozum, cozum sinirlari icerisinde mi kontrol et

new_solution = np.clip(new_solution, [b[0] for b in bounds], [b[1] for b in bounds])

# Yeni çözüm eski cozumden iyiyse güncelle

if obj_function(new_solution) < obj_function(population[i]):

population[i] = new_solution



best_value = obj_function(best_solution)

return best_solution, best_value



# Ornek amac fonksiyonlarimiz (fitness func)


# sphere en klasik optimizasyon problemidir

# kisaca f(x) = ∑ (x_i)^2

# bunu da bir minimizasyon problemi olarak degerlendiriyoruz 0 yakinsiyoruz

def sphere_function(x):

return np.sum(x**2)



sphere_function_dim = 5

bounds = [(-5, 5) for _ in range(sphere_function_dim)]

population_size = 20

max_iter = 100


best_solution, best_value = jaya_algorithm(sphere_function, sphere_function_dim, bounds, population_size, max_iter)

print(f"Best Solution: {best_solution}")

print(f"Best Value: {best_value}")


49 görüntüleme0 yorum

Son Yazılar

Hepsini Gör

Comments


bottom of page