Tree Search: BFS, DFS, Best-First, and A* Search

This example is from MIT OCW Artificial Intelligence.

Consider the tree shown below. The numbers on the arcs are the arc lengths; the numbers

near states B, C, and D are the heuristic estimates; all other states have a heuristic estimate

of 0.


Assume that the children of a node are expanded in alphabetical order when no other order

is specified by the search, and that the goal is state J . No visited or expanded lists are used.

What order would the states be expanded by each type of search. Write only the sequence

of states expanded by each search.


Breadth First

Setep 1:

Visited: A

Queue: B, C, D


Step 2:

Visited: A, B

Queue: C, D, E, F G


Step 3:

Visited: A, B, C

Queue: D, E, F G, H


Step 4:

Visited: A, B, C, D

Queue: E, F, G, H, I, J


Step 5:

Visited: A, B, C, D, E

Queue: F, G, H, I, J



Step 6:

Visited: A, B, C, D, E, F

Queue: G, H, I, J


Step 7:

Visited: A, B, C, D, E, F, G

Queue: H, I, J


Step 8:

Visited: A, B, C, D, E, F, G, H

Queue: I, J


Step 9:

Visited: A, B, C, D, E, F, G, H, I

Queue: J


Step 10:

Visited: A, B, C, D, E, F, G, H, I, J

Queue:


Path for BFS: A, B, C, D, E, F, G, H, I, J


Depth First

Step 1:

Visited: A

Stack: B, C, D


Step 2:

Visited: A, B

Stack: E, F, G, C, D


Step 3:

Visited: A, B, E

Stack: F, G, C, D


Step 4:

Visited: A, B, E, F

Stack: G, C, D


Step 5:

Visited: A, B, E, F, G

Stack: C, D


Step 6:

Visited: A, B, E, F, G, C

Stack: H, D


Step 7:

Visited: A, B, E, F, G, C, H

Stack: D


Step 8:

Visited: A, B, E, F, G, C, H, D

Stack: I, J


Step 9:

Visited: A, B, E, F, G, C, H, D, I

Stack: J


Step 10:

Visited: A, B, E, F, G, C, H, D, I, J

Stack:


Path for DFS: A, B, E, F, G, C, H, D, I, J



Best-First

Node

h(n)

A

0

B

1

C

6

D

3

E

0

F

0

G

0

H

0

I

0

J

0


Step 1:

Open: A

Close:


Step 2:

Open: B, C, D

Close: A


h(B) = 1 ==> the lowest

h(C) = 6

h(D) = 3


Step 3:

Open: C, D, E, F, G

Close: A, B


h(C) = 6

h(D) = 3

h(E) = 0 ==> the lowest

h(F) = 0

h(G) = 0


Step 4:

Open: C, D, F, G

Close: A, B, E


h(C) = 6

h(D) = 3

h(F) = 0 ==> the lowest

h(G) = 0


Step 5:

Open: C, D, G

Close: A, B, E, F


h(C) = 6

h(D) = 3

h(G) = 0 ==> the lowest


Step 6:

Open: C, D,

Close: A, B, E, F, G


h(C) = 6

h(D) = 3 ==> the lowest


Step 7:

Open: C, I, J

Close: A, B, E, F, G, D

h(C) = 6

h(I) = 0 ==> the lowest

h(J) = 0


Step 8:

Open: C, J

Close: A, B, E, F, G, D, I


h(C) = 6

h(J) = 0 ==> the lowest


Step 9:

Open: C

Close: A, B, E, F, G, D, I, J

Reach the Goal J


Path for Best-First: A, B, E, F, G, D, I, J


A*-Search

Node

h(n)

A

0

B

1

C

6

D

3

E

0

F

0

G

0

H

0

I

0

J

0


Step 1:

Open: A

Close:


Step 2:

Open: B, C, D

Close: A


f(A->B) = h(B) + g(A->B) = 1 + 5 = 6 ==> the lowest

f(A->C) = h(C) + g(A->C) = 6 + 2 = 8

f(A->D) = h(D) + g(A->D) = 3 + 4 = 7

Step 3:

Open: C, D, E, F, G

Close: A, B


f(A->B->E) = f(A->B) + h(E) + g(B->E) = 6 + 0 + 6 = 12

f(A->B->F) = f(A->B) + h(F) + g(B->F) = 6 + 0 + 3 = 9

f(A->B->G) = f(A->B) + h(G) + g(B->G) = 6 + 0 + 4 = 10

f(A->C) = h(C) + g(A->C) = 6 + 2 = 8

f(A->D) = h(D) + g(A->D) = 3 + 4 = 7 ==> the lowest


Step 4:

Open: C, E, F, G, I, J

Close: A, B, D


f(A->D->I) = f(A->D) + h(I) + g(D->I) = 7 + 0 + 6 = 13

f(A->D->J) = f(A->D) + h(J) + g(D->J) = 7 + 0 + 3 = 10 ==> the lowest

Step 5:

Open: C, E, F, G, J

Close: A, B, D, J


Reach the Goal J

Path for A*: A, B, D, J


自製Otto二足機器人

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.


官網 Otto DIY 有很多豐富的資料。


正文開始囉。

筆者試著使用紙箱來自製二足機器人,結果成功了。



電子材料如下:

名稱 數量

Arduino Nano 1

NANO UNO 多用 擴展板 1

HC-SR04超音波模組 1

SG90伺服馬達 4

5V 有源蜂鳴器 1

usb 線 1

母母杜邦線10公分 10


工具:剪刀、熱熔膠槍等。

筆者是將兩個 SG90伺服馬達 用熱溶膠槍給黏在一起。



實際動起來就像這個影片


Otto 大軍照。




Solutions to SQL Zoo practice Part 2

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

This post contains solutions to SELECT from nobel

針對 SQL Zoo (https://sqlzoo.net/wiki/SQL_Tutorial) 這個SQL學習網站的SELECT from nobel練習題,本文提供了一些參考解法。















Solutions to SQL Zoo practice Part 1

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

This post contains solutions to SELECT basics and SELECT from world.
針對 SQL Zoo (https://sqlzoo.net/wiki/SQL_Tutorial) 這個SQL學習網站,本文提供了一些參考解法。

SELECT basics




SELECT from world















電繪技巧入門:圓形速畫法

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

筆者是用Windows系統裡的Paint.NET來做示範的。

圓形速畫角色法
先將背景的圖層上顏色。

步驟一:畫身體。
新增一個圖層名稱為身體,選擇橢圓形工具,按住Shift就可以畫出圓形。


步驟二:畫左腳。
新增一個圖層名稱為左腳,在身體左下方畫一個圓形的腳。


步驟三:畫右腳。
新增一個圖層名稱為右腳,在身體右下方畫一個圓形的腳。


步驟四:畫左手
新增一個圖層名稱為左手,在身體左上方畫一個圓形的手。


步驟五:畫右手
新增一個圖層名稱為右手,在身體右上方畫一個圓形的手。


步驟六:畫面
新增一個圖層名稱為面,在身體內用直線畫面。



步驟七:畫左眼
新增一個圖層名稱為左眼,在面裡面畫左眼。


步驟八:畫右眼
新增一個圖層名稱為右眼,在面裡面畫右眼。


步驟九:畫嘴巴
新增一個圖層名稱為嘴巴,在身體裡面畫嘴巴。


步驟十:畫帽子
新增一個圖層名稱為帽子,在身體上方畫帽子。

畫出一個戴著帽子又圓滾滾的卡通人物了!?



在 Ubuntu 上架設郵件伺服器

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

在架設郵件伺服器之前,需要有個網域名稱。讀者可至 https://codotvu.co/ 申請免費網域名稱。本文使用 Ubuntu 20.04 做為架設的系統。

安裝與設定 postfix 
安裝指令為 sudo apt install postfix

選擇 Internet Site

填入網域名稱,筆者填入自己在 https://codotvu.co/ 的網域名稱 yunlinsong.co.vu


設定接收管理者收到Mail的Linux帳號名稱


設定伺服器接收哪些網域的Mail,並轉寄給User

這邊選擇 No

Reply mail IP 設定,使用預設值即可

信箱大小,用 0 表示無上限


使用預設的 +

選擇 all,這樣 ipv4 與 ipv6 皆可使用
 
測試郵寄發送
使用 telnet 與 mail server 建立連線
telnet localhost 25

輸入底下指令設定寄件者與收件者:
mail from: 寄件者信箱
rcpt to: 收件者信箱


輸入 data 指令,編輯信件內容。使用獨立一行 . 符號表示來結束內容編輯。輸入 quit 指令結束 telnet。

範例:

此時,就可以去收件人信箱看看有沒有收到郵件了。