CSS188 Yapay Zekaya Giriş pazartesi başlıyor

Başlatan Erdem , 21 Eylül 2012, 13:56:12

Erdem

Berkeley Üniversitesinin yapay zekaya giriş kursu pazartesi günü başlıyor.

Öğrenciler kursta yapay zekanın temellerini oluşturan teorik bilgileri öğrendikten sonra, öğrendikleri yapay zeka algoritmalarını video oyunlarında kullanabilecekler.

Ön Koşullar:

- Programlama
       Nesneye yönelik programlama
       Öz yineleme
       Python ya da Python'u çabuk öğrenebilme (ufak bir ders veriliyor)
- Veri yapıları
       Listeler, kümeler, diziler, eşleme tabloları
       Yığıt, kuyruk, öncelikli kuyruk
       Ağaçlar ve çizitler
- Matematik
       Olasılık, rastgele sayılar
       Temel sonuşmaz karmaşıklığı (Büyük-O) 
       Sayma sistemleri(Kombinasyon permütasyon)     

https://www.edx.org/courses/BerkeleyX/CS188.1x/2012_Fall/about   

Tagli

Bilgilendirme için teşekkürler. Kaydoldum. Epeydir ilgimi çeken ve kendimi geliştirmek istediğim bir konuydu. Daha önce bir miktar Reinforcement Learning ile uğraşmışlığım da var.
Gökçe Tağlıoğlu

pea

Ben de kaydoldum, bu dönem okulda Yapay Zeka dersi de göreceğim ama biraz zorlayacak gibi duruyor.Programlama temelim çok zayıf çünkü.

Erdem

Aslında bu konuda benim de deneyiyim yok.

Sadece Mat Buckland'ın oyunlarda yapay zeka kullanımı ile ilgili Programming Game AI By Example kitabını hızlıca okumuştum.

Ama kodları yazdığımı söyleyemem ve o kitaptan adamakıllı istifade edebilmek için bir 6 ay 1 sene geçer diye düşünüyorum.  Zaten abartmayayım ama sanırım yüzbinlerce belki milyon satır kod var.  Eğer bu kitabın kaynak kodlarını sıfırdan yazan programcı varsa elini öpebilirim  :D

Kitaptaki kaynak kodlardan bir örnek:

https://gist.github.com/3762946

Çok harika bir kitap. Özellikle çizit kuramını anlattığı bölümü çok beğendiğimi söyleyebilirim.
Alıntı YapWARNING!
Beware! Search algorithms have the ability to create in the average human
brain terrible amounts of frustration and confusion, leading to headaches,
nausea, and sleep deprivation. Spontaneous and excessive howling is not
uncommon. Please be aware these symptoms are commonplace in the early
stages of the learning curve and are not generally cause for concern. Nor-
mal service is usually resumed within a reasonable length of time. (If
symptoms persist, however, stay clear of busy roads, razor blades, and
loaded weapons. Seek medical advice at the earliest opportunity.)
Ama gene aynı bölümde böyle bir uyarı vardı. Yani bu bölümdeki konulara çalışırken elektrik direklerine çarpmamaya dikkat edin diye uyarmışlar.

Açıkçası ben bu kursun beni de oldukça zorlayacağını tahmin ediyorum.  Programlama tarafı kolay ama veri yapıları ve algoritmalar konusunda eksiklerim var.

Ama şöyle de bir şey var. Robert Sedgewick ve Kevin Wayne tarafından verilen Algoritmalar I kursuna kayıt olup eksikliklerinizi tamamlayabilirsiniz. Sedgewick bildiğiniz üzere efsane bilgisayar bilimci Donald Knuth'un doktora öğrencisi ve hızlı sıralama üzerinde fazlaca çalışmış.

https://www.coursera.org/course/algs4partI

Asıl CS188 için gerekli olduğunu düşündüğüm çizit kuramı ve yol bulma algoritmalarının anlatıldığı ikinci kısmı da yakında başlayacak.

https://www.coursera.org/course/algs4partII

Bir de dersler çok zevkli ve eğlenceli konular anlatılıyor. Hatta konular öyle yerlere geliyor ki insanın ağzı açık kalıyor.   

Erdem


Erdem

Nasıl gidiyor arkadaşlar  :)

Ben şu ana kadar kursu gayet başarılı buldum. Hocalar da güzel anlatıyor.

Çizgi karakterler de hoş olmuş. İnsan kolay kolay unutmuyor.

Tagli

Hafta içi pek zaman ayıramadığım için hafta sonu biraz hızlı bir şekilde dersleri geçmek zorunda kaldım - bu iletiyi yazmakta gecikmemin sebebi de bu. Dersler gerçekten de çok hoş, hoca iyi anlatıyor. Soruların bazıları kolay ama bazıları zorluyor, ilk denemede doğru cevabı bulamadığım pek çok soru var. Özellikle admissibility ve consistency kavramlarını anlamakta zorlandım biraz. Halen kafama tam oturmuş değiller ve zaten en çok da onlarla ilgili sorularda sıkıntı yaşadım.
Gökçe Tağlıoğlu

Erdem

#7
Admissible heuristics yani tutarlı tahmini ben şöyle anlıyorum.

Örneğin bir arama algoritması tahmin yaparken yaptığı tahminler her zaman gerçek masraftan düşük ya da eşitse buna tutarlı tahmin deniliyor.

Hatta bir karikatürde bir gösterge vardı. Hedefe yaklaştığı halde zor bulursun, hayatta başarılar falan gibi laflar ediyordu. İşte bu tutarlı bir tahmin değil.

Kısacası tahmin yaparken masrafı ya da değeri olduğundan fazla gösteren işlevler tutarlı değil.

mesaj birleştirme:: 08 Ekim 2012, 18:03:43

Aslında ben de ödevi yaparken arama algoritmaları dışındaki bölümü resmen salladım  :D

Ben de hafta içi çalışmak yerine yok EPE okudum. Yok dijital kalem nasıl yapabiliriz diye Zihni Sinir projeleri düşündüm. Hiç alakası yokken derleyiciler ile ilgili bir kaç ders seyrettim. Yani 3-4 günüm aylaklıkla geçti.

Konular zevkli ama hiç kolay değil. O yüzden oturup adam gibi çalışmam lazım. Algoritmalar ve BB'ye giriş kurslarını bıraktım.

Proje süresinin bitmesine 1 hafta kaldı. Bu gün denedim ama hala yazmış değilim  ::)

anladinmi

#8
Ben de o dersi takip ediyorum, hakkikaten iyi anlatiyorlar. Uni de dersini görmüstüm, aklimda çok az sey kaldi. Ya çogunu unuttum, ya da zamaninda bu kadar anlamamistim. fakat bu anlatim hem görsel, hem de üzerine basabasa gösteriyorlar.
Step by step videolari mekanizmayi pekistirdi.

Admissible :
Alıntı Yapbir arama algoritması tahmin yaparken yaptığı tahminler her zaman gerçek masraftan düşük ya da eşitse buna tutarlı tahmin deniliyor.
Her nokta da h degeri o noktadan sonuca ulasan en kisa yoldan daha az olmali.
A sehirinden B sehirine kus uçusu 600km ise. admissible heuristic için h degeri A sehirinde 600 veya alti olmali.
Bu arada admissible tutarli degil de kabul edilir diye tercume ederdim.

Consistent :
noktalarin h degerine bakmak yerine noktalar arasindaki masrafa bakiyorsun ve iki nokta arasindaki h farkina bakiyorsun. bu h farki masraftan az olmali.
A'dan B'ye gitmek için 150 km otoyol yapip C'de mola verdiysen,  mola verdigin yer  B noktasina kus uçusu 50 km ise. Bir yerde sorun var demektir. tutarsiz bir durum.


Su projeyi indirdim, sorulari da okudum. python 'uda indirdim. Python pek bilmiyorum, bakalim nasil olacak.

Erdem

Pacman'i yazan var mı.

Ben yavaş yavaş çözüme yaklaşıyor gibiyim.



İlk yazdığımda deli gibi bir sağa bir sola gidiyordu. Yavaş yavaş akıllanmaya başladı  :)

anladinmi

Ben bu gece kodlara bakmaya basladim.
Pythonda kendimi ifade etmekte biraz zorluk yasiyorum.
Böyle degisken tanimlanan (tanimlanmayan) dil olur mu ?
Neyse gereken belli basli fonksyonlari buldum.

problem.getStartState()
problem.isGoalState((4,4))
problem.getSuccessors((2,2))
tarzi ifadeler ne döndürüyor onu buldum.

simdi set,list, stack ve döngü kullanarak DFS yazma kaldi (daha birinci soru).
Devami yarin veya hafta sonuna kaldi.


Erdem

Bu arama algoritmaları ile ilgili çok ilginç bir video buldum.

First Search Program - CS373 Unit 4 - Udacity

Udacity'nin bu kursunda da Google mühendisleri robotik bir araba yaparken arka planda yapay zekanın programlamasını anlatmışlar. Kursun altyapısı da harika  :)

anladinmi

#12
Evet udacity 'nin bu kursu çok güzel. ilgimi çeken konularin dersini izliyorum sadece. Hepsi birbirinden ilginç konular, bütün konulari ile projeyi anlatiyor.
PID ve Kalman bile var, dah önce burada sözü geçmisti.
Anladigim kadari ile Udacity'de anlatilan probabilistik Particle aramasi AI de görecegiz ve pacman öyle yolunu bulacakmis.


Bu aksam 3 saat ugrastiktan sonra DFS'i hallettim. DBS, CSS ve A* iplik sökügü gibi gelir simdi.
Sonrasi çok ugrastirirmi ? bu haftasonuna projeye ilave videolari seyredip  ödevi yapmam gerek.

Söyle bir class tanimladim, listeye koyuyorum, sonra fonksyonla listeden path'i en uzun ilk elemani buluyorum :
class TSearchNode:
    def __init__(self,xypathhisto):
        self.xy = xypathhisto[0]
        self.pathhisto = xypathhisto[1]
        self.gcost = xypathhisto[2]


Edx Forumundan pseudo code'u buldum tercume ettim.

mesaj birleştirme:: 11 Ekim 2012, 03:25:00

DBS'i hallettim çok ufak bir degisikle.
UCS 'de takildim simdi.
Bilgisayarda gayet güzel çalisiyor ve mantikli sonuçlar veriyor.
Stayeast : cost 1 'e esit (çok kucuk sayilar) 186 nodes expanded 646 score.
StayWest :68719482936  96 nodes  score 414.
gcost = expandednodecost + successorcost ile hesapliyorum.
Sonra fringe 'de olan minimum gcost'a sahip elemani seçiyorum.
Sorun nedir ?

Simdi buldum (aradan 2 saat geçtikten sonra).
Minimum degeri aramak için ilk basta 100000000 ile karsilastiriyordum. Halbuki StayWest  ajani  çok daha yuksek bir deger donduruyor : 68719479864  (eskiden buldugum 68719482936 yerine)  o yuzden optimali bulamiyor.


Erdem

Sonunda derin öncelikli arama algoritmasını bir hafta uğraşarak da olsa yaptım  :D

Ama şunu daha dün farkettim. Kağıda geçirirken derin öncelikli arama yerine enine arama BFS'nin sözde kodunu geçirmişim. Ve onun üzerinden giderek uğraşıyordum.  ::)

Öncelikli kuyruğu sıralıyorum, ters çeviriyorum olmuyor. Meğerse enine aramanın sözde kodunu kullanıyormuşum :)

http://www.ehobi.org/resim/resim/pacmandfs.mp4

Sanırım çok zevkli ve zor olmasına rağmen bu kursu bırakacak gibiyim. Çünkü algoritma ve veri yapıları konularında eksiklerim var. Ama zırf zevk için bu projeyi bitirebilirim. Daha sonra hem geniş bir zamanda hem de algoritma ve veri yapıları dersini aldıktan sonra bu konuları çalışmak çok zevkli olur.

Aslında enine arama algoritmasını da yaptım. Ama döndürdüğü sonuç doğru değil diyor. Algoritmayı adım adım kontrol etmedim ama .. Gene de o yapbozu doğru olarak çözüyor.

anladinmi

Dersin forumundaki Where can I find the pseudocode for the search algorithms? konusu yardimci oldu.



DFS ve DBS için stack 'tan çikarma (REMOVE-FRONT) buna benzer fonksyonlar olmali :
     #Fringe selection function
def DFS_GetFirstFromStack(fringe):
    max = -1
    Idx = -1
#maximum uzunluktaki dügüm
    for i in range(len(fringe)):
        if len(fringe[i].pathhisto) > max :
            max = len(fringe[i].pathhisto)
            Idx =  i
    return Idx
    
    #Fringe selection function
def DBS_GetFirstFromStack(fringe):
    min = 1000000000
    Idx = -1
#minimum uzunluktaki dügüm
    for i in range(len(fringe)):
        if len(fringe[i].pathhisto) < min :
            min = len(fringe[i].pathhisto)
            Idx =  i
    return Idx
       


EXPAND-ALL:
            for Successors in Expandlist:
                histopath = list(CurrentNode.pathhisto)
                histopath.append(Successors[1])
                
                #Add successor in fringe
                SuccNode = TSearchNode([Successors[0],histopath,Successors[2] + CurrentNode.gcost ])
                #print "Adding Fringe:",  SuccNode.xy, SuccNode.pathhisto, SuccNode.gcost
                # xy, Dirhisto, cost
                Fringe.push(SuccNode)