Sıcaklık kontrollü olasılıkla kötü hamleleri de kabul ederek lokal optimumlardan kaçmaya çalışan stokastik optimizasyon yöntemidir.
Simulated annealing, metalurjide kontrollü soğutma fikrinden esinlenir. Başlangıçta sıcaklık yüksek tutulur ve arama daha geniş hareket eder; sıcaklık düştükçe kötü hamleleri kabul etme olasılığı azalır.
Kirkpatrick, Gelatt ve Vecchi çalışması bu analojiyi büyük ve karmaşık optimizasyon problemleri için çerçeve haline getirir.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1function acceptMove(delta: number, temp: number): boolean {2 return delta <= 0 || Math.random() < Math.exp(-delta / temp);3}4function simulatedAnnealing(start: number, target: number): number {5 let current = start, best = current, temp = 10.0;6 const coolingRate = 0.95;7 while (temp > 0.01) {8 const candidate = current + (Math.random() < 0.5 ? -1 : 1);9 const delta = Math.abs(target - candidate) - Math.abs(target - current);10 if (acceptMove(delta, temp)) {11 current = candidate;12 if (Math.abs(target - current) < Math.abs(target - best)) { best = current; }13 }14 temp *= coolingRate;15 }16 return best;17}Başlangıç ve hedef değerini girin. Örnek: 0; 37
Başlangıç ve hedef değerini girin. Örnek: 0; 37
En İyi Durum: O(I * C)
Ortalama Durum: O(I * C)
En Kötü Durum: O(I * C)
O(1) - Giriş boyutu ne olursa olsun, algoritma her zaman aynı sürede çalışır.
Simulated Annealing Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar:
Popülasyon tabanlı evrimsel arama yapar.
Komşu çözümler arasında iyileştirme arayan temel yöntemdir.
Komşuluk hamleleriyle rota iyileştiren sezgisel optimizasyon yaklaşımıdır.