CSS188 Yapay Zekaya Giriş pazartesi başlıyor

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

Erdem

Alıntı yapılan: anladinmi - 12 Ekim 2012, 19:10:28
Dersin forumundaki Where can I find the pseudocode for the search algorithms? konusu yardimci oldu.

Ben de yanlışlıkla BFS'in sözde kodunu yazmışım. BFS ve DFS yakın ya  :)

Alıntı yapılan: anladinmi - 12 Ekim 2012, 19:10:28
DFS ve DBS için stack 'tan çikarma (REMOVE-FRONT) buna benzer fonksyonlar olmali

Bu kodu yazanlar acemi programcılar olmalı  :)

Eğer başından eleman çıkarsa o zaman yığıt olmaz herhalde. Çünkü yığıtta son giren eleman ilk çıkar.

Enine arama algoritmasını da yaptım. Derinine aramada yığıt kullanmıştım.  Enine arama algoritmasında yaptığım tek değişiklik yığıt yerine kuyruk kullanmak oldu. Ancak ilk planda orta büyüklükteki labirentte 269'dan fazla düğümü işaretliyordu ve sistem kabul etmiyordu. Sonra 3. dersin 12.bölümünde bunu anlatmışlar. Sonradan alt düğümleri genişletmezden önce de kontrol etmem gerektiğini yani gezilen düğümler listesine eklemem gerektiğini farkettim.

Benim için işin en püf noktası senin yaptığın gibi düğüm isimli bir sınıf oluşturmak oldu. Her düğüm bir üstteki düğümü gösteriyor ve bu şekilde aslında DFS'in yaptığı sadece bir düğüm döndürmek. Bu düğümü kullanarak geri giderek çözümü döndürüyoruz. Aslında yukarıdaki videoda Google mühendisinin, aslında sanırım Stanford Ünv. hocanın yaptığı da buydu.

anladinmi

DFS algoritmasi LIFO ile gerçeklestirilebilir. Yani Fringe'in türü Stack olur, yigit. Ayni zamanda en uzun yola bacaga bakilarak yapilabilir. (LIFO ile yaparsan tersten olur aslinda, soldan baslamak yerine sagdan baslar)

DBS için ise FIFO kullanilabilir.  Yani Fringe'in türü Queue olur, sira (boru). Ayni zamanda en kisa yola bacaga bakilarak yapilabilir.
UCS için ise en ucuza bakilir, yani giris zamanina göre degil de o node'a gelmek için kümülatif maliyet.
Astar için, kümülatif maliyet + heuristik degere bakilir.

Gördügün gibi bu 4 arama türü için degisen sadece Fringe'den bir sonraki elemani seçme fonksyonu (REMOVE-FRONT).
Pseudo koddan genel arama algoritmasini yazarsan, 4 algoritma için degisen sadece REMOVE-FRONT ve INSERTALL-EXPANDNODE fonksyonlari.
Genel aramayi abstract class olarak düsün, arama olmasi için 2 fonksyonu implement etmelisin.

Alıntı YapHer düğüm bir üstteki düğümü gösteriyor ve bu şekilde aslında DFS'in yaptığı sadece bir düğüm döndürmek. Bu düğümü kullanarak geri giderek çözümü döndürüyoruz.

Dügümün bi üstekini tutmanin geregi yok. getSuccessors fonksyonu sana üsteki dahil daha gezmedigin yerlerin koordinat, yön ve maliyetini veriyor, liste olarak. Bu fonksyon probleme spesifik. Q6 da problem degisince bunu sen implement etmen gerekecek.
Su satiri verince gerisini pseudo koddan bulursun :
Expandlist = problem.getSuccessors(Currentnode.xy)

Erdem

Alıntı yapılan: anladinmi - 12 Ekim 2012, 22:58:09
Dügümün bi üstekini tutmanin geregi yok. getSuccessors fonksyonu sana üsteki dahil daha gezmedigin yerlerin koordinat, yön ve maliyetini veriyor, liste olarak.

Burda demek istediğim tam tersiydi. Yani üstteki derken köke yakın düğüm demek istiyorum. Böylece en derinde hedef düğümümüz olsun. Buradan tersten giderek örneğin [G f r e d S] şeklinde çözümü bir liste olarak buluyorum.

Şimdi katmana göre arama algoritmasını UFS yapmaya çalışıyordum. Burada düğüm sınıfına toplam masrafı gösteren bir üye işlev ekledim. Örneğin S->e arası masraf 9 e->r arası masraf 2 ise bu işlev toplam_masraf(r) diye çağırdığımda 11 veriyor. Veri yapısı olarak da işlev öncelikli kuyruk kullandım.

Ama bir düğümün bu kuyrukta olup olmadığını nasıl bulacağız o kısmı hala yapamadım. Sanırım Python'da bir sınıfa ait nesneler üzerinde gezebilmek için
        def __iter__(self):
            return self.path

aşağıdaki gibi gezilebilir olarak tanımlamak gerekiyormuş. Ama şimdilik beceremedim  ::)

anladinmi

#18
Bence bu iterayon olayini zaten onlar kodlarini sagliyor tarafindan verilmis. Iter vs.. kullanmaya gerek yok.
Yapilmasi gereken sadece GetSuccessors fonksyonunu çagrip dönen liste verilerini anlamak.

Dedigin gibi yazmamiz gereken arama fonksyonu sonunda yön çikis listesini döndürecek.
O listeyi her node'a sakliyoruz :  tanimlamamda self.pathhisto  degiskeni bu islevi görüyor, yön listesini sakliyor. Gittigimiz her yönü bi listeye append ediyoruz.

An itibari ile AStar algoritmasini bitirdim. PriorityQueueWithFunction kullandim.
Bastan kullanmayi dusunuyordum, isleri kolaylastiriyor.
Kullanmak için :
def ASTAR_PriorityFn(Node):
    # Priority for A Star
    return Node.fcost


Algoritmanin basinda Stack yerine :
from game import PriorityQueueWithFunction
Fringe = PriorityQueueWithFunction(ASTAR_PriorityFn)

tanimlamasi.
Sonra algoritmada heuristic ilave (TSearchNode yapisi degisecek):
SuccNode = TSearchNode([Successors[0],histopath,cost, heuristic(Successors[0],problem)])


Simdi cancanli soruya geldim Q5. TSP problemine benziyor.

Hep gecenin bi vakti çalisiyorum bu derse (geceyarisi - sabahin 3u) bazen 2 gün bazen 5 gün ara ile.
Bu hafta sonu, hem yeni ders izleyip hem projeye ilave, yeni dersin ödevini yapmaliyim. Zor olacak.


Tamamdir simdi de 5. Soru bitti, SearchAgent'teki Corner problemini degistirdim. Artik sorun 1 yerden 1 yere en kisayoldan gitmek degil, 4 farkli noktaya ugramak ve bunu en kisa döngüyü izleyerek basarmak.
Simdi problemin degiskenleri nedir onu daha iyi anladim. Dügümde problemin degiskenini saklamamiz gerek, sadece koordinatlari degil.
Yeni dügüm sinifi :

  #Structure Definition of node
class TSearchNode:
    def __init__(self,PbStateAndNodeValue):
        self.PbState = PbStateAndNodeValue[0]
        self.pathhisto = PbStateAndNodeValue[1]
        self.gcost = PbStateAndNodeValue[2]
        self.hcost = PbStateAndNodeValue[3]
        self.fcost = self.gcost + self.hcost
       

Erdem

Alıntı yapılan: anladinmi - 13 Ekim 2012, 01:51:09
O listeyi her node'a sakliyoruz :  tanimlamamda self.pathhisto  degiskeni bu islevi görüyor, yön listesini sakliyor. Gittigimiz her yönü bi listeye append ediyoruz.

Demek istediğini anladım. Her düğümde derinlik arttıkça gezilen düğümlerin listesini saklıyorsun.  Derinlik arttıkça, düğüm sayısı arttıkça belki bu masraflı olabilir. Benim yaptığım ise tembel gerçekleştirme lazy evaluation yaparak sadece gerekli olduğu zaman çözümü döndürmek. Tabi şimdilik bizim için önemli olan algoritmanın optimizasyonu değil çalışması..

Alıntı yapılan: anladinmi - 13 Ekim 2012, 01:51:09
An itibari ile AStar algoritmasini bitirdim. PriorityQueueWithFunction kullandim.

Ben de UFS'de veri yapısı olarak işlev öncelik kuyruk PriorityQueueWithFunction kullandım. Düğümün kuyrukta olup olmadığını kontrol eden kısmı yorum haline getirdim. Şans eseri çalıştı  :)

Sisteme yükledim. Sistem de kabul etti. Yalnız bir şey dikkatimi çekti.

$ python pacman.py -l openMaze -p SearchAgent -a fn=bfs -z .5

Diğer arama algoritmaları bu boşluklu labirenti çözerken UCS takılıyor. Senin yazdığın da takılıyor mu.

Herhalde ufak bir hata yapıyorum  ::)

anladinmi

Yok UCS için python pacman.py -l openMaze -p SearchAgent -a fn=bfs -z .5 taklimiyor.  1 kare hariç hepsini gözden geçiriyor.
Alıntı YapD:\edx\search>python pacman.py -l openMaze -p SearchAgent -a fn=bfs -z .
5
[SearchAgent] using function bfs
[SearchAgent] using problem type PositionSearchProblem
Path found with total cost of 54 in 0.1 seconds
Search nodes expanded: 682

Bütün gece uyumadim, sabah 1 saat yattim. Q6 sorusuna takildim. 3/3 yapana kadar devam. en yakina gitme mantigi aslinda consistent degilmis, geç farkettim.
Sorulara ara verdim, CSP videolarinin ilk serisini izledim.
Fakat projeyi düsünmekten hala alikoyamiyorum.

Q7 sorusu kaldi simdi  (önce Q8'i yaptim). 


Su anda yenmemis yiyecek sayisini kullaniyorum. 2/5 aldim.
En yakin ve en uzak mesafeyi kullanacagim, sonra üçünün maksimumunu alacagim.

Simdi çikmam gerekiyor, aksama tekrar devam ederim. Mini contest'te katilmayi düsünmüyorum, bir fikrim var ama uzun sürer.




Erdem

UFS demişim ama sorarken yanlış yazmışım  ???

$ python pacman.py -l openMaze -p SearchAgent -a fn=ufs -z .5

BFS kullanınca aynen bende de 682 tane düğüm geziliyor.

Gerçekten güzel çalışıyorsun. Aslında ben de eğer kursu bırakmayı düşünmeseydim biraz kasardım. Ama kursu bırakıp tekrar elektroniğe ve EPE okumaya döneceğim. Yarına kadar uğraşacağım sonra gelsin işlemsel yükselteç  :D

anladinmi

Bence bu dersi bos verme. EPE magazindeki bilgilerin yerini tutmaz, asagi yukari ayni konular dönüyor belli bir seviyeden sonra.

Dün gece CSP derslerini izleyip HW2 yaptiktan sonra, dedim ki su  yarim kalan heuristic'i bitireyim, en uzak yem mesafesini ekleyeyim dedim.
Yaptim bilgisayaripmda gayet füzel çalisti, yükleyim de 17 'den 18 'e geçsin not dedim.
yükledikten sonra error 502 çikti karsima, ve 17 oldu kocama 0. site çökmüs (son saatte herkes yukleme yapmak istemis anlasilan).
Foruma girdim, yalniz degilmisim, birçok kisi sikayette bulundu, full time çalisiyoruz, çok az zaman veriyorsunuz vs.. vs..
1 saat sonra 24 saat daha uzatilacak diye Community TA açiklama yapti. Yani  proje için bu geceye kadar vakit var ve HW2 için çarsambaya kadar uzatmislar.
Alıntı YapNow that we're approaching the Project 1 deadline, we're excited to see all the completed projects coming in! Unfortunately, there was a site-wide edX issue that prevented all code submissions for all classes for about an hour, which in turn blocked the CS188.1x autograders. Because this prevented many of you from submitting Project 1 today, we've decided to extend the deadline by 24 hours. Project 1 is now due Monday, October 15th, at 11:59pm (in your local time). As a result, we are also extending the deadline for Homework 2; Homework 2 is now due Wednesday, October 17th, at 11:59pm.
We realize that there are many reasons that submissions can get delayed, whether it's site problems or just life being unpredictable. As a result, we'll be looking into whether there are good ways of making deadlines more flexible for future projects while still maintaining the pacing of the course.
Dan, Pieter, and the CS188x Course Team

Bence dersi birakma proje ödev yapmasan bile dersi izle, çok sey kazandirir.
ufs fonksyonunu bulamadim. dfs, ucs  ve Astar kaldi
D:\edx\search>python pacman.py -l openMaze -p SearchAgent -a fn=ucs -z .
5
[SearchAgent] using function ucs
[SearchAgent] using problem type PositionSearchProblem
Path found with total cost of 54 in 0.1 seconds
Search nodes expanded: 683


BFS :
Path found with total cost of 390 in 0.8 seconds
Search nodes expanded: 683

D:\edx\search>python pacman.py -l openMaze -p SearchAgent -a fn=astar -z
 .5
[SearchAgent] using function astar and heuristic nullHeuristic
[SearchAgent] using problem type PositionSearchProblem
Path found with total cost of 54 in 0.1 seconds
Search nodes expanded: 682

Erdem

Alıntı yapılan: anladinmi - 15 Ekim 2012, 22:32:56
Bence bu dersi bos verme. EPE magazindeki bilgilerin yerini tutmaz, asagi yukari ayni konular dönüyor belli bir seviyeden sonra.

Ben artık bıraktım bile elektroniğe geri dönüş yaptım  :D

Bu kurs çok güzel bir kurs ancak ileride algoritmalar dersini aldıktan sonra almayı düşünüyorum.

Bir de EPE'de aslında elektroniği derinlemesine anlatan bölümler de var. Örneğin Teach In serisi.. Bir tane osiloskop olsa bunları denemesi çok zevkli olabilir. Hatta işlemsel yükselteçleri oldukça detaylı anlatmışlar.

Şimdilik 6.002 derslerini tekrar ediyorum. Profesör Agarwal'ın sesini tekrar duymak güzel. Hasta oluyorum bu adama harika  :)

İşlemsel yükselteç konusunu tekrar etmeye başladım bile.

Bunun dışında yapmayı planladığım bir kaç proje var. Bunlar içinde kendime yavaş yavaş bir elektronik çalışma ortamı hazırlamaya karar verdim.  Osiloskop, işlev üreteci, lehim istasyonu vs. de almam gerekecek. Hatta osiloskobu yapmazdan önce kendim ses kartından yapmaya mı çalışsam diye düşünüyorum.

Gerçekten bu dersler de çok zevkli ama bir ders alıyorsun sonra başka bir ders çıkıyor. Ama elektronikle ilgili şu dersleri verirlerse gözü kapalı alırım:

Dijital elektronik ve programlanabilir mantık blokları (FPGA) - 6.004
Sinyaller, sistemler ve kontroller - 6.003
Analog elektronik - 6.012 veya 6.101
Mikrodenetleyiciler - 6.115

Alıntı yapılan: anladinmi - 15 Ekim 2012, 22:32:56
D:\edx\search>python pacman.py -l openMaze -p SearchAgent -a fn=ucs -z .
5
[SearchAgent] using function ucs
[SearchAgent] using problem type PositionSearchProblem
Path found with total cost of 54 in 0.1 seconds
Search nodes expanded: 683


Zaten ben de benim yazdığım UCS'de bir eksik olduğunu farketmiştim. Ama sistem kabul etti  ;)

Çünkü UCS için yol masrafı eşit olsa bile UCS, BFS (enine arama) gibi çalışması gerekiyor.

anladinmi

Son ders haftasi basladi.
Takip eden var mi ?
Bu hafta epey enteresan konu, makine nasil ögrenir. Monopod (hexapod'un tek bacaklisi olarak dusunun) bir robotun yürümesini ögrenmesi için gereken algoritmayi anlatiyor: Q-Learning.
Proje kisminda ise bunu ögreten kod yaziliyor.
2 Servo ve 1 pic (tercihe göre AVR, veya ARM'da olur) ile gerçek bir model yapilabilir.
Bu algoritma sayesinde, sistemin parametreleri degisse bile , örnegin :  (kol uzunluluklari, servo katsayisi, yerin kayganligi ...), makine ögrenecek ve yeni çevresine adapte olup, optimal sekilde yürümeyi ögrenecek?

Dersin videolarinin asagidaki linklerden indirebilirsiniz. Son kullanma tarihlerine itibar etmeyin, indirildikçe uzuyor sanki. Yine de en kisa sürede indirin


Lecture 1:  PirateBay or MediaFire
Lecture 2 (thanks to Sianes):  Download
Lecture 2 continued:  Download (Sorry, the last videos wasn't in the first zip.)
(Some video quizs don't want to download in the batch, I'll try to figure out why)
Lecture 3:  Download (All theory videos and video quizs. Ignore the names, just follow the numbers)(Expires on 2012-10-19)
Lecture 3 continued:  Download (Expires on 2012-10-19)
Lecture 4 and continued:  Download (Expires on 2012-10-26)
Lecture 5 and continued:  Download (Expires on 2012-10-27)
Lecture 6:  Download (Expires on 2012-10-30)
Lecture 7:  Download (Expires on 2012-10-30)
Lecture 8:  Download (Expires on 2012-11-08)
Lecture 9:  Download (Expires on 2012-11-08)
Lecture 10:  Download (Expires on 2012-11-15)
Lecture 11:  Download (Expires on 2012-11-15)
The Whole Course edx-downloader/edx-dl
(You can download a specific week or the whole course in your favorite format)
(It should also work for any other course on the edx platform)


Erdem

Ben takip edemiyorum ne yazık ki  :o

Çünkü hem daha pratik olarak uygulamam gereken çok şey var. Hem de teorik olarak bazı temel bilgileri tekrar etmem gerekiyor.

Daha ilk kez baskı devre kazımayı deniyorum mesela  ::)

Sonra lehim tabancası yok, osiloskop yok. Yakın zamanda bunlardan oluşan bir elektronik çalışma masası oluşturmayı düşünüyorum.

Çok ilginçmiş. İndirme bağlantıları için teşekkürler!  :)

3-Servo Walking Robot - The Latest in Hobby Robotics

Bu öğrenme algoritmalarını böyle bir robotta kullanmak çok ilginç olurdu  :D