Tavlama Benzetimi (Simulated Annealing)

Merhaba,
Tavlama benzetimi algoritması kurmakta zorlanıyorum. Olayı, amaçları ve modellemeyi anladım. Fakat bir türlü koda dökemiyorum :smiley: çok zor olmadığı söylenmesine rağmen bir türlü kuramıyorum sistemi. bir adet fonksiyonum var. o fonksiyon sonucunda bir değer alıyorum. bu değerin minimize edilmesine yönelik bir çizelgeleme iyileştirmesi yapmak istiyorum. Fonnksiyon() ile hesaplama yapıyorum. sıralamayı değiştirip fonksiyona sokuyorum ve bir değer buluyorum. Ayrıca bir de örneğin 67 diye bir Eniyiçözüm başlangıcım ve bir sıralamam var.
Yani: 6 adet işin 5 makinede nasıl sıralanacağına dair en iyi sıralamayı yapmak istiyorum. Örneğin:
1-3-2-5-6-4 sıralaması 67 sonucunu veriyor. Bu sıralamayı tavlama benzetimi ile iyileştirip 67den daha iyi bir sonuç var ise nedir? sıralaması nedir cevabı alan bir uygulama yazmam gerekiyor. Yardımcı olabilirseniz çok mutlu olurum Şimdiden minnettarım :pray:

Muhtemelen kodunuzda hata veya eksik var, duzeltmek gerekecek. (bkz: Soru Sorarken Sıkça Düşülen Hatalar #5)

Onun disinda takip ettiginiz bir kaynak var mi? (#8)

Pseudo-koda dokebiliyor musunuz?

t = 1
s = ilk deger
t > 0 ise:
    ....
1 Beğeni

Tavlama Benzetimi kısmında kod yazmada sıkıntım var, hata yok = kod yok diyebilirim. fonksiyonum çalışıyor, sıralamayı yazdıktan sonra fonksiyonu çağırdığımda sonuç alıyorum. sıralama değiştirme mantığı, ve karar verme koşulları; bu kısımları çözemediğim için yazamıyorum. 6 iş için tüm ihtimalleri (6 faktöriyel=120 kez) hesapladığımda en iyi sonucu görebiliyorum. ama iş sayısı 100’e kadar çıkabilir. Bundan dolayı en iyi sonucu tavlama benzetimiyle aramak gerekiyor. Birkaç Pseudo-kod denedim, sonuç yok :frowning: Danışman hocamın eski bir çalışmasının Pseudo kodunu ekleyebilirim. Ama buna bağlı kalmak durumunda değilim. Cevabınız için minnettarım :pray:
pseudetç

Problem, simulated annealing’e uygun gozukuyor.

Resimdeki pseudo-kodun hayata gecmemesi normal, birden fazla hata goruyorum. Duzeltirsek veya Wikipedia makalesindeki veya webdeki orneklerin herhangi birinden gidersek aslinda disaridan saglanmasi gereken iki fonksiyon var: Biri optimize edilecek fonksiyon (C), digeri bu fonksiyonun girdilerinden birini alip bu girdinin rastgele bir “komsusunu” donduren fonksiyon (PERTURB).

Bunlardi yazdiktan sonra hazir bir kutuphane denenebilir. Sahsen simanneal ve scipy (.optimize.basinhopping) denedim, ikisi de calisti. Simanneal’in icinde ornek de var.

Bu arada TSP gibi permutasyon girdilerinde “komsuluk” bir yer degisimiyle tanimlanmis: A’nin herhangi birer i. ve j. elemanlarini birbirleriyle degistirdigimizde B olusuyorsa, A ile B komsu. Haliyle rastgele komsu ureten kod rastgele i ve j secip birbirleriyle degistiriyor.

1 Beğeni