Uzman Sistemlerin Programlanması


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.











Google+'da Paylaş

Yazar Unknown

Yazar Hakkında bilgi yazılacak
    Blogger Yorumları

0 yorum:

Yorum Gönder