Yapay Zeka ve Uzman Sistemler Aslı Eyecioğlu Özmutlu aozmutlu@bartin.edu.tr
Tübitak Proje Desteği Tübitak Proje Başvurusu http://www.tubitak.gov.tr/tr/burslar/lisans/burs-programlari/2209-a/icerik-destek-kapsami Başvuru Tarihleri: 02 Ekim 2017 - 31 Ekim 2017
Prolog 2005 – Uluslararası Uzay İstasyonu (NASA)’nun Doğal Dil Arayüzü’nde Prolog kullanıldı. 2011 – IBM Watson’ın kodlanmasında Prolog da kullanılan dillerden biridir.
SWI Prolog’la çalışmak SWI Prolog anasayfa :http://www.swi-prolog.org SWI prolog bilgisayara indirilmesi kurulması: https://altugyigit.wordpress.com/tag/prolog-kurulumu/
Deklaratif Programlama Prolog Dekleratif programlama dili Prosedürel programlamada bilgisayara adım adım ne yapması gerektiğini kodlarız. (Ör: C, Pascal, Java vs.) Dekleratif programlamada bir durum tanımlanır. Bu tanıma göre yorumlayıcı yada derleyici bir çözüm üretir.
Prolog Prolog bir cümlenin doğru / yanlış olduğunu cümle içinde değişken(ler) varsa cümlenin doğru olması için o değişken(ler)in değer(ler)inin ne olması gerektiğini söyler.
Prolog Prolog programları cümleciklerden oluşur. 3 tür cümlecik vard tür cümlecik vardır. – Facts (Gerçekler) daima, koşulsuz olarak doğru olan şeyleri tanımlarlar. – Rules (Kurallar) koşul(lar)a bağlı olarak doğru olan şeyleri tanımlarlar. – Questions (Sorgular) Kullanıcının veritabanını sorgulamak için kurduğu cümleciklerdir.
Swi-Prolog Prolog’da dosyalar ‘pl’ uzantısıyla kaydedilir. Swi-Prolog da kaydedilen dosyayı çalıştırmak için köşeli parantez kullanılır. Dosya adı aile ise ?- [aile.pl]. komutu dosyayi yukler.
Swi-Prolog Bilgi tabanını oluşturan gerçekler ve kurallar .pl uzantılı prolog dosyasına yüklenir. Sorgular Swi-Prolog arayüzünden yapılır.
Prolog Gerçekler (Facts) gunesli. Sorgulama ?- gunesli. yes
Prolog Sözdizimi (Syntax) Gerçekler (Facts) Her zaman küçük harfle başlar ve nokta (.) ile biter. Gerçekler her türlü rakam, büyük harf, _ içerebilir. Fakat matematiksel işaretler ve semboller (‘^+%&/) kullanmaktan kaçınmalıdır.
Prolog Sözdizimi (Syntax) Açıklamalar /* açıklama cümlesi */ şeklinde yazılır. Örnekler: hava_yagmurlu. /* Hava yağmurlu*/ ali_kalemini_unuttu. /* Ali kalemini unuttu*/ merve_anahtarını_kaybetti. /* Merve anahtarını kaybetti*/
Sorgulama Gerçekler Sorgulama hava_yagmurlu. /* Hava yağmurlu*/ ali_kalemini_unuttu. /* Ali kalemini unuttu*/ merve_anahtarını_kaybetti. /* Merve anahtarını kaybetti*/ anahtar. /* Anahtar*/ Sorgulama ?- hava_yagmurlu. True ?- merve_kalemini_unuttu. False
Sorgulama Soru: Aşağıdakilerden hangisi prolog’da yazılan gerçeklerden (facts) biri olamaz? Kalem. Merve_kalemini_unuttu. hava_yagmurlu. 2ev. aRABA.
Gerçekler ve Argümanlar Gerçekler tanımlanırken, ilişkiler ve argümanlar belirtilir. ebeveyn (fatma, ali). /* Fatma, Ali’nin ebeveynidir*/ İlişki adı: ebeveyn İlişkinin argümanları: fatma ve ali
Prolog ve Mantık PROLOG MANTIK Ve A , B A ∧ B Veya A ; B A∨B Ise
AND-OR-NOT Operatörleri AND Operatörünün Kullanımı (Çok Şartlı Sorgular) "nur’un” ebeveyni "ahmet” çocuğu "hasan” mıdır? ?- ebeveyn(ahmet,nur),ebeveyn(nur,hasan). Prolog’un cevabı: True ebeveyni "ayse”, çocuğu "volkan” olan kimdir? ?- ebeveyn(ayse,X),ebeveyn(X,volkan). X = fatma ;
AND-OR-NOT Operatörleri OR Operatörünün Kullanımı (Birden Çok Şartlı Sorgular) "ahmet”, "volkan” yada "nur”un ebeveyni midir? ?- ebeveyn(ahmet,volkan);ebeveyn(ahmet,nur). Prolog’un cevabı: True "volkan” yada "ercan”ın ebeveynleri kimlerdir? ?- ebeveyn(X,volkan);ebeveyn(X,ercan). X = fatma ; X = serdar ; X = fatih ; X = esra ;
AND-OR-NOT Operatörleri NOT Operatörünün Kullanımı (Birden Çok Şartlı Sorgular) ali”, "hasan”ın ebeveyni değildir? ?- not(ebeveyn(ali,hasan)). Prolog’un cevabı: True ebeveyni "ali”, olup, çocuğu "can” olmayan "bülent” midir? ?- ebeveyn(ali,bulent),not(ebeveyn(bulent,can)). Prolog’un cevabı: False ebeveyni "ali” olup çocuğu "can” olmayan kimdir? ?- ebeveyn(ali,X),not(ebeveyn(X,can)). X = fatma ; X = fatih ;
Değişkenler Değişkenler her zaman büyük harfle başlar. İçerisinde büyük/küçük harf, alt çizgi vb. olabilir. Örnekler: X Degisken Yenen_yemek YeMEK
Değişkenler ‘Ahmet ne yedi?’ sorusunu nasıl sorarız: yedi(ahmet, elma). ?- yedi(ahmet, ne). => Yanlış ?- yedi(ahmet, Ne). => Doğru Ne= elma True
Değişkenler Değişkenlerle ilişkileri sorgulama ebeveyn(Kim, fatma). Kim = ali ; Kim = ayse. /* sorgulamaya devam etmek icin ‘;’ kullanilir Sorgulamayi bitirmek icin enter kullanilir. */
Değişkenler Değişkenlerle ilişkileri sorgulama Nur’un çocukları kimlerdir? ?- ebeveyn(nur, Cocuk). Kimler kimlerin çocuğudur? ?- ebeveyn (Ebeveyn, Cocuk).
İlişkileri sorgulamak Nur’un büyük ebeveyni (grandparent) kimdir? Bilgi tabanımızda büyük ebeveyn diye bir ilişki tanımlı değil. Büyük ebeveyn ilişkisi iki ebeveyn ilişkisinin ‘ve’ lenmesiyle elde edilebilir. ?- ebeveyn(Y, nur), ebeveyn(X, Y). Nur’un ebeveynine Y dersek, Y’nin ebeveyni Nur’un büyük ebeveyni (X) dir.
İlişkileri sorgulamak Torun ilişkisi de benzer biçimde tanımlanabilir. ahmet, X’in ebeveyni, X, Y’nin ebeveyni ise Y, ahmet’un torunudur. ?- ebeveyn(ahmet,X), ebeveyn(X, Y). X = nur, Y = hasan .
İlişkileri sorgulamak Esra ve Ali’nin ortak ebeveyni var mı? ?- ebeveyn(Ebeveyn, esra), ebeveyn(Ebeveyn, ali). Fatih ve Fatma’nın ortak ebeveyni var mı? ?- ebeveyn(Ebeveyn, fatih), ebeveyn(Ebeveyn, fatma).
Kurallar Kurallar iki kısımdan oluşur: 1. head: böyledir (sonuç, çıkarım) 2. body: eğer head ve body kısmı :- sembolü ile bağlanır. Kural: cocuk(X,Y) :- ebeveyn(Y,X). Sorgu: cocuk(X,Y).
Kurallar Kural: cocuk(X,Y) :- ebeveyn(Y,X). Sorgu: cocuk(X,Y). X=fatma Y=ali Çalışma Mekanizması: cocuk ilişkisi için gerçek ara Yok => cocuk ilişkisi için kural varsa uygula Kuralda X fatma , Y ali ile eşleştirilerek kuralın bir gerçeklemesi bulunur. ebeveyn(ali,fatma). gerçeği aranır. Bulunduğunda kuralın eğer kısmı doğrulandığından böyledir kısmı da doğrulanmış olur ve prolog “yes” cevabını verir.
Anne ilişkisi Tüm X ve Y ler için, X, Y’nin annesidir Eğer X, Y’nin ebeveyni ise ve X kadınsa. İlişkinin Prolog’da ifadesi : anne(X, Y) :- ebeveyn(X, Y), bayan(X). 29
Kız Kardeş İlişkisi Tüm X ve Y ler için, X, Y’nin kız kardeşidir Eğer X ve Y aynı ebeveyne sahip ise ve X bayansa İlişkinin Prolog’da ifadesi : kızkardes(X, Y) :- ebeveyn(Z, X), ebeveyn(Z, Y), bayan(X). Sorgu: kızkardes(X,nur). female 30
Hala İlişkisi hala(Z,Y):- ebeveyn(X,Y), bay(X), kızkardes(Z,X). 31
Yararlanılan Kaynaklar http://www.yazilimindunyasi.com/diger-yazilim-dilleri/435-prolog-programlama-ders2-or-not-and-kullanimi.html#sel=16:1,16:42 Aybars Uğur, Yapay Zeka Ders Notları. Novruz Allahverdi, Uzman Sistemler bir yapay zeka uygulaması, Nobel Akademik Yayıncılık, 2002 Vasif Nabiyev, Yapay Zeka, Seçkin Yayıncılık, 2016, 5. Baskı
Teşekkürler Aslı Eyecioğlu Özmutlu aozmutlu@bartin.edu.tr