Selam!
Parçacık Sürü Optimizasyonu (PSO), kuş sürülerinin hareketlerinden ilham alarak geliştirilen bir optimizasyon tekniğidir.
PSO, problemleri çözmek veya optimize etmek için kullanılır ve parçacıkların işbirliği yaparak en iyi sonuca ulaşmasına dayanır.
Parçacıklar, mevcut konumlarını güncellerken, en iyi sonuçları takip ederler.
Matematiksel açıklaması
Konum: [imath]xi⃗[/imath]
Hız: [imath]vi⃗[/imath]
En İyi Konum: [imath]pi⃗[/imath]
En İyi Değer: [imath]f(pi⃗)[/imath]
En İyi Konum:[imath]g⃗[/imath]
En İyi Değer: [imath]f(g⃗)[/imath]
Hız Güncelleme :[imath]vi (t+1)=wvi (t)+c1r1(pi −xi (t))+c2r2(g −xi (t))[/imath]
Konum Güncelleme :[imath]vi (t+1)=wvi (t)+c1r1(pi −xi (t))+c2r2(g −xi (t))[/imath]
burada:
[imath]w[/imath], ağırlık faktörü (inertia weight)
[imath]c1[/imath] ve [imath]c2[/imath], bilişsel ve sosyal bileşen katsayıları
[imath]r1[/imath] ve [imath]r2[/imath], rastgele sayılar (0 ile 1 arasında)
Aşağıda, bir amaç fonksiyonunu minimize etmek için PSO'yu kullanan basit bir Python kodu bulunmaktadır:
Parçacık Sürü Optimizasyonu (PSO), kuş sürülerinin hareketlerinden ilham alarak geliştirilen bir optimizasyon tekniğidir.
PSO, problemleri çözmek veya optimize etmek için kullanılır ve parçacıkların işbirliği yaparak en iyi sonuca ulaşmasına dayanır.
Parçacıklar, mevcut konumlarını güncellerken, en iyi sonuçları takip ederler.
Matematiksel açıklaması
Konum: [imath]xi⃗[/imath]
Hız: [imath]vi⃗[/imath]
En İyi Konum: [imath]pi⃗[/imath]
En İyi Değer: [imath]f(pi⃗)[/imath]
En İyi Konum:[imath]g⃗[/imath]
En İyi Değer: [imath]f(g⃗)[/imath]
Hız Güncelleme :[imath]vi (t+1)=wvi (t)+c1r1(pi −xi (t))+c2r2(g −xi (t))[/imath]
Konum Güncelleme :[imath]vi (t+1)=wvi (t)+c1r1(pi −xi (t))+c2r2(g −xi (t))[/imath]
burada:
[imath]w[/imath], ağırlık faktörü (inertia weight)
[imath]c1[/imath] ve [imath]c2[/imath], bilişsel ve sosyal bileşen katsayıları
[imath]r1[/imath] ve [imath]r2[/imath], rastgele sayılar (0 ile 1 arasında)
Aşağıda, bir amaç fonksiyonunu minimize etmek için PSO'yu kullanan basit bir Python kodu bulunmaktadır:
PSO Kod Örneği:
import random
class Particle:
def __init__(self, bounds):
self.position = [random.uniform(bounds[0], bounds[1]) for _ in range(len(bounds))]
self.velocity = [random.uniform(-1, 1) for _ in range(len(bounds))]
self.best_position = self.position[:]
self.best_value = float('inf')
def objective_function(x):
return sum([x_i**2 for x_i in x])
def update_velocity(particle, global_best, inertia_weight, cognitive_weight, social_weight):
for i in range(len(particle.position)):
r1, r2 = random.random(), random.random()
cognitive_component = cognitive_weight * r1 * (particle.best_position[i] - particle.position[i])
social_component = social_weight * r2 * (global_best[i] - particle.position[i])
particle.velocity[i] = inertia_weight * particle.velocity[i] + cognitive_component + social_component
def update_position(particle, bounds):
for i in range(len(particle.position)):
particle.position[i] += particle.velocity[i]
particle.position[i] = max(bounds[0], min(bounds[1], particle.position[i]))
def particle_swarm_optimization(objective_function, bounds, num_particles, num_iterations, inertia_weight, cognitive_weight, social_weight):
swarm = [Particle(bounds) for _ in range(num_particles)]
global_best = None
global_best_value = float('inf')
for iteration in range(num_iterations):
for particle in swarm:
value = objective_function(particle.position)
if value < particle.best_value:
particle.best_position = particle.position[:]
particle.best_value = value
if value < global_best_value:
global_best = particle.best_position[:]
global_best_value = value
for particle in swarm:
update_velocity(particle, global_best, inertia_weight, cognitive_weight, social_weight)
update_position(particle, bounds)
return global_best, global_best_value
bounds = (-10, 10) # Arama uzayı sınırları
num_particles = 30
num_iterations = 100
inertia_weight = 0.5
cognitive_weight = 1.5
social_weight = 1.5
best_solution, best_value = particle_swarm_optimization(
objective_function, bounds, num_particles, num_iterations, inertia_weight, cognitive_weight, social_weight
)
print("Optimal Solution:", best_solution)
print("Optimal Value:", best_value)
Son düzenleme: