在前文
「證明:GnuGo及同類博弈程序屬於偽智能」中,有人提出異議,認為我是在拿兩個完全相同的引擎進行測試,而世界上沒有兩個完全相同的人,自然下不出完全相同的棋局。於是我進行了另一項針對多種不同引擎的實驗:猜拳。
測試的目標,是要對人、人工智能的決策方式進行對比,由隨機決策的結果作為參照。為此,我寫了一個測試平台,讓多個引擎進行連續對決,並對結果進行統計分析。
注意,本次實驗中,
決策的結果(猜拳的勝率)並不重要,我們唯一關注的是決策的方式。
測試平台說明
所有程序皆使用Python寫作。人機對戰回合數以100次為基準,AI對戰則以300次為基準。
為方便起見,測試平台會按照對戰雙方的出「石頭」、「剪刀」、「布」的概率生成報告,然後可以由其他軟件(如Excel之類)讀取並生成概率曲線。生成的result.txt是合計報告,result_pp1、result_pr1、result_ps1分別是Player 1出「布」(Paper)、「石頭」(Rock)、「剪刀」(Scissors)的移動平均概率,其中n值為10。
測試相關代碼點此下載
引擎說明
所有繼承自Player的引擎均可接入測試平台。本次測試的所有引擎均沒有使用隨機數。
人工引擎HumanPlayer:只是一個人工對話程序,沒有實際的決策能力。由操作員選擇出拳方式後,會將對方出拳及猜拳結果顯示出來。
隨機引擎RandomPlayer:完全以隨機方式決定出拳。由於沒有決策能力,很適合作為「靶子」使用。
Billy系列引擎:由Billy Sir開發,包括LiMing、Linda等簡單回溯引擎,以及Billy、Billy2等具備模式搜索功能的引擎。
Adam系列引擎:由本人開發,包括Adam、AdamP,設計目標是在沒有給出遊戲規則的情況下(即AI本身不清楚出拳的強弱判定),單純根據勝率確定策略。
實驗目標說明
. 驗證AI能否在不使用隨機數的情況下,根據隨機對手的出拳而產生具備隨機特徵的概率曲線;. 驗證兩個不同的AI引擎能否在不使用隨機數的情況下,在對戰時產生沒有明顯規律的概率曲線;. 比較AI和人在同樣面對隨機對手的情況下,產生的概率曲線有什麼異同。
測試結果及分析
首先需要以人和隨機引擎的測試結果作為參照,其概率曲線如圖所示:
圖中的藍色曲線是人出「拳頭」的概率,紅色、綠色分別是隨機引擎出「布」、「剪刀」的概率。
所有曲線都有很明顯的隨機特徵。但很顯然,藍色曲線和綠色曲線正相關,而和紅色曲線負相關。如:在第30~40回合之間,隨著出「剪刀」的概率加大,我們出「拳頭」的概率也增大;在45~65之間,隨著出「布」的概率增大,我們出「拳頭」的概率隨之減小。這正是現實生物「趨利避害」的思考方式的體現。
那麼,我們的AI引擎表現又如何呢?
下圖是Linda和隨機引擎的測試結果。藍色曲線是Linda出「拳頭」的概率,紅色、綠色分別是隨機引擎出「布」、「剪刀」的概率。
可以看出,Linda具備一定的趨勢跟蹤能力,但曲線波動遠遠不能反映對手的趨勢變化。而其中更是有許多非常明顯的決策失誤,如200前後的綠色出現一個峰值,正是出「拳頭」的好時機,可是此時的Linda反而棄之不用,簡直莫名其妙。
讓我們再來看看Billy的情況。
Billy的隨機特徵表現得非常明顯,大多數時候也表現出了根據對手出拳概率而改變策略的情況,但仍然出現了許多莫名其妙的決策趨勢。如100前後的「拳頭」峰值就有些「高深莫測」,而在200前對手出現「剪刀」峰值的情況下也並沒有作出有效進攻。
最後看看AdamP的概率曲線。
和Billy一樣,AdamP的曲線也具備隨機特徵,但卻顯得「大起大落」,頗具本人個性。盡管多次出現100%的決策概率,但在大多數時候,決策曲線還算有針對性。不過面對150回合的「剪刀」峰值,決策的作出卻產生了滯後,以致於落入了隨後的對手出「布」的峰值的圈套中。
實驗可知,
盡管計算模型本身不能產生真正的隨機數,但在面對隨機的對手時,AI是可以作出具備隨機特徵的決策的。和人相比,AI對形勢變化的判斷能力和反映能力還是比較弱,也就是說,
應變能力遠不如現實生物。不過單從以上的曲線來看,AI引擎就算和人相比,也還算是有模有樣的,貌似我所說的「偽智能」沒有了說服力。且慢,讓我們看看Billy和AdamP的對戰結果。
嘛,關於這個結果嘛,大家自己看,我就不多說了。
如果你覺得任意兩個正常的現實智慧生物能出現這樣慘不忍睹的策略概率曲線,不妨舉例。反正我是沒見過。
實驗目標2宣告失敗。如果你認為你有辦法讓兩個不使用隨機數的AI在對戰時產生沒有明顯規律的策略概率曲線,也不妨和我討論。
至此,這個實驗卻並沒有結束,AI與隨機對手的戰鬥不過剛剛開始而已。欲知後事如何,請聽下回分解。