人工智慧還是人工智障?談遊戲的人工智慧

在一個遊戲中,所有電腦所做的思考,都可以將之稱為人工智慧,這一次我們所要談的就是遊戲中的人工智慧。在遊戲中,無論是戰略遊戲中電腦的佈局、行動、攻擊;或是角色扮演遊戲敵人角色的施法、攻擊,或是電腦控制角色的行動;甚至於像是大富翁一類的遊戲,人工智慧都佔有了相當重要的角色。特別是在以電腦思考為重的遊戲(如戰略遊戲或是棋類的遊戲)中,人工智慧更是顯得相當的重要。

如果各位讀者還不健忘,應該還記得光譜公司所推出的第一款遊戲《將族》吧。這個遊戲可以說徹徹徹底底的表現了人工智慧的優點,一般的玩者在剛進入這個遊戲的時候,恐怕都會連輸個好幾盤吧!就連遊戲中最低等的對手~那隻豬來說,也成為許多玩者的剋星,不管用了什麼辦法都沒有辦法打敗它。而面對著說明書上這隻豬的形容辭時,實在是有些傷心(說明書中說若是你連這隻豬都打不贏那真是太遜了等等)。前一陣子,光譜又推出了一個只賣99元的五子棋遊戲。由於該公司在人工智慧上的研究的確是獨領風騷,再加上五子棋的人工智慧要比象棋的人工智慧要簡單的多,因此這個遊戲又再次擊敗了眾多購買此一遊戲的玩者。

不過除了棋類的遊戲中,讀者們可有印象是否有那個其它的遊戲曾經因為人工智慧寫得好而被人稱讚呢?是不是大多聽到的不是罵這個遊戲很笨,就是罵它的人工智慧根本就是在作弊。就以大宇公司所出的《天使帝國2》這個遊戲來說,任何玩過這個遊戲的人都會發現該遊戲的電腦角色真是笨得可以。舉例來說在某些情況下明明只要再K一下就可以幹掉前面的敵人,但是她們卻在這個時候停下來恢復體力(還不忘記說一些廢話),這個就是最明顯的人工智慧寫得不好。再看一個最近相當熱門的戰略遊戲《終極動員令》來說,該遊戲的人工智慧有著相當多的漏洞,像是電腦的一方比較不會聚集重兵對玩者發動攻擊,同時在多數兵力的利用上也不是那麼理想,這就是人工智慧在處理部隊行動時沒有多加考量大局的情況。

以上面的兩個例子來說,筆者可以斷言這兩個遊戲可能用的都是所謂條列式的人工智慧。至於什麼是條列式的人工智慧呢?請各位讀者先看一下以下的例子。在一個最單純的條列式人工智慧的流程圖中,會將條件分別標示為判斷式一、判斷式二等等。這些判斷式指的就是程式設計師對電腦思考時所排定的思考順序。就以《天使帝國2》這個遊戲來舉例,若是第一個條件是當生命低於百分之三十的時候就使用休息指令進行恢復,第二個指令是當有敵人在攻擊範圍內時移動到它的週圍進行攻擊。那麼若是現在是在以下的情況時:

情況:當電腦控制的角色生命力為 28/100/且在攻擊的範圍內有一名敵人的生命為 1/100

在這樣的情況下由於程式在第一條判斷式就已經成立了,因此它並不會管敵人是不是已經瀕死,還是決定使用恢復的指令讓所控制的角色休息,使得敵人能有喘息的機會逃離這個地點。在這種情況下,我想各位讀者就會發現到這是一種人工智慧上的問題了。不過這時恐怕會有人認為那麼把兩個判斷式倒過來不就解決了嗎?事實上這樣子做並不能真的保證不會出問題,因為若是情況變成以下的狀況時:

情況:情況:當電腦控制的角色生命力為 28/100/且在攻擊的範圍內有一名敵人的生命為 10/100

此時雖然敵人的生命只有十點了,看起來好像隨時都可以K死的樣子,但是卻可能因為能力上不足而使得電腦控制的角色無法殺死它,只不過是輕輕的碰了它一下,在下一回合的時候反而會被敵人打死,如此一來恐怕會被更多的玩者罵了吧。因此比較好的解決方式就是在第一個判斷式上再增加一個副判斷式。這個副判斷式會在第一個條件成立(也就是玩者的生命力低於百分之三十的時候)再去判斷是不是在攻擊範圍內有可以殺死的敵人(可以從公式以及雙方的資料中求出),若是不能的話就繼續原本決定的原地休息,反之則採用發動攻擊的決定。

到這裡看起來好像電腦的人工智慧並不難,但是實際上在遊戲中的判斷式絕對不是就這麼兩三條而已,通常一個遊戲的人工智慧部份的程式恐怕是好幾頁都列不完的。就再回到《天使帝國2》這個例子來看,由於在遊戲中有許多不同的兵種,再加上各種不同的兵種會使用不同的技能,而魔法師又有各種不同的魔法,因此人工智慧的判斷式就不是剛才舉例時那麼單純的了。

講到這裡又必需要再多提一點,特別是在戰略遊戲中(尤其是目前滿流行的RSLG),由於有不同的兵種,因此每一種不同的兵種在判斷式的順序上也會有所不同。舉例來說戰士的本職就是以直接攻擊敵人為主,因此在戰士的判斷式中直接攻擊的判斷式必然要放在其他判斷式的前面;而魔法師是那種體力較弱而間接攻擊較強的角色,因此使用魔法發動間接攻擊的判斷式就必需要放在直接攻擊的判斷式前,讓它們先思考是不是能夠就用魔法來攻擊而不需要靠近敵人。若是沒有依不同的兵種來編排判斷式的重要性,恐怕就會發生魔法師傻傻的不顧性命的向敵人前進的情況了。

接下來再談談人工智慧的等級。在大部份的戰略遊戲中,都有將人工智慧分成幾個等級,不過在國內的戰略遊戲中,這些等級所影響的不是電腦控制角色的思考層次,反而是生命力大小或是攻擊力強弱,完全失去了人工智慧強弱的設定。就筆者看來,今天若是要在人工智慧上分等級,可以從下面的幾個方向去設計會比較合理。

首先可以將人工智慧的判斷式分成幾個不同的階層,就以剛才我們所做的例子來說,判斷式一是當角色的生命力低於百之三十的時候就進行恢復動作。因此若是我們將這個遊戲的人工智慧分成高低兩個不同的等級,那麼在低的等級時可能就不需要多加判斷是不是可以將敵人殺死,而直接決定休息來恢復生命。但是當在高等級的人工智慧時,就可以增加判斷計算能不能將範圍內的敵人打死,若是可以就直接進行攻擊敵人而不休息了。隨著等級的增加,流程圖的複雜程度也就會越來越高。這裡所提的只是相當簡單的例子,以下是一個比較複雜的範例:

現在我們以「賓果遊戲」來進行人工智慧的說明,在賓果遊戲中,玩者的目的是盡快連出五條線,因此在人工智慧的判斷式中,就會將二十五個格子分出不同等級的重要性。下面是一個賓果遊戲的格子,我們可以看到二十五個號碼排在裡面:

這二十五的號碼分別在不同的位置,也各有不同的重要性。首先我們就以遊戲開始時電腦應該怎麼決定要劃那個數字,依重要性的分類後,可以分成幾個等級:

第一級:13
第二級:1,5,21,25
第三級:7,9,17,19
第四級:3,11,15,23
第五級:8,12,14,18
第六級:2,4,6,10,16,20,22,24

為什麼要將13這個數字列為第一級呢﹖我想玩過賓果遊戲的人都知道,因為這個位置的數字同時掌握了四條線的形成,因此越早劃下它,完成線條的機會就越大,贏得勝利的機會也相對著越大。不過這只是在雙方都沒有劃任何數字的情況之下才這樣子決定,若是已經有一些格子劃掉了之後,就不能再這樣子計算了。因為此時我們的人工智慧必需要視所劃掉的格子盡量的利用它,儘快完成線條,使電腦能夠獲得勝利。因此當1,2,3,5 這四個格子都被劃掉的情況下,電腦必需要決定將4 劃掉來完成一條線條。因此在判斷單個數字的人工智慧計算式前面,自然就是判斷各線條的判斷式。

在賓果遊戲中共有十二條線,因此在判斷的時候就依這十二條線以及所缺數字的重要性來做判斷。若是有一條線缺的是13號這個數字,而另一條線缺的是2 這個數字,那麼在比較的時候因為13的重要性比2 要高,所以會決定要劃13這個數字。但若是此時還有一條線缺的也是2 的時候,就表示2 同時掌控了兩條線條的連成與否,因此這個時候2 這個號碼的重要性又比13要高了。由於賓果遊戲的判斷式經常會有交叉運算的情況發生,因此若是用原本的判斷式方式來做,不但浪費力氣而且可能會有因為判斷式錯誤而導致電腦做出「智障」的行為,因此在這裡筆者要再說明一種「積點式」的人工智慧方式。

首先我們來看看賓果遊戲的基本規則,先將五個號碼連成一線的就完成一條線,先完成五條線的人就獲得勝利。因此我們可以歸納出以下的幾點:

1.劃一個號碼後能夠完成一條線
2.劃一個號碼後能夠在一條線中出現四個點
3.劃一個號碼後能夠在一條線中出現三個點
4.劃一個號碼後能夠在一條線中出現兩個點

如果只有這四條算式那麼這個人工智慧也就太單純了些,不過各位不要忘了在賓果遊戲中許多的交叉。因此一個點上的數字可能會同時影響到兩條以上的線。所以我們將原本那四條算式和原本將數字分成六級的公式加上績分點,就成為以下的情況:

1.劃一個號碼後能夠完成一條線 (31點)
2.劃一個號碼後在這一條線中出現四個點 (15點)
3.劃一個號碼後在這一條線中出現三個點 (7點)
4.劃一個號碼後在這一條線中出現兩個點 (4點)
5.劃一個號碼後在這一條線上只有一個點 (1點)

然後這個只有一個點的狀況再依各數字的重要性再分為以下的狀況:

第一級:13
第二級:1,5,21,25
第三級:7,9,17,19
第四級:3,11,15,23
第五級:8,12,14,18
第六級:2,4,6,10,16,20,22,24

如何,加上積點了之後各位看懂了沒有﹖若是還沒有看懂的話現在我就來位為各位介紹一下。首先我們看看其中的第五條在前面已經說明過了,所以我就不在這裡重複的說明。現在我們來看看第三點和第四點,為什麼要這樣決定它的積分。各位先想想,若只是單純的有一個數字可以在一條線上形成兩點和在一條線上形成三個點,那麼三號算式一定會比四號算式要重要。但若是有一個點可以形成兩條有兩個點的線和一個只能形成一個點的線時,是那個一個比較重要呢﹖我相信大部份的玩者都會選擇那一條能夠形成兩條兩個點的吧。以這樣子的寫法,電腦的人工智慧在計算時就會是以下的情況:

(No x) = 4 x 2 > (No y) = 7 x 1

由於積點上的獲勝,電腦不會笨笨的選擇那一條只能完成三個點的線,而會選擇較有利的線,這就是積點式的優點。也由於績點型的計算能力較強,因此一些強調人工智慧的遊戲(像是象棋、圍棋)等等,大多是採用這一類的人工智慧寫法。不過由於這樣子的人工智慧在計算時會花掉較多的時間,會使得判斷的速度變慢,所以使得一般的戰略遊戲不會使用它,造成某些戰略遊戲因位採用條列式的方式判斷而有許多的盲點。這就是程式設計在時間與效率上的另一種考量了,畢盡沒有那一種是十全十美的嘛。

(1995.12 發表於電腦玩家雜誌)