Professional Documents
Culture Documents
Ders-7 ve Ders-8 ortak yanı kapsanan arama algoritmaları en iyi eylem dizisini arıyor. Yani,
Problemde net bir başlangıç durum ve eylem tanımı var. Arama alogritmalarının iskelet
yapısı aynı sadece kuyrukta sıralama stratejileri farklı.. Algoritmaların çalışması neticesinde
bir ağaç yapısı oluşuyor. Bu ağaca arama ağacı deniyor. Bu ağaç, ajanın keşfettiği durumları
düğüm olarak ekleyerek genişliyor.
İki dersin temel farkı : ilkinde bilgisiz(kör) arama alagoritmaları (enlemesine, derinlemesine
arama, v.b) , ikincisinde ise bilgili arama algoritmaları kullanılıyor. Bilgili arama
algoritmaları, verilen durumun hedefe ne kadar yakın olduğunu (örneğin tahmini yada
sezgisel olarak) ölçebilir. Yani, bilgili ifadesi hedef duruma yakınlığı bilmeyle ilgilidir. Bu
algoritmalar, değerlendirme (yada amaç fonk.) fonksiyonu ile hedefe yakınlığı ölçer.
Benzetme yapmak gerekirse, değerlendirme fonksiyonu bir pusula gibidir. Kısmi bir bilgi
verir ama nokta atışı hedefe nasıl gideceğimizi bildirmez.
Ders-8 ve Ders-9 Genel Açıklama
Ders-8 ve Ders-9 un ortak özelliği, her iki dersteki algoritmalar bilgili arama yapıyor. Bilgili arama
yöntemleri, verilen durumunun, ne kadar iyi olduğunu ölçebilen bir amaç fonksiyonu (objektif fonk)
kullanıyor. Daha önce bahsedildiği üzere amaç fonksiyonu sezgisel (heuristik) olabiliyor. Ders-9 ve
sonrasında göstereceğimiz Arama Algoritmaları (Tepe Tırmanma, Benzetimli Tavlama, Genetik
Algoritma, Karınca Koloni ve Arı Koloni) hepsinde objektif fonksiyon kullanımı var fakat farklı isimlerde
geçebiliyor(esinlenilen yaklaşıma göre adı değişsede fikirsel olarak verilen bir çözümün ne kadar iyi
olduğunu ölçebiliyor)
Ders-8 ve Ders-9 un temel farkı, ilkinde en iyi eylem dizisi, ikincisinde en iyi hedef
durum aranmaktadır. Şöyleki; Ders-8 deki arama algoritmaları, bir eylem dizisinin arandığı
problemlerle ilgilenir (8-puzzle gibi). Bu tip problemlerde, başlangıç durum, eylemler(izleyen fonk) ve
hedef durumla ilgili bilgi vardır. Hedef durum bazen açık (8-puzzle gibi) yada bazende fonksiyon olarak
(kısıtlarla) tanımlı olabilir. Örneğin, baçlangıç durumlu 8-vezir probleminde, başlangıç durumdan hedefe
götüren eylem dizisi aranmaktadır fakat hedef durum açık olarak verilmeyip, kısıtlarla tanımlanmıştır.
Çözüm için, Açgözlü yada A* aramada kısıtların ne kadar tatmin edildiğini ölçen sezgisel fonksiyon h(x)
hedefe yakınlığı ölçer ( hatırlatma: birbirini tehdit eden ikili vezir sayısı bir heuristik olabilir) öyle ki Hedefe
ulaşıldığında h(x) sıfır olur. Yani, hedefe varılıp, varılmadığı h(x) değerine bakarak anlaşılabilir. Burada
amaç hedef durumu bulmak değil, hedef duruma götüren en iyi eylem dizisini bulmaktadır.
Ders-9 Genel Açıklama
Ders-9 daki arama algoritmalarıda amaç en iyi hedef durumu bulmaktadır. Burada Algoritmalar, Eylem
dizisi yerine hedef durumun kendisinin arandığı problemlerle ilgilenir (n-vezir problemi gibi) . Bu tip
problemlerde başlangıç durum ve hedef durum açık olarak verilmez. Hedef durum genelde kısıtlarla
tanımlıdır. Amaç kısıtları tatmin eden hedef durumu bulmaktır. Örneğin, sıradan 8-vezir probleminde,
eylem dizisi aramıyoruz, 8 adet vezirin birbirini tehdit etmediği bir düzenek(çözüm) arıyoruz.
Ders-9 daki algoritmaların genel adı yerel arama algoritmaları diye geçiyor. Bu
algoritmalarda durum=çözüm mantığı takip ediliyor. Yani, Ajanın algı ve eylemleri soyutlanır (detay
olarak görülür ) ve çözüme odaklanılır. Çözüm uzayında izleyen fonksiyonu bir durumdan
(çözümden) diğerine sıçrama yapar. Artık izleyen fonksiyonu Ders-8 deki gibi ajanın eylemine
bağlı değil, esinlenilen algoritmanın random yaklaşımına bağlıdır.
Yerel Arama Algoritmaları kabaca şöyle çalışır: gelişigüzel bir başlçagıç çözümle başlar, iteratif
olarak iyileştirir. . çözümü iyileştirme süreci, mevcut çözümün izleyenlerinin bulunması ve iyi olan
çözümlerin korunması mantığına dayanır.
Yerel Arama Algoritmaları
Birçok optimizasyon problemlerinde, hedefe olan yol çözümle
ilişkisizdir; hedef durumun kendisi çözümdür.
Böyle problemlerde başlangıç durumunu, problem direk
belirtmez.
Gelişigüzel bir başlangıç seçilir
Yogun bir siste, Everest Dagına tırmanmaya benzer. Amaç zirveye ulaşmaktır. Fakat,
mevcut durumdan sadece gidilebilecek yerel alan görünür.
Sonraki durum, o an için görünen en yüksek tepedir. Tepeye ulaştığında, daha yüksek
bir tepe görünmezse çözümdür.
Ana düsünce : Her zaman, simdiki degerlendirmeyi en fazla gelistiren yönde adım at.
En iyi öncelikli aramaya (Best first search) benzer. Ama açılan düğümleri kuyruğa atmaz.
Bellek çok az kullanır.
Hill-climbing (Tepe-Tırmanma) Arama
function Tepe_Tırmanma(problem) return yerel optimum durum
değişkenler : mevcut, bir düğüm
komsu, bir düğüm
mevcutNode_Yarat(problem.Baslangıc_Durum)
Loop do
komsumevcutun_en_yüksek_değere_sahip_izleyeni(mevcut)
If komsu.deger ≤ mevcut.deger Then
return mevcut.durum
mevcut komsu
İki temel fonksiyon : izleyen fonk ve değerlendirme fonk
İzleyen (successor) fonksiyonu, mevcut çözümü geliştirip sonraki olası durumları (çözümleri) üretir. Bu çözümlerden en iyisi
komsu olarak seçilir.
Değerlendirme fonksiyonu f, her bir düğümün ne kadar iyi olduğunu değerlendirir. Yukarda, her bir düğümün değerledirilmesi
dugum.deger olarak kaydedilmiştir. Yani, komsu.deger = f(komsu.durum).
Hill-climbing Arama
Sıkıntı: seçilen başlangıç durumuna bağlı olmakla
birlikte, yerel optimumlarda (local max yada min)
saplanabilir
Hill-climbing arama: 8-vezir problemi
istenmeyen
Esinlenme : metalurjik bir materyalin, ısıtma ve kontrollü soğutma işlemiyle önce kristal atomlarını
hareketlendirme(sayısını arttırma) ve sonra zararlı etkilerini yok etmek için yavaşça soğutma mantığına
dayanır.
Random hareket olasılığını kontrol eden T (Temperature) parametresi yüksekten başlatılıp, yeterince
yavaş azaltılırsa, en iyi çözüme ulasılması garantilenir.
4 önemli fonksiyon : sıcaklık_fonk, değerlendirme fonk, izleyen fonk, kabul_etme fonk
i)Sıcaklık fonk zaman içinde sıcaklığın değişimini tanımlar, ii)İzleyen fonk sonraki duruma karar verir.iii) Değerlendirme fonk,
durumun ne kadar iyi olduğunu ölçer. iv) kabul fonk, izleyen tarafından üretilen sonraki durumu, belli bir olasılığa bağlı olarak
kabul eder (böyleliklte her zaman iyi hamle yapmaz).
Benzetimli Tavlama ile Arama
Kötü hareketler yerel optimumlara saplanmaktan kurtarabilir
Sıcaklık T yüksekken, algoritmanın daha sıklıkla kötü hamlelere (daha
düşük f değerine) izin vermesi beklenir. Sıcaklık düştükçe, bu hamlelerin
sayısı ve etkisi azalır
Benzetimli Tavlama örnek: Gezgin Satıcı Problemi
13
Benzetimli Tavlama örnek: Gezgin Satıcı Problemi
14
Gezgin satıcı probleminin Benzetimli Tavlama ile python
çözümü (düşük seviyede)
15
Matlab ile Simulated annealing (Kısıtlamasız Problem Örneği)
1) Değerlendirme Fonksiyonu verilen bir Problem var
(Değerlendirme Fonk=Objective Function = Amaç Fonksiyonu = Maliyet Fonksiyonu)
Değerlendirme fonksiyonu f(x) olarak verilen problemde, x = (x1, x2) olarak 2 değişkenle
tanımlanmış herhangi bir durumu göstersin. f(x) ‘i minumum yapan x değerini bulacaz.
16
Matlab ile Simulated annealing (Sınır Kısıtlamalı Problem Örneği)
1) Değerlendirme Fonksiyonu aynı olsun
basit_objective.m isminde bir matlab dosyası aşağıdaki fonksiyonu içermiş olsun.
function y = basit_objective(x)
y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 + 4*x(2)^2)*x(2)^2;
17
Matlab ile Simulated annealing
(Objective fonksiyona extra parametre tanımlama)
Ekran Çıktısı:
18
Matlab ile Simulated Annealing : Varsayılan Ayarları Değiştirme
secenek=saoptimset(‘param1',deger1,‘param2',deger2,...)
Başlangıç sıcaklık değerini değiştirme
secenek = saoptimset('InitialTemperature',300); VEYA
secenek.InitialTemperature = 300;
Sıcaklık fonk tanımlama
secenek.TemperatureFcn = @temperaturefast;
Yeniden tavlama periyodunu tanımlama ( belli sayıda durumlar kabul edildikten sonra,sıcaklık
yeniden yükseltilir ki aramayı yeniden başlatmak ve yerel minumumdan kaçınmak için bu
düşünülebilir)
secenek.ReannealInterval = 50;
Kabul fonk tanımlama (sonraki durumun kabul edilme olasılığını tanımlar)
secenek.AcceptanceFcn = @acceptancesa;
İzleyen fonk tanımlama (sonraki durumu yada komşuyu üretir)
secenek.AnnealingFcn = @myfunction(optimValues,problemData);
Nihai olarak, [çözüm,...]=simulannealbnd(objective_function,baslangıc_durum,…,secenek)
19