Sunday, July 23, 2006

Bitirme Projem

Bir yazimda sevdigim bir arkadasim benden projemi anlatmam icin comment birakmisti, bu eksikligi kapatmak amaci ile bu yaziyi sizlere yaziyorum:)

DOGA ESINLI ALGORITMALARLA YUZ URETME...
Bir cinayet olayi oldu, suclu olay yerinde bizim vehbi yi bicaklayarak oldurdu! Suclunun yuzunu bir kac saniyelik goren HAYDAR abimiz olay yerinden kacarak canini zor kurtardi. suclu sehrin karanlik sokaklarinda yeni kurbanlar ariyor...

Haydar abi korkuyor, polis zabit tutmus haydar abi tanik olarak YUZLESME ODASINA aliniyor. peki yuzlesme odasinda ne mi var ? orada bilgisayar dunyasinin en son algoritmalari kullanilarak gelistirilmis olan bir yazilim kendisini kullanacak olan kisiyi bekliyor.

Haydar abi heycanli bir sekilde programa yoneldi ve calistirdi, karsisina gelen menuden bir algoritma secerek hırsız veri tabanindan uretilen ilk populasyonla karsi karsiya geldi...



Haydar abi katile benzetebildigi bir kac yuzu gordu ve isaretledi ardindan next butonuna basarak yeni yuzler uretilmeye baslandi , eger hicbir katili gormeseydi reinit butonuna basip yeni yuzleri karsisina alacakti. Haydar abi next butonuna bastikca kafasinda hayali olan katile daha cok benzeyen yuzleri karsisinda goruyor ve saskinligini polis sefi EMREKNLK dan gizleyemiyordu. emreknlk hemen haydar abi ye bu programda her iterasyonda kullanicinin secmis oldugu yuzlere daha benzer yuzler uretildigini cunku yeni parametrelerin genetik algoritmalarla uretildigini soyledi. Haydar abi bir an olsun rahatlamisti cunku bunun artik seytan icati degil yazilimci icati oldugunu kavrayabilmisti. En sonunda aradigi yuzu bulan haydar abimiz stop butonuna basarak islemleri bitirdi ve katilin robot resmini polis sefi emreknlk ya teslim etti.

Emreknlk robot resmi alarak sehrin karanlik sokaklarinda katilin ardindan dolasmaya basladi, katili kendine bir kurban ararken yakaladi ve hapse atti! katil ummadigi bir anda nasil bu kadar cabuk ele gecirildigini anlayamadi. Polis sefi emreknlk nin ise agzindan su cumleler dokuldu:
- Daha onceden isledigin suclar yuzunden polis veritabanimizda yuzun vardi, o yuzden tanigimiz XXX in senin yuzunu programla uretmesi zor olmadi! Ancak resminin veritabaninda olmamasi halinde de basarili bir sekilde robot resmine yaklasilabilecekti. Program 5 farkli algoritma ile calisir ve ilk populasyon veritabaninda ki resimler kullanilarak rasgele degerler ile uretilir. Ardindan tanigimizin sectigi resimlerin parametreleri kullanilarak genetik algoritmalar ile yeni parametreler hesaplanir ve yeni yuzler veritabanindan bu parametrelere gore uretilir. En sonunda senin resmin ortaya cikar ve ben seni kosebasinda yakalar sonra ...

--- END ---

bir kac test sonucunu sizlere aktarmak istiyorum:
Algoritmalar: ES ( evolutionary stregies ) emreknlk + merve
DE ( differential evolution ) emreknlk
GGA ( generational genetic algorithm ) nildem
SSGA ( steady state genetic algorithm ) nildem
PSO ( particle swarm optimization ) tugba + fatma

USA nedir ne değildir hepsi burada:)






Amerika maceramiza baslamadan once asagidaki resmi sizlere gostermek istiyorum...



Çok artist cikmisim yine dimi :)))

YOLCULUK BASLIYOR...
Daha hayatimda ucaga binmemisim bir de tuttum ilk ucak yolculugumu Amerikaya yapiorum.
Istanbul->Paris->Ciccinati mi ne garip bir sehir amerikada ismini unuttum oraya aktarmali uctuk oradan da Seattle a toplam 19 saat havada kaldik basim da ve karnimda agrilarla Allaha sukur sonunda ulasmistik seattle a gecenin 10un da, 24 saat gunesle birlikteydik uyku duzenimiz bozulduysa da ertesi gun uyaninca toparlanmistik...
Iste kaldigimiz otel:



Amerikayi anlatmaya Seattle ile basliyim: Seattle da nufus az, yollar temiz, binalar cok guzel. Seattle in guzel bir sehir oldugunu daha once de duymustuk. Yalniz sokaklar evsiz insanlarla dolu ancak zararsizlar. Seattle da hava genelde yagisliymis ancak biz gittigimizde sadece 1 gun yagdi onun disinda hava cok guzeldi. Seattle gercekten yasanabilecek bir sehir olurdu ama malesef yemek yerken bayagi bir zorluk cektik damak tadi hic bizimkine benzemiyor zaten cin lokantalari dolmus bir cok yer oralar guzel kokmuyor uzak durmaya calistik. Hosuma giden sadece bir meksika yemegi var ismide brutto with tacco mu neydi, resmini sizlere gostereyim :)






Seattle in cok ilginc bir ozelligi inanilmaz bir sey ama her kose de en az 1 starbucks var!!! bir apartmanin icinde 3 tane bile oldugu oluyor, seattle starbucksin dogdugu yermis meger, amam bu kadarda cocuk yapilmaz ki kardesim dedim kendi kendime:) Amerikaliliar zaten ucmus, fast food kulturleri kahve kulturleri bayagi bir gelismis, ancak sokakta ki insalarin yarisi 200 kilo dan fazla! abartmiyorum cidden fazladir yani biz sok olduk arkadaslarla...

Seattle da gozlemledigim diger olaylar ; arac suruculeri yayalara son derece saygili yesil de bile yol veriolar cok guzel bir aliskanlik oyle atliyorum yola herkes duruyor:) Bir de amerikalilar yolda yururken durmadan excuse me diyip diyip duruyorlar hatta bazen adamin biri sana carpacak ilkin excuse me deyip ozur diliyor sonra kolu filan carpio sana o kadar asmislar yani:)

Bizim seattle da bulunma amacimiz ise bir workshop a katilip bitirmem odevimizi sunmaktiii, sunduk iki kere, biri poster sunumuydu digeri ise ppt sunumu, ingilizcem cok ii degilmis ama bayagi bir anlastik konustuk yine de insanlarla. hatta kanada dan yuksek lisans icin teklif bile aldim ama kabul etmeyecegim birakamam guzelim yurdumu:) workshoptan bir goruntu sizlere:



Gelelim donus yolculuguna, eve donerken newyorkta ucagimiz bir gun kalacakti, 6 saat ucup seattle dan newyork a ulastik, o gece tam disari cikip havaalanindan newyork sehir merkezine gidelim dedik ama sonra gec oldugu icin vazgectik ki iiki vazgecmisiz cunku 1bucuk saat surdu sabah gitmemiz newyorka. O gece havalaninda kaldik koltuklarda uyuduk bayagi konforluydu:) sabah 5 bucukta ise newyork a sehir merkezine indik ve oglen 1 e kadar inanilmaz bir sekilde dolastik ayaklarim yara oldu sonra:) empire state i king kongun dustugu binayi gorduk, ozgurluk heykelini uzaktan gorebildik, 11 eylul saldirilarinin oldugu yeri gorduk, newyork cok guzel ama cok kalabalik, heryer isil isildi times meydani basta olmak uzere.



Kisacasi bir haftalik amerika gezimiz yorucu bir sekilde bitti ve geldikten sonra bayagi bir sure uyudum, bence yurdum gibisi yok yine de ...

iste son olarak bogazdan bir manzara sizlere :)


Wednesday, July 19, 2006

Algoritmaların Analizi

Bugun bilgisayar dunyasında bilgisayar programciliği bir yere kadar kendine iş bulabilir. Bilgisayar mühendisinin karşılaşılan sorunlara daha kolay cevap bulabildiğini söyler çoğu kişi. Peki bilgisayar mühendisi problemlere nasıl daha kolay cevap bulabiliyor? bence bunun altinda yaptiği algoritma tasarımları, algoritma analizleri saklı...
Bir graph teorisini bilmeyen programci network programlama işine girerse ne olur? İstemciye gidecek paket belki en sonunda istemciye ulaşır ama network üzerinde en kısa yol algoritması koşmuyorsa yada TSP gibi algoritmalar dikkate alınmadan programlama yapılıyorsa paket gitmesi gerekenden çok sonra istemciye ulaşacaktır. Performansın ise nasıl bir kriter olduğunu söylemeye gerek yoktur herhalde.

Bugun sıkça kullanılan algoritmalardan bir kaçına değinmek istiyorum:

Greedy algoritmaları: Bu algoritmaların temel prensibi algoritmanın üzerinde çalışacağı elemanları bir kritere göre sıralamak ve sıra ile deneyerek en sonunda en optimum çözümü elde etmektir.

Divide and Conquer: Bu algoritmalar genel de ağaç veri yapısı üzerine kurulur ve problemi kendi içerisinde aynı türden daha küçük problemlere bölerek, alt problemerin çözümünden bütün problemin çözümünü elde etme yoluna gider. Rekürsif çağrı yapmaya uygun algoritmalardır.

Dynamic programming: Greedy algoritmaları her probleme optimum çözüm getiremeyebilir. Dinamik programlama da problemin çözümü; kendisinden bir küçük problemin çözümü ile kendi çözümü arasındaki optimumu seçme ve bu şekilde büyüyerek en sondaki problemi çözmeye bağlıdır. En küçük problemden başlayarak en büyük probleme doğru optimum çözümler seçilerek ilerlenir.

NP ( non-deterministic polynomial time ) Problems: Bu problemlerin çözümü tam olarak bulanmasa da kendisine benzeyen ve çözümü bilinen bir problemin çözümünden yola çıkalarak problemi çözme yoluna gidilir. Polinomal zamanda çözülen bir algoritmanın çözümü NP problemi çözecek şekilde değiştirilir.

Yukarıda bahsi geçen algoritmalar ve bahsi geçmeyen algoritmalar bilgisayar bilimlerinin yakından ilgilendiği yıllardır üzerinde çalışılan konulardır. Gerçek problemlere uygun çözümleri bulabilmek için bu algoritmaları ve kullanılan veri yapılarını özümsemek gerektiğine inanıyorum.

CISC - RISC

Complex Instruction Set Computer
Reduced Instruction Set Computer

Bir önceki yazımda Karşılıklı dışlamayı anlatırken arada bir CISC lafı ettiğimi gördüm.
Peki nedir bu CISC ? birde bunun RISC i varmış! Biz mikroişlemci alırken CISC mi alıcaz RISC mi alıcaz yoksa risk mi alıcaz:) risk almamak için CISC ve RISC lerin ne olduğuna biraz değinmek istiyorum.

Bilgisayar tarihinin ilk başlarında RISC işlemciler vardı, bu işlemciler az mikroişlemci komutuna sahipti ( çoğunda < 20 ), çoğunda bellek okuma ve yazma işlemleri dışında bellek üzerinde işlem yapan toplama çıkarma tümleme gibi komutlar yoktu. Herşey mikro işlemcinin içerisinde yapıldığından mikroişlemci içerisinde 100 - 200 belki daha fazla registerlar yerleştirliyordu. Yapılacak işler kısa kısa komutlar halinde yapılabiliyordu ancak bilgisayar yazılımlarının büyümesi RISC de yazılan programların uzun ve karışık olmasına yok açtı ve tahmin edeceğiniz üzere CISC doğdu.

CISC ler üretilirken komut kümeleri geniş tutuldu, bellek üzerinde işlem yapabilen komutları eklediler, bir komut yazarak bellekteki 2 sayıyı toplayabilip başka bir bellek gözüne yazabiliyorduk. RISC lere göre daha az iç register ları vardı ve daha az komutla daha çok iş yapabiliyorduk.

Fakat her güzel şeyin bir bedeli oluyor galiba... CISC mimarisinde ki mikroişlemciler de ki fazla komut sayıları ve karmaşık komut yapıları işlemci içindeki iç yolların da karmaşıklığını arttırmaktaydı, bu ise hem işlemci maliyetini etkiliyordu hem de mikroişlemcinin çabuk ısınmasına yol açıyordu. Üstelik CISC de tasarlanan komutların çoğu da çok sık kullanılmayan komutlar olabiliyordu.

Bütün bu etkenlerden dolayı RISC lere tekrar gün doğmuştu. RISCler için tasarlanan kesişimli pencereler ve KOMUT BORU HATTI ( pipeline) sayesinde RISC işlemcilerin hızı artmıştı.

Bugün ise bilgisayar dünyasında hem RISC hem de CISC mimarisinde ki mikroişlemciler sıkça kullanılmaktadır. ÜZerinde çalışacak programa göre yukarıda belirtilen avantajlar ve dezavantajlara göre CISC yada RISC işlemciler seçilmeli, risk almaktan kaçınılmalıdır...

Karşılıklı Dışlama Hakkında Bir Yazı

KARŞILIKLI DIŞLAMA
Bu yazıyı yazmamın sebebi bilgisayar dünyasının çokça kullandığı ama tam olarak ne olduğuda çoğu bilişimci için bilinmeyen bir konuya açıklık getirmeye çalışmaktır. Benimde bilgilerim yeterli olmayabilir o yuzden herşeye inanmayıp araştırmanızı tavsiye ederim;)

"Karşılıklı Dışlama nedir?" sorusunun cevabını şu şekilde özetleyebiliriz: Aynı kaynaklara ( kaynak: RAM, DISK, FILE, EXTERNAL DEVICE etc ) ulaşmak isteyen birden fazla proses olması durumunda bu kaynaklara erişimin kaynak tipine göre paylaşılması ve belli bir anda sadece izin verilen proseslerin bu kaynaklara erişmesinin sağlanmasıdır.

Yukarıdaki tanım biraz karışık gelmiş olabilir. Örnek verelim: Printer paylaşılmayan bir kaynaktır ve karşılıklı dışlama gerektirir bir zaman da sadece bir proses printer ı kullanarak çıkış alabilir.

Dosyalar okuma yapıldığı zaman paylaşılabilir ve okuma için açılan dosyalarda karşılıklı dışlama gerekmez, ancak yazma yapıldığı zaman dosya karşılıklı dışlanmalı ve bir anda bir proses dosyayı elinde tutmalıdır aksi takdirde dosya bütünlüğü tehlikeye girer.

Karşılıklı dışlamayı gerçekleştirmek için bir çok algoritma ortaya atılmıştır. Fakat bir çoğu yetersiz kalmıştır. Örneğin ünlü Banker algoritması kaynak sayısının ve proseslerin sabit olması kısıtı altında çalışarak problemi çözme yoluna gitmiştir.

Donanım düzeyinde gerçeklemelerde özel mikroişlemci komutları CISC işlemcilerde bulunmaktadır. örneğin motorola 68000 deki TAS ( Test and Set ) komutu bir kaynağı bir anda bir prosese vermek için bir bayrağı test eder bayrak uygun durumdaysa kaynağı verir ve bayrağı set eder. Bu işlemler (test ve set) arada bölünemez şekilde tasarlanmıştır, bu yüzden donanım seviyesinde bir çözüm olarak görülebilirse de proseslerin kaynağı alması için sonsuza kadar beklemeyecekleri bu yolla garanti edilemez.

Günümüz İşletim sistemleri çeşitli çözümler sunar. Unix sistemlerde kullanılan semafor yapıları proseslerin karşılıklı dışlama ilkesine göre çalışmasına olanak sağlar. Semaforlar işletim sisteminin sağladığı özel değişkenlerdir ve işletim sistemi kontrolü ile çalışır. Semaforları kullanmak için yine işletim sisteminin sağladığı sistem çağrıları kullanılır. Sistem çağrıları kendi içlerinde bölünemez olarak tasarlandıklarından kaynak paylaşımı karşılıklı dışlama ilkesine göre yapılabilmektedirler.

Karşılıklı dışlama konusuna bu kadar alt düzeyden baktıktan sonra daha yüksek seviyelerde de aslında bu konuya dikkat edildiğine değinmekte yarar var. Örneğin database tasarımında yazma işlemlerin de kilit kullanılması karşılıklı dışlamayı sağlamak içindir.

Karşılıklı dışlama hakkında genel bir fikir vermek istedim, bugun maximum sayida işin maximum süre hizmet görmesi için geliştirilmiş iş sıralama algoritmaları vardır. Karşılıklı dışlama ve iş sıralama algoritmaları performansa direk olarak etki ettiğinden günümüzde önemli bir yere sahiptir.