人工智慧通識-科普-繁忙的海狸Busy beaver
歡迎關注我的專欄( つ•̀ω•́)つ【人工智慧通識】
繁忙的海狸是個圖靈機遊戲,這一篇我們就認真的來看看這個可愛的小動物。

停機問題Halting Problem
之前我們介紹過基本的圖靈機,讀寫頭Head可以不停地對紙帶上的數字(0或1)進行讀取,然後再跟進自身狀態State和讀取到的數字來決定下一步動作,以及下一步狀態切換。

但是圖靈機有一個問題,那就是它根據設定好的規則執行,並不一定能夠最終自動停下來,不停下來就代表計算沒有結束,沒結束就代表得不到結果。
一直執行卻永遠得不到結果的圖靈機,是毫無用處的。
所以有效的圖靈機必須確保能夠自身根據規則最終能切換到停機Halt狀態才行。
對於無盡這個事情,《莊 子·天下篇》就講到 一尺之棰,日取其半,萬世不竭 ,這就是一種有規則、能執行,但不能自動停機的圖靈機演算法。
繁忙的海狸Busy beaver
圖靈機本質上是能夠自動執行的多個程式指令,如下圖所示:

繁忙的海狸遊戲是一個圖靈機遊戲,它遵循兩個原則:
- 必須能夠自動停止Halt。
- 儘可能在初始都是0的無限長紙帶上寫出更多的數字1。
在上圖中,左側每個卡片card代表一個指令,也對應一個狀態State,而紙帶上固定只有0或1兩個數字。上圖中那麼就是有4個狀態(4張卡片)2個symbol元素。
1狀態繁忙的海狸 BB-1
預設Halt停機(狀態State 0)的卡片不計,只有一張卡片(狀態State 1)的繁忙海狸,如下圖所示。

上圖中簡化了寫法,下面0和1組成的兩行分別表示讀取的符號為0或者為1執行的動作。而0 101中後面三個數字分別表示把當前位置的數字改寫為1,向左移動(0向左1向右),最後一個數字表示下一狀態為1。 0 101
即 [如果讀取到0],[那麼改寫為1][然後向左移動][再跳轉到狀態1]
,同樣 1 110
表示 [如果讀取到1],[那麼改寫為1][然後向右移動][再跳轉到狀態0停機]
。
實際上由於紙帶數字初始是0,讀到0,寫成1,向左走,狀態不變(還是轉到狀態1),所以永遠讀取不到1,也就永遠不會進入第二行的情況,也永遠不能停下來,會一直向左無限跑過去。
這樣的海狸不符合停機規則。
我們必須把第一行規則改為 0 100
或者 0 110
或者 0 010
, 0 000
,這樣才能實現停機,但這樣只能走執行一步,只能在紙帶上寫出1個1,如下圖。

有沒有更好的辦法?沒有了。無論是向左還是向右,無論是先改寫再移動還是先移動再改寫,在1state和2Symbol的情況下只能最多寫出一個1。
BB-2和更多
1狀態海狸有多少種可能的走法?答案是64種,當然其中包含了很多無限迴圈不停機的無效走法。64種走法裡,能停機的最好成績是1.
關於多狀態海狸(多卡片海狸)的走法,有個公式可以套用:
可以推算出2卡片海狸共有 種可能。
而這20736種可能的走法中,有多少會停機?不停機的最好成績是多少?——這些都沒法用特定演算法計算,只能把這兩萬多種情況都模擬出來,然後看哪些停住了,再找出其中最好成績。
2卡片海狸即BB-2的最好成績是4,最多寫出4個1,是不是很失望呢?
更失望的是BB-3,它有16777216(1600多萬)種走法,但最好成績是6。
BB-4有256乘以10的8次方那麼多走法,最好成績是13。
BB-5則人類25年來也沒有算出確定的最好成績來,目前的最高紀錄是4098。這是由於走法太多太複雜,計算量太大,超級計算機也算不完。
結語
有些事情看上去簡單,但實際並沒有什麼好的演算法可以直接得出結果,只能暴力嘗試,而遇到龐大數字的時候,現代計算機也無能為力。
實際上每件事都會有確切演算法嗎?
世上有太多需要模糊演算法,或者只能得到一些大約概率,或者什麼也得不到。
歡迎關注我的專欄( つ•̀ω•́)つ【人工智慧通識】
每個人的智慧新時代
如果您發現文章錯誤,請不吝留言指正;
如果您覺得有用,請點喜歡;
如果您覺得很有用,歡迎轉載~
END