1.19k likes | 2.39k Views
YAPAY ZEKA ve UZMAN SİSTEMLER. Ders Notu – 3.2 Bilgisiz (Kör) Arama Yöntemleri. Hatırla: Arama algoritmalarının uygulamaları. Function General-Search(problem, Queuing-Fn) returns a solution, or failure nodes make-queue(make-node(initial-state[problem])) loop do
E N D
YAPAY ZEKA ve UZMAN SİSTEMLER Ders Notu – 3.2Bilgisiz (Kör) Arama Yöntemleri
Hatırla: Arama algoritmalarının uygulamaları Function General-Search(problem, Queuing-Fn) returns a solution, or failure nodes make-queue(make-node(initial-state[problem])) loop do if nodes is empty then return failure node Remove-Front(nodes) if Goal-Test[problem] applied to State(node) succeeds then return node nodes Queuing-Fn(nodes, Expand(node, Operators[problem])) end Queuing-Fn(queue, elements) Kuyruğa elemanlar kümesi ekleyen ve düğüm genişletme sırasını belirleyen kuyruk fonksiyonudur. Farklı kuyruk fonksiyonlar farklı arama algoritmaları üretir.
Arama stratejilerinin değerlendirilmesi • Bir arama stratejisi düğüm genişletme sırasının seçilmesiyle belirlenir. • Stratejiler dört kritere göre değerlendirilebilir: • Tamlık (Completeness): Eğer çözüm varsa strateji çözümü garanti ediyor mu? • Zaman Karmaşıklığı (Time complexity): Çözümü bulmak ne kadar zaman alıyor? • Bellek Karmaşıklığı (Space complexity): Aramyı gerçekleştirmek için ne kadar bellek gerekiyor? • Optimallik (Optimality): Birden fazla çözüm olduğu zaman strateji en iyi olanını buluyor mu? (en düşük maliyetli çözüm) • Zaman ve bellek karmaşıklığı şu terimler cinsinden ölçülür: • b – arama ağazının maksimum dallanma faktörü • d – en düşük maliyetli çözümün derinliği • m – arama ağacının maksimum derinliği(sonsuz olabilir)
Bilgisiz arama • başlangıç durumu içeren elementi (ağacın kökü) seçmeli • listedeki ilk yol amaç durumunda sonlanana dek veya liste boş olana dek aşağıdakileri yapmalı: • listeden ilk yolu almalı • İlk yolu, onun uç düğümünün tüm ardıllarına doğru genişletmekle yeni yollar oluşturmalı • Döngülü tüm yolları gözden atmalı • Amaç durumu bulunursa aramayı bitirmeli, eksi halde yeni yolları gözden geçirmeli • Tüm yollar gözden geçirildikten sonra amaç durumu bulunamazsa aramayı başarısız kabul etmeli Bilgisiz (Kör) arama stratejileri Sadece problem formulasyonundaki mevcut bilgiyi kullanır. Bilgisiz arama yöntemlerinde çözüme ulaşmak için hiçbir bilgi verilmez. Aramanın herhangi adımında çözüme ne kadar yakın (veya uzak) olması hakkında veya çözümün buluna bileceği hakkında fikir söylemek mümkün değildir.
Bilgisiz (Kör) arama stratejileri • Genişlik-önce (Breadth-first) • Düzenli-maliyet (Uniform-cost) • Derinlik-önce (Depth-first) • Derinlik-sınırlı (Depth-limited) • Tekrarlanan derinleştirme (Iterative deepening) • İki Yönlü (Bi-directional)
arama ağacı FA L SG CG SC S CS A W FA R CS L SG A E SG R SG E SR başarı 1. Genişlik-önce arama • Enine aramada ağaç soldan sağa, yukarıdan aşağıya doğru taranıyor. Başka değişle, bir seviyedeki tüm düğümler genişlendikten (tarandıktan) sonra bir sonraki aşağı seviyeye geçilir. • En sığ (üst seviye, yüzey) genişletilmemiş düğümü aç • Uygulama: Queuing FN (FIFO yapısı) = Ardılları kuyruğun sonuna yerleştir
Algoritma • Başlangıç düğümlerin bir listesi olan N’yi yerleştir • Eğer N boş ise o zaman çık ve hata mesajı ver • N’de ilk düğüm olarak n ‘yi yerleştir ve N’den n’yi sil • Eğer n amaç düğümü ise o zaman çık ve başarı mesajı geri gönder • Aksi durumda N’nin sonuna n’ nin coçuklarını ekle ve 2. adıma geri dön.
C B A S D E 8 1 5 3 9 7 4 5 G Genişlik-önce Arama (Problem,EnqueueAtEnd) G.Düğüm OPEN list CLOSED list { S } {} S { A B C } {S} A { B C D E G } {S A} B { C D E G G' } {S A B} C { D E G G' G" } {S A B C} D { E G G' G" } {S A B C D} E { G G' G" } {S A B C D E} G { G' G" } {S A B C D E} Bulunan çözüm yolu S A G <-- bu G’ nin maliyeti 10 Genişletilen düğüm sayısı(hedef düğüm dahil) = 7
Genişlik-önce aramanın özellikleri • Tamlık: • Zaman karmaşıklığı: • Bellek karmaşıklığı: • Optimallik : Stratejiler dört kritere göre değerlendirilebilir: • Tamlık (Completeness): Eğer çözüm varsa strateji çözümü garanti ediyor mu? • Zaman Karmaşıklığı (Time complexity): Çözümü bulmak ne kadar zaman alıyor? • Bellek Karmaşıklığı (Space complexity): Aramyı gerçekleştirmek için ne kadar bellek gerekiyor? • Optimallik (Optimality): Birden fazla çözüm olduğu zaman strateji en iyi olanını buluyor mu? (en düşük maliyetli çözüm) • Zaman ve bellek karmaşıklığı şu terimler cinsinden ölçülür: • b – arama ağazının maksimum dallanma faktörü • d – en düşük maliyetli çözümün derinliği • m – arama ağacının maksimum derinliği(sonsuz olabilir)
Genişlik-önce aramanın özellikleri • Completeness: bsonluysa evet • Time complexity: 1+b+b2+…+bd = O(b d), mesela, d‘ de eksponansiyel • Space complexity: O(b d), hafızada her düğümü tutar • Optimality: Evet (her adım maliyeti = 1 varsayılarak) Bellek sorunu önemlidir. Neden tüm düğümleri hafızada tutalım? Çok kolayca sonsuz döngülere götürecek, zaten gezilmiş bir düğümü tekrar gezmekten kaçınmak için.
d m b G Genişlik-önce aramanın zaman karmaşıklığı • Eğer hedef düğüm ağacın d derinliğinde bulunursa bu derinliğe kadarki tüm düğümler oluşturulur. • Böylece: O(bd)
d m b G Genişlik-önce aramanın zaman karmaşıklığı • Kuyruktaki(QUEUE) en büyük düğüm sayısına hedef düğümün d seviyesinde ulaşılır. • QUEUE tüm vedüğümleri içerir. (Böylece: 4) . • Genel olarak: bd G
1 1 b 2 b^2 b^d s • d derinlikli tam arama ağacı; her bir yaprak olmayan düğümün b oğlu var: • Toplam: 1 + b + b^2 + ... + b^d d • Örnek: 12 derinlikli tam arama ağacında 0,…,11 derinlikte her düğümün 10 oğlu var. 12.ci derinlikteki düğümlerin oğulları yoktur. Böylelikle, ağaçta 1 + 10 + 100 + 1000 + ... + 10^12 = (10^13 - 1) düğüm var
2. Düzenli-maliyetli arama • g(n) = başlangıç düğümden açık n düğümüne yolun değeri • Algoritma: • her zaman en küçük g(n) değerli düğümü seçmeli; tüm yeni üretilmiş düğümleri listeye kaydetmeli • Listedeki düğümleri g(n) ‘nin artması ardışıklığı ile sıralamalı • Açılmak için seçilmiş düğüm amaç ise algoritmayı sonlandırmalı • Algoritmalarla bağlı kaynaklarda“Dijkstra Algoritması”, yöneylem araştırmasında “Dal ve Sınır Algoritması” denir
Düzenli-maliyetli arama En düşük maliyetli açılmamış düğümü genişlet Uygulama: QueueingFN=artan yol maliyeti sırasına göre ekle Böylece kuyruk fonksiyonu artan yol maliyetine göre sıralanmış düğümler listesini tutar, ve ilk açılmamış düğümü genişletiriz (bu yüzden en küçük yol maliyetli) Maliyet fonksiyonu g(n) ve derinlik Derinlik(n) olarak tanımlanırsa g(n)=Derinlik(n) için Düzenli maliyetli arama genişliğine aramaya eşit olur Genişlik önce stratejisinin bir arıtması
Algoritma • Başlangıç listesin N ‘ yi oluştur (kök düğüm) • Repeat until (Liste boş ise)veya (ilk düğüm n amaç durum ise): • Listenin başındaki ilk düğümü sil • Bu düğümü genişlet (çocuk düğümlerini bul) • Döngüye takılmamak için daha önce değerlendirilen çocuk düğümleri değerlendirilmeye alma • Çocukları Listeye ekle (her defasında azalan yol maliyetine göre) • Eğer n Amaç düğüm ise başarı, değilse hata değeri geri döndür
Adımı km ile maliyetli Romanya Bucharest’e kadar olan doğrusal uzaklık
O 151 F 71 S 99 Z 75 211 80 A 140 R B P 97 120 101 118 146 138 D 75 M T 111 70 L C
O F 151 S 71 Z 99 75 211 80 A 140 R B P 97 120 101 118 D 146 138 M 75 T L 111 70 C A Z75 T118 S140 T118 S140 O146 S140 O146L229 O146R220L229 F239 O291 R220 L229 F239 O291S297 L229 F239 O291 S297P317 D340 C366 F239 O291 S297P317 D340 C366 M299 …
G Düzenli-maliyetli Arama GENERAL-SEARCH(problem, ENQUEUE-BY-PATH-COST) G.DüğümD.listesi CLOSED list {S(0)} S {A(1) B(5) C(8)} A {D(4) B(5) C(8) E(8) G(10)} D {B(5) C(8) E(8) G(10)} B {C(8) E(8) G’(9) G(10)} C {E(8) G’(9) G(10) G”(13)} E {G’(9) G(10) G”(13) } G’ {G(10) G”(13) } Bulunan çözüm yol S B G <-- bu G nin maliyeti 9 dur 10 değil Genişletilen düğüm sayısı(hedef düğüm dahil) = 7 S 1 8 5 B C A 3 9 4 5 7 E D G” G’
Düzenli-maliyetli aramanın özellikleri • Completeness: Adım maliyeti >0 ise evet • Time complexity: g’ li # düğüm optimal çözüm maliyeti, O(b d) • Space complexity: g’ li # düğüm optimal çözüm maliyeti, O(b d) • Optimality: yol maliyeti düşmediği müddetçe evet g(n) n düğümün yol maliyetidir Hatırla: b = dallanma faktörü d = en düşük maliyetli çözümün derinliği
Düzenli-maliyetli aramanın uygulaması • Kuyruğu (Queue) kök düğümle Initialize et (start durumundan inşa et) • Repeat until (Queueboş) or (ilk düğüm Hedefdurum): • İlk düğümü kuyruğun önünden kaldır • Düğümü genişlet (çocuklarını bul) • Döngüleri önlemek için daha önce dikkate alınan çocukları reddet • Kalan çocukları kuyruğa ekle, tüm kuyruğu artan yol maliyetine göre tutacak şekilde • If Hedefe ulaşıldı, return başarı, otherwise hata
S 1 1 5 5 A C 1 2 5 B 10 D 5 15 E 100 5 F 20 G 5 Dikkat! • Düzenli maliyetli arama kuyrukta herhangi bir düğüm hedef düğüm olduğunda sonlandırılırsa optimal olmaz. • 25 maliyetli bir yol varken Düzenli maliyetli arama 102 maliyetli yolu dönderir (herhangi bir hedef düğüm çözüm olarak alınırsa)
Not: Döngü Tespiti • Aramanın başarısız olacağını ya da tam optimal olmayacağını gördük eğer: - döngü tespiti yok: o zaman algoritma sonsuz döngülere girer (A -> B -> A -> B -> …) - bizim daha önce gezdiğimiz bir düğümü içeren bir durumu kuyruğa almama : tam optimal çözüm olmaz - basitçe atalara geri dönmekten kaçınma: ümit veren olarak görünür, fakat bunun çalıştığını ispatlamadık Çözüm? Bir düğümü eğer durumu onun herhangi bir atasının durumuyla eşleşiyorsa kuyruğa atma (yol maliyeti>0 varsayılıyor). Aslında, eğer yol maliyeti > 0 ise bu düğümle tekrar ilgilenmek bize ilk seferkinden daha fazla maliyet getirecektir Yeterli mi??
Not: Düzenli Maliyetli Aramada Kuyruklama Amacımız en düşük maliyetli çözümü bulmak ise bir önceki örnekte G durumuyla üç düğümü kuyruklamak gereksizdi(ama yanlış değil) : Farklı yolları temsil etmelerine rağmen emin olarak biliyoruz ki en düşük maliyetli yol(örnekte 9) diğerlerinden daha düşük toplam yol maliyeti sağlayacaktır. Bu yüzden kuyruk fonksiyonunu şu şekilde arıtabiliriz : - düğümü kuyrukla(queue-up node) 1) durumu herhangi bir atasıyla uyuşmuyorsa ve 2) kuyrukta aynı durum ile herhangi genişletilmeyen düğümün yol maliyetinden daha düşük bir maliyeti varsa (ve bu durumda eskisini yeni düğümle(aynı durum) değiş !!!
S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 -
S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 - 2 A 1 1 1 3 C 1 5 1 Siyah = açık kuyruk Gri= kapalı kuyruk Açık kuyruğu sıralı tutacak şekilde genişletilmiş düğümleri ekle
S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 - 2 A 1 1 1 4 B 2 2 2 3 C 1 5 1 Düğüm 2’nin 2 atası var biri B durumuyla diğeri S durumuyla. #1 S durumuyla kapalı fakat onun yol maliyeti 0 A’dan S’e açılmakla elde edilen maliyetten daha küçüktür. Bu yüzden S durumuna sahip olan düğüm 2’nin atasını kuyruklamayız
S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 - 2 A 1 1 1 4 B 2 2 2 5 C 3 3 4 6 G 3 102 4 Düğüm 4 C durumlu ataya sahiptir ve aynı zamanda C durumuna sahip açık düğüm #3 ten daha az maliyetlidir bu yüzden en kısa yolu yansıtmak için açığı güncelleriz
S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 - 2 A 1 1 1 4 B 2 2 2 5 C 3 3 4 7 D 4 8 5 6 G 3 102 4
S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 - 2 A 1 1 1 4 B 2 2 2 5 C 3 3 4 7 D 4 8 5 8 E 5 13 7 6 G 3 102 4
S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 - 2 A 1 1 1 4 B 2 2 2 5 C 3 3 4 7 D 4 8 5 8 E 5 13 7 9 F 6 18 8 6 G 3 102 4
S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 - 2 A 1 1 1 4 B 2 2 2 5 C 3 3 4 7 D 4 8 5 8 E 5 13 7 9 F 6 18 8 10 G 7 23 9 6 G 3 102 4
Örnek # Durum Derinlik Maliyet Ata 1 S 0 0 - 2 A 1 1 1 4 B 2 2 2 5 C 3 3 4 7 D 4 8 5 8 E 5 13 7 9 F 6 18 8 10 G 7 23 9 6 G 3 102 4 S 1 5 A C 1 5 B 1 D 5 E 100 5 F G 5 Hedefe ulaşıldı
Tekrarlanan durumların aradan kaldırılması • Amaç:Durum uzayının boyutunu küçültmekle arama etkisinin yükseltilmesi 1. Bir önce bulunduğun duruma geri dönmemeli 2. Döngü yapacak yolları oluşturmamalı 3. Daha önce oluşturulmuş olan bir durumu yeniden oluşturmamalı
Daha fazla örnek… • Demolar: http://pages.pomona.edu/~jbm04747/courses/spring2001/cs151/Search/Strategies.html
Arama ağacı E A CG SC S FA W L CS R SG FA R CS L SG SG A E SR SG 3- Derinlik-önce arama Derinlik öncelikli aramada daima ağacın en derin düğümlerinden biri açılır. Yani arama ağacı yukarıdan aşağıya en sol düğümden başlayarak yaprak düğüme ulaşılana dek geliştiriliyor. Eğer amaçlanmayan düğüme erişilmiş ise veya açılacak düğüm kalmamış ise açma işlemine daha sığ (en sol ve genişletilmemiş) seviyelerden devam edilir. Uygulama: QueueingFN=Ardılları kuyruğun önünde ekle (LIFO yapısı, yani ardıllar öne yazılacak)
Algoritma • Başlangıç düğümlerin bir listesi olan N’yi yerleştir • Eğer N boş ise o zaman çık ve başarısızlık mesajı ver • N’de ilk düğüm olan n ‘yi yerleştir ve N’den n’yi sil • Eğer n amaç düğümü ise o zaman çık ve başarı mesajı ver • Eğer n=max derinlik ise o zaman 2. adıma git • Aksi durumda N’nin önüne n’nin coçuklarını ekle ve 2. adıma geri dön
Seviye 0 Seviye 1 Seviye 2 Seviye 3
Derinlik-önce arama return GENERAL-SEARCH(problem, ENQUEUE-AT-FRONT) G.Düğüm OPEN list CLOSED list { S } S { A B C } A { D E G B C} D { E G B C } E { G B C } G { B C } Bulunan çözüm yolu S A G <-- bu G nin maliyeti 10 Genişletilen düğüm sayısı (hedef düğüm dahil) = 5 S 1 8 5 B C A 3 9 7 E D G
CG Arama ağacı SC S Başl.kuyruk CG-SC genişlenmesi SR L CS W Kuyruk 1 SC-S genişlenmesi L CS W Kuyruk 2 SR R L SG FA CS A SC CG FA CS SG R L SG E E SG S W A S-SR, L, CS, W genişlenmesi Kuyruk 3 SR genişlenemez A SG E CS’ CS W L-A, SG, E, CS genişlenmesi Kuyruk 4 R SG E CS’ CS W A-R genişlenmesi Kuyruk 5 R-FA genişlenmesi Kuyruk 6 FA SG E CS’ CS W FA genişlenemez Kuyruk 7 SG E CS’ CS W Başarı Kuyruk 8 Derinlik önce arama • Derinine arama işlemleri ardışıklığı CG SCS SR L A R FA SG
Derinlik önce arama Gen. düğüm liste { S } S { A B C } A { D E G B C} D { E G B C } E { G B C } G { B C } Çözüm yolu S A G <-- G’nin değeri= 10 Genişlenen düğümler sayısı (amaç düğümle birlikte) = 5 S 1 8 5 B C A 3 9 7 E D G