左岸的人,貓,雞,米要過河,但是貓吃雞,雞吃米,所以貓雞同側時人必須也同側,雞米同側時人必須同側。同時人划船可以選擇送一件物品或者什么都不送。求所有的過河方案?
解題關鍵就影藏在題目的表述中,簡單來說就是排除一些非法狀態,並找出狀態之間的轉換規律。對於計算機來說要處理這個問題,首先要轉化為數學問題。很顯然狀態可以處理成四元組(a,b,c,d),分別代表人,貓,雞,米。0代表在左岸,1代表在右岸,那么初態和終態可以表示成(0,0,0,0)和(1,1,1,1)。
首先要從全部窮舉的狀態中剔除非法狀態,保留合法狀態。那么四位2進制,一共有16種狀態:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
從題目中我們可以獲取非法狀態具有的特征:貓雞同側時人必須也同側,雞米同側時人必須同側。翻譯成數學的語言就是:b=c 且 a=~b(非法狀態一)或 d=c 且 a=~d(非法狀態二),進而可以采用編程的方法剔除,於是就得到了所有的合法狀態:
0000
1110
1101
1011
1010
0001
0010
0100
0101
1111
下面我們要考慮狀態轉換之間的規律,這只需要做一些簡單的推理。人在兩岸間往返,那么相互轉換的狀態的a值一定是相反的,這是規律一;另一方面,人每次划船可以帶一件或不帶東西,那么相互轉換的狀態的bcd值只能有一位反轉或者都沒有反轉,這是規律二。這兩個規律雖然有些抽象但可定時可以用算法描述的。然后我們就得到了下面的狀態轉換地圖:

現在我們的問題轉化成了尋找狀態轉換網絡中初態到終態的具體路徑,這顯然是so easy的:

這是人工智能考試的最后一道題,由於時間原因,筆者並沒有將其完全解出來,但只是匆匆瀏覽一下,思路就了然於胸,究其本質不過是道數學題。初一看,要讓計算機解決一個如此抽象的問題,確實是需要些智能,但是計算機充其量也不過是台數學機器,又何以能“解決”一個問題。關鍵點在於如何把現實世界中的問題轉化為計算機可處理的數學問題,這才是最核心的部分,而這個過程往往是由人來代替的,所以所有“智能”的背后都是“人工”,機器之所以看起來具有智能是因為人的智能早已凝結在算法中了。從這個角度去看,人工智能更像是智能的傳遞,從人到機器。在這個過程中最令人着迷的是輸出的智能有沒有可能大於或等於輸入的智能,換句話說機器的智能可能超越人類嗎?也許真的存在這種研究智能傳遞規律的智能論,那么它一定是難以研究的,原因在於智能的不可描述性,像歷史上的信息論等學科都是把研究對象描述成數學。而智能目前還是一個抽象的概念,沒有任何一個數學公式能描述智能,如果我們接受試着從傳遞這個角度去看智能,興許會有新的感悟。
