Yapay Zeka DR.KORHAN KAYIŞLI
A* Algoritması Sezgisel bilgilerin kullanımında değer fonksiyonunun bilinmesi ve belirlenmesi büyük önem taşımaktadır. Bu fonksiyon, durumları ifade eden çözüm grafı üzerinde verilmiş başlangıç durumdan hedefe ulaşmak için gereken minimum yolun bulunmasında daha az tarama yapmaya olanak tanımalıdır.
A* Algoritması Değer fonksiyonlarının belirlenmesinde farklı yaklaşımlar vardır. Değer fonksiyonlarına örnek olarak; Düğümün çözüme dahil olmasının olasılık değerlendirilmesi, Verilmiş düğümden hedefe olan uzaklık Diğer farklılık ölçütleri gösterilebilir.
A* Algoritması Problem çözümünde sonuca ulaşmak için düğümlerin seçilmesinde bu düğümlerin sıralanmasını sağlayan bir f fonksiyonu olduğunu varsayalım. Herhangi x düğümünün fonksiyon değeri, f(x) ile ifade edilsin. Bu fonksiyon, x düğümünden geçmek şartı ile başlangıç düğümden hedefe olan yollar içerisinden minimum olanının değerlendirilmesine karşılık gelmektedir. Açılması gereken düğümler burada f fonksiyonunun artışına göre sıralanmaktadır ve sıralı arama algoritmaları olarak bilinmektedir.
A* Algoritması Sıralı arama algoritmaları: Başlangıç durum çözüm ağacının köküne yerleştirilir ve geçerli gidişler ve operatörlerle bu durumdan mümkün olan yeni durumlar - ”çocuklar” elde edilir. Çocuk düğümler için f(xi) fonksiyon değerlendirmesi yapılarak minimum değerli düğüm seçilir aynı değere sahip olan birkaç düğüm varsa bu düğümler içerisinden operatörlerin kullanım sırasına göre herhangi birisi seçilir.
A* Algoritması Açılan minimum değerli düğümün benzeri şekilde, çocuk düğümlerinin değerlendirilmesi yapılır. O anki düğümden yeni bir çocuk düğüm elde edilemiyorsa (önce açılmış bir duruma rastlanırsa) ve henüz hedefe erişilmemişse üst seviyeye geri dönülerek arama yönü, minimum olan fonksiyon değerine göre değiştirilir. İşlemler hedefe ulaşılıncaya kadar tekrarlanır. Hedef bulunmuşsa başlangıç durumundan hedefe olan yol çözümü verir.
A* Algoritması Sıralı algoritmanın çalışma mantığı; Ormanda yol bulma örneği: Bir ormanda yolu kaybettiğinizi düşünün. Doğal olarak sonunda nereye erişmeniz gerektiğini bilmektesiniz (Bu hedef durumunuzdur). Çıkış için dağları, çayları değil de daha kolay geçilebilin yolları seçmektesiniz. Şayet bu seçimler sonucunda tekrar önce bulunduğunu herhangi bir yere erişirseniz, en iyi çözüm bu noktaya vardığınız yere tekrar geri dönerek başka bir yön seçmeniz olacaktır. Dolayısıyla algoritma bir pusula gibi çalışarak hedefe olan yolu belirlemektedir. Hedeften sapmalar olursa, pusula rolünü üstlenen değer fonksiyonu yeni ayarlama yapmaktadır.
Sezgisel çözümlemenin açıklanması A* Algoritması Yöntemde minimum yol bilinmemektedir. Bu yol başlangıç durumundan bulunduğumuz duruma kadar bilinen ve bulunulan durumdan hedefe kadar tahmin edilecek bileşenlerden oluşmaktadır. Sezgisel çözümlemenin açıklanması
A* Algoritması Eğer başlangıç s düğümünden x düğümüne kadar olan yolu g(x) ile, x düğümünden f hedef düğümüne kadar olan yol değerini h(x) ile ifade edersek A* algoritması denilen sezgisel arama için aşağıdaki bağıntı elde edilir. f(x)=g(x)+h(x) Burada g(x), x durumunun gerçek olan o anki değeridir, h(x) ise x düğümünden çözüme olan gidişlerin sezgisel değeridir.
A* Algoritması g(x) değeri, genellikle başlangıç düğümden x düğümüne olan dolaysız uzaklığı ifade etmektedir. h(x)’ in kesin değeri bilinmemekte ve yerine, sezgisel bir yaklaşımla hesaplanan h(x) değeri kullanılmaktadır. Bu fonksiyon, iyi bir değerlendirme sonucu hedefe yaklaştıkça daha küçük, uzaklaştıkça daha büyük değerler oluşturmaktadır. Yani seçilen sezgisel fonksiyon hedefe ulaşmayı hızlandırma bakımından bir öneme sahiptir.
A* Algoritması Kötü seçilmiş sezgisel fonksiyonlarda daha çok tarama ile sonuca ulaşılabilir. Hart, Nilson, Rafael, tarafından önerilen A* Algoritması’ nın (1968-1972) genel biçimi Pohl tarafından verilmiştir f(x)=α.g(x)+(1-α).h(x) Burada α, 0α1 α nın büyük değerleri için daha çok enine ve küçük değerleri için daha çok derinine arama yapılır.
A* Algoritması α değeri problemin beli aşamalarında aramayı yönlendirmek için kullanılabilir. A* Algoritması için α=0.5 alınır ve bu durumda f(x)=0.5.g(x)+0.5.h(x) α= 0 durumu saf gradyan yöntemine, α= 1 ise çözüm ağacının tam taranmasına karşılık gelmektedir.
A* Algoritması Bilgisayar bilimlerinde en kısa yol bulmak için kullanılan algoritmalardan birisidir. Örneğin seyyar tüccar problemi (travelling salesman problem, TSP) gibi bir problemin çözümünde kullanılabilir. Benzer şekilde oyun programlamada, oyunda bulunan oyuncuların en kısa yolu bularak hedefe gitmeleri için de sıklıkla kullanılan algoritmadır. Kısaca bir düğümden (node) hedef bir düğüme (target node) en kısa hangi düğümler üzerinden gidileceğini bulmaya yarayan “en iyi yerleştirme (best fit)” algoritmasıdır.
A* Algoritması A* algoritması yapı olarak muteber(geçerli, güvenilir) sezgisel (admissable heuristic) bir algoritma olarak sınıflandırılabilir. Bunun sebebi algoritmasının mesafe hesaplamada kullandığı fonksiyondur: f(n) = g(n) + h(n) denklemindeki; f(n) =hesaplama yapan sezgisel (heuristic) fonksiyon. g(n) =başlangıç düğümünden mevcut düğüme kadar gelmenin maliyeti h(n) = Mevcut düğümden hedef düğüme varmak için tahmin edilen mesafe. Dikkat edileceği üzere f(n) fonksiyonunun sezgisel olma sebebi, bu fonksiyon içerisinde bulunan ve tahmine dayalı olan h(n) sezgisel fonksiyonudur.
A* Algoritması Algoritmanın çalışması: Algoritma yukarıdaki toplama işlemini kullanan oldukça basit bir yapıya sahiptir. Veri yapısı olarak bir öncelik sırası (priority queue) kullanan algoritmada en öncelikli olan düğüm f(n) değeri en düşük olan düğümdür. Algoritma her adımda en düşük değeri (Ve dolayısıyla en önemli) düğümü alır (yani bu düğüme gider) ve düğümü sıradan (queue) çıkarır. Gidilen bu düğüme göre komşu olan bütün düğümlerin değerleri güncellenir (artık bu düğüme gelmenin bir maliyeti vardır ve dikkat edilirse f(n) fonksiyonu içerisinde bu değer yer almaktadır.) Algoritma yukarıdaki adımları hedefe varana kadar (yani hedef düğümü öncelik sırasında (priority queue) en öne gelene kadar) veya sırada (queue) düğüm kalmayana kadar tekrarlar.
A* Algoritması Örnek: 8 taş problemi üzerinde A* algoritmasının çalışmasının açıklanması. Problemde, verilen başlangıç durumdan hedefe ulaşmak için boşluğun yapması gereken en kısa hareket dizisinin bulunması istenmektedir. Boşluğun bir rakamla yer değiştirmek üzere hareket ettiğini düşünürsek, geriye hareketler yapılmadığı taktirde,
A* Algoritması Her durumda en çok 3 operatör vardır. 8 taş probleminde başlangıç durumundan hedef duruma ulaşmak için n minimum hareket sayısı, Problemin algoritma karmaşıklı O(3n) şeklinde belirlenir.
A* Algoritması 4 1 3 2 8 5 7 6
A* Algoritması Bu problem için çözüme on adımda ulaşılır. 310 =59049 farklı düğümün açılması anlamına gelir. Sezgisel yöntem kullanılmazsa bilgisayarda çok uzun zamanda çözüme ulaşılır.
A* Algoritması
A* Algoritması Burada her durum için f fonksiyonunun değeri, durumların yan taraflarında yuvarlak içerisinde verilmektedir. Minimum f fonksiyonu değerine sahip olan durum seçildikten sonra, operatörler uygulanarak çocuk düğümler açılır ve yeni fonksiyon değerleri hesaplanır. Sürekli olarak küçük değerli düğümler seçilerek hedefe varan çözüm aranır. Durumların üstlerinde kara içerisindeki sayılar ise düğümlerin açılma ardışıklığını ifade etmektedir. Örneğin 2. sırada açılan durum için derinlik g(x)=1 ve hedef durumunda yerinde olmayan taşlarının sayısını ifade eden h^(x) değeri 5 olduğundan f fonksiyonunun değeri 6’dır. İşlemler, f=7 olan sınır değeri aşılana kadar bu dalın çocukları boyunca devam ettirilmektedir. Örnekte herhangi bir derinlikte bu sınır değeri aşılsaydı, tekrar 2. seviyedeki (derinlik g=1) en sağ duruma geçilerek yeni sınır değeri 8 olarak belirlendikten sonra işlemler devam ettiriliecektir.
A* Algoritması
A* Algoritması