C , FORTRAN gibi geleneksel programlama dilleri prosedürsel olarak bilginin işlemsel açıdan değişikliğe uğratılabilmesi için geliştirilmiş ve optimize edilmiş dillerdir. (Sayılar veya diziler gibi ..) Bununla birlikte genelde insanlar kompleks problemleri soyut ve sembolik yöntemlerle ve geleneksel diller kullanılarak , tam olarak ifade edilemeyecek yollardan çözerler. Soyut bilgi bu dillerde modellenebilmesine rağmen işlemsel programlama dizileri ile kullanılabilecek biçime bilgiyi dönüştürmek için hayli fazla bir programlama eforu kaydetmek gerekir. Yapay zeka alanında yapılan araştırmaların sonuçlarından biri de soyutlandırmanın yüksek seviyelerinde bilginin modellenmesini sağlayan tekniklerin geliştirilmesi olmuştur. Kullanılan araçlarla veya dillerle iyice somutlaştırılan bu teknikler programların insan lojiğine daha benzer olarak yaratılmasını ve daha kolay geliştirilip ilerletilmesini sağlarlar. İşte , iyi tanımlanmış problem alanlarındaki insan tecrübesini emüle eden programlara Uzman Sistemler denir. Uzman sistem araçlarından kullanışlı olanlarının ortaya çıkması ile de uzman sistemlerin oluşturulmasında harcanan efor ve maliyeti azaltmıştır.
Temel Diller
Kural Tabanlı Diller
Kural-Tabanlı programlama dilleri uzman sistemleri geliştirme aşamasında yoğun olarak kullanılan tekniklerden biridir. Kurallar “if” ve “then” olmak üzere iki deyim bütününden oluşur. Bu programlama yönteminde kurallar verilen bir durum için yapılması gereken işlerin kümesi olarak tanımlanan , keşif veya buluşları temsil etmek için kullanılır. Bunlar tamamen insan deneyimine dayanır. Kuralın “if” kısımı kuralın uygulanabilir olmasını sağlayan olayı yada veriyi tanımlayan deyim dizileridir. Olayları kalıplara ilişkilendirme işlemine deyim ilişkilendirme denir. Uzman sistem araçları , sonuç çıkarama mekanizması içerirler. Bu mekanizma otomatik olarak olaylarla kalıpları ilişkilendirip buna bağlı olarak hangi kuralların uygulanabilir olduğunu belirlerler. Kuralın “then” kısmı ise kural uygulanabilir olduğunda yürütülecek olan işlemleri tanımlayan kısımdır. Uygulanabilir kuralların bu işlemleri sonuç çıkarım mekanizması çalışmaya başlatıldığında yürütülür. Sonuç çıkarım mekanizması önce bir kural seçer ve sonra seçilen bu kuralın işlemleri yürütülür. Sonra başka bir kural seçilir ve bu kuralın işlemleri yürütülür. Bu işlem uygulanabilir bir kural kalmayıncaya kadar sürdürülür.
Nesne Yönelimli Diller
Nesne Yönelimli Dillerde veriler, prosedürler ve ilişkilerini ifade etmenin başka bir yoludur. Tasarımda tanımlayıcı ve prosedürsel özellikleri inceler. Veri bağımlılığı problemini ortadan kaldırır. Yapa zekada nesnelere çerçeve (frame) denir. Çerçeveler özlü ve yapısal bir bilgi sunumu sağlar. Çerçeve içindeki bilgi oluk (slot) denilen parçalara bölünür. Bir oluk , tanımlayıcı veya prosedürsel bilgiyi tanımlar. Bir çerçeve özel bir nesne, olay, yer, durum veya başka bir element hakkında bilgi taşır. Çerçeveler iyi bilinen bilgileri ifade etmede kullanılırlar. Bilgiler karakteristikleri ve özellikleri ile beraber oluklarda saklanırlar. Bir çerçeve oluklar ve yüzlerden (facet) oluşur. Yüz , oluk içindeki bir kısım bilgi veya oluğun özelliğini tanımlayan prosedürlerden ibarettir.
Prosedürsel Diller
Prosedürsel diller veri temsil için esnek ve güçlü teknikler kullanırlar ve veri soyutlamasına izin verirler. Uzman sistem dilleri ise bilginin temsili için esnek ve güçlü teknikler kullanırlar ve bilgi soyutlamasına izin verirler. FORTRAN, COBOL, PL/I, PASCAL , C gibi bütün geleneksel diller sayısal veri işleme üzerinde algoritma geliştirmek için tasarlanmışlardır. Şimdi ise uzman sistemlerin çoğu veri tabanlarına erişimi içerecek ve geleneksel prosedürsel kodlamayı kullanabilecek şekilde tasarlanmaktadır. Bu nedenle “prerecording tool” ların geleneksel dillerde yazılması fikri vurgulanmıştır. PASCAL ’ın uzman sistemlerdeki yapılar gibi özellikleri ve bazı tasarım özellikleri mevcuttur. Bazı uzman sistem geliştirme araçları geleneksel dillerle yazılırlar. Örneğin TIMM FORTRAN ’da, INSIGHT2 PASCAL ‘da , EXSYS ve CLIPS C ’ de yazılmışlardır. Bunun nedeni ise bu dillerin donanım için uygun olması ve uzman sistemlerin kişisel bilgisayarlarda çalışıyor olmasıdır. Ayrıca bu şekilde yazılan uzman sistemler daha hızlı çalışırlar ve veri tabanı erişimi yazılımı bu şekilde daha kolay olur. Bu yüzden uzman sistemler önce LISP, PROLOG gibi yapay zeka dillerinde yazılır daha sonra program kodu PASCAL, C, FORTRAN gibi dillerin koduna dönüştürülür. FORTRAN yapay zeka veri tiplerinin ancak küçük bir aralığında verimli olarak çalışabilirler. Yapay zeka programlamada devamlı olarak kurallar oluşur veya parçalanır. Çok büyük miktarlarda sonuç bilgileri oluşur. Bu durumda bilgisayar belleği dolar. Yapay zeka dillerinde bellek otomatik olarak bir proses tarafından temizlenir. Ancak PASCAL ’da bunu yapabilmek için ayrıca kod yazmak gerekir.
Yüksel Seviyeli Yapay Zeka Dilleri
LISP ile yeni fonksiyon oluşturmanın kolaylığı uzman sistem tasarımında çok önemlidir. Bu durum LISP ’in yüksek seviyeli dilleri için bir taban oluşturmasını sağlamıştır. XLMS LISP ’in bir uzantısıdır. Bu dille açık, özlü ifadeler elde edilebilmektedir. LOOPS da başka bir yüksek seviyeli dildir.
Genel Amaçlı Bilgi Mühendisliği Dilleri
Bu tip diller bilgi mühendisliği için geliştirilmişlerdir. Bu tip diller daha esnektir. Fakat bu diller bazı giriş/çıkış kolaylıklarını yok edebilirler. Daha geniş amaçlı işler için kullanılırlar. Programlama ortamları kabul sistemleri kadar geniş değildir. Kabuk programlarında olduğu gibi belli bir uygulama ile sınırlı değillerdir. Çok sayıda kontrol yapılarına sahiptirler. Bu sayede uygulanmaları kabuk sistemlerinden daha zor olduğu halde kullanıldıkları alanlar daha geniştir. HEARSAY-3,ROSIE,OPS5 VE RLL gibi diller bu gruptandır.
Kabuk Diller
Bir uzman sistem 6 parçadan oluşur. Bunlar bilgi kazanç alt sistemleri, sonuç çıkarım motoru, açıklama yeteneği, arabirim alt sistemleri ve bilgi temelli yönetim sistemleridir. İlk beş alt sistem bir uzman sistem kabuğunu oluşturur. İlk beş programın her uygulamada programlanmasına gerek yoktur. Kabuk bir kere oluşturulduktan sonra bir çok uygulama için kullanılabilir. Böylece uzman sistemler daha hızlı oluşturulabilir ve ihtiyaç duyulan programlama tekniği azalmış olur. Kabuk kavramı özellikle kural tabanlı sistemlerde kullanılır. EXSYS , NEXPERT , IMPACT , TIMM , JESS kural tabanlı kabuklara örnek olarak verilebilir.
Uzman Sistemlerde Kullanılan Yapay Zeka Dilleri
Yapay zeka , nesnelerini bu tip dillerle ifade ermek verimli bir yoldur. En önemli iki tanesi PROLOG ve LISP ’tir. Bu dillerle programlama ve hata ayıklama işlemleri hızlı bir şekilde yapılabilir. Bundan başka CLIPS , OPS5 , ART , ART-IM , ECLIPSE ve ILOG bu dillere örnek teşkil eder.
PROLOG (Programming Logic)
Lojik üzerine temellendirilmiştir. Temeli “first order predicate calculus” a dayanır. Bu da PROLOG ’u anlaşılır ve düzgün sentakslı bir hale getirir. Kural tabanlı bir dildir, ve bir kuralın doğru olması için bilgisayarın bütün kuralların buna uyup uymadığını kontrol etmesi gerekir. Bir işin nasıl yapılması gerektiği değil, yapılması için neye ihtiyaç duyulduğu ve neyin doğru olduğu bilgisi çıkarılabilir. PROLOG programlamada; Nesneler hakkındaki olaylar (fact) ve aralarındaki ilişkiler tanımlanır. Nesneler ve ilişkileri hakkındaki kurallar tanımlanır. Nesneler ve ilişkileri hakkındaki sorular sorulur.
PROLOG ilişkisel ve tanımlayıcı olarak tanımlanabilir. Bu iki kavram da bir prolog olaylar (fact) grubunu ifade eder. Birinin başarıya ulaşmak istediği şeyi tanımlaması bakımından tanımlayıcı olarak düşünülür. Örneğin “sort([5,3,7,1],Answer)!” prosedürünün sonucunda “Answer=[2,3,5,7]” döndürülür. Bir prolog programı bir dizi ifadeden oluşur. Bunlara olaylar veya kurallar denir. Bir ifadenin en genel şekli HEAD:-BODY., şeklindedir. HEAD tek başına bir yapıdır. BODY ise 0 veya daha fazla yapıdan oluşabilir. Bu yapılara “subgoal” denir ve virgüllerle birbirinden ayrılırlar. Bir yapının en genel şekli ise FUNCTOR(TERM1,...TERMn) şeklindedir. TERM bir sabit, bir değişken veya başka bir yapı olabilir. FUNCTOR’ lar belirleyici semboller, operatörler veya ilişki isimleri olabilir. Bir belirleyici sembol true veya false değerini alabilir. <=(2,4)’ün değeri true’ dur. Bazı operatörler PROLOG da sayı aritmetiğinde kullanılırlar. Örneğin X+Y+Z +(+(X,Y),Z) olarak, X+Y*Z de +(+(X,Y),Z) olarak yazılabilir. PROLOG da sabitler küçük harflerle yazılır ve “underscore” karakterinden başka bir karakter içeremezler. Aksi takdirde iki tek tırnak arasında yazılırlar Sabitler bir atomda olabilirler. Atom işaretlerin birleşmesiyle oluşur ve özel anlamları vardır .Örneğin “:-” if olarak,”?-”ise bir sorgu ifadesi olarak kullanılırlar. İşaretler, +,,*,/,\,^,<,>,~,:,-,?,@,#,$,& karakterlerinden oluşur. Bir ilişkinin ismi bir atom da olabilir.
Örneğin <(2,4) teki ‘<’ veya has(tom,beer) daki ‘has’ bir ilişki ismidir. “Variable”ler ise büyük harfle veya “underscore” karakteri ile başlar. ?-has(tom,_) , has ilişkisini sağlayan bütün atomları dödürür. Prolagda liste yapılarının kullanımı rahattır.[et,süt,patates ] bir dizidir. Uzunluğu belli olmayan diziler de kullanılabilir. Ör:[et,patates[X]]
is_a(owns(tommy,tiger),yellow,cat) bir veri tabanında olan fact ise ?-is_a(owns(tommy,X),yellow,cat) bir sorgudur ve X yerine tiger üretir. % işareti prolog da yorumlar için kullanılır. hayvan(X):-köpek(X) X bir hayvandır,eğer X bir köpek ise dog(Lassie) Lşasie bir köpektir. ?-animal(Lassie) Lassie bir köpektir.
:-P P kanıtlanacak olan amaç P. P bir açıklama veya bir facttir P:-Q,R,S Q,R,S P’yi gerektirir.
0 yorum:
Yorum Gönder