AI基礎:美女和野人過河問題

AIBigbull2050發表於2019-10-16

AI是一個提升高階度的概念,真正的AI遠遠不是說說而已。筆者以AI演算法的經典問題為例,闡釋了問題的解決邏輯和辦法,展示了演算法的形成過程。

AI基礎:美女和野人過河問題

AI(Artificial Intelligence)人工智慧,可以說是最近比較火熱一個詞。就像曾經的網際網路概念一樣,任何一個專案只要和AI搭上邊,就似乎顯得非常高大上。

AI是一個領域,是一門學科,裡面涉及的知識非常多,僅我們大家能想到的AI應用,就能隨口說出數幾種,像NLP(NaturalLanguage Processing)自然語言處理,TTS(TextTo Speech)文字到語音,涉及的人機對話,語音合成;以及我們現在所用到的人臉識別,正在推廣的刷臉支付,家裡用的智慧掃地機器人;情景感知智慧傢俱、智慧金融。

無處不在的AI技術,同我們的生活息息相關,也在不斷影響著我們的生活。

AI概念本身不錯,如區塊鏈一樣,本身是一個很好的理念,但由於部分人過度投機,使得這個領域也存在著參差不齊,魚龍混雜的情況。

現實中存在這種情況:是個人,會寫個邏輯語句,就敢叫什麼人工智慧工程師,什麼演算法工程師;是個專案加一點點邏輯判斷,也敢叫人工智慧專案。

現狀比較浮躁,缺乏對科學基本的敬畏。

我們目前所見到的所謂的人工智慧的專案,大多是把市面上已經有的人工智慧服務,自己整合一下,包裝一下,用用而已。但如果真要形成核心產品,要有相當長的路要走,要投入巨大的人力物力財力。

試想,你做的所有的服務,都是其他廠家所提供的,自己沒有核心的技術,很容易受到其他廠商的控制,除非你將來做的產品可以被這些大廠收購。

但話說回來,做的產品沒有核心競爭力,只是整合別人的功能,是沒有什麼技術壁壘的,就更不要說形成自己的護城河了,很容易被模仿、超越。

所以,個人認為,人工智慧,最為基礎的還是演算法,要最最基礎的研究,涉及大量的計算機、心理學、運籌學等各學科領域的知識。

以文字轉語音為例,單純的一個字轉成語音,不是很難,但一長段話轉成很流暢的語音,並可以跟據不同人的音色來取樣和播放,這一個看似很小的功能,背後有著大量的研發人員。

人工智慧的核心,就是演算法,不同的演算法結合起來,像一個個DNA一樣,組成了人工智慧的應用。所以,今天我們就從一個最簡單的例子入手,從而開啟人工智慧最最基礎的演算法入門之旅。

一、問題場景

這個問題的確比較基礎,網上搜尋一下,會一有大堆這樣的文章。我自己也在網上看了一些,但發現網上探索出來的內容還是不是很好,有些程式碼還存在一些問題。不是很嚴謹。

這個世界上,指責別人最容易,認清自己最難。與其去吐槽別人,不如自己寫一個更好一點文章,分享給大家。

現在我們進入主題。

有3個美女和3個野人要過河,只有1條船,沒有船伕,這6個人都會划船。但這條船1次只能載兩個人,任何情況下,只要野人的數量大於美女的數量,美女就會被野人吃掉。也就是說,在河的兩岸,即河的左岸上和右岸上,野人的數量任何時候都不能大於美女的數量。

如何6個人能全部過河,並且美女安全(即不被野人吃掉)?

如果我們從邏輯上理解,其實就是各種方案的探索,最終試出一條可行的方案。

現狀,我們可以認為他們都在河的左岸,要到河的右岸:

美女1 美女2 美女3 ||河||

野人1 野人2 野人3 ||河||

第一步,兩個野人先一起到河的右岸,然後一個野人回來:

美女1 美女2 美女3 ||河||

野人2 野人3||河|| 野人1

第二步,兩個野人一起到河的右岸,然後一個野人回來:

美女1 美女2 美女3 ||河||

野人3 ||河|| 野人1 野人2

第三步,兩個美女去,然後一個美女和一個野人回:

美女2 美女3||河|| 美女1

野人2 野人3 ||河|| 野人1

第四步,兩個美女去,一個野人回:

||河|| 美女1 美女2 美女3

野人1 野人2 野人3 ||河||

第五步,兩個野人去,一個野人回:

||河|| 美女1美女2 美女3

野人2 野人3||河|| 野人1

第六步,兩個野人回:

||河|| 美女1 美女2 美女3

||河|| 野人1 野人2 野人3

以上問題,可以理解為決策問題,其實也是人工智慧學科中的一個非常基礎的經典問題。

我們分析的思路以及答案,雖然似乎是解決了問題。

但問題來了,除了我們上述使用的方法,這個題目還有沒有其他方法?哪種最快?以上問題只涉及6個人,我們通過人工分析的方法,還可以將結果羅列出來。

那如果是60個人,600個人?難道我們還是靠這種方法來分析?這樣單憑人力手工計算是非常複雜耗時的。那如何實現呢?這就需要我們編制一套搜尋演算法,通過計算機來幫助我們計算。

二、問題分析

我們從初態和終態來分析,可以知道初態是河的左岸有3個美女和3個野人,而終態是河的右岸有3個美女和3個野人。就是初始狀態是【3,3】,表示左岸最開始,有3個美女和3個野人。而終態是【0,0】,表示左岸最終美女和野人的數量均為0。

而美女和野人,從左岸到右岸,右岸回左岸,是要靠船來運送的。所以,船的狀態有兩種(航行中就不考慮了),要麼在左岸,要麼在右岸。我們用1表示船在左岸,用0表示船在右岸。

那麼結合美女和野人的狀態,最初始狀態就是【3,3,1】,表示最初船停靠在左岸,左岸有3個美女,3個野人。那麼終態我們知道,是船在右岸,左岸美女和野人數量都為0,那麼怎麼用數學來表示呢?就是【0,0,0】。

現在問大家一個問題,如果從狀態的視角來分析,會有幾種狀態?

很顯顯然,會有32種狀態,怎麼來的?

這就用到了數學基礎中的排列組合。美女的狀態有4種【0,1,2,3】,表示左岸沒有美女,有1個美女,有2個美女,有3個美女;同樣,野人的狀態也有4種【0,1,2,3】,船的狀態有2種【0,1】。

排列組合一下,我們整理初以下狀態;同時,我們標記出不符合條件的狀態:

  1. 野人人數大於美女人數的狀態,用綠色標出,不符合條件,因為按照題目要求,河的左岸和右岸上,野人人數大於美女人數,美女會被吃掉,任務失敗;這裡不僅要考慮左岸的情況,也要考慮右岸的,例如:【2,0,1】,這就很明顯,船在左岸的時候,右岸有1個(3減2)美女和3個(3減0)野人,也是不滿足題目要求的。
  2. 不可能存在的狀態,用黃色標出;例如:船不可能停在沒有人的岸邊【0,0,1】,以及美女不可能在野人佔多數的情況下,划船到對岸【3,0,1】。

整理後的狀態表,如下表所示。

AI基礎:美女和野人過河問題

表2-1 左岸美女與野人的狀態表

我們根據以上的狀態,畫出狀態空間圖,如下圖所示:

AI基礎:美女和野人過河問題

圖2-2 美女與野人過河的狀態空間圖

很顯然,所有從初態可以到達終態的路徑,都是美女可以安全過河的方案。

三、演算法實現

我們分析的思路有了,接下來就是如何通過演算法,實現我們的思想。

其實這就用到了資料結構中,經典的圖的搜尋——圖的遍歷,一般有深度優先和廣度優先遍歷演算法。如果從最小生成樹的角度,可以使用普里姆演算法和克魯斯卡演算法。

如果題目要求最優解,我們還會用到最短路徑計算的概念。這裡如果擴充套件的話,又可以寫很多。因為同一個問題,解決問題的方法也肯定不止一種。

接下來,我們演算法實現的基本思路就是:

找出船上的載人狀態,比如:船上可以有1個美女,1個野人,也可以有2個美女,也可以有2個野人;也就是船上的承載人數,受到船的承載量限制,本文題目要求是船上最多為2個。

我們根據船上的運送人員的數量,根據船的運送滿足題目要求的結果,來去尋找滿足條件的運送方案,之後我們存在動態陣列中。

同時,為了防止重複計算,我們還要判斷生成的方法是不是已經存在歷史結果中。

當然,歷史結果的儲存我們用的也是動態陣列;如果歷史中已經有了這條資訊,我們就不再計算,再去尋找新的方法。直到找出所有的結果。

實現的演算法如下圖3-1所示,已經經過實驗檢驗,並可以保證正確執行。

AI基礎:美女和野人過河問題 AI基礎:美女和野人過河問題 AI基礎:美女和野人過河問題 AI基礎:美女和野人過河問題 AI基礎:美女和野人過河問題

圖3-1 演算法實現

程式碼執行結果,我們可以看到,安全過河的方法有好幾種。如下圖3-2所示:

AI基礎:美女和野人過河問題

圖3-2 演算法執行結果

四、結論

本文中,我們從美女與野人過河這個經典的問題出發,展開分析,闡述瞭解決此類問題的基本邏輯與解決方法,並對美女與野人的演算法進行了擴充套件。

美女人數和野人數量,以及船的承載人數進行引數修改後,此演算法仍然可以根據要求進行計算,演算法的靈活性較強。如下圖4-1所示:

AI基礎:美女和野人過河問題

圖4-1 人數與船承載量引數修改後執行的結果

本文也有不足之處,就是程式的演算法仍然有優化的空間。

根據測算,當船最大承載量為2,美女和野人數量各為8人的情況下,找到第一種方案程式需要執行約40萬次,如下圖4-2所示。演算法的時間複雜度和空間複雜度較高,仍然有進一步的優化空間。

AI基礎:美女和野人過河問題

圖4-2 美女和野人數量各為8人的情況

從這個實驗中,我們也可以發現,僅這麼一個簡單問題,用到的理論知識已經相當多了,資料結構與演算法、數值計算。而且還並不是十分完美,離理想中的優美的演算法,還有較大的差距。

僅從這一個小問題出發,要做到演算法的極限,仍然需要付出很多努力。而這僅僅只是人工智慧中,非常非常非常基礎的,非常非常非常微小的一個知識點而已,真要做到極致,博士也不是那麼容易。

所以,有時候就不明白,有時僅僅本科畢業一兩年的人也敢叫什麼演算法工程師,真不知道哪裡來的自信。

真正的科學研究是枯燥的,是要沉下心來踏踏實實做研究的,也是要耐得住寂寞的。不走心的走秀最多隻能是曇花一現,唯有踏實與真誠才可以基業長青。

最後,希望本文能給大家帶來幫助。

共勉!



https://www.toutiao.com/i6748240096694108680/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2660161/,如需轉載,請註明出處,否則將追究法律責任。

相關文章