YAPAY ZEKA

Günlük yaşantıda zihinsel kapasite çok önemli olduğu için insanlar bilimsel olarak akıllı insan ( Homo sapien) olarak isimlendirilmiştir. Yapay zeka, YZ, (AI-Artificial Intelligence) alanı zeki varlıkları anlamaya çalışır. Bu nedenle YZ çalışmalarının bir amacı kendimiz hakkında daha fazla şey öğrenmektir. Felsefe psikolojiden farklı olarak YZ yalnız zekayı anlamaya değil aynı zamanda zeki varlıklar yapmaya çabalar. YZ çalışmalarının bir diğer nedeni de başlangıç aşamasında bile ilginç yararlı ürünler yapılmış olmasıdır. Şeklen 1956′da başlayan YZ en yeni disiplinlerden biridir. gibi disiplinler de çalışanlar bütün iyi fikirlerin Galileo, Newton, Einstein diğer bilim adamları tarafından üretildiğini yeni bir fikrin ortaya çıkması için yıllar boyu süren çalışmaların gerektiğini düşünebilir. Ama YZ çok yeni bir disiplin olduğu için üretilecek çok fikir vardır.

YZ; lama, mantıksal muhakeme gibi genel amaçlı alanlar satranç oynama, şiir yazma, teoremlerinin ispatlanması hastalıkların teşhisi gibi özel amaçlı alt alanları içerir.

YZ ?

Değişik şekillerde yapılan YZ mları aşağıdaki 4 gruptan birine düşer

İnsan gibi düşünen sistemler.

İnsan gibi davranan sistemler.

Rasyonel düşünen sistemler.

Rasyonel davranan sistemler.

Yukarıda görüldüğü mlar insana veya rasyonelliğe göre yapılmıştır. Bu da insanların her zaman rasyonel davranmadıklarını belirtmektedir. İnsan merkezli yaklaşım hipotez deneysel doğrulamayı içerirken, rasyonalist yaklaşım mühendisliği içermektedir. Aşağıda her m ayrıntılı olarak incelenmiştir.

İnsan gibi Davranmak: Turing Test yaklaşımı

Turing Test, zekanın işlemsel mını sağlamak için Alan Turing (1950) tarafından tasarlanmıştır. Turing zeki davranışı, soru soran kimseyi tüm anlamaya ait işlemlerde şaşırtacak şekilde insan seviyesinde davranma olarak mlamıştır. Sorular bir hat üzerinden uzaktan sorulmakta hattın ucunda insan mı yoksa bilgiayar mı olduğu anlaşılmaya çalışılmaktadır. Bu testi geçmek için ın insan seviyesinde performans göstermesi gerekir. Şimdilik bu testi geçmek çok zor görünmektedir. Bu test için ın aşağıdaki yeteneklere sahip olması gerekmektedir:

Doğal dil işleme: çe veya İngilizce (insan dilleri) haberleşebilmeyi sağlamak için.

Bilgi Gösterimi : Soruşturma sırasında veya öncesinde bilgi depolamak için.

Muhakeme : Depolonan bilgiyi kullanarak cevap verebilme veya yeni sonuçlar çıkarma.

Öğrenme : Yeni koşullara adapte olma kalıpları saptama.

Turing test’te soruşturmayı yapan birbirini kesinlikle görmez. Buna şın Toplam Turing Test’te vidyo sinyali de kullanılır. Böylece soruşturmayı yapan kişi fiziksel nesneleri lama yeteneğini de ölçebilir. Bu test için ın aşağıdaki yeteneklere sahip olması gerekir:

Görme : Nesneleri lamak için.

Robotik : Nesneleri hareket ettirmek için.

YZ’de Turing Testi geçmek için yapılan büyük bir çalışma yoktur. İnsan gibi davranma meselesi insanlarla etkileşen YZ programları için geçerlidir. Örneğin kullanıcı ile iletişimde bulunan bir dil işleme sistemi insan gibi konuşmalıdır.

İnsan Gibi Düşünmek

Verilen bir ın insan gibi düşündüğünü söyleyebilmek için insanların düşündüğünü saptamanın bir yolunu bulmamız gerekir. İnsanın düşündüğünü iki şekilde öğrenebiliriz. Birincisi kendi düşüncelerimizi gözleme, ikincisi ise psikolojik deneyler yapmaktır. Düşünme ile ilgili yeterince kesin teorilere erişilirse bu teoriler ı olarak ifade edilebilir.

Bazı araştırmacılar pogramları herhangi bir yöntemi kullanarak doğru sonucu bulacak şekilde yazarken bazı araştırmacılar da sonucun doğru ya da yanlış olmasına bakmaksızın insanların düşündüğü şekilde çözümü arayan programlar yazmaktadır.

Rasyonel Düşünme: Düşünme Kanunları

Doğru düşünmeyi kodlamaya ilk çalışanlardan biri Aristotle’dır. Aristottle mantığına göre doğru önermeler verildiğinde daima doğru sonuç elde edilir. Aşağıda buna ait bir örnek verilmiştir:

Socrates insandır. İnsanlar ölümlüdür. à Öyleyse Socrates ölümlüdür.

Bu düşünme kanunlarının düşünme işlemini yönettiği kabul edildi Mantık alanını başlattı. YZ’de mantık taraftarları problemleri mantıksal notasyonla mlayarak akıllı sistemler oluşturmaya çalışmışlar. Bu konuda şılaşılan iki büyük engel:

Konuşma diline özgü bilgilerin %100 kesinlik ifade etmediği durumda mantık formunda belirtme güçlüğü

Problemleri prensipte çözmekle, pratikte çözmek arasındaki fark. Birkaç düzine önerme bile ın sınırını aşabilir. Bu da prensip olarak çözülebilecek problemlerin pratikte çözümünü güçleştirmektedir.

Rasyonel Davranma: Rasyonel Ajan Yaklaşımı

Rasyonel davranma, inanışları baz alarak amaca erişecek şekilde davranmaktır. Farklı YZ çalışmalarına benzer şekilde yaklaşabilmek için ajan(agent) sözcüğü kullanılmaktadır. Buradaki kullanım normal anlamının dışındadır. Ajan layan davranan herhangi bir şeydir. Ajan yaklaşımında YZ çalışmaları; rasyonel ajan çalışmaları rasyonel ajan oluşturmadır.

Düşünme kanunlarında vurgulanan doğru çıkartımdır. Doğru çıkartımda bulunmak bazen rasyonel ajanın (RA) bir parçası olabilir. Çünkü rasyonel davranmanın bir yolu, mantıksal olarak bir davranışın istenen amacı sağlayacağı sonucu çıkartılırsa bu sonuç üzerine belirlenen şekilde davranılır. Diğer yandan doğru çıkartım tam rasyonellik değildir. Bazen yapılacak şeyin doğru olacağı ispat edilmeden yapılması gerekebilir. Örneğin kızgın bir sobadan elin çekilmesi reflekstir kızgınlığı hissettikten sonra hangi hareketin yapılacağını düşünerek yapılan yavaş haraketten daha etkilidir. Sobadan elin çekilmesi bir doğru çıkartım sonucu olmamakta ama rasyonel bir davranıştır. Mükemmel rasyonellik daima doğru şeyi yapmaktır karmaşık bir çevrede daima doğru şeyi yapmak mümkün değildir.

RA yaklaşımının iki üstünlüğü vardır:

Düşünme kanunları yaklaşımından daha geneldir. Çünkü rasyonel davranmak için doğru çıkartım faydalı bir mekanızma olmasına şın gerekli değildir.

Rasyonelliğin mı açıkça yapıldığı için bilimsel gelişmeye insan davranışından veya insan düşüncesinden daha yatkındır.

ZEKİ AJANLAR

Ajan, sensorlarıyla çevresini layan efektörleriyle bu çevre üzerinde davranan herhangi bir şeydir. İnsan sensor olarak göz kulak diğer organlara, efektör olarak da el, kol, ağız diğer vücut kısımlarına sahiptir. Robotik ajan, kamera infrared bulucuları sensor olarak değişik motorları da efektör olarak kullanır.

Ajanlar Davranmalı

Rasyonel ajan doğru şeyi yapan ajandır. Bu yanlış bir şey yapmaktan daha iyidir ama doğru şeyi yapmak ne demektir? İlk yaklaşım, doğru haraket ajanı en lı yapacak harakettir. Bu durumda ajanın sına ne zaman verileceği sorusunu ortaya çıır.

Performans Ölçüsü

Ajanın ne kadar lı olduğunu saptayan kritere performans ölçüsü denir. Performans ölçüsünün dikkatli bir şekilde saptanması gerekmektedir. Örneğin kirli zemini temizleyen bir ajanı gözönüne alalım. Burada performans ölçüsü olarak 8 saatlik çalışmada temizlenen kir miktarı alınabilir. Daha karmaşık performans ölçüsü yalnız temizlenen kir miktarını değil aynı zamanda tüketilen enerji çıılan gürültüyü de dikkate alabilir.

Değerlendirme Zamanı

Performansın ne zaman değerlendirildiği de önemlidir. Örneğin temizlik ajanının performansını ilk saat sonunda değerlendirirsek işe hızlı başlayan ama sonra yavaşlayan belki de hiç çalışmayan ajan ödüllendirilmiş, sürekli çalışan cezalandırılmış olur. Bu nedenle performansı günlük veya ömür boyu şeklinde daha uzun vadede değerlendirmek gerekir.

Mükemmellikle rasyonelliğin ayırt edilmesi gerekir. Mükemmel ajan davranışlarının vereceği sonucu bilir buna göre davranır. Fakat gerçekte mükemmellik imkansızdır. Aşağıdaki örneği göz önüne alalım:

Okula gelirken demiryolunun şısında bir arkadaşınızın gitmekte olduğunu gördünüz. Demiryolu geçiti açıktı arabalar geçiyordu. Arkadaşınıza başka türlü erişemeyeceğiniz için demiryolundan geçmeye başladınız. Bu sırada bir yolcu uçağının kapısı üzerinize düştü.

Demiryolundan geçmek rasyonel olmayan bir davranışmıdır?

Rasyonellik lananlara bağlı olarak beklenen başarı ile ilgilidir. Çoğu zaman demiryolundan geçmek lı sonuç verdiği üzerinize uçak kapısı düşeceğini tahmin edemeyceğiniz için demiryolundan geçmek rasyonel bir davranıştır. Eğer ajanın düşen kapıyı saptayabilecek bir radarı varsa o zaman haraket rasyonel değildir. Benzer şekilde demiryolu geçidi kapalı iken geçmek de rasyonel olmayan bir davranıştır. Diğer bir deyişle ajanı layabileceği bir durumu dikkate almayarak sız olduğu zaman suçlayabiliriz.

Sonuç olarak herhangi bir andaki rasyonellik dört şeye bağlıdır:

Başarı derecesini belirten performans ölçüsü,

Ajanın o ana kadar ladığı her şey (algı serisi-percept sequence),

Ajanın çevre hakkında bildikleri,

Ajanın yapabileceği hareketler.

İdeal Rasyonel Ajan

Yukarıdaki sonuçlardan yola çıkarak ideal rasyonel ajan aşağıdaki şekilde mlayabiliriz:

Her olası algı serisi için, algı serisi sahip olduğu bilgileri kullanarak performans ölçüsünü maksimize edecek şekilde davranan ajan ideal ajandır.

Demriyolu geçidinin kapalı olup olmadığına bakmaz isek algı serisi bize hızla yaklaşan bir treni söyleyemez. Demiryolu geçidine bakmadan geçmek riski çok yüksek olduğu için rasyonel bir davranış değildir. İdeal rasyonel ajan adımını atmadan önce bakma eyleminde bulunmalıdır. Çünkü bakmak beklenen performansı artırır. Bu nedenle yararlı bilgileri elde etmek amacıyla yapılan eylemler rasyonelliğin bir parçasıdır.

Algı Serisinden Eyleme İdeal Eşleme

Ajanın davranışı yalnız algı serisine bağlı ise olası tüm algı serilerine şı gelen eylemler tablo haline getirilerek bir ajan mlanabilir. Çoğu zaman bu tablo çok uzun olacaktır. Oluşturulan tabloya algı serisinden eyleme eşleme denir. Eğer eşleme ajanı mlıyorsa ideal eşleme de ideal ajanı mlar. Eşleme için tablonun herbir elemanının ayrı ayrı belirtilmesi gerekmez. Örneğin hesap makinesindeki karekök fonksiyonunu basit bir ajan olarak göz önüne alalım. Bu ajanın algı serisi basılan tuşlardır. İdeal eşleme; girilen pozitif sayı x ise z2»x olacak şekilde 4 basamak doğrulukta z’yi göstermektir. Bu amaçla tablo kullanmak yerine Newton yöntemi kullanılarak yazılan ile ajan mlanabilir. Tablo çok uzun olmasına şın ajan çok kısa bir programdır. Aşağıda tablo görülmektedir:

Otonomi

Eğer bir ajanın eylemleri tamamen sahip olduğu bilgilere bağlıysa yani algı serisini dikkate almıyorsa otonom değildir. Eğer bir sistemin davranışları kendi deneyimleri ile saptanıyorsa otonomdur. Otonom kelimesi insanın doğrudan kontrolü altında olmayan anlamında da kullanılır. Örneğin otonom kara aracı (insansız). Otonom olan ajanlar çevre koşulları değiştiğinde yeni koşullara adapte olarak görevini başarı ile sürüdürebilir. Eğer sadece önceden verilen bilgileri kullanırsa sız olma olasılığı yüksektir.

Zeki Ajanların Yapısı

YZ ajan ı yazma işidir. Bu programlar dan eyleme eşleme yapan programlardır. Yazılan programlar bir yapı üzerinde çalıştırılacaktır. Bu yapı olabileceği gibi özel amaçlı donanım da olabilir. Yapı sensorlardan gelen ları programa aktarır, ı çalıştırır efektörler ile ın davranışını gerçekleştirir. Ajan yapı programdan meydana gelmektedir:

Ajan = Yapı +

Ajan ı tasarlamadan önce ajanın çalışacağı çevrenin, lamaların, eylemlerin amaçların mlanması gerekir. Aşağıdaki tabloda bazı ajan tipleri verilmiştir.

Ajan Tipi

lama

Eylem

Amaç

Çevre

Tıbbi teşhis sistemi

Bulgular, hastanın cevapları

Sorular, testler

Sağlıklı , minimum maliyet

, hastahane

Uydu görüntü analiz sistemi

Değişik yoğunluk renkte pikseller

Görüntüyü sınıflandır, bas

Doğru sınıflandırma

Uydudan gelen görüntü

Rafineri Kontrolörü

Sıcaklık, basınç okumaları

Valfleri aç, kapa; sıcaklığı ayarla

Saflığı emniyeti maksimum yap

Rafineri

İnteraktif İngilizce öğreticisi

Yazılı kelimeler

Alıştırmalrı, önerileri, düzeltmeleri yaz

Öğrencinin notunu maksimize et

Öğrenci kümesi

Ajan Programları

Zeki ajanlar oluşturulurken aynı iskelet kullanılacaktır: çevreyi lamak eylem üretmek. Ajan ının en basit aşağıda görülmektedir:

Eşleme algı serisinden eyleme yapılmaktadır ama ajana yalnız o anki algı gelir. Bu ların seri halinde saklanıp saklanmaması ajana bağlıdır. Bazı çevrelerde algı serisi saklanmaksızın oldukça lı olunabilir. Karmaşık çevrelerde ise tüm ların saklanması fizibil olmamaktadır.

Ajan ı yazmanın en basit yolu tablo kullanmaktır (look-up table). Bu durumda olası tüm algı serisinin bellekte tutulması indeks kullanarak erişilmesi gerekir. Tablo kullanımında aşağıdaki olumsuzluklar ortaya çı:

Yalnız satranç oynayabilen basit bir ajan için bile gerekli tablonun 35100 girişi olması gerekir.

Tasarımcnın tabloyu oluşturması çok uzun zaman alır.

Ajan otonom değildir. Çünkü en iyi eylem hesabı tamamen önceden girilmiştir.

Ajana bir derece otonomi narak öğrenme mekanizması oluşturulsa bile tüm girişler için tablonun doğru değerlerini bulması sonsuza kadar sürer.

Basit Refleks Ajanlar

Bir kameradan gelen görüntü 50 Mbyte/sn. hızındadır (saniyede 25 çerçeve, her çerçeve 1000*1000 piksel her piksel 8 bit 8 bit yoğunluk bilgisi). Bir saat için gerekli look-up tablosu 260*60*50M girişli olacaktır. Genel giriş çıkış ilişkileri kullanılarak tablo kısaltılabilir. Örneğin öndeki araç fren yaparsa fren lambaları yanar sürücü buna dikkar ederek frene basar. Aynı işlem görsel giriş kullanılarak “öndeki araç fren yapıyor” koşulu ile ajan ındaki “fren yap” eylemi ilişkilendirilebilir. Bu ilişkiye koşul-eylem (condition-action) kuralı denir aşağıdaki şekilde yazılabilir:

EĞER Öndeki_Araç_Frenliyor İSE frenle ( if/then)

İnsanlarda benzeri davranışlar bir öğrenmenin sonucunda ( sürme gibi ) veya refleks olarak ( kızgın sobadan elin çekilmesi gibi) . Aşağıda koşul-eylem kuralının ajana dan eyleme bağlantıyı sağladığı görülmektedir.

Basit Refleks ajanın şematik diyagramı.

Basit Refleks ajan. lamayla mlanan mevcut duruma uyan kuralı bularak çalışır.

Giriş_Yorumla : lanan mevcut durumu soyut olarak mlar (abstraction).

Kural_Eşleme : Kural kümesinde mevcut duruma uyan ilk kuralı verir.

Kural_Eylem : Kurala bağlı olarak yapılacak eylemi verir.

Değişimleri İzleyen Ajan

O anki lamaya bağlı olarak doğru verilebiliyor ise basit refleks ajanlar lı olabilir. Arabanın arkasında fren lambalaraırına ek olarak dönüş sinyal lambalarıda yer almaktadır. Frene basılıp basılmadığını saptamak için arabanın her iki kenarındaki lambanın komtrol edilmesi ferekmektedir. Bu amaçla bir önceki görüntünün saklanması gerekmektedir. Bir önceki görüntüde her iki lamba sönükse o anki görüntüde ikisi de yanıyor ise frene basıldığını söyleyebiliriz. Bu nedenle doğru eylemin seçilebilmesi için bazı bilgilerin saklanması gerekmektedir. Buna iç durum ( internal state) adı verilir.

Sensorlardan gelen bilgi daha önceki duruma bağlı olarak farklı sonuçlar verebiliyor ise önceki durumun da saklanması gerekir. Dünyanın durumu yalnız o anki girişe değil bir önceki duruma da bakılarak saptanır. Aşağıda iç durumlu bir refleks ajan görülmektedir.

İç durumlu refleks ajan

Yenile_Durum: Sensorlardan gelen bilgiye veya yapılan eyleme bağlı olarak yeni iç durumu oluşturur.

Amaç tabanlı Ajanlar

Çevrenin o anki durumunu bilmek ne yapılacağına vermeye yetmeyebilir. Örneğin bir kavşakta sağa, sola dönebilir veya doğru gidebilir. Doğru arabanın nereye gideceğine bağlıdır. Diğer deyişle ajan o anki durumla birlikte amaçla ilgili bilgilere de gereksinim duyar. Ajan ı, olası kararların sonuçları ile bu bilgiyi birleştirerek doğru eylemde bulunabilir. İstenen amaca bazı durmlarda kolayca erişilebileceği gibi bazen çok karmaşık işlemler yapılması gerekebilir. Ajanın amacına erişebilmesi için yapacağı eylem sırası YZ’nin alt alanları olan arama (search) planlama (planning) da incelenmektedir.

Bu şekilde verme daha önce anlatılan koşul-eylem kurallarından olarak farklıdır. Refleks ajan fren lambasını gördüğü zaman fren yapar. Amaç tabanlı ajan ise öndeki aracın fren lambaları yandığı zaman onun yavaşlayacağını çıır. Öndeki araca çarpmama amacını gerçekleştirecek eylem ise fren yapmaktır. Her nekadar amaç tabanlı azan etkin görünmese de esnektir. Örneğin yağış başladığı zaman frenlerin etkin bir şekilde kullanılabilmesi için bilgisini yenileyebilir. Diğer yandan refleks ajan için çok sayıda koşul-eylem kuralı yazmak gerekir. Amaç tabanlı ajanlarda amacı değiştirerek farklı noktalara erişmek mümkündür. Refleks ajanlar ise sadece bir noktaya giderler. Aşağıdaki şekilde amaç tabanlı ajanın yapısı görülmektedir.

Amaç tabanlı ajan.

Fayda Tabanlı Ajanlar

Amaçlar yalnız başına yüksek kalitede davranış üretmek için yeterli değildir. Örneğin arabanın istenen yere gidebilmesi (amaca erişmek) için izleyebileceği bir çok yol olabilir. Bu yolların bazıları diğerlerinden daha hızlı, daha güvenli veya daha ucuz olabilir. Amaçlar “mutlu” “mutsuz” durumları arasında kaba bir ayırım sağlar. Oysa daha genel performans ölçüleri amaca erişirken ne kadar mutlu olduğunu gösterebilir. Mutlu kelimesi bilimsel görülmediği için bunun yerine fayda (utility) kelimesi kullanılmaktadır. Fayda fonksiyonu; mevcut durumu, derecesini gösteren bir gerçel sayıya dönüştürür. Fayda fonksiyonları mlanırken çelişkiye düşülebilir. Örneğin hız emniyetin ağırlıkları uygun şekilde seçilmelidir. Birden fazla amaç olduğu zaman bu amaçların da önem sırasına göre sıralanması gerekebilir.

Amaçlar her nekadar kaba olsada istenen amaca erişmek için gereken eylemi kolayca bulurlar. Bazı durumlarda fada fonksiyonu bir amaç kümesi şeklinde de ifade edilebilir. Aşağıdaki şekilde fayda tabanlı ajanın yapısı görülmektedir.

Fayda tabanlı ajan.

ÇEVRE

Bu bölümde ajan çevre ilişkileri incelenecektir. Önce ajanların çalışacağı farklı çevreler bu çavrelerin ajan tasarımındaki etkileri incelenecektir.

Çevre Özellikleri

Çevre aşağıdaki özelliklere bağlı olarak sınıflanlandırılabilir.

Erişimli / Erişimsiz (Accessible vs. inaccessible)

Eğer ajanın sensorları çevrenin durumunu tamamen saptayabiliyorsa çevre ajan için erişilebilirdir. Çevrenin erişilebilir ise değişimleri izlemek için durum saklaması gerekmez.

Deterministik/ Deterministik olmayan ( Deterministic vs. nondeterministic)

Eğer çevrenin gelecek durumu o anki durum ajanın eylemine bağlı olarak tespit edilebiliyor ise çevre deterministiktir. Eğer çevre erişimli değil ise deterministik olmadaığı kabul edilebilir.

Bölümlü/ Bölümsüz ( Episodic vs. nonepisodic)

Bölümlü çevrede ajanın deneyimleri bölümlere ayrılmıştır. Her bir ajanın algı eyleminden oluşur. Eylemin kalitesi sadece o bölüme aittir. Bir önceki bölümdeki eylemin o anki bölümde bir etkisi yoktur. Bölümlü çevre, ajanın ileriyi düşünmesi gerekmediği için daha basittir.

Statik / Dinamik ( Static vs. dynamic)

Ajan verirken çevre değişiyorsa dinamik değişmiyor ise statiktir. Ajan verirken dünyanın değişimini izlemesi gerekmediğinden zaman önemli olmadığından statik çevrede çalışmak daha kolaydır. Eğer çevre zamanla değişmiyorsa ama ajanın performansı zamana göre değişiyorsa çevre yarı dinamik (semidynamic) olarak adlandırılır.

Ayrık / Sürekli ( Discrete vs. continuous)

Eğer sınırlı sayıda farklı iyi mlanmış algı eylemler var ise çevre ayrıktır. Satranç ayrıktır çünkü her hamlede olası hareketler sabit sayıdadır. sürme süreklidir, çünkü arabanın diğer ların pozisyonu hızı sonsuz sayıda sürekli değerler alabilirler.

Aşağıdaki tabloda bazı çevreler karakteristikleri verilmiştir.

Çevre

Erişilebilir

Deterministik

Bölümlü

Statik

Ayrık

Santranç(saatle)

Evet

Evet

Hayır

Yarı

Evet

Satranç (saatsiz)

Evet

Evet

Hayır

Evet

Evet

Poker

Hayır

Hayır

Hayır

Evet

Evet

Tavla

Evet

Hayır

Hayır

Evet

Evet

sürme

Hayır

Hayır

Hayır

Hayır

Hayır

Tıbbi teşhis

Hayır

Hayır

Hayır

Hayır

Hayır

Görüntü analiz

Evet

Evet

Evet

Yarı

Hayır

Parça toplama robotu

Hayır

Hayır

Evet

Hayır

Hayır

Rafineri kontrolörü

Hayır

Hayır

Hayır

Hayır

Hayır

İnteraktif İng.öğretici

Hayır

Hayır

Hayır

Hayır

Evet

Çevre Programları

Ajan proogramlarını test etmek içiin çevre simülatörü kullanılır. Simülatörler bir veya daha fazla ajanı giriş olarak alır, herbir ajana doğru ları ileterek geriye eylemlerini alır. Simülatör ajanların eylemine bağlı olarak çevreyi yeniler. Yenileme işleminde ajan eylemine ek olarak bazı dinamik özellikler de eklenebilir. Bu nedenle çevre başlangıç durumu yenileme fonksiyonu ile mlanır. Aşağıda çevre simülatör ı görülmektedir.

Simülatör ına her bir ajanın performansını değerlendirecek performans fonksiyonu da eklenebilir

PROLOG LOJİK PROGRAMLAMA

Son yıllara kadar programlama bir problemin çözümü için yapılması gerekenlerin adım adım yazılması şeklindeydi. Yani bilgisayara işlemlerin NASIL YAPILACAĞI (procedural) söylenmekteydi. Fortan, C, Pascal gibi diller bu yaklaşımı kullanmaktadır.

Programlamada bir diğer yaklaşım ise doğru cevabın özelliklerinin verilerek yapılacak işlemlerin belirtilmesidir. Yani bilgisayara işlemlerin yapılacağı değil NE YAPACAĞI (declarative) söylenmektedir. Bu tip programlama LOJİK PROGRAMLAMA olarak isimlendirilir. Bu amaçla Lisp PROLOG gibi programlama dilleri geliştirilmiştir.

Deklaratif dillerin üç önemli üstünlüğü vardır.

Lojik programlama işlemlerin mekanizmaları yerine mantığına odaklandığından doğal olarak yüksek seviyelidir. İşlemlerin yapılacağı makinaya bırakıldığı için karmaşık fikirler kolay bir şekilde ifade edilebilir.

Lojik, verilerin gerçek (fact) kural (rule) olarak belirtilmesine olanak sağlar. Örneğin A noktası B noktasına bağlıdır, B noktası C noktasına bağlıdır şeklinde gerçekler belirtilebilir. X Y’ye Y Z’ye bağlı ise X Z’ye bağlıdır şeklinde genel kurallar belirtilebilir.

Lojik programlama dilleri kullanılarak programları daha hızlı kolay bir şekilde geliştirilebilir. Programcının karmaşık fikirleri ifade edebilmesi veri yapılarını hızlı bir şekilde oluşturmasına olanak r.

PROLOG’A GİRİŞ

Prolog dünyayı ifade etmek için nesneleri (object) aralarındaki ilişkiyi (relation) kullanır. Aşağıdaki bildirime bakalım:

Ali ders verir.

Bu cümle iki nesne (Ali ders) arasındaki ilişkiyi belirtmektedir. İlişki nesnelerden daha soyut bir kavramdır. Bu nedenle aynı ilişkiyi diğer nesneler için de kullanabiliriz:

Oya ders verir.

Ali seminer verir.

Hasan ders verir.

Yukarıda verilen gerçekler kullanılarak bu dünya için sorular sorabiliriz. Yalnız belirtilen gerçek kurallar doğru kabul edilmektedir. Bunların dışındakiler yanlış kabul edilir.

Örneğin; Ali’nin ders verdiği doğru mu ? şeklinde bir soru sorarsak cevap Evet olmalıdır. Oya’nın seminer verdiği doğru mu? Sorusunun cevabı Hayır olmalıdır. Kimler ders vermektedir? Şeklindeki bir sorunun cevabı : Ali, Oya, Hasan olmalıdır. Çünkü bu kişiler ders ilişkisini gerçeklemektedirler.

Gerçeklerin yanında nesneler arasında daha soyut daha genel ilişkileri belirten kurallar vardır. Örneğin ders veren herkesin hoca olduğunu kabul edersek aşağıdaki kuralı yazabiliriz:

eğer KİŞİ ders veriyor

ise KİŞİ hocadır. (if/then)

Burada KİŞİ bir değişkendir. Kuralın eğerli kısmı dünya hakkındaki koşulu vermektedir. Verme ilişkisini kullanarak ders nesnesi ile bilinmeyen KİŞİ nesneler kümesini belirtir. KİŞİ yerine uyarsa onun hoca nesnesi ile ilişkisi olduğunuu söyleyebiliriz.

Yukarıdaki kural gerçekleri kullanarak yeni ilişkileri çıkarabiliriz:

Ali hocadır.

Oya hocadır.

Hasan hocadır.

Çünkü Ali, Oya Hasan kuralın koşulun gerçeklemektedir : KİŞİ ders veriyor.

Benzer şekilde, gerçekler kümesi kuralı kullanarak sorgulama yapabiliriz. Örneğin; Oya hoca mı? Şeklinde bir sorunun cevabı Evet olmalıdır.

hocadır şeklinde daha karmaşık bir sorunun cevabı: Ali, Oya Hasan olmalıdır.

Bu Prolog’un olarak çalışma şeklidir. Gerçekler kümesi bildirilir, nesneler kümesini belirten kurallar bildirilir soruları cevaplamak içiin kurallar kümesi ile gerçekler kümesi birleştirilir.

PROLOG SÖZDİZİMİ (syntax)

İlişkiler yüklem (predicate) olarak aşağıdaki formda belirtilir:

* verir(ali, ders). % Ali ders verir.

Burada “verir” yüklemi iki nesne arasındaki ilişkiyi belirtmektedir. Nesne sayısı 0 veya herhangi bir sayıda olabilir. Bu sayı “arity” olarak isimlendirilir.

Kuralların yazımında bazı sınırlamalar vardır:

Nesne yüklem isimleri küçük harf ile başlar.

Önce yüklem yazılır. Eğer nesneler var ise parantez içinde virgülle ayrılmış şekilde yazılır.

Her gerçek nokta karakteri ile sonlandırılır.

Bu sınırlamalara bağlı olarak yukarıda verilen gerçekleri aşağıdaki şekilde yazabiliriz:

verir(ali,ders).

verir(oya,ders).

verir(ali,seminer).

verir(hasan,ders).

Gerçekleri Sorgulama:

Gerçekler kümesi verildikten sonra onların hakkında sorular sorulabilir. Prolog’da sorgulama ı başlatma şeklidir. Yazım olarak sorgulama gerçeğe (fact) benzer ama yüklemde değişken kullanılabilir. Değişkenler büyük harf ile başlar.

Sorgulama sonucu Evet/Hayır veya nesneler kümesi şeklinde olabilir. En basit şekli Evet/Hayır şeklinde olanıdır:

verir(oya,ders). sorusunun cevabı Evet,

verir(oya,seminer) sorusunun cevabı Hayır olmalıdır.

Daha genel sorgulama nesneler kümesini içerir. Örenğin Kimler ders verir? Şeklinde bir soru prologda:

verir(X,ders).

Şeklinde yazılır. X ders ile arasındaki ilişkiyi gerçekleyen herhangi bir nesneyi temsil eden değişkendir. Yukarıdaki sorunun cevabı aşağıdaki şekilde olmalıdır:

X = ali

X = oya

X = hasan

Diğer yandan, Ali ne verir? Şeklindeki bir soru aşağıdaki şekilde yazılabilir:

verir(ali,X).

Bu sorunun cevabı

X = ders

X = seminer

olmalıdır.

ne verir şeklinde bir soru aşağıdaki şekilde sorulabilir:

verir(X,Y).

Bu sorunun cevabı aşağıdaki şekildedir.

X = ali , Y = ders

X =oya, Y = ders

X =ali, Y = seminer

X =hasan, Y = ders

KURALLAR

Kurallar gerçekler soyutlanmış gerçekler arasındaki ilişkiyi ifade eder. Yukarıda verilen gerçekler verir(X,Y) şeklinde soyutlanabilir. Burada X kişinin adı Y ise sunuş şeklidir. Kural çe aşağıdaki şekilde yazılabilir:

eğer KİŞİ ders veriyor ise KİŞİ hocadır. (if/then)

Kuralın “eğer” kısmı, “ise” kısmının işlem görebilmesi için gerçeklenmesi gereken koşullar kümesidir. Prologda, önce yalnız bir koşulun yer alabildiği İSE kısmı daha sonra EĞER kısmı yazılır:

hoca(X) :- verir(X,Y).

Yukarıda ifade ” X’in hoca olduğu doğrudur EĞER X’in Y’yi verdiği doğruysa” şeklinde okunabilir. Bu durum koşulu gerçekleştiren tüm X’ler için geçerlidir.

Ebeveyn çocuklar arasındaki ilişki hakkında aşğıdaki gerçekler kümesini gözönüne alalım:

ebeveyn(a,b).

ebeveyn(a,c).

ebeveyn(b,d).

ebeveyn(e,f).

Burada ebeveyn(X,Y)’nin anlamı X Y’nin ebeveynidir. Bu bilgilere ek olarak nesnelerin cinsiyetiyle ilgili bilgilerede gereksinim duyulabilir:

(X).

bayan(X).

Bu bilgiler kullanılarak nesneler arasındaki ilişkiler için kurallar yazılabilir. Örneğin herhangibir kişinin kardeşi ? kardeşi: ” X ile ebeveyni aynı olan ” şeklinde mlayabiliriz. Basit olması için sadece anne veya babanın kardeşlik için yeterli olduğunu kabul edelim. Bu amaçla aşağıdaki ifade yazılabilir:

EĞER ebeveyn(E,X),

ebeveyn(E,Y),

(Y)

İSE erkekkardeş(Y,X).

Bu ifade: ” Verilen X kişisi için, eğer X’in ebeveyni E ise Y kişisinin ebeveyni de E ise Y ise Y X’in erkekkardeşidir”. Burada X’in cinsiyeti önemli değildir. Bu kural prologda aşağıdaki şekilde yazılabilir:

erkekkardes(Y,X) :- ebeveyn(E,X),

ebeveyn(E,Y),

(Y).

X Y’nin farklı olduğunu belirtmediğimiz için bir kişi kendisinin kardeşi olabilir. Bu sorunu gidermek için X Y’nin farklı olması gerektiğini belirtmeliyiz:

erkekkardes(Y,X) :- ebeveyn(E,X),

ebeveyn(E,Y),

(Y),

not ( X==Y). % + X == Y

Burada not(X==Y) ifadesi X Y’ye eşit değil anlamındadır. Not ifadesi yerine “+ Y==X” yazılabilir.

Prologda bütün değişkenler yereldir. Yani sadece kural içinde geçerlidirler. Bu nedenle bir kuraldaki X değişkeni bir diğer kuraldaki X değişkeni ile aynıı değildir.

Yineleme (Recursion)

Prolog’un en ilgi çekici özelliklerinden birisi yineleme kapasitesidir. Yineleme bir şey kendisi sonlandırma koşulu kullanarak mlanırsa olur. Faktöriyel mı klasik bir örnektir:

N’in faktöriyeli N kere N-1′in faktöriyeline eşittir.

Sıfırın faktöriyeli 1′dir.

Faktöriyelin bu mı prologda kolayca ifade edilebilir:

faktoriyel(0,1). à gerçek

faktoriyel(N,X) :- M is N-1, à kural

faktoriyel(M,Y),

X is N * Y.

Bu örnekte gerçek kuraldan önce yazılmalıdır. Prolog’da gerçek kurallar programdaki yazılış sırasına göre işlem görmektedir. Prolog kuralın içinde faktoriyel(M,Y)’yi bulurken programda yüklemin ilk geçtiği yerden başlayarak çözümü arar. M sıfıra kadar azaltılmaktadır. M sıfır olduğunda “gerçeğe” erişildiği zaman geri dönüş işlemi başlar. Eğer gerçek kuraldan sonra yazılırsa sonsuz döngüye girilir.

Yineleme, programlarıın basit kısa olmasını sağladığı için çok kullanışlıdır ama yazılırken çok dikkatli olmak gerekir. Yineleme yalnız rakam ile değil veri yapıları ile de yaplabilir. Prolog’da veri atom (tek değer) veya liste (çok değer) olabilir. Liste elemanlar kümesidir. Elemanlar; sayı, harf, karakter dizisi hatta liste olabilir.

Liste [ ] içinde elemanları virgül ile ayrılmış şekilde yazılır. Aşağııda basit listeler görülmektedir:

[printer, monitor, mouse, cpu ]

[123, 45, 667]

[a, b, c, d, e, f, g]

Liste, elemanlar kümesi olduğu için kesişim, bileşim, fark gibi işlemler prologda yapılabilir. Örneğin; X, L litesinin üyesi ise doğru olan üye(X,L) yüklemi prologda aşağıdaki gibi mlanabilir:

uye(X,[X

_]).

uye(X,[_

L]) :- uye(X,L).

operatörü listeyi ilk eleman(baş) geri kalanı (kuyruk) şeklinde ikiye ayırır. Eğer X listenin ilk elemanı ise 1.satırdaki uye(X,[X

_]) yüklemi doğrudur. Altçizgisi “_” değişkenin değerini dikkate alma anlamındadır. Burada kuyrukta ne olduğuna bakılmamaktadır. Eğer birinci satır yanlış ise ikinci satıra bakılır. Bu satırda listenin ilk elemanı uzaklaştırılarak tekrar ilk elemanın X’e eşit olup olmadığına bakılır.

Not: üye yüklemi prologda “member(X,L)” şeklinde mlanmıştır.

Üye yüklemini bir dosyaya yazarak aşağıdaki sorgulamaları yapın:

uye(a,[b,c,a,d]).

uye(a,[b,c,d,e]).

uye(2,[1,2,3,34]).

uye(2,[1,5,3,34]).

Altküme işlemi de yararlı bir işlemdir. X listesinin tüm elemanları Y listesininde elemanı ise altkume(X,Y) yüklemi doğrudur. Bu problemi çözmemiz için X’in tüm elemanlarının Y’nin de elemanıı olup olmadığına bakmamız gerekir. X listesinde kontrol edilecek eleman yoksa durur aksi takdirde sızlıkla (fail) şılaşılır. aşağıdaki şekilde yazılabilir:

altkume([],_).

altkume([X

L],Y) :- uye(X,Y), altkume(L,Y).

Burada [] boş kümedir. X’deki tüm elemanlar kontrol edilince 1.satır doğru olur.

Uye yüklemini altküme yüklemini aynı dosyaya yazarak aşğıdaki sorgulamaları yapınız:

altkume([a,b,c],[x,a,g,b,f,c,k]).

altküme([1,5,10],[10,5,1,4]).

altküme([1,5,10],[10,5]).

Evirme (negation)

Bazı koşulların doğru olmadığını bulmak faydalı olabilir. Bu durum prologda “not” yüklemi veya

“+” sembolleriyle sağlanır. not’ın anlamı: verilen gerçek kuralları kullanarak koşulun “doğru” olduğunu ispatlamak olası değildir, bu nedenle “yanlış”tır. Bu kapalı dünya kabulu olarak bilinir. Örneğin; D doğu, B batı, G güney, K kuzey şeklinde 4 duvarlı bir oda yüklemini oda(D,B,K,G) şeklinde mlayalım. Her değişken; kapı için ‘k’, duvar için ‘d’, pencere için ‘p’ değerlerden birini alabilsin. Eğer kuzeyde kapısı olmayan bir oda istiyorsak aşağıııdaki kuralı yazabiliriz:

oda1(D,B,K,G) :- oda(D,B,K,G),

not(K==k).

Oda1 kuzeye kapısı olmayan odaları içerir. Oda1 yüklemini test etmeden önce oda yüklemini yazmak gerekir. Tüm olasılıkları belirtmek için 81 tane gerçek yazmak yerine bir yüklem tanmlayarak bu işlemi yapabiliriz.

duvar_tip(d). % duvar

duvar_tip(k). % kapı à gerçekler.

duvar_tip(p). % pencere

oda(D,B,K,G) :- duvar_tip(D),

duvar_tip(B), à kural

duvar_tip(K),

duvar_tip(G).

oda, oda1 kuralları ile duvar_tip gerçeklerini bir olarak yazarak aşağıdaki sorgulamaları yapınız:

oda1(D,k,K,G). à kuzeyde kapı yok, batıda kapı var , doğu güney serbest.

oda1(D,B,K,G). à kuzeyde kapısı olmayan tüm odalar.

Sonuçları Göstermek

Sorgulama sonucu istediğimiz cevaplara erişmekteyiz. Bu cevapları farklı formatta yazdırmak için write yüklemini kullanabiliriz. Örneğin yukarıdaki odaları yazdırmak için yaz_oda (D,B,K,G) yüklemini aşağıdaki şekilde yazabiliriz:

yaz_oda(D,B,K,G) :- write(D), write(’ ‘),

write(B), write(’ ‘),

write(K) write(’ ‘),

write(G) write(’ ‘), nl.

Burada nl yüklemi satırbaşı yaptırmak için kullanılmaktadır. Yaz_oda yüklemi oda1 yükleminin son satırına eklenerek kullanılabilir.

Cut & Fail (Kesme sızlık )

Prolog alternatif çözüm kanıtları bulacak bir sisteme sahiptir. Programları daha basit kodlarla çözebilmek için prologun davranışını değiştiren iki yüklem vardır: cut, fail.

Cut (kesme)

Cut ‘! ‘ karakteri ile gösterilir. Prolog alternatif çözümleri bulmak için geriye dönerek arama yapar (baktracting). Cut alternatif çözüm arayışını durdurur. Örneğin; 1-3 kademesinde verilen rakamı yazıyla yazdırmak için aşağıdaki yazılabilir:

yaz(1) :- write(’bir’).

yaz(2) :- write(’iki’).

yaz(3) :- write(’üç’).

yaz(X) :- X<1, write(’Sınır dışı’).

yaz(X) :- X>3, write(’Sınır dışı’).

Bu doğru çalışır ama herhangi bir X değeri için tüm satırlara bakılır. Yani tüm alternatifler gözden geçirilir. İstenen satır işlem gördükten sonra diğer satırlara bakılmaması Cut ile sağlanabilir:

yaz(1) :- !, write(’bir’).

yaz(2) :- !, write(’iki’).

yaz(3) :- !, write(’üç’).

yaz(_) :- write(’Sınır dışı’).

Burada arguman 1 ise ekrana “bir” yazar diğer cümlelere bakılmaz. write yüklemi alternatif çözümler üretmediği yalnız bir değer yazdığı için deterministiktir. Kesme işaretinin deterministik yüklemden önce veya sonra olması farketmez.

İki sayıdan büyük olanını veren max(X,Y,Z) yüklemi aşağıdaki gibi mlanabilir:

max(X,Y,X) :- X>=Y.

max(X,Y,Y) :- XX Y değerlerine bağlı olarak bu kurallardan biri lı diğeri sız olacaktır. Eğer birinci kural lı ise alternatif çözüm için ikinciye bakmak gereksizdir. Bu nedenle kesme isembolu kullanılarak aşağıdaki şekilde tekrar yazılabilir:

max(X,Y,X) :- X>=Y, !.

max(X,Y,Y).

X>=Y olduğunda birinci kural işlem görür kesme sembolu diğer max yüklemlerine bakılmasını engeller.

Fail (sızlık)

Prolog verilen soruya cevap bulmak için arama yapar cevabı bulursa ekrana yazar. Bulamazsa yani sız (fail) olursa geriye dönerek varsa alternatif çözüm yollarını dener. Aşağıdaki ı gözönüne alalım:

(kus).

(kedi).

(aslan).

yaz: (X), write(X), nl.

ı yükleyip yaz dediğimiz zaman prolog sadece kuş yazar. Eğer geri dönerek olası tüm çözümleri yazmasını istersek fail kullanarak kuralı aşağıdaki şekilde yazabiliriz:

yaz: (X), write(X), nl, fail.

Fail prologa sız olduğunu başka bir çözüm bulmasını söyler. Böylece prolog tüm olasılıkları denemek zorunda kalır. Bakılacak çözüm kalmadığında sızlıkla “no” yazıp durur. Eğer ın bu işlemlerden sonra başarı olduğunu belirtmek istiyorsak son satıra “yaz” ekleyerek ın “yes” ile sonlanmasını sağlayabiliriz:

(kus).

(kedi).

(aslan).

yaz: (X), write(X), nl, fail.

yaz.

Bilgi tabanını değiştirme

Prolog’un en büyük gücü programların kendilerini değiştirebilme yeteneğidir. Programlar gerçek kurallara bağlı olarak çalıştığı için bunların değiştirilmesi veya yenilerinin eklenmesi ın işleyişini değiştirecektir. Assert, asserta assertz bilgi tabanına yapmak için kullanılır. Assert bulunulan pozisyona, asserta başlangıca, assertz ise sona yapar. Örneğin yukarıda verilen programa aşağıdaki ifade ile bir gerçek eklenebilir:

assert((sinek)).

Bilgi tabanından çıkarma işlemi için retract kullanılır. Örneğin kedi’yi bilgi tabanından silmek için aşağıdaki ifadeyi yazabiliriz:

retract((kedi)).

silme işlemlerinin yapılabilmesi için yüklemlerin dinamik olduğunun prrogramın başında belirtilmesi gerekir. yüklemi aşağıdaki şekilde dinamik olarak mlanabilir:

:- dynamic /1.

Burada 1 sayısı yükleminin arguman sayısıdır.

Herhengi bir yüklemle ilgili tüm cümleleri silmek için abolish yüklemi kullanılır. Örneğin bilgi tabanındaki tüm mları aşağıdaki ifade ile silinebilir.

Abolish(/1).

silme işlemleri çalışırken bellekte yapıldığı için yazdığınız değişmeyecektir. İstenirse ın son bir dosyaya yazdırılabilir.

Terim okuma: read

read yüklemi prolog terimlerinin tuş takımından okunmasını sağlar. Tuş takımından girilen bilginin formatı yazarken kullanılan formatın aynısı olamalıdır nokta ile sonlandırılmalıdır.

?- read(X). à soru

selam. à kullanıcı girişi

X = selam à X değeri

yes. à sonuç

Eğer read yükleminin argumanına bir değer atanmış ise prolog bu değer ile girilen değeri şılaştırır:

?- read(evet). ?- read(evet).

evet. hayır.

yes no

Örneklerde görüldüğü gibi girilen değer argumanla aynı ise yes farklı ise no sonucu elde edilmektedir. Bu nedenle ın çalışması sırasında kullanıcıya sorulan evet/hayır tipindeki sorularda herhangi bir ek kontrol yapmadan ın işleyişi düzenlenebilir.

Örnek programlar:

Öğrenen

Öğrenen kendi bilgi tabanını değiştiren programdır. Bu amaçla önce başkentlerin saklandığı bir bilgi tabanı hazırlayalım:

:- dynamic (baskent/2).

baskent(turkiye,ankara).

baskent(irak, tahran).

baskent(yunanistan, atina).

Bu bilgi tabanını “bt.pl” ismiyle kaydedelim. Hazırladığımız BT’yi kullanan gerektiğinde yapan aşağıdaki şekilde yazılabilir.

% Baskent ı

basla :- reconsult(’bt.pl’), nl,

write(’isimleri küçük harfle yazın nokta ile sonlandırın’),nl,

write(’cıkış için “dur.” yazınız’), nl, nl,

sorgula.

sorgula :- write(’Ulke? ‘),

read(Ulke),

cevap(Ulke).

% Kullanıcı “dur.” yazdı ise bt’yi sakla çık.

cevap(dur) :- write(’ BT saklanıyor…’), nl,

tell(’bt.pl’), àçıkış dosyaya yönlendiriliyor.

write(’:-dynamic( baskent/2).’), nl,

listing(baskent), à tüm baskentler listeniyor.

told, à dosya kapatıldı.

write(’saklandı.’), nl.

% Eğer baskent kb’de ise göster sorgula’ya dön.

cevap(Ulke):- baskent(Ulke,Sehir),

write(Ulke),

write(’ nin baskenti ‘),

write(Sehir), nl, nl,

sorgula.

% Eğer baskent kb’de yok ise kullanıcıya sor kb’ye ekle sorgula’ya dön.

Cevap(Ulke):- + baskent(Ulke,_),

write(’Bilmiyorum, yardımcı olurmusunuz..’),nl,

write(’Baskent? ‘),

read(Sehir),

write(’tesekurler’), nl, nl,

assertz(baskent(Ulke,Sehir)),

sorgula.

PROBLEM ÇÖZME

Arama ile Problem Çözme

refleks ajan daha sonraki durumları gözönüne almaz. Refleks ajanın eylemi o anki lamalarının bir sonucudur. Üstelik ne eylemlerinin sonucu hakkında bir bilgisi ne de amacını bilmektedir. Bu bölümde amaç tabanlı ajanın bir türü olan problem çözme ajanı (PÇA) mlanacaktır. PÇA istenen duruma erişmek için ne yapmak gerektiğine eylem sırasını bularak verir.

Problem Çözme Ajanı - PÇA

Çevre durum değiştirirken zeki ajanların performans ölçüsünü maksimize edecek şekilde davrandıkları kabul edilir. Bu ma bağlı olarak lı ajan tasarımı güçtür. Ajana bir amaç verilirek tasarım basitleştirilebilir. İzmit’ten İzmir’e gitmek bir amaç olarak verilirse izlenebilecek çok sayıda yol bulunabilir. Yürüyerek gitmek de seçeneklerden biri olabilir. Ama İzmir’e varılması gereken zaman belirtilirse ajan sızlıkla sonuçlanacak yürüme seçeneğini dikkate almayacaktır. Amaçlar ajanın göz önüne alacağı seçenekleri sınırlayarak davranışlarını organize etmede yardımcı olur. Bu işlem için amacın ülize edilmesi gerekir. Amaç ülasyonu problem çözmede ilk adımdır.

Amaç bir durum olarak düşünülebilir. Eylemler ise durumlar arasında geçiş yapmayı sağlar. Bir şehirden diğerine gitmek için 100m ileri git, sağa dön, 50m ilerle şeklinde çok ayrıntılı eylemleri dikkate alırsak park yerinden dışarı çıkamayız. Ajanın eylemini bir şehirden diğerine gitmek şeklinde üst seviyede düşünürsek, durumlar herhangi bir şehirde bulunmak olacaktır. Problem ülasyonu istenen amaca erişmek için hangi durum eylemlerin gözönüne alınacağını belirleme işlemidir.

Herhangibir durumdan istenilen duruma varmak için olası eylem sıralarını deneyerek en iyi olanını seçme işlemine arama (searching) denir. Arama algoritmaları problemi giriş olarak alır çözümü eylem sırası olarak verir. Çözüm bulunduktan sonra önerilen eylemler icra edilir ( icra aşaması). Böylece ajan için “ülize , arama icra” şeklinde bir tasarım elde edilir.

Problemlerin ülüze Edilmesi

Bilgi Problem Tipleri

Çevre olarak temizlik dünyasını ele alalım. Bu dünyada yalnız iki yer vardır. Herbir yerde kir olabilir veya olmayabilir. Ajan iki yerin birinde bulunabilir. Aşağıdaki şekilde görüldüğü gibi 8 farklı dünya durumu vardır.

Süpürge

Süpürge

Kir

Kir

Kir

Kir

Süpürge

Süpürge

Kir

Kir

Süpürge

Süpürge

Kir

Kir

Süpürge

Süpürge

Basitleştirilmiş temizlik dünyasında 8 olası durum

Temizlik dünyasında ajan 3 farklı eylemde bulunabilir: sağ, sol em. Şimdilik emmenin %100 lı olduğunu kabul edelim. Amaç bütün kiri temizlemektir. Yani amaç {7,8} durum kümesine eşittir.

İlk olarak ajanın sensorları ile hangi durumda olduğunu tespit edebildiğini kabul edelim (erişimli dünya). Aynı zamanda ajan eylemlerinin ne sonuç vereceğini de kabul edelim. Bu durumda ajan izleyeceği herhangi bir eylem sırası sonucunda hangi duruma erişeceğini hesaplayabilir. Örneğin başlangıçta 5. Durumda ise [sağ, em ] eylem sırasının amaç durumuna getireceğini hesaplayabilir. Bu en basit durumdur tek durumlu problem (single-state problem) olarak adlandırılır.

İkinci olarak, ajanın eylemlerinin sonucunu bildiğini ama bulunduğu durumu tespit edemediğini kabul edelim. Ajan başlangıç durumunun {1,2,3,4,55,6,7,8} durum kümesindeki herhangi bir durum olduğunu bilir. Bu şartlar altında bile ajan çalışabilir. Çünkü sağ eyleminin sonucunda {2,4,6,8} durumlarından birine erişeceğini hesaplayabilir. Aslında başlangıç durrumu ne olursa olsun [sağ, em, sol, em] eylemleriyle ajan amaç duurumuna erişir. Özetle, dünya tam olarak erişimli değil ise ajan bir durum yerine içinde bulunabileceği durumları tahmin edebilmelidir. Bu çok durumlu problem (multiple-state problem) olarak adlandırılır.

Ajanın pozisyon kir sensörü olduğunu ama diğer karedeki kiri layamadığını kabul edelim. Sensörün {1,3} durumlarından birinde buluunulduğunu söylediğini kabul edelim. Ajan eylem sırasını [em, sağ, em] şeklinde ülize edebilir. Emme eylemiyle {5,7} durumlarından birine geçilir. Sağa hareket edildiğinde {6,8} durumlarından birine geçilir. Gerçekte 6 durumunda ise eylem sırası lı olacak 8 durumunda ise sız olacaktır. Bu nedenle problemin çözümünü garanti eden sabir bir eylem sırası yoktur.

Ajanın {1,3} durumunun birinden başlayarak problemi çözmesinin yolu vardır: em, sağa git, eğer kir var ise em. Yani problemin çözülmesi icra aşamasında lama gerektirir. Ajanın bir eylem yerine tüm eylem ağacını hesaplaması gerektiğine dikkat ediniz. Genel olarak, ağacın her dalı doğabilecek koşula bağlıdır. Bu tip problemler koşullu problem (contingency problem) olarak adlandırılır. Gerçek dünyadaki bir çok problem koşullu problemdir, çünkü mutlak tahmin imkansızdır. Bu nedenle insanların çoğu yürürken veya kullanırken gözlerini açık tutar.

Tek durumlu çok durumlu problemler benzer arama teknikleri kullanılarak çözülürler. Koşullu problemler ise çok daha karmaşık algoritmalar gerektirir. Ajan garantili çözümü bulmadan eylem yapmak zorunda kalabilir. Ajan tam çözümü bulmadan eylem yapmaya başlar icra aşamasında önüne çıkan koşullara bağlı olarak yeni eylemde bulunur. Diğer deyişle arama icra dönüşümlü olarak .

So olarak ajanın eylemlerinin etkileri hakkında bilgisi olmadığını kabul edelim. Bu bilinmeyen bir ülkede haritasız dolaşmaya benzer. Ajan gerçek dünyada eylemlerinin sonuçlarını farklı durumları yaşayarak öğrenecektir. Bu zeki ajanlar için en zor görevdir. Dikkatsiz bir ajan büyük tehlikelerle şılaşır eğer ölmezse çevrenin haritasını çıkararak daha sonraki eylemleri için kullanabilir. Bu tip problemler keşif problemi (exploration) olarak adlandırılır.

İyi mlanmış Problemler Çözümleri

Problem, ajanın ne yapacağına verirken kullanacağı bilgiler kümesidir. Problem mlamanın elemanları durumlar eylemlerdir:

Ajanın içinde bulunduğunu bildiği duruma başlangıç durumu (initial state) denir.

İşlem herhangi bir durumda yapılacak eylemle erişilecek durum şeklinde eylemi mlanamak için kullanır. Alternatif ülasyon S izleme fonksiyonu (successor function)dur. S(x); bir eylemle verilen x durumundan geçilebilecek durumların kümesini verir.

Başlangıç durumundan eylem sırası ile erişilebilecek durumlara problemin durum uzayı ( state space) denir. Durum uzayında yol (path) bir durumdan diğerine geçişi sağlayan eylem sırasıdır.

Amaç testi, ajanın istenen duruma erişilip erişilemediğini saptamada kullanacağı durum mıdır. Amaç durumu birden fazla ise herhangibirine erişilip erişilemediği test edilir. Amaç bazen soyut bir özellik de olabilir. Örneğin santrançta amaç şah mat durumuna erişmektir.

Birden fazla yol izlenerek amaca erişilebiliyor ise daha kısa veya az maliyetli olan seçilir. Yol maliyet (path cost) fonksiyonu yola bir maliyet atar.

Başlangıç durumu, İşlem kümesi, amaç testi yol maliyet fonksiyonu problemi mlar. Problemi temsil etmek için bu elemanlardan oluşan bir veri tipi mlanabilir.

veri tipi : problem

elemanları : Başlangıç-Durumu, İşlem-Kümesi, Amaç-Testi, Yol-Maliyet-Fn

Arama algoritmasının çıkışı başlangıç durumundan amaç testini sağlayan duruma olan yoldur yani çözüm dür.

Poblem Çözme Performansının Ölçülmesi

Aramanın etkinliği en az üç şekilde ölçülebilir:

Hiç çözüm buldu mu ?

Düşük yol maliyetli iyi bir çözüm mü ?

Problemi çözmek için gerekli zaman belleğe ilişkin arama maliyeti (search cost) ?

Toplam maliyet (total cost), arama maliyeti ile yol maliyetinin toplamıdır.

İki şehir arasında izlenecek güzergahı tespit etmede yol maliyeti kilometre olabilir. Arama maliyeti ise yolun durumu veya yapılabilecek hız olabilir. Toplam maliyeti hesaplarken kilometre ile dakikayı toplamak gerebilir. Bu durumda ajan hangisine daha fazla ağırlık vereceğini tespit etmelidir.

Durum Eylemlerin Seçilmesi

Romanya’nın basitleştirilmiş yol haritası.

Yukarıdaki şekilde verilen haritada A’dan B’ye gitmek şeklinde basit bir problemle başlayalım. Uygun durum uzayı her durumun bir yeri gösterdiği 20 duruma sahiptir. Başlangıç durumu “A”dır. Amaç testi “B mi?” dir. İşlemler şehirler arasındaki yollarda sürmeye şı gelir.

Bir çözüm yolu AàSàRàPàB şeklindedir. Çözüm için bir çok yol vardır. Bu çözümlerin en iyisinin hangisi olduğuna vermek için yol maliyet fonksiyonunun neyi ölçtüğünü bilmek gerekir. Bu mesafe veya beklenen zaman olabilir. Mevcut haritada bunların hiç biri mlanmadığı için adım sayısını maliyet fonksiyonu olarak alabiliriz. S F’den geçen yolun maliyeti 3 olduğu için en iyi çözümdür.

Burada, durum mında yol hava durumu sürücünün aç olup olmadığı gibi detaylar B’ye giden bir yol bulma problemi ile ilgili olmadığı için dikkate alınmamıştır. Gösterimden detayların çıılması işlemine soyutlama (abstraction) denir. Durum mı soyutlandığı gibi eylemler de soyutlanmalıdır. A’dan Z’ye gitmenin aracın yer dağiştirmesi, yakıt eksilmesi, kirlilik yaratması gibi bir çok etkisi vardır. ülasyonda yalnız yer değiştirme dikkate alınacaktır. İyi bir soyutlama, soyut eylemlerin kolayca yapılabileceği şekilde mümkün olduğu kadar detayın çıılmasını gerektirir.

Örnek Problemler

Problemler; değişik problem çözme yöntemlerini denemek amacıyla kullanılan oyuncak problemler (toy problems) çözümü daha güç olan insanlar için önemli olan gerçek dünya problemleri (real-world problems) olamak üzere ikiye ayrılabilir. Oyuncak problemlerin mı iyi bir şekilde yapılabildiği için algoritmaların performansını şılaştırmak için değişik araştırmacılar tarafından kullanılabilir. Gerçek dünya problemlerinin ise üzerinde anlaşılmış tek bir mı yoktur.

Oyuncak Problemler

8-puzzle

8-puzzle, 3*3′lük tahtada 1′den 8′e kadar numaralandırılmış taşlar bir boşluk yer alır. Taş bitişikteki boşluğa hareket edebilir.

Başlangıç durumu Amaç durum

4′ü boş yere götür yerine, boşluğu solundaki taşla değiştir demek daha az sayıda İşlem gerektirir daha mantıklıdır. Oyunun ülasyonu aşağıda verilmiştir:

Durumlar: Durum mı 8 taşın herbirinin 9 kareden birinde bulunduğunu belirtir. Boşluğun yerini belirmek de faydalı olur.

İşlemler : Boşluk sol, sağa, yukarı veya aşağı hareket edebilir.

Amaç testi : Yukarıdaki şekilde gösterilen durum.

Yol maliyeti : Her bir adımın maliyeti 1′dir. Yol maliyeti de yolun uzunluğuna eşittir.

8-Vezir Problemi

Amaç satranç tahtasına 8 veziri biribirini tehdit etmeyecek şekilde yerleştirmektir. Bu amaçla geliştirilmiş özel algoritmalar olmasına şın n-Vezir problemleri arama algoritmalarının testinde ilgiyi korumaktadır. Temelde iki çeşit ülasyon vardır: artışsal (incremental) ülasyonda vezirler tek tek yerleştirilmektedir, tam durum (complete-state) ülasyonunda ise 8 vezir tahta üzerine yerleştirilip hareket ettirilmektedir. Sadece son durum dikkate alındığı için yol maliyeti dikkate alınmaz yalnız arama maliyetine bakılır:

Amaç testi: Tahtada birbirini tehdit etmeyen 8-vezir.

Yol maliyeti: sıfır.

Farklı durum İşlemler de vardır:

Durumlar: 0-8 vezirin herhangi bir düzenlemsi.

İşlemler: Herhangi bir kareye vezir koymak.

Bu ülasyonda araştırılacak 648 olası sıra vardır. Eğer İşlem:

İşlemler: Tehdit edilmeyen en soldaki boş kareye vezir koy.

Bu şekilde tehdit edilmeyen durumları tespit etmek kolaydır. Ama 7 vezirden sonra mümkün eylem kalmamaktadır. Bu nedenle arama işlemi başka bir seçeneği denemelidir. Hızlı bir hesap araştırılacak yalnız 2057 olası sıra olduğunu gösterir. Doğru ülasyon arama uzayının boyutunu büyük ölçüde küçültür.

Tehdit edilen veziri aynı kolonda başka bir kareye götürme işlemi de zaman alsa da sonunda çözümü bulur.

Kripto Aritmetik

Kripto aritmetik (cryptarithmetic) problemlerinde rakamların yerini harfler almıştır. Amaç toplama işleminin doğru olabilmesi için harflerin rakam şılığını bulmaktır:

FORTY

TEN

+ TEN

SIXTY

29786

850

+ 850

31486

Çözüm: F = 2, O = 9, R = 7 …

Diğer örnekler:

SEND CROSS

+MORE +ROADS

MONEY DANGER

En basit ülasyon aşağıdaki gibi olabilir:

Durumlar: Bazı harflerin rakamlarla değiştirildiği kripto aritmetik bulmaca.

İşlemler: Bir harfin bulunduğu tüm yerleri bulmacada daha önce kullanılmayan bir rakam ile değiştir.

Amaç testi: Yalnız rakamlardan oluşan bulmaca doğru aritmetik sonucu veriyor.

Yol maliyeti: Sıfır. Tüm çözümler aynı geçerlilikte.

Misyonerler Yamyamlar ( Missionaries & cannibals)

Problem şu şekilde mlanır: 3 misyoner 3 yamyam nehrin bir kenarındadır bir veya iki kişiyi taşıyabilecek bir bot vardır. Misyonerlerin sayısı herhangi bir yerde yamyamların sayısından az olmayacak şekilde herkesin nehrin şısına geçebilmesinin yolunu bulunuz.

Bu problem, problem ülasyonuna analitik açıdan yaklaşan ilk makalenin konusu olduğu için çok ünlüdür ( Amarel,1968). Problem çözme yöntemlerini uygulamadan önce gerçek yaşam problemlerinin soyutlanması gerekir.

Şöyle bir sahne hayal edelim: Arawaskan kabilesinin üç üyesi, Alice, Bob Charles timsah kaynayan Amazon nehrinin kenarında yeni arkadaşları Xavier, Yolanda Zelda ile durmaktadır. Bu esnada yağmur yağmakta ötmektedir. Xavier, Yolanda Zelda misyonerdir yeni arkadaşlarına yalnız veya az sayıda yakalanırlarsa ne olacağı konusunda şüpheleri vardır. kıyaya bağlı küçük teknenin nehrin iki yakasında geçişi sağladığı konusunda emin değillerdir.

Bu problemi ülüze etmek için: ilk adım yağmur, timsah gibi çözüme etkisi olmayan tüm detayları ihmal etmektir. Bir sonraki adım doğru işlem kümesinin ne olduğuna vermektir. İşlemin bir veya iki kişiyi botla nehrin şısına geçirmek olduğunu biliyoruz. Ama, botun içinde geçen zamanı gösteren bir duruma gereksinim olup olmadığına vermemiz gerekir. Botta iki kişi olabileceği için yamyamlar sayıca misyonerlerden fazla olamaz. Bu nedenle geçişin sadece uç noktaları önemlidir. Bireylerin de soyutlanması gerekir. Çözüm için misyonerlerin veya yamyamların isimleri gereksizdir. 3 misyoner 3 yamyamın herhangii bir permütasyonu aynı sonucu verir. Bu yaklaşımla problem aşağıdaki şekilde mlanabilir:

Durumlar: Durum, misyonerlerin yamyamların sayısı ile botun nehrin hangi kenarında olduğunu gösteren 3 rakamdan oluşur. Başlangıç durumu (3,3,1) dir.

İşlemler: Her durumda olası işlemler; bir misyoner, bir yamyam, iki misyoner, iki yamyam veya herbirinden birer kişiyi botla şı kıyıya geçirmektir.

Amaç testi: (0,0,0) durumuna erişmek.

Yol maliyeti: Nehri geçiş sayısı.

Durum uzayı oldukça küçük olduğu için bu problem bilgisayarla çözülebilir.

Temizlik Dünyası (Vacuum world)

Bu problem daha önceki bölümde anlatılmıştı.

Hanoi Kulesi ( Tower of Hanoi)

Muz problemi (Monkey & Bananas)

Aç bir tavandan muzların asılı olduğu bir odadadır. Odada sandelye sopa vardır. Maymunun sandelye üzeerine çıkarak sopayla muzları düşürüp yiyebilmesi için izleyeceği en iyi eylem sırası .

Gerçek Dünya Problemleri

Rota Bulma

Rota bulma algoritmaları; ağları, seyahat sistemleri, havayolu seyahat planlama sistemleri gibi değişik alanlarda kullanılmaktadır. Havaylu uygulaması çok karmaşıktır çünkü yol maliyeti çok karmaşıktır; , yer kalitesi, zaman, uçak tipi, indirimler .. .Üstelik problemdeki eylemler de tamamen bilinen çıktıları vermez: uçuş geçikebilir, bağlantılar kaçırılabilir, sis veya acil durumlar gecikmeye olabilir.

Turlama gezen satıcı (travelling salesperson) problemi

Haritada verilen her şehri, B şehrinden başlayıp bitecek şekilde, en az bir kere ziyaret et şeklinde probleme bakalım. Bu rota bulma problemine benzemektedir, her ikisinde de iki şehir arasında seyahat edilmektedir. Ama bu problemde daha fazla bilginin kaydedilmesi gerekir. Ajanın yerine ek olarak, her bir durum ajanın ziyaret ettiği şehirleri de izlemelidir. Amaç testi 20 şehri de ziyaret ettikten sonra B’ de olmaktır.

Gezen satıcı problemi (TSP) ünlü bir turlama problemidir. Amaç en kısa turu bulmaktır. Satıcıların gezilerini planlamaya ek olarak bu algoritmalar baskılı devre delme düzeneklerinin hareketlerinin planlanmasında da kullanılır.

VLSI çip tasarımı

Silikon çiplerin tasarımı en karmaşık mühendislik işlemlerinden biridir. VLSI çipinde milyonlarca kapı yer alır. Herbir kapının pozisyonu bağlantıları çipin lı çalışması için hayati önem taşır. İşlrmin her aşamasında CAD kullanılır. En güç işlerden ikisi hücrelerin yayılımı ( cell layout) bağlantılarıdır (channel routing). Yayılımdan amaç, kullanılan alanı bağlantı uzunluklarını en aza indirerek hızı artırmaktır. Bağlantılar hücreler arasndaki boşlukları kullanarak . Bu problemler çok karmaşık olmasına rağmen çözmeye değer.

Robot Hareketi

Robot hareketi rota bulma probleminin genel halidir. Düz bir yüzeyde hareket eden dairesel robotda uzay iki boyutludur. Robotun kontrol edilecek kol bacakları var ise arama uzayı çok boyutlu olur. Arama uzayını sınırlandırmak için ileri teknikler kullanmak gerekir. Problemin karmaşıklığına ek olarak gerçek robot sensorlardan motor kontrolünden gelen hatalarla da uğraşmalıdır.

Montaj Sırası (Assembly sequencing)

Karmaşık nesnelerin robotla birleştirilmesi ilk kez FREDDY robotuyla (Michie,1972) gerçekleştirilmiştir. İlerleme yavaş olmasına rağmen, elektrik motorlarının montajı ekonomiktir. Montaj problemlerinde, problem bir nesnenin parçalrını birleştirmek için gerekli sırayı bulmaktır. Eğer sıra yanlış seçilirse sonradan bazı parçaların yerleştirilmesi olanaksız olacaktır. Tekrar başa dönmek gerekecektir.

Çözüm için Arama

Şimdiye dek problemi mlayabileceğimizi çözümün ne olduğuna baktık. Geriye çözümün bulunması kalmıştır. Bu da durum uzayında yapılacak arama işlemidir.

Eylem Sırasını Üretmek

Daha önce verilen harita üzerinde A’dan B’ye rota bulma probleminini çözmek için başlangıç durumu A’dan yola çıkılır. İlk adım bunun amaç durum olup olmadığını test etmektir. Böylece “A’dan başlayarak A’ya gitmek” gibi hileli sorular da çözülebilir. Bu amaç durum olmadığı için diğer durumlara bakılması gerekmektedir. O anki durum üzerinde işlemler yaparak yeni durum kümeleri üretilir. Bu işleme durumun açılması (expanding) denir. Bu şekilde 3 yeni duruma erişilir: S, T Z. Yeni durumlar A’ya bir adım uzaklıktadır. Eğer yalnız bir seçenek varsa o durum seçilir işleme devam edilir. Birden fazla seçenek varsa hangisinin dikkate alınacağına vermeliyiz.

Aramanın temeli: seçeneklerden birini seçmek diğerlerini kenara koymak, eğer yapılan seçim istenen sonucu vermiyorsa diğer seçeneklerden birini denemektir. Seçme, test işlemi çözüm bulunana veya açılacak durum kalmayana dek devam eder. Hangi durumun önce açılacağı arama stratejisi ile saptanır.

A’dan B’ye rota bulmak için kısmi arama ağacı.

Arama işlemini durum uzayının üzerine yerleştirilmiş arama ağacı olarak düşünmek yararlı olur. Arama ağacının kökü başlangıç durumuna denk gelen arama düğümüdür. Ağacın yaprak düğümleri izleyeni olmayan durumlardır. Bunlar ya henüz açılmamıştır ya da açılmış ama boş küme üretilmiştir.

Arama uzayı arama ağacını ayırtetmek gerekir. Rota bulma probleminde durum uzayında yalnız 20 durum vardır. Her şehir için bir durum vardır. Fakat durum uzayında sonsuz sayıda yol (path) vardır. Bu nedenle arama ağacında sonsuz sayıda düğüm vardır. Örneğin AàSàA dalı AàSà AàS şeklinde devam eder.

Arama Ağaçları için Veri Yapıları

Düğümleri göstermenin birçok yolu vardır. Ama burada düğümü beş elemanlı bir veri yapısı olarak ele alacağız:

Düğümün durum uzayındaki durum şılığı,

Bu düğüm (parent node)tarafından üretilen arama ağacındaki düğüm,

Bu düğümü üretmek için yapılan işlem,

Kökten bu düğüme kadar olan yoldaki düğüm sayısı (-depth)

Başlangıç durumundan bu düğüme olan yolun yol maliyeti.

Düğüm durum farklıdır. Düğüm; özel bir algoritma tarafından bir problem için üretilen arama ağacını gösteren veri yapısıdır. Durum dünyanın konfigürasyonunu temsil eder. Düğümde parent vardır, durumda ise yoktur.

Açılmayı bekleyen düğümlerin de (fringe, frontier) belirtilmesi gerekmektedir. En basit gösterim düğüm kümesi olabilir. Bu düğümlerin queue olarak gerçekleştirildiğini kabul edelim. Queue üzeerinde aşağıdaki işlemler :

Make-Queue(Element) :Verilen eleman ile queue oluşturu

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , ,