You are on page 1of 19

Ders-7 ve Ders-8 Genel Açıklama

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

 Durum = bir gurup “tam düzenek" = Çözüm


 Her durum kötü de olsa bir çözüm olarak görülür. Amaç,
çözümler arasında en iyi olanı bulmaktadır. En iyi çözüm,
kısıtlamaları tatmin eden ve performansı maksimize edendir.
 Mevcut çözümün ne kadar iyi olduğunu yine sezgisel
yaklaşımlarla (değerlendirme fonksiyonu f) tahmin edebiliriz
 Böyle durumlarda, yerel arama algoritmaları kullanırız. Akış şu
kildedir : Gelişigüzel bir başlangıç durumla başla, “mevcut durumu"
sakla ve geliştirmeye çalış
Örnek: n-vezir
 n tane veziri, birbirini tehdit etmeyecek şekilde
yerleştir (aynı satır,kolon yada çaprazda iki ve üstü
vezir olamaz)
 Gelişigüzel bir başlangıç yap ve iyileştir.

 İyileştirmek kısıtlamaları tatmin etmek demektir: üst


satırda 2 vezir tehdit ediliyor..Tatmin et !
Hill-climbing (Tepe-Tırmanma) Arama

 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
mevcutNode_Yarat(problem.Baslangıc_Durum)
Loop do
komsumevcutun_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

 h = birbirini tehdit eden ikili vezir sayısı


 h = 17 (yukarıdaki durum için)
 Amaç h=0 durumunu yakalamak.
 Zirveye tırmanma ile en-dip yeri bulma arasında, mantıksal fark yoktur
 Basit bir f (değ. fonk.) , örneğin f=sabit – h ile dip bulma, zirve bulmaya
dönüştürülebilir
 Yada h : birbirini tehdit etmeyen ikili vezir sayısı olursa dip bulma zirve bulmaya
dönüşür
Hill-climbing arama: 8-vezir problemi

 h = 1 ile yerel minimum h=0 yapan eylem var mı ?, hayıryerel min.


saplanma var
 Belki iyi bir başlangıç seçilse durum farklı olabilirdi !
Simulated annealing (Benzetimli Tavlama)
Ana fikir : Yerel optimumdan kaçmak için, istenmeyen hareketlere izin verilmesidir. Zaman içinde bu
aramahareketlerin sayısı kademeli olarak azaltılır.

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

• Satıcı toplam tur mesafesi minumum olacak şekilde, bir şehirden


başlayıp her şehre uğrayarak başladığı şehre geri gelmek zorunda
• Sıradan yaklaşımla, 3 şehir için iç içe 3 loop gerekir  3*2*1=3!
farklı rota sayısı eder
• 20 şehir için düşünürsek: 20! = 2432902008176640000 (hesabı
mümkün değil)  Problem NP (None Polynomial Time) zorluktadır.

13
Benzetimli Tavlama örnek: Gezgin Satıcı Problemi

14
Gezgin satıcı probleminin Benzetimli Tavlama ile python
çözümü (düşük seviyede)

Size verilen simulanneal.py


üzerinden anlatılmıştır!

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.

2) Değerlendirme Fonksiyonunu kodlama


simple_objective.m isminde bir matlab dosyası yaratalım ve aşağıdaki fonksiyonu ekleyelim.
function y = simple_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;

3) SIMULANNEALBND fonksiyonu ile optimizasyonu gerçekleştirelim


Amaç fonksiyonu verilen problemi optimize etmek demek, amaç fonksiyonunu minumum yapan
x durumunu bulmak demektir.
ObjectiveFunction = @simple_objective;
X0 = [0.5 0.5]; % x0, başlangıç durum
[x,fval,exitFlag,output] = simulannealbnd(ObjectiveFunction,X0)
Dönen önemli değerler:
x: optimizasyon sonucu bulunan en iyi çözüm
fval= degerlendirme_fonk(x) yani bulunan en iyi çözüme karşılık gelen f değeri

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;

2) SIMULANNEALBND fonksiyonu ile optimizasyonu gerçekleştirelim


x durumu 2 bileşene sahipti. Herbir bileşen için alt ve üst sınır tanımlanabilir. Durum x in herbir
bileşeni -64 ve 64 aralığında olacak diyorsak, -64 <= x(i) <= 64.
ObjectiveFunction = @basit_objective;
X0 = [0.5 0.5]; % X0, başlangıç durum olsun
as=[-64 -64]; % [x(1) x(2)] bileşenleri için alt sınır aralığı
us=[64 64]; % [x(1) x(2)] bileşenleri için üst sınır aralığı
[x,fval,exitFlag,output] = simulannealbnd(ObjectiveFunction,X0,as,us);
fprintf('Toplam iterasyon sayısı : %d\n', output.iterations); % dönen değerleri yazdıralım
fprintf(' Toplam değerlendirme sayısı: %d\n', output.funccount);
fprintf(‘ En iyi bulunan fonksiyon değeri : %g\n', fval);
Ekran Çıktısı:
Toplam iterasyon sayısı : 2428
Toplam değerlendirme sayısı: 2447
En iyi bulunan fonksiyon değeri : -1.03163

17
Matlab ile Simulated annealing
(Objective fonksiyona extra parametre tanımlama)

1) Değerlendirme Fonksiyonu x dışında extra parametreye sahip olsun


parametreli_objective.m isminde bir matlab dosyasına aşağıdaki fonksiyonu ekleyelim.
function y = parametreli_objective(x, a,b,c)
y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) +(-c + c*x(2)^2)*x(2)^2;

2) SIMULANNEALBND fonksiyonu ile optimizasyonu gerçekleştirelim


x herhangi bir sınır kısıtlamasına sahip değil

a = 4; b = 2.1; c = 4; % extra parametrelerin değerlerini ata


ObjectiveFunction = @(x) parametreli_objective(x,a,b,c); %x çözüm uzayının değişkeni
X0 = [0.5 0.5]; % X0, başlangıç durum olsun
[x,fval] = simulannealbnd(ObjectiveFunction,X0)

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

You might also like