Parçacık Sürü Optimizasyonu (PSO)

nt

Emekli
Katılım
21 Nisan 2023
Mesajlar
1,221
Selam!
Firefly machines herding future is dirty and dark 35203.jpg
cekirge_.jpg
Firefly drones flock flying future is dirty and dark 76586.jpg

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:
Paylaşım için teşekkürler. Böyle bir kodun ve işin simülasyonu nasıl ve hangi ortamlarda yapılıyor?
 
  • Beğen
Reactions: nt
@tekosis
elinde birden çok otonom araç varsa(drone, süpürge, hareketli robotlar onlara uygulayabilirsiniz)
5-10 droneun a noktasından b noktasına beraber karar alıp gittikleri bir yöntem
100 yıl kutlamalarındaki drone hareketlerinin baz alındıgı algoritmadır
 
Son düzenleme:
Optimizasyonla ilgili olarak birşey sorayım:
Örneğin 6 metre uzunluğunda imal edilmiş yüzlerce boru var.
Elimizde de farklı boyutlarda onlarca kesilecek ölçüler var.

Bunları en uygun (En az fire olacak) şekilde kesmenin algoritası nası olmalı?
Yada örneğin Excelde bu nasıl yazılabilir?
 
Optimizasyonla ilgili olarak birşey sorayım:
Örneğin 6 metre uzunluğunda imal edilmiş yüzlerce boru var.
Elimizde de farklı boyutlarda onlarca kesilecek ölçüler var.

Bunları en uygun (En az fire olacak) şekilde kesmenin algoritası nası olmalı?
Yada örneğin Excelde bu nasıl yazılabilir?
imalat ile uğraşan arkadaşlar daha iyi bilir kesim olayını ben koddan ilerisini bilmiyorum
 
Optimizasyonla ilgili olarak birşey sorayım:
Örneğin 6 metre uzunluğunda imal edilmiş yüzlerce boru var.
Elimizde de farklı boyutlarda onlarca kesilecek ölçüler var.

Bunları en uygun (En az fire olacak) şekilde kesmenin algoritası nası olmalı?
Yada örneğin Excelde bu nasıl yazılabilir?
"Kutu Paketleme Sorunu" imiş bu problem (bin packing problem). Excelde algoritmasından başlayıp kolayca çözüm üretmek mümkün değil.

Şöyle bir bağlantı buldum:


Algoritmalarla falan uğraşmıyorsun, problemi modelleyip programa veriyorsun sonuçları alıyorsun. Boru dilimleme sorunu, kutu paketleme sorununun aynısı. paket büyüklükleri kesilecek boylar, kutu büyüklüğü: 6m boru.
 
Semih hocam Merhaba,
Söylediklerinize aynen katılıyorum Çünkü bu konuyu 2-3 yıl önce araştırdığımda ,3 boyutlu bir optimizasyon hakkında çalışmaları olan Norveç yada İsveç de bir üniversite'de doktorasını yapan( yada Doçent de olabilir tam hatırlamıyorum) bir Türk'e ulaşmış ve sormuştum.Özetle karmaşık bir konu olduğundan bahsetmişti.
Excel de basit optimizasyonlar için komutlar ve fonksiyonlar var ama konuyu iyi bilmek birkaç optimizasyon türünden hangisini kullanacağını bilmek gerekiyor.
Youtube da 2-3 türk videosu var .Excelle bazı optimizasyon sorularını çözüyorlar.Ancak konuyu anlatanların, da konu hakkında çok bilgi sahibi olduklarıda yok.Çünkü aynı adımlarla gidince anlatıklarıyla çözülmüyor.
Yani soru basit ama konu çok karmaşık
 
@Omega sizin problemin bir üst versiyonunu mobilyacılar kullanıyor. Tabak suntadan en az fire ile boyutları belli parçaları en az fire ile çıkarmak için kullanılıyor. Ayrıyeten sunta kesimde şöyle bir durum var. Parça 60cm ise 60cm tabak boyunda kesiliyor. Yaruya kadar keseyim kalanını farklı kalınlıkta keserim olayı da yok. Tabi ek yapma şansı da :dusun2:

Bu sayfada çeşitli kesim optimizasyonları ile ilgili tartışma, çözüm önerileri ve satış ile ilgili postlar var
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,951
Mesajlar
118,753
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top