Yapay Zeka ve GAWK

0
FZ

Neden Yapay Zekâ için GAWK?

YZ programlama sınıfında kullandığımız programlama dilinin GAWK olduğunu duyan insanların çoğu epey şaşırıyor. Bunu anlayabiliyorum. Evet, GAWK kullanıyoruz. GAWK, Aho, Weinberger ve Kerninghan tarafından geliştirilmiş ve pek çok kişi tarafından programlama dili olarak bile kabul edilmeyen şu eski kalıp tanıma dilinin Gnu versiyonudur. PERL veya TCL örneklerinde olduğu gibi pek çok kişi bu dili "scripting dili" olarak ele alır. İçinde nesneler yoktur, fonksiyonel değildir, gömülü olarak mantık programlama öğelerini barındırmaz. İnsanların şaşkınlığı şunları duyunca tam bir kafa karışıklığına dönüşüyor: (a) her ne kadar öğrenciler projelerinde istedikleri dili kullanma hakkına sahip olsalar da; (b) sadece tek bir istisna hariç, en iyi sonuca ulaşan öğrenciler GAWK ile proje geliştirenler (not: söz konusu istisnanın sahibi PASCAL kullanmış olan bir programcı, kendisi şu anda NSF bursu ile Harvard'da matematik doktorası yapıyor.) C, C++ ve LISP programcıları GAWK ile çalışanların performanslarına yaklaşamadılar (PROLOG ve JAVA kullanarak proje yapan bir öğrencimiz çıkmadı henüz).

Neden GAWK?

Basit cevaplar genellikle lisans seviyesindeki programlama pragmatiği ile ilişkili. Biraz daha detaylı cevap arayanlar programlama paradigmalarına veya YZ dilleri tarihine göz atabilirler. Ve daha derin, felsefi cevaplar ise akıl yürütme ve sembolik YZ ile ilgili. Bence cevaplar, özellikle sonuncu kategorideki cevaplar YZ programlamada GAWK kullanımının etkin olduğunun gözlemlenmesinden çok daha şaşırtıcı.

Öncelikle şunu belirtmek istiyorum ki PERL programcıları da yapay zekâ projelerinin altından güzelce kalkıyorlar. GAWK'ın çekiciliği PERL içinde büyük oranda mevcut ve PERL'in popülaritesi GAWK'ın başarısının düşünülmesini biraz perdeliyor. Her ikisi de çok güçlü dizi-işleme dilleri ve UNIX ortamından sonuna dek faydalanması için programcıya gerekli araçları sunuyorlar. Her ikisi de çok çeşitli tipteki veri yapıları programcının kolayca başa çıkabilmesini sağlıyor. Her ikisi de derlenmek yerine yorumlanarak çalıştırıldıkları için geliştirme süresi bir hayli kısalabiliyor. Her ikisini de öğrenmek çok fazla vakit istemiyor. GAWK kılavuzu tek bir laboratuvar seansında okunabilir ve ortalama bir öğrenci bir iki gün içinde bu dilde ustalaşmaya başlayabilir. GAWK'ın otomatik olarak değişken ilklendirmesi, veri tiplerini birbirine dönüştürmesi, G/Ç desteği ve işaretçi (pointer) içermemesi gibi özellikleri pek çokgenç programcının yapabileceği hataları daha baştan engelliyor. C dilini gören ama ustalaşamamış olanlar ise GAWK dilindeki söz diziminin C dilindekini andırmasından memnunluk duyuyorlar. Bazı kişiler PERL'in fonksiyonalitesinin çok daha üstün olduğunu iddia edebilirler ancak hızlıca geliştirilmesi gereken YZ uygulamaları için ekstra fonksiyonalite çok da önemli değildir. Aslında PERL'in garip söz dizimi düzenli ifadeler (regular expressions) ve HTML, WWW adresleri veya kabuk (shell) komutları içeren karakter dizileri çoğalınca biraz daha garipleşir. PERL bir şeyleri yapmanın yeni yöntemlerini sunar ancak bu yeni şeyler yapmanın yöntemlerini sunduğu anlamına gelmez.

Sonuç olarak ufak tefek farklarla birlikte hem PERL hem de GAWK programcı zamanını minimize ederler. Her ikisi de programcının, programın çalışması esnasında ortaya çıkabilecek detaylı çalışma-zamanı hatalarına maruz kalmasını engeller.

Başlıktaki soruya verilebilecek başka basit cevaplar da vardır. Belki de en iyi bilineni lisans seviyesindeki YZ programlamada Internet'in öneminin giderek artıyor olması gerçeğidir. Oren Etzioni (University of Washington, Seattle) "softbot" kavramının makine mühendislerinin robot kavramına tekabül ettiğini ve YZ uygulamaları için en önemli test alanı haline geldiğini iddia etmektedir. Eğer davranışları zekice kontrol edilmesi gereken şey bir yazılım ajanı ise (software agent) bu durumda yazılım ortamını kontrol edecek şey de uygun bir dil olacaktır. Bu bir "scripting dili" demektir. Eğer robot KAREL ise o zaman doğru dil dil şöyle komutları içerecektir "turn left; turn right." Eğer robot Netscape ise o zaman doğru dil elan ile "netscape -remote 'openURL(http://cs.wustl.edu/~loui)'" gibi dizileri üretecektir.

Elbette daha derin cevaplar da mevcuttur. Jon Bentley, GAWK dilinde iki inci bulmuştur: düzenli ifadeler (regular expressions) ve çağrışımlı dizilier (associative arrays). GAWK, veri organizasyonu için dosya sisteminin, hata ayıklama ve diğer alt seviye fonksiyonlar içinse işletim sisteminin kullanılmasını ister programcıdan. Kullanıcı arabirimi diye bir mesele yoktur. Bu da programcıyı programın nasıl göründüğüne değil özüne yani ne yaptığına yöneltir. Mesela binsort diye bir şey programlamak yerine programcı bu işi sistemde standart olarak bulunan /bin/sort yazılımına havale eder ve bunun için vakit harcamaz (not: IBM'de çalışan dostum Ben Grosof'un Palo Alto ile ilgili tavsiyesi aklıma geldi: 101. mi yoksa 280. otoyol mu olduğunu boşver. Kuzeydeki bir giriş için güneye gitmen gerektiği durumunu dert etme. Tek yapman gereken bir an önce otoyola çıkabilmek.)

GAWK ile LISP arasında da bazı benzerlikler vardır ve bunlar aydınlatıcıdır. Her ikisi de güçlü ve tek tip bir veri yapısı sunar (GAWK örneğinde harman (hash) tablosu kullanılarak geliştirilmiş çağrışımlı diziler ve LISP örneğinde S-ifadesi veya listeleri içeren listeler). Her ikisi de kendi ortamlarında ciddi desteğe sahiptir (GAWK UNIX'in çocuğudur ve LISP de lisp makinalarının merkezinde yer alır). Her ikisinin de söz dizimi (syntax) basittir ve her ikisi de gücünü, basit parçaları bir araya getirerek karmaşık yapıları kurmaya çalışan programcının iradesinden alır.

Bütün bunlardan daha derinde yer alan şey ise YZ programlamanın doğasıdır. YZ işlevsellik ve keşfedici programlama mantalitesi üzerine kuruludur. Mesele aşağıdan yukarı (bottom-up) doğru tasarım yapmak ve daha karmaşık davranışları modellemektir. "Bu alt rutin cümleyi parçalarına ayırır" gibi düşük seviye eklemelerini gerçekleştiremeyeceğini gören ve yukarıdan-aşağı (top down) çalışan YZ programcısının işi zordur! Problemin yüksek seviyeli modeli yeniden düşünülüp elden geçirildiğinde, geliştirmiş olduğu veri yapısını heapsort için mükemelleştirmiş olan ama bunu çöpe atmak zorunda kalan programcının işi zordur.

YZ programlama yüksek seviyeli düşünmeyi gerektirir. Tabii ki yüksek seviyede düşünüp assembly dilinde yazabilen çok yetenekli programcılar her zaman olmuştur. Yine de çoğu kişi yüksek seviyede düşünebilmek için yüksek seviyeli ve soyut kavramlara ihtiyaç duyar.

Şimdi gelelim şaşırtıcı felsefi cevaplara. Öncelikle YZ disiplini kaba-kuvvet ile oluşturulan kombinasyon yöntemlerinin zeki davranışa yol açmakla birlikte genelde çözüme yol açmadığını gördü. Satranç, yapay sinir ağları ve genetik programlama kaba hesaplamanın limitlerini gösterir. Bunun alternatifi akıllıca program organizasyonudur (not: bazıları önceki YZ yaklaşımlarının çalıştığını ama kolayca göz ardı edildiğini söyleyebilirler: Bunlar genelde işe yarayan yaklaşımlardır ancak özelde değil çünkü akıllıca düzenleme dediğimiz şey zaten bir problem alanından diğerine değişen bir şeydir). Yani YZ programcılar programlarının içeriğini genişletmeye çalışırlar, yaklaşımlarını optimize etmeye değil. İstedikleri akıldır, bir yığın zeki gibi görünen böcek değil. Büyük arama uzaylarını tek tek saymak yerine arama yapabilecekleri alanı akıllıca daraltmaya çalışırlar, eldeki göreve uygun bilgi alanlarını kullanmak isterler. Sonuç olarak programcının erişmeye çalıştığı hedeflerde binbir spesifik kontrol sağlayan değil bu hedeflere ulaşmada programcının işini kolaylaştıran bir dildir YZ dili olarak aranan.

Yukarıdaki gerekçelere ek olarak: Mantıksal çıkarım dediğimiz şeynotasyonun açık olarak yazılmasından öte bir şey değildir. Elimizdeki YZ programının merkezindeki mantığın bulanık, probabilistik, deontik veya dedüktif olması mesele değildir. Mantık dediğimiz şey bir karakter dizisinden diğerine nasıl geçiş yapacağımızı tanıyan kurallardan ibarettir. Karakter dizileri ile işlem yaparken bize en geniş ve sağlam desteği sunan dil sonuç olarak mantık için de, değişik mantık dizgelerinin keşfedilmesi için de en iyi desteği sunar ve zaten pek çok durumda "çıkarım yapma" dediğimiz şey nihai olarak "mantık"tır. Bu da şunu getirir: YZ programcısını bir birleştirici yazmaktan kurtaran PROLOG (belki bir GAWK programcısının bunun için 20-25 satır kod yazması gerekir) bunu başka herhangi bir yaklaşımın mantığının ve sembolik temsilinin göz ardı edilmesi pahasına gerçekleştirir.

Bahsi geçen bu son iki noktanın sadece programlama camiası için değil aynı zamanda son 10 yılın deneyimlerinden pek de ders çıkarmayan YZ camiası için de haber değeri taşıdığını düşünüyorum.

Aho, Weinberger ve Kernighan tarafından en fazla bir grep veya bir sed kadar önemli olduğu düşünülen GAWK dilinde, ben, YZ eğilimleri, YZ tarihi ve YZ temelleri üstüne bazı dersler çıkarıyorum. Şaşırtıcı olmakla kalmayıp aynı zamanda ümit verici bulduğum bir başka nokta da şu ki benzer konuşmaları halen programlamaktan zevk alan YZ uzmanları ile yaptığımda dediklerimi hiç de şaşırtıcı bulmamakta ve doğal karşılamaktalar.

(c) 1996, Ronald P. Loui

R. Loui (loui@ai.wustl.edu), St. Louis'deki Washington Üniversitesi, Bilgisayar Bilimleri bölümünde profesör olarak çalışmaktadır. Katkıda bulunduğu yayınlar arasında: AI Journal, Computational Intelligence, ACM SIGART, AI Magazine, AI and Law, ACM Computing Surveys Symposium on AI, Cognitive Science, Minds and Machines, Journal of Philosophy gibi dergiler vardır.

===================================================================

Orjinalinden (izin alarak ;) tercüme eden: FZ

FZ'nin notu: FZ Gnu ile gönül bağı olmakla birlikte gene de Debian GNU/Linux ile standart olarak gelen mawk isimli awk uygulamasını tavsiye ediyor herkese.

Görüşler

0
FZ
Yapay zekâ ile alakası yok ama: awk gibi basit (!) bir scripting dili ile nasıl TETRIS yazılır merak edenler http://igor2.mcomp.hu/gpl/tetris.sh/ sayfasına baksınlar, hatta üşenmeyip kendi sistemlerine çeksinler ve çalıştırsınlar. Ben Debian GNU/Linux 3.0 ortamında denedim ve gözlerim yaşardı ;-)

Not: CYGWIN'de çalışmaz, bu CYGWIN'in problemi!
0
FZ
Yukarıdaki adresten beni haberdar eden sundance arkadaşıma da saygılarımı sunarım ;-)
0
FZ
Hem yukarıdaki yazı bağlamında hem de genel olarak FZ cümle aleme AWK (gawk, mawk, nawk artık elinizde hangi versiyonu var ise) programlama diline şöyle bir ciddi ciddi göz atmasını tavsiye ediyor. Hayır ben dinozor değilim :) Hayır, Perl'in yerini tutar da demiyorum. Evet, çok pratik ve ciddi ciddi iş yapabileceğiniz bir dil olduğunu iddia ediyorum (el atacağınız her tür UNIX ortamında da bulunması cabası). Hazır programlama dili anketi yapıyor iken bunları da belirteyim dedim.
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Bedava Borland Delphi

larweda

Borland Delphi 6.0 personal edition'u bedava dağıtmaya başladı. Gidiyorsunuz Borland`ın sitesine, bir kullanıcı alıyorsunuz, ufak bir anket dolduruyorsunuz, Delphi`yi indiriyosunuz. (maalesef yaklaşık 150 MB, CD versiyonu da 100$`a satılıyor) Borland da seri numarasını ve aktivasyon numarasını e-mail ile gönderiyor. Delphi Personal Edition`da Enterprise ya da Professional edition`daki SQL ve XML desteği olmamasına rağmen yine de denemeye değer.

Ayrıca programı indirdikten sonra InformIT`nin bedava kütüphanesindeki Sam`s Teach Yourself Borland Delphi 4 in 21 Days`e de bir göz atmak yararlı olabilir.

Windowsçular için Açık Kaynak Kodlu Yazılımlar

FZ

Bir grup cesur adam demiş ki "GNU/Linux ile haşır neşir olanlar zaten açık kodlu yazılım, özgür yazılım nedir ne değildir biliyor, biz MS Windows kullananları hedefleyerek şöyle ortaya karışık bir güzellik yapalım adını da TheOpenCD projesi koyalım."

Evet, aynen böyle demişler ve binbir değişik yerden download edebileceğiniz bir CD hazırlamışlar bunun içine de masaüstü kullanıcısını hedefleyerek OpenOffice.org, DictInstall, AbiWord, Beonex Communicator, FileZilla, Putty, WinVNC, XChat, Audacity, CDex,7-Zip, NetTime, Win Privacy Tray, Sokoban YASC 1.53, Celestia gibi yazılımları koymuşlar.

CD'de söz konusu yazılımlara ek olarak açık kaynak kodlu yazılım felsefesi ile ilgili makaleler ve başka bilgiler de mevcut.

GNU/Linux için yeni bir sözlük: YZC

ridvantulunay

YZC, yeni bir GPL lisanslı sözlük uygulaması.

0.02 sürümü ile yapısına Ezberletici eklenen 65.552 kelimelik güzel bir sözlük.

http://www.yaz-ar.com/home/yzc/ adresinden sözlüğe ve kaynak koduna erişebilirsiniz.

Sözlük GAMBAS ve SQLITE kullanılarak hazırlanmaktadır, ilerleyen sürümlerde yapısına sınavcı, genişletilebilirlik ve GTK desteği eklenecektir.

Python tabanlı Türkçe deasciifier

FZ

Kısa süre önce Deniz Yüret'in Türkçe 'deasciifier'ını (turkish-mode, Emacs Lisp ile yapılmış) Python'a çevirdim. Kaynak kod adresi: http://github.com/emres/deasciifier.

'deasciification' ve 'deasciifier' terimlerine aşina olmayanlar için kısa açıklama: Türkçe harfler kullanılmadan, sadece ASCII harfler ile yazılmış Türkçe metinlerin, düzgün şekilde Türkçe harfler kullanılarak yazılmış hale çevrilmesine 'deasciification' denir. Bu duruma bir örnek verelim, girdi metni mesela

"Opusmegi cagristiran catirtilar."

ise, çıktı metni şöyle olmalıdır:

"Öpüşmeği çağrıştıran çatırtılar."

Yapay Zekâ ve Müzik Üstüne

FZ

Bu makale sizi müzik ve yapay zekâ alanlarının arakesitinde kısa bir yolculuğa çıkaracaktır. Uygulamalar, yöntemler ve algoritmalar kısaca sunulacak ve tarihsel gelişim ele alınacaktır. Makale içindeki bağları verilmiş olan örnek müzik dosyaları ve videoları, günümüzde varılan noktaya dair ipuçları içermektedir.

Makale, 2004-2005 eğitim dönemi, güz yarıyılında, Boğaziçi Üniversitesi, Bilgisayar Müh. yüksek lisansı programında Doç. Dr. Levent Akın tarafından verilmiş olan Principles Of Artificial Intelligence (Yapay Zekâ Prensipleri) dersi için bir literatür taraması (literature survey report) olarak hazırlanmış olan makalenin Türk diline çevrilmiş, kısaltılmış ve düzenlenmiş halidir. Makalenin hazırlanmasında eleştirileri ile bana destek veren kardeşim Ergin Sevinç'e, Bülent Murtezaoğlu'na ve comp.ai sakinlerine teşekkürü bir borç bilirim. Makalenin orjinali http://ileriseviye.org/arasayfa.php?inode=ai-music.html adresindedir.