Yapay Zeka ve Uzman Sistemler

Slides:



Advertisements
Benzer bir sunumlar
Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.
Advertisements

PROLOG. Prolog Programlarının özellikleri: - Programming in Logic teriminin kısaltılmasıyla adlandırılmıştır. - Semboller üzerinde çalışma prensibi üzerine.
Ders IV Bölüm 4 Tutumlar s Bölüm 5 Tutum Değişimine Kuramsal Yaklaşımlar : Tutarlılık kuramları s PDR Dr. Hüseyin Bayraktaroğlu.
Bilimsel bilgi Diğer bilgi türlerinden farklı
HİPOTEZ TESTLERİNE GİRİŞ 1. Şu ana kadar örneklemden elde edilmiş istatistiklerden yararlanarak, kitle parametresini kestirebilmek için nokta tahmini.
Hazırlayan: Dr. Emine CABI
TEST ÇÖZME TEKNİKLERİ. Test çözmede 3 unsur önemlidir.
BİLGİ YARIŞMASI 5. SINIF Hazırlayan: Mustafa AKKAŞ 5-A Sınıf Öğretmeni Hazırlayan: Mustafa AKKAŞ 5-A Sınıf Öğretmeni Başarılar dilerim.
1. Ders Bir, İki ve Üç Yazarlı Eserlerin Kataloglanması Prof. Dr. Bülent Yılmaz Arş. Gör. Tolga Çakmak.
AİLELERLE İŞBİRLİĞİ.
BULUŞ YOLUYLA ÖĞRETİM JEROME BRUNER.
O R T L G İ M A A Ve Problem çözme.
 Cümlede, eylemin nesne alabilip alamamasına ya da öznenin, eylemde bildirilen işle ilgili olarak gösterdiği özelliğe eylem çatısı denir. Dolayısıyla,
HİPOTEZ TESTLERİNE GİRİŞ Şu ana kadar örneklemden elde edilmiş istatistiklerden yararlanarak, kitle parametresini kestirebilmek için nokta tahmini.
Sözsüz İletişimin Özellikleri
Sevgili 8.sınıf öğrencisi; Kendi yeteneklerin, ilgilerin, değerlerin hakkında bilgi sahibi olmak ve daha doğru lise tercihi yapabilmek için lütfen öncesinde.
Hazırlayan İSMAİL ŞAHİNER. SORU ÇÖZERKEN!!! Önce soru okunur. Daha sonra parça (metin) okunur. Önce soru okunur. Daha sonra parça (metin) okunur.
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
YÖNLENDİRME. Yönlendirme ● Statik ● Dinamik ● Kaynakta yönlendirme ● Hop by hop yönlendirme.
BİLGİSAYAR PROGRAMLAMA DERSİ
SAYILAR ve RAKAMLAR.
SEVİYE: 11. SINIF 1. ÜNİTE KAZANIMLAR: Mantık ve Doğru Düşünme arasındaki ilişkiyi değerlendirir. Akıl ilkelerinin önemini değerlendirir. ÖĞRENME – ÖĞRETME.
Erken çocukluk döneminde fen ve matematik kavramlarının gelişimi
PROGRAMLI ÖĞRETİM Tanımı:
DENEYSEL TERTİPLER VE PAZAR DENEMESİ
klasik mantik önermeler
Yapay Sinir Ağı Modeli (öğretmenli öğrenme) Çok Katmanlı Algılayıcı
BİLGİSAYAR 1 AD: MÜRŞİDE SOYAD: EREN BÖLÜM: TÜRKÇE ÖĞRETMENLİĞİ (İ.Ö)
PROGRAMLAMA TEMELLERİ
DOĞAL SAYILAR TAM SAYILAR
Yapay Zeka ve Uzman Sistemler
Bilimsel Araştırma Yöntemleri
Hürriyet Anadolu Lisesi
Temel Bilgisayar Bilgileri
PROBLEM ÇÖZME VE ALGORİTMALAR
Bilgisayar Mühendisliğine Giriş
PARAMETRİK HİPOTEZ TESTLERİ
BENZETİM Prof.Dr.Berna Dengiz 13. Ders Çıktı Analizi
Meriç ÇETİN Pamukkale Üniversitesi Bilgisayar Mühendisliği Bölümü
MADDEYİ TANIYALIM.
Bölüm 4: Kontrol Yapıları I (Seçim Yapma)
TEKNOLOJİ VE TASARIM DERSİ 7.D.1. Özgün Ürünümü Tasarlıyorum.
NİŞANTAŞI ÜNİVERSİTESİ
ANALİTİK KİMYA DERS NOTLARI
Doğrusal Mantık Yapısı İle Problem Çözme
KELİME TÜRLERİ FİİLLER.
DİL GELİŞİMİ KURAMLARI - I
ÖLÇME-DEĞERLENDİRME 1.DERS
Bilgisayar Bilimi Koşullu Durumlar.
KALITIM VE ÇEVRE I. Kalıtım II. Çevre
Tezin Olası Bölümleri.
VERİTABANI YÖNETİM SİSTEMLERİ 3-Normalizasyon
Yaratıcı Strateji: Planlama ve Geliştirme
Bilgisayar II 8 Mart Mart
NİŞANTAŞI ÜNİVERSİTESİ
Değerler ve Değişkenler
DAVRANIŞ BİLİMLERİNDE ARAŞTIRMA (YÜKSEK LİSANS)
Bilgisayar Bilimi Programlama Yapısı.
Nitel araştırma soruları sorma ve soru formu oluşturma
NİŞANTAŞI ÜNİVERSİTESİ
Maç Sonucunun Belirlenmesi
Veri ve Türleri Araştırma amacına uygun gözlenen ve kaydedilen değişken ya da değişkenlere veri denir. Olgusal Veriler Yargısal Veriler.
NİŞANTAŞI ÜNİVERSİTESİ
ZAMİRLER(ADILLAR) 6.SINIF.
CİHANGİR ÇAĞLAR ZAMİRLER
GÖRÜŞME İLKE VE TEKNİKLERİ Sağlık Bilimleri Fakültesi
Sınıf Öğretmenlerinin Eğitsel Amaçlı İnternet Kullanım Öz Yeterlikleri
ARAŞTIRMANIN YAZILMASI II: BİÇİMSEL KOŞULLAR
OLASILIK Uygulamada karşılaşılan olayların birçoğu kesin olmayan diğer bir ifadeyle belirsizlik içeren bir yapıya sahiptir. Olasılık kavramı kesin olmayan.
Bilimsel araştırma türleri (Deneysel Desenler)
Sunum transkripti:

Yapay Zeka ve Uzman Sistemler Aslı Eyecioğlu Özmutlu aozmutlu@bartin.edu.tr

Proje Çalışması Gruplar en fazla 6, en az 3 kişilik olacak. Gruplar belirlendikten sonra aşağıdaki form en geç 22 Kasım 2017 tarihine kadar doldurulacak: https://goo.gl/forms/M69L5q6YuEQ0bz9y2

Prolog-2 Online IDE Prolog-1 Özet Doğal dil ve Prolog Predicates/Clauses/Goals

Prolog-2 Online IDE https://ideone.com/ Her programlama dili için kullanılabilir online tümleşik geliştirme ortamı.

Prolog Özet Bir Prolog programı iki tür ifadelerden oluşur: Gerçekler ve Kurallar. ·        Gerçekler, programcının doğruluğundan emin olduğu bilgiyi ilişkiler veya özellikler olarak anlattığı satırlardır. ·        Kurallar, bağımlı ilişkilerdir. Prolog bu kuralları kullanarak bir bilgiden hareketle bir konuda karar verir. Bir kural, verilen şartlar yerine geliyorsa başarılı olur, yani doğru olur.

Prolog Özet · Baş kısmı verilen gerçekler doğrulanıyorsa doğrudur. ·        Prolog’da bütün kuralların iki kısmı vardır: Baş ve Gövde kısmı. Bunlar birbirinden :- sembolleri ile ayrılırlar. ·        Baş kısmı verilen gerçekler doğrulanıyorsa doğrudur. ·        Gövde kısmı ise doğru olması gereken şartları taşır. Böylece Prolog, programın baş kısmının doğru olduğunu ispatlayabilir.

Prolog Özet Gerçekler ve kurallar birbirinin aynısıdır. Gerçeklerin kurallardan tek farkı, açıklayıcı bilgi taşıyan gövdelerinin olmamasıdır. Prolog’a bir dizi gerçek veya kural tanıttıktan sonra, bu gerçekler veya kurallar hakkında soru sormak mümkündür. Buna Prolog Sistemini Sorgulama denir.

Prolog Özet Prolog’daki Karar Motoru bir kuralın baş ve gövde kısmını incelerken, bilinen gerçek ve kurallara başvurur. Şartların yerine gelip gelmediğini kontrol eder. Bir kuraldaki bütün şartlar doğrulandıktan sonra, bağımlı olan kısım, yani kuralın baş kısmının doğru olduğuna karar verir. Bütün şartlar, bilinen gerçeklere göre karşılanamazsa, sorguya olumlu cevap verilemez.

Prolog Programı Bileşenleri Prolog programı 4 bileşenden oluşur: Yüklemler (Predicates) Gerçekler ve Kurallar (Facts and Rules) Değişkenler (Domains) Hedefler/Sorgular (Goals)

Yüklemler (Predicates) Bir ilişkinin sembolik ismine yüklem denir ve yükleme bağlı olan nesnelere argüman denir. Bir yüklemin genel yazılış biçimi şöyledir: yuklem_adi(argüman_tip1, argüman_tip2, argüman_tip3,….,argüman_tipN) Mesela sever(yasin, esra) gerçeğindeki sever ilişkisi yüklem, yasin ve esra ise bu yüklemin agrümanları olan nesnelerdir.

Yüklemler (Predicates) Argümanlı ve agrümansız yüklem örnekleri: sahis(soyad, ad, cinsiyet). sahis yüklem; soyad, ad, cinsiyet ise bu yüklemin argümanlarıdır. basla = argümanı olmayan yüklem Sınırlı olmakla beraber, bir yüklem argümansız olarak da kullanılabilir.

Gerçekler ve Kurallar(Clauses) Gerçekler ve Kurallar (Clauses) Prolog dilini oluşturan iki türlü ifade vardır. Bu ifadeler gerçekler veya kurallardan ibarettir. Prolog dilinin kalbini oluşturan bu ifadelere clause denilmektedir.

Sorgular/Hedefler(Goals) Sorgular (Goals) Prolog dilinde ulaşılması istenen bilgilerin doğruluğunu sorguladığımız bölümdür. Program çalışırken Prolog ilk önce GOAL satırını çalıştırır.

Değişkenler(Domains) Değişkenler büyük harf veya alt çizgiyle başlar. Devamında harf, rakam veya simgeler olabilir. Anonim Değişken Sadece alt çizgiyle (_) oluşturulan değişkenlere anonim değişken denir. Anonim değişkenler, programların gereksiz bilgi ve satırlarla karmaşık hale gelmelerini engeller. Böylece bir sorgulamadan beklenilen bilgileri alabilir ve ihtiyaç olmayan değerler iptal edilmiş olur.

Değişkenler(Domains) Anonim Değişken Her alt çizgi karakteri yeni bir anonim değişken ifade eder. Not:  Anonim değişkenler True yada False değeri döndürür. Diğer değişkenlerin yerine kullanılabilen anonim değişkenlerin, normal değişkenlerden tek farkları şudur: anonim değişkenler hiçbir zaman bir değere eşitlenemezler. vardir(_,televizyon). yemek_yer(_). İfadeleri konuşma dilinde “Herkesin televizyonu var” ve “Herkes yemek yer” olarak çevrilebilir. Örneğin; ?-parent(Ali,_). Sadece Alinin çocuğu var mı ? True yada False

Değişkenler(Domains) Anonim Değişken Örnek: CLAUSES erkek(selahattin). erkek(cihat). bayan(sacide). bayan(sezen). ebeveyn(selehattin, cihat). ebeveyn(sacide, cihat). ebeveyn(selehattin, sezen). GOAL ebeveyn(Ebeveyn,_).

Değişkenler(Domains) Anonim Değişken Yukarıdaki örnek yazdıktan sonra GOAL ebeveyn(Ebeveyn,_) sorgusu çalıştırılarak, ebeveyn olan kişilerin isimleri öğrenilebilir. Çocukların isimleri istenmediği için isimlerinin yerine anonim değişken kullanılmıştır. Programın sonucunda şu sonuç görüntülenir: Ebeveyn=selehattin                      /*Cihat’ın ebeveyni */ Ebeveyn=sacide                           /* Cihat’ın ebeveyni*/ Ebeveyn=selehattin                      /* Sezen’in ebeveyni*/ Tanımlanan değişken anonim olduğu için, alınacak cevabın ikinci argümanla bağlantısı olmayacaktır. Anonim değişkenler, gerçeklerin tanımlanmasında da kullanılabilir.

Örnek-1 CLAUSES satin_alabilir(X,Y):- sahis(X), araba(Y), hoslanir(X,Y), satilik(Y). sahis(ahmet). sahis(paki). sahis(cengiz). sahis(levent). araba(buick). araba(bmw). araba(passat). araba(toyota). hoslanir(paki,buick). hoslanir(levent, toyota). hoslanir(cengiz, passat). hoslanir(ahmet, tenis). satilik(pizza). satilik(toyota). satilik(buick). satilik(passat). PREDICATES nondeterm satin_alabilir(symbol, symbol) nondeterm sahis(symbol) nondeterm araba(symbol) hoslanir(symbol, symbol) satilik(symbol) Yukarıdaki programı yazdıktan sonra Levent ve Cengiz’in ne satın alabileceğini, kimin buick marka arabayı alabileceğini bulmak için aşağıdaki hedef cümleleri kullanılabilir: GOALS satin_alabilir(Kim, Ne). satin_alabilir(levent, Ne). satin_alabilir(cengiz, Ne). satin_alabilir(Kim, buick).

Örnek-1 DOMAINS title, author = symbol pages = unsigned PREDICATES book(title, pages) nondeterm written_by(author, title) nondeterm long_novel(title) CLAUSES written_by(fleming, “DR NO”). written_by(melville, “MOBY DICK”). book(“MOBY DICK”, 250). book(“DR NO”, 310). long_novel(Title):­ written_by( _ , Title), book(Title, Length), Length > 300. GOAL written_by(X,Y)’dir.

Doğal dil ve Prolog Bütün çocuklar kısadır. kisa(X):-cocuk(X). Bütün erkek çocuklar arabaları sever. sever(X,araba):-erkek(X),cocuk(X). Bütün çocukların annesi vardır. var(X,anne):-cocuk(X). Sebzeyi hiçbir çocuk sevmez. sevmez(X,Y):-sebze(Y), cocuk(X). Çocuğunu döven öğretmeni hiçbir anne sevmez. sevmez(X,Y):-anne(X,Z),ogretmen(Y,Z),dover(Y,Z).

Doğal dil ve Prolog Bütün insanlar canlıdır. Ahmet insandır. Dolayısıyla Ahmet canlıdır. canli(X):-insan(X). insan(ahmet). ?-canli(ahmet). Ahmet 20 metre zıplayabilir. Birisi X metreye zıplayabilirse daha azlarına da zıplayabilir. ziplar(ahmet,20). ziplar(X,Y):-ziplar(X,Z),Z<Y. ?-ziplar(ahmet,15).

Doğal dil ve Prolog Kendi kalesine gol atan futbolcuyu kendi takımının taraftarları sevmez, karşı takımınkiler sever. sevmez(X,Y):-futbolcu(X), taraftar(Y), aynitakim(X,Y), kendikalesinegolatar(X). sever(X,Y):- futbolcu(X), taraftar(Y), karsitakim(X,Y), kendikalesinegolatar(X).

Örnek-2 Prolog’daki Kural yapısına bir örnekle yakından bakalım. 1.   Aşağıdaki cümlede, menü’de olan bir yemeğin Mehmet’e uygun olup olmadığı sorgulanmaktadır. Mehmet ülser olduğu için sadece doktorunun izin verdiği yemekleri yer. Menü ve yukarıdaki kurala bakarak, Mehmet’in hangi yemeği sipariş edebileceğine karar verilebilir. Bunu yapabilmek için, menüdeki yemeğin belirli şartları taşıyıp taşımadığına bakılmaladır. a.   Menudeki_yemek bir sebze mi? b.   Menudeki_yemek doktorun tavsiye ettiği listede var mı? c.   Sonuç: Eğer a ve b şıklarının ikisinin de cevabı ‘Evet’ ise, bu durumda Mehmet menüdeki bu yemeği yiyebilir.

Örnek-2 Yukarıdaki ifadeler; Prolog gerçekleri olarak şöyle yazılabilir: mehmet_yiyebilir(Menudeki_yemek):- sebze(Menudeki_yemek), doktor_tavsiyeli(Menudeki_yemek). sebze(Menudeki_yemek) ifadesinden sonra ‘,’ konulmuştur. Çünkü virgül, iki amaç arasındaki bağlantıyı gösterir ve ‘and’ anlamındadır. mehmet_yiyebilir(Menudeki_yemek) ilişkisinin doğrulanabilmesi için, sebze(Menudeki_yemek), doktor_tavsiyeli(Menudeki_yemek) ilişkilerinin her ikisinin de doğru olması gerekir.

Örnek-3 Bir müşteri arabayı severse ve araba satılık ise bu arabayı satın alabilir. Bu kural konuşma dilinde aşağıdaki şekilde ifade edilir. Müşteri modeli satın alabilir :- Müşteri bir şahıs ve Model bir araba ve Müşteri modelden hoşlanırsa ve Model satılık ise. Bu kuralın baş kısmı, gövde kısmındaki her dört şartın da doğrulanması halinde doğru olacaktır. Yukarıda yazılan gerçekler, aşağıdaki şekilde program haline getirilebilir.

Örnek-3 Bir müşteri arabayı severse ve araba satılık ise bu arabayı satın alabilir. Doğal dildeki bu ilişki, aşağıdaki kuralla Prolog’a aktarılabilir: satin_alabilir(Musteri, Model) :- sahis(Musteri), araba(Model), hoslanir(Musteri, Model), satilik(Model).

Örnek-3 Yandaki programı yazdıktan sonra Levent ve Cengiz’in CLAUSES satin_alabilir(X,Y):- sahis(X), araba(Y), hoslanir(X,Y), satilik(Y). sahis(ahmet). sahis(paki). sahis(cengiz). sahis(levent). araba(buick). araba(bmw). araba(passat). araba(toyota). hoslanir(paki,buick). hoslanir(levent, toyota). hoslanir(cengiz, passat). hoslanir(ahmet, tenis). satilik(pizza). satilik(toyota). satilik(buick). satilik(passat). Yandaki programı yazdıktan sonra Levent ve Cengiz’in ne satın alabileceğini, kimin buick marka arabayı alabileceğini bulmak için aşağıdaki hedef cümleleri kullanılabilir: GOALS satin_alabilir(Kim, Ne). satin_alabilir(levent, Ne). satin_alabilir(cengiz, Ne). satin_alabilir(Kim, buick).

Birleşik Hedefler:Ve(,)-Veya(;) P :- Q; R. P doğrudur Eğer Q doğruysa veya R doğruysa Aynı ifadeyi aşağıdaki şekilde de yazabiliriz: P :- Q. P :- R.

Birleşik Hedefler:Ve(,)-Veya(;) Ve, veya’dan daha yüksek önceliklidir. Aşağıdaki iki ifade aynı sonucu verir: P :- Q, R; S, T, U. P :- (Q, R); (S, T, U). Aynı ifadeyi aşağıdaki şekilde de yazabiliriz: P :- Q, R. P :- S, T, U.

Birleşik Hedefler:Ve(,)-Veya(;) Birleşik bir hedefin çözümünü bulmak için her iki alt hedefin doğru olması gerekir. Bu durumda, iki alt hedef arasında (ve) anlamına gelen ‘,’ kullanılır. Fakat istenilen durumlarda alt hedeflerden sadece birinin doğru olması şartı da aranabilir. Bu durumda alt hedefler arasında (veya) anlamına gelen ‘;’ kullanılması gerekir. Bu duruma Ayırma işlemi denilmektedir.

Birleşik Hedefler:Ve(,)-Veya(;) PREDICATES nondeterm araba(symbol,long,integer,symbol,long) nondeterm kamyon(symbol,long,integer,symbol,long) nondeterm arac(symbol,long,integer,symbol,long) CLAUSES araba(chrysler,130000,3,kirmizi,12000). araba(ford,90000,4,gri,25000). araba(datsun,8000,1,kirmizi,30000). kamyon(ford,80000,6,mavi,8000). kamyon(datsun,50000,5,sari,20000). kamyon(toyota,25000,2,siyah,25000). arac(Marka,Kilometresi,Yas,Renk,Fiyat):- araba(Marka,Kilometresi,Yas,Renk,Fiyat); kamyon(Marka,Kilometresi,Yas,Renk,Fiyat). GOAL araba(Marka, Kilometresi, Kullanim_Suresi, Renk, 25000). Bu örnekteki hedef, tarif edilen 25000 dolarlık arabayı bulur.

Birleşik Hedefler:Ve(,)-Veya(;) Benzer şekilde; fiyatı 25.000 dolardan daha az olan bir araba var mı? şeklindeki bir soruya cevap bulmak da mümkündür. Bunun için GOAL araba(Marka, Kilometresi, Kullanim_Suresi, Renk, Fiyat), Fiyat< 25000 şeklindeki bir sorguyla bu sorunun cevabını bulmak mümkündür. Bu kuralı sorgulandığında, alınacak cevap chrysler olacaktır.

Birleşik Hedefler:Ve(,)-Veya(;) Şimdi ‘fiyatı 25.000 dolardan az olan bir araba veya fiyatı 20.000 dolardan daha az olan bir kamyon var mıdır?’ şeklindeki bir soruya uygun bir hedef yazalım: GOAL araba(Marka, Kilometresi, Kullanim_Suresi, Renk, Fiyat), Fiyat< 25000; kamyon (Marka, Kilometresi, Kullanim_Suresi, Renk, Fiyat), Fiyat< 20000. Prolog ilk önce fiyatı 25.000 dolardan daha az olan bir araba olup olmadığını araştırır. Sonuç doğru olsun veya olmasın, ikinci alt hedef de araştırılır. Her ikisinden birinin doğru olması durumunda alınacak cevap olumlu olacaktır. Hedefin doğrulanması için birden fazla alt hedefin aynı anda doğru olması gerekmez.

Prolog Çalışma Prensibi Prolog, sorgulama esnasında, verilen gerçekler listesinin başından sonuna kadar tarama yapar ve taranacak gerçek kalmayana kadar gerçekleri tarar, sorguya uyan cevapları bulmaya çalışır.

Prolog Çalışma Prensibi Eşleştirme (Unification) Prolog bir goal’ü bir subgoal (call) ile  uyuşturmaya çalışırken Unification adı verilen bir arama işlemi yapılır. Unification, subgoal’de bulunan veri yapıları ile verilen clause’daki bilgileri uyuşturma çabasıdır. Unification, diğer  geleneksel dillerde bulunan parametre iletme, durum seçimi (case selection), yapı yaratma (structure building), yapı erişimi (structure  access) ve atama gibi işlemleri implement  eder. 

Prolog Çalışma Prensibi Geriye İz Sürme (Backtracking) Bir problemin çözümünü ararken mantıksal bir yol izlemek gereklidir. Ama bazen izlenen mantıksal yol istenen sonuca ulaşamayabilir. Böyle bir durumla karşılaşıldığında başka alternatif çözüm yolları denemek gerekir. Örneğin bir labirentin içinde çıkış yolu bulmak üzere dolaşılırken izlenebilecek ve kesin çözüme götürecek yöntemlerden biri de yolun her ikiye ya da üçe ayrıldığı noktada hep soldaki yolu seçmektir. Bu şekilde ilerlenirken çıkmaz bir yere gelinirse en son sola dönülen yere kadar geriye dönülerek bu sefer sağdaki yol seçilip yine bir sonraki yol ayrımlarından hep sola dönme yöntemi izlenebilir. Bu şekilde olası tüm yollar denenmiş olur ve sonuca mutlaka ulaşılır.

Prolog Çalışma Prensibi Geriye İz Sürme (Backtracking) Prolog da bu yöntemin aynısını kullanmaktadır. Bu yönteme “Backtracking”, yani “Geriye iz sürme”  yöntemi denmektedir. Prolog bir probleme çözüm ararken, iki olası durum arasında karar vermek zorunda kalabilir. Her seçim yaptığı noktaya bir “Backtracking point”), yani bir belirteç koyarak subgoal’lerden ilkini sağlama işini gerçekleştirmeye çalışır. Eğer seçtiği subgoal çözüme ulaşmazsa Prolog geriye dönecek, belirteç koyduğu noktada diğer bir alternatifi seçerek çözümü aramaya devam edecektir.

Prolog Çalışma Prensibi Geriye İz Sürme (Backtracking) Backtracking kavramı örnek bir program üzerinde açıklanabilir. PREDICATES nondeterm likes(symbol,symbol) nondeterm tastes(symbol,symbol) nondeterm food(symbol)     CLAUSES likes(bill, X): ­ food(X), tastes(X,good). tastes(pizza,good). tastes(spinach,bad). food(spinach). food(pizza). GOAL likes(bill,What). Bu örnekteki kuraldan Bill’in tadı güzel olan yiyeceklerden hoşlandığı  anlaşılmaktadır. Program Bill’in neden hoşlandığını aramak üzere likes(bill,What) goal’ünü gerçekleştirecektir.

Prolog Çalışma Prensibi Geriye İz Sürme (Backtracking) Bu iş için program baştan sona doğru taranmaya başlanır. Bulunan ilk clause’da What değişkeni X değişkeni ile unify edilir çünkü aranan ve bulunan clause’lar birbiriyle uyuşmuştur. likes(bill, What) likes(bill, X) Unification işleminden sonra Prolog, ele aldığı kuralın goal’ü sağlayıp sağlamadığını araştırır.

Prolog Çalışma Prensibi Geriye İz Sürme (Backtracking) Bunun için kuralın ilk bölümü olan food(X)  subgoal’ü ele alınır. Bu ilk subgoal’ü sağlamak için Prolog tekrar programın en başına döner. İlk clause’da X değişkeni spinach bilgisi ile sağlanır. Elde edilen çözüm dışında bir başka alternatif daha olduğu için Prolog ilk çözümü bulduğu noktaya bir Backtracking point koyar. Bu nokta Prolog’un spinach verisi için çözüm gerçekleşmezse geriye döneceği ve diğer alternatifi deneyeceği noktadır.

Prolog Çalışma Prensibi Geriye İz Sürme (Backtracking) Bu veri ile Prolog tastes(spinach, good) subgoal’ünü sağlamaya çalışır. Bu subgoal kuralın ikinci  maddesidir. Clause’lar arasında tastes(spinach, good)  durumu sağlanmadığından Prolog Backtracking point koyduğu noktaya food(spinach) durumuna geri döner. Bu noktada Prolog başka bir değişkeni deneyebilmek için bu noktadan sonra bağladığı tüm değişkenleri bırakır. Programın bu noktada “food(X)” clause’u için deneyebileceği diğer alternatif veri pizza’dır. X değişkeni pizza verisine bağlanır. Bu noktadan sonra program sağlaması gereken ikinci subgoal olan tastes(pizza,good) clause’unu ele alır.

Prolog Çalışma Prensibi Bu clause’a uygun bir durum olup olmadığı programın yine en başına dönülerek program sonuna kadar aranır. Aranan yeni subgoal program içinde bulunduğundan, çözümü aranan goal için başarıya ulaşılmış olur. Kontrol edilen likes(bill,What) goal’ü için “pizza” çözümü bulunur çünkü What değişkeni “likes” kuralındaki X değişkeni ile unify edilmiş ve X değişkeni de pizza verisine bağlanmıştır. Sonuç aşağıdaki gibi rapor edilir: What = pizza

Prolog Çalışma Prensibi Backtracking’in Dört Temel İlkesi 1. Subgoal’ler yukarıdan aşağıya doğru sırayla sağlanmalıdır. 2. Clause’lar programın içinde bulundukları sıra ile test edilirler. 3. Bir subgoal bir kuralın sol taraf değeri ile uyuştuğu zaman, kuralın sağ tarafının da doğruluğu sağlanmalıdır. Kuralın sağ tarafı doğruluğu sağlanacak bir alt goal’ler kümesidir. 4. Bir goal, bulunması gereken tüm gerçekler bulunduğunda sağlanmış olur.

Prolog Çalışma Prensibi CUT- Backtracking’i Önleme Prolog, backtracking’i önlemek için kullanılan ve ünlem işareti (!) olarak yazılan bir Cut mekanizmasını içerir. Cut programın içerisine bir subgoal’ün bir kuralın içerisine yerleştirildiği gibi yerleştirilir. İşlem sırası Cut’a gelince Cut çağrısı (call) başarı ile sonuçlanır ve eğer varsa bir sonraki subgoal çağrılır. Cut bir kere geçildiğinde bir daha Cut’tan önce ele alınmış subgoal’lere ve Cut’ın içinde bulunduğu predicate’ı tanımlayan diğer predicate’lere backtracking yapmak da mümkün değildir.

Prolog Çalışma Prensibi CUT- Backtracking’i Önleme Cut’ın iki ana kullanımı vardır: Bazı olasılıkların asla anlamlı çözümlere ulaşmayacağı  biliniyorsa alternatif  çözüm aramak zaman kaybıdır.  Eğer böyle bir durumda Cut kullanılıyorsa program  daha hızlı çalışacak ve daha az bellek kullanacaktır. Bu durum Green Cut (Yeşil Cut) olarak adlandırılır. Program mantığı Cut’ı gerektiriyorsa alternatif  subgoal’lerin dikkate alınmasını  önlemek için kullanılır. Bu da Red Cut (Kırmızı Cut) olarak adlandırılır.

Prolog Çalışma Prensibi Cut Nasıl Kullanılır? Kuralın içindeki bir önceki subgoal’e backtracking’i önleme • r1:­ a,b,!,c. Bu, Prolog programına a ve b subgoal’leri için bir çözümün yeterli olduğunu söyleme yoludur.

Prolog’da Problem Çözme Ali okula gittiğinde öğlen yemeğini kantinde yer. Ali eve gittiğinde öğlen yemeğini mutfakta yer. Ali sınıfta kitap okudu. Bilgileri verilip ali öğlen yemeğini nerede yedi ? sorusuna cevap veren bir kodu yazalım . Burada bilinmesi gerekenler. Birisi bir yerde bulunmuşsa oraya gitmiştir. Birisi bir yere gitmişse ve o yeri içine alan yere de gitmiştir. Sınıf okulun içindedir. Oda evin içindedir.

Prolog’da Problem Çözme Programda cümleler: vardir(yüklem,özne,belirtilinesne,dolaylıtümlec,cümleno) yapısında tutulmuştur. kapsar(oda,ev). kapsar(sinif,okul). vardir(oku,ali,kitap,sinif,12)

Prolog’da Problem Çözme vardir2(git,M,_,Yer,_):-vardir(_,M,_,Yer,_). % M Yer'de bulunmuşsa -> M Yer'e gitmiştir • vardir2(F,M,B,Yer1,I):-kapsar(Yer2,Yer1),vardir2(F,M,B,Yer2,I). % M Yer2'de birşey yapmissa ve Yer2 yer1'i kapsiyorsa -> M Yer1'de de ayni seyi yapmistir • vardir2(yer,ali,oglenyemegi,mutfak,_):-vardir2(git,ali,_,ev,_). % ali eve gitmisse -> oglenyemegini mutfakta yer. • vardir2(yer,ali,oglenyemegi,kantin,_):-vardir2(git,ali,_,okul,_). % ali okula gitmisse -> oglenyemegini kantinde yer. vardir ilişkisi gerçek cümle(bilgi)leri, vardir2 ilişkisi türetilen cümle(bilgi)lerini ifade etmektedir.

Prolog’da Problem Çözme • ?- vardir2(yer,ali,oglenyemegi,Nerede,_). • Nerede = kantin; • Burada sistem; – alinin sınıfta bulunduğunu görüp okulda bulunduğu bilgisini edinmiş. – Okulda bulunduğuna göre okula gitmiştir çıkarımını yapmış. – Okulda gittiğine göre yemeğini de kantinde yemiştir sonucuna ulaşmıştır. vardir(oku,ali,kitap,sinif,12). Cümlesi yerine vardir(oku,ali,kitap,oda,12). Cümlesi olsaydı sistemin cevabı mutfak olacaktır.

Yararlanılan Kaynaklar Fatih Amasyalı, Prolog Programlama Dilinde Makina Mühendisliği Alanında Uzman Sistemlerin Hazırlanması, 1998, Harran Üniversitesi,Yüksek Lisans Tezi. Vasif Nabiyev, Yapay Zeka, Seçkin Yayıncılık, 2016, 5. Baskı https://tekrei.github.io/presentations/2003-Mantik-Programlama-Sunum.pdf http://lpn.swi-prolog.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse20

Teşekkürler Aslı Eyecioğlu Özmutlu aozmutlu@bartin.edu.tr