第1章通用智能_第1頁
第1章通用智能_第2頁
第1章通用智能_第3頁
第1章通用智能_第4頁
第1章通用智能_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGE28智能游戲規劃精髓PAGE21第1章通用智能游戲的變革第1章通用智能1.1智能游戲的變革PaulTozour–IonStormAustingehn29@游戲中的人工智能(簡稱“智能游戲”)這一領域是隨著20世紀70年代視頻游戲的出現而興起的。這一領域最初并不引人注意,而且人們對它的認識也在很大程度上受到了七、八十年代簡單游戲的影響。即便在今天,智能游戲也總讓人聯想起古老的Pac-Man游戲和其中的四個人物Inky、Pinky、Blinky和Clyde。長期以來,視頻游戲工業的發展并沒能夠改變這種對于智能游戲的認識的局限。但是,一場變革正在醞釀中。在最近幾年中,智能游戲得到了長足的進步,從而使當今的智能游戲比以前的游戲更加豐富有趣。由于三維渲染的硬件設備和游戲的圖形質量已發展到近乎極致的地步,人工智能已經成為決定每個游戲的成功以及相關的游戲開發工作室的命運的重要因素。因此,如今的智能游戲已經從默默無聞上升到工業界新星的地位。智能游戲的變革正在發生。1.1.1一點歷史在電子游戲剛出現的時候,人工智能主要用于投幣式的大型游戲機,其目的是吸引用戶源源不斷地將1/4美元的硬幣投入機器。在最初的諸如Pong、Pac-Man、SpaceInvaders和Joust等游戲中使用了大量的簡單規則、動作序列的描述以及隨機決策等技術來使游戲的發展變得難以預測。國際象棋游戲在很長一段時間內成為學術界對人工智能研究的主流。這使我們不難理解為什么像Chessmaster2000[SofTool86]這樣的國際象棋游戲中出現了那么高智能的虛擬對手。這些游戲無一例外地采用了游戲搜索樹的策略。策略游戲是最早采用人工智能技術的一類游戲。很顯然,這類游戲光靠圖形技術是不夠的,而必須依賴優秀的人工智能技術來保證游戲的正常運行。策略游戲對人工智能技術提出了新的挑戰,因為這種游戲要求對象級(unit-level)的人工智能和具有相當戰術策略的虛擬人物。這類游戲中的早期代表是回合制策略游戲,比較有代表性的是MicroProse公司的Civilization[MicroProse91]和Civilization2,盡管它們采用了欺騙的手段來幫助虛擬人物來應對復雜場面。近來出現的一些即時策略(RTS)游戲中所采用的人工智能技術更為先進。WarCraftII[Blizzard95]首先采用了強大而有趣的RTS智能技術,而AgeofEmpire2:TheAgeofKings[Ensemble99]游戲則具有至今為止最強大的RTS智能。這些RTS智能技術的強大之處特別體現在實時運行能力上,比如同時為游戲中數百個對象進行路徑搜索(pathfinding)。在第一人稱射擊游戲中,ValveSoftware公司的Half-Life[Valve98]以它卓越的戰術智能而倍受好評,而EpicGames公司開發的Unreal:Tournament[Epic99]則因為其可擴展性和高超策略而聞名。LookingGlass工作室開發的Thief:TheDarkProject[LGS98]是最早的“第一人稱偷竊”游戲。它極其逼真地模擬了虛擬角色感知能力,并且采用分級警報技術使玩家能感受到虛擬角色的智能水平。Sierra工作室的SWAT3:CloseQuartersBattle游戲[Sierra99]極好地表現了擬人的動作和交互方式,并且采用隨機化的智能行為技術,使得玩家在每次游戲中都得到新的體會。模擬類游戲(比如久負盛名的SimCity[Maxis89])最早成功采用了人工生命(ArtificialLife,或A-Life)技術。其中,游戲TheSims中采用了許多極具個性的智能體(智能體)。這款非常流行的游戲證明了有限狀態機和人工生命技術的巨大潛力。另一類較早采用人工生命技術的是1996年以來陸續推出的Creatures系列游戲[CyberLife96]。這款游戲中盡其所能地模擬了游戲中大量出現的Norns精靈的心理和生理狀態,甚至引入了“數字DNA”的概念。神話類游戲,比如最早的Populous[Bullfrog89]和后來的DungeonKeeper[Bullfrog97],結合了模擬類游戲、人工生命技術和實時策略技術。這一趨勢在神話類游戲的代表作LionheadStudio開發的游戲Black&White[Lionhead01]中更加突出。該游戲采用了至今為止最為先進的智能游戲技術(本書后面會專門介紹)。盡管這款游戲并不是最早采用機器學習技術的范例,它無疑是最早成功運用智能學習(AIlearning)技術的典范。我們還應該注意到游戲Black&White巧妙的設計使得人工智能在游戲中占據了主導地位―事實上,整個游戲都是圍繞著教育和訓練精靈生物而展開的。這使得玩家的注意力前所未有地集中在智能游戲的發展上。1.1.2變革的背景一個游戲中人工智能的成功與否很大程度上取決于開發人員對它的重視程度。在很多時候,人工智能模塊是那些黑眼圈的開發人員依靠咖啡因的刺激在開發期限前的最后兩三個月中加班加點趕出來的。此外,硬件水平也嚴重制約了游戲人工智能的發展。通常情況下,繪制游戲中的圖像需要占用大量的CPU時間,這使得能夠用于人工智能的內存和計算能力極為有限。不幸的是,解決諸如路徑搜索等智能問題恰恰需要大量的處理器資源。在這方面,控制臺游戲的問題最為嚴重,主要是由于控制臺硬件有限的內存和較高的性能要求。游戲人工智能領域早期的一些失敗和不足還來自于開發團隊對這一領域在認識上的欠缺,也就是常說的“魔彈”態度。這種態度要么表現為對開發智能模塊的挑戰性認識不足(如“我們只是用了一種描述語言”),要么表現為在運用人工智能解決手頭問題時對技術的理解不足(如“我們不過用了一個大的神經網絡”)。近年來出現了許多專門研究游戲中人工智能技術的開發人員。他們從開發游戲的第一天起就專注于其中的人工智能問題。這是一個巨大的飛躍。在很多情況下,即使是對人工智能毫無經驗的程序員也能開發出高水準的智能游戲技術。事實上,開發人工智能技術并不一定需要大量高深的專業知識和對人類認知的深刻洞察力。在更多情況下,開發人員最需要的僅僅是腳踏實地的精神,一點點創造力和充足的時間。1.1.3主流的人工智能學術界的人工智能涵蓋了大量不同的領域和分支,它們中的很多在思維方式上還是格格不入的。為了避免對于學術一詞的理解偏差,我們把這一領域稱為主流的人工智能。為了更好的理解游戲中的人工智能,我們必須首先對人工智能這一更廣泛的領域有所了解。盡管本書無法詳細描述人工智能的發展歷史,我們還是列舉了一些與目前或將來的游戲關系密切的主流人工智能技術。另外,在文獻[AI95]中可以找到幾乎全部的主流人工智能技術的介紹。專家系統:專家系統用于描述和利用某一領域中專家(人)的知識。一個專家系統代表了專家在某一知識庫范圍內的專業知識和技能,并能夠基于該知識庫進行自動推理從而回答用戶的查詢。這樣的系統能夠提供接近于專家所能給出的專業意見。基于范例的推理:這種技術分析數據庫中存放的(歷史)輸入數據和相應的最優輸出結果,然后通過對比現有輸入數據和歷史數據來推知輸出結果。這種技術模擬了人們在處理新的情況時參考以前相似經歷的做法。有限狀態機:這是一種簡單的基于規則的系統。它包含了有限個“狀態”和狀態之間的“轉移”,彼此連成一個有向圖。有限狀態機在每一時刻都只能處于某一狀態。產生式系統:這種系統包含了一個規則數據庫。每條規則含有一條具有任意復雜度的條件語句,以及若干滿足該條件語句后所需執行的動作。產生式系統在本質上是許多條If-then語句,加上用于處理多個條件同時被滿足時的沖突解決機制。決策樹:決策樹類似于一系列If-then形式的條件判斷。在決策過程中,從決策樹的根結點輸入一組輸入數據,在每個分叉處根據某個輸入值選擇其中的一個子節點,依次類推。ID3或C4.5等算法可以用來從采樣數據中自動構造決策樹。搜索方法:這指的是在一張圖中找到滿足某個目標的狀態或動作序列。這里的目標可以是達到某個“目標狀態”,或者是使得某個(些)目標值最大化。規劃(調度)系統:這是搜索方法的一種特例。它研究的是在已知最初狀態和每個動作產生的結果的條件下尋找能夠達到某一結果的最優(最簡單)動作序列。一階邏輯:這是對命題邏輯的一種擴展,用于在給定環境中推理智能主體的相關情況。在這種理論中,“世界”中包含了許多“對象”,每個對象擁有獨立的身份和“特征”,從而把它和其他對象區分開來,同時還存在一些聯系著不同對象和特征的“關系”。情景演算:這種技術運用一階邏輯來計算給定情況下智能主體的應有動作。情景演算技術使用自動推理來決定達到最優狀態所需采取的動作序列。多智能體系統:這種方法研究如何通過多個彼此競爭和協作的智能主體之間的交互來自然地產生智能行為。人工生命:這是多智能體(multi-智能體)系統中的一種,研究如何為虛擬環境中的智能主體賦予某些生物體的共性。群聚技術:這是人工生命技術的一個分支,研究如何協調多個智能主體的動作,使它們在整體上看起來像逼真的動物群。機器人技術:研究如何讓機器能夠在現實世界中與人類交互運行。機器人學是人工智能中歷史最久、最知名、也是最成功的一個領域,而且近年來該領域隨著計算能力的爆炸式增長而獲得新生。機器人技術通常可以分為“控制系統”(輸入部分)和“傳感系統”(輸出部分)。遺傳算法:這無疑是人工智能中最具吸引力的一個領域(一個重要原因在于開發遺傳算法將給人帶來創造的樂趣)。這種技術試圖直接模擬生物進化過程,在一系列的程序、算法、和參數之間作出選擇、雜交、以及隨機的變異和交叉。近年來遺傳算法取得了一些令人矚目的成就[Koza99],這在很大程度上改變了人們認為計算機只能按人類設定的程序運行的普遍誤解。神經網絡:神經網絡是基于生物大腦和神經系統中的神經連接結構的一系列機器學習算法的總和。在具體使用中,通過反復調節神經網絡中互連節點之間的參數值(權重)來獲得針對不同學習任務的最優和近似最優反饋值。模糊邏輯:該方法采用實數值(而不是傳統的布爾值,即“是”或“否”)來表示對象屬于集合的程度。與傳統邏輯相比,模糊邏輯的表達能力更為豐富和細致,因而能夠進行更為強大的推理。置信網絡:置信網絡(尤其是它的子領域貝葉斯推導)提供了描述不同現象之間內在因果關系的工具。它采用了概率理論來解決現實世界中的不確定性和不完全知識等問題。它還可以用于推導現實世界的狀態和預測各種動作的可能結果。智能游戲在不同場合中或多或少地采用了上述的技術,所獲得的效果也各不相同。頗具諷刺意味的是,恰恰是有限狀態機、決策樹、產生式系統這樣的簡單技術在實用中證明是最有效的。在緊張的開發期限和有限資源的壓力下,很多開發人員都傾向于采用基于規則的系統這種最容易編寫、理解和調試的智能技術。專家系統與智能游戲在一定程度上具有共同的基礎,因為智能游戲的目的就是模擬專業玩家進行游戲。盡管智能游戲的知識庫在表達上不像專家系統的知識庫那樣正式,它們的效果是一致的,也就是模擬專業玩家的行為。許多諸如國際象棋和西洋雙陸棋等棋類游戲中成功采用了游戲樹和樹搜索方法。智能雙陸棋游戲已經能夠對抗最好的人類玩家[Snowie01],而在巨型機“深藍”上運行的智能國際象棋游戲更是擊敗了特級大師加里.卡斯帕羅夫[IBM97]。其他游戲,比如Go,盡管還沒有達到人類專家的水準,距離這個階段也并不遙遠了[Go01]。不幸的是,現代視頻游戲環境的復雜程度和游戲機制決定了它們無法像“深藍”那樣采用窮搜索游戲樹的策略。這些游戲多采用了其他一些路徑搜索技術。比如A*搜索算法幾乎在所有的游戲類別中都是最優的路徑搜索方法(算法的細節請見[Rabin00][Stout00]和本書中的[Matthews02])。游戲人工智能和機器人技術也有許多相通之處。由于游戲中的智能單元可以很容易地獲得虛擬世界中的一切信息,而不必像機器人那樣通過種種手段去感知和理解真實世界,智能游戲中無需用到機器人學中的傳感技術。然而,機器人的控制技術卻可用于操縱游戲中的智能主體與玩家、游戲世界、以及其他智能主體進行交互。游戲中智能主體的路徑搜索和導航技術與機器人導航技術是非常相似的。人工生命技術、多智能體系統和群聚技術在智能游戲中均得到了廣泛應用。游戲TheSims和SimCity的成功證明了人工生命技術的有效性和娛樂價值,而群聚技術也在眾多的游戲中被用來控制對象的智能化運動。規劃技術在智能游戲中也有采用。盡管主流的人工智能領域所研究的規劃系統是用來處理比游戲中的智能主體所面對的問題更為復雜的規劃問題,它的作用無疑會隨著游戲本身復雜度的增加而逐漸加大。模糊邏輯也是智能游戲中經常采用的一種技術。與之相比,一階邏輯和情景演算在智能游戲中還沒有被廣泛采用。這很有可能是因為情景演算不適用于對性能要求很高的實時游戲中,此外用正規的邏輯語言來描述游戲也存在著相當的困難。另外,置信網絡也沒有在智能游戲中廣泛應用。不過,這種技術特別適于解決智能游戲中涉及的許多子問題。1.1.4有關機器學習與學術界對于人工智能的廣泛研究相比,智能游戲的研究有時顯得有些勢單力薄。這一點在機器學習技術方面顯得格外突出。盡管這已經是陳詞濫調了,但出席“2001游戲開發大會”的游戲開發人員還是認為游戲中的人工智能與學術界的研究(比如神經網絡和遺傳算法)大相徑庭。游戲開發人員還是堅持采用簡單的基于規則系統和模糊狀態機來處理幾乎所有的智能游戲問題[Woodcock01]。我們有很好的理由來解釋兩者間在表面上的不可調和。機器學習機制在智能游戲領域中有一段曲折的歷史。在游戲中應用機器學習技術的早期嘗試都不太成功,甚至導致整個游戲無法正常運行。相對于學習技術的潛在優點來說,此技術的不恰當運用也會帶來災難性的負面作用。理由如下:機器學習(MachineLearning,簡稱ML)系統可能會學習錯誤的知識。如果它學習人類玩家的游戲手法,則一個無能的玩家可能誤導游戲中的學習模塊。ML技術很難通過調整來獲得所期望的結果。學習系統需要一個“適宜函數”來判斷學習結果的好壞。盡管我們可以構造一個強大的虛擬玩家,想要定義一個能反映“趣味度”的函數卻有相當的困難。有些機器學習技術(特別是神經網絡)是非常難以改進、測試和調試的。對于很多類游戲來說,學習機制是沒有意義的。在大多數的動作游戲和打斗游戲中,虛擬敵人的生存時間是如此之短以至于無法學習任何東西。除了上述的因素,機器學習技術在游戲中的失敗主要還是因為開發人員沒有正確地運用這些技術。開發人員常常用學習技術來完成一些用基于規則的傳統方法能更快更容易完成的任務,這使學習機制起到了反作用。學習機制應該被用到那些真正需要學習的場合中。最新的像Black&White這樣的游戲已經證明了學習機制能夠增加游戲的趣味性,從而使智能游戲顯得更為重要。毫無疑問,學習機制是一種強大的工具,特別是當它用在正確的場合中。正如游戲Black&White所表現的那樣,關鍵問題在于要把學習機制作為一個分層系統的某一部分,而該系統除學習機制外還采用了許多其他技術來完成眾多的人工智能子問題。1.1.5追求趣味性游戲中的人工智能和主流的人工智能在目標上并不完全相同。學術界人工智能的目的在于解決極端困難的問題,比如模擬人的認知或者理解自然語言。相比之下,在游戲中加入人工智能是為了獲得游戲的樂趣。游戲最終還是一種商業。如果有一個顧客愿意花上40美元來購買游戲,那么他或者她必然要求從游戲中得到樂趣。在許多游戲中,特別是動作類游戲中,我們很容易就能做到讓人工智能毫不費勁地擊敗人類玩家。從單純人工智能的角度來說,這的確代表了很高的智能,但并不是游戲玩家所希望出現的情況。“深藍”能夠擊敗卡斯帕羅夫,但它卻無法讓玩家從游戲中得到樂趣。相信這一點卡斯帕羅夫會雙手贊同。從這個意義上來說,把智能游戲稱為人工智能是不完全恰當的。這種稱法在一方面揭示了智能游戲的本質,但在另一方面又起了誤導作用。如果可以用別的稱法來代替,也許“智能體設計”或者“行為模擬”更為恰當。至于“智能”這個詞,由于它的定義非常模糊,我們最好還是避開它。對智能的誤解在智能游戲的發展歷程中產生了許多的問題。在游戲領域,我們希望所設計的智能體能在特定環境下進行合理的動作。相反,單純迎合人類定義的“智能”并不一定能產生合理動作,或者產生的動作也是玩家所不希望看到的。

1.1.6智能是語境(Context)相關的IQ(智商)這個詞清楚地闡明了本節的主題。人類大腦是一個由許多通用和專用的“認知工具”所組成的網絡,這些工具是人類在與各種艱難環境的斗爭中進化而來的。過分強調人工在進化中的作用就會喧賓奪主了。IQ的概念非常接近于西方特有的“自然界的偉大鎖鏈”的理論Descartes1641]。這種理論否認了生命是不同有機物在不同環境和自然選擇中得以進化的觀點;反之,它把所有的一切解釋為線性排列,也即所有的生物都根據它們“距離完美的程度”排成一列,而上帝就在排列的頂端。在《今日心理學》中刊登的一片關于IQ的文章吸引了我的注意力:在1986年,我和一個大學聯合開展了一項關于經常參與賭馬的人的研究。那些擅長賭馬的專家中有些是專業預測人員,但有些則不是。專家和其他人的區別在于他們具有一種根據場邊出售的賽馬數據來預測比賽結果的復雜推理能力,而這種能力和IQ是沒有必然聯系的。有些專家只不過是智商不超過80的碼頭工人,但他們在賽馬方面的推理能力比那些智商120以上的人強大得多。事實上,某個領域中的專家的推理能力總是超過其他人,這與他們的IQ高低沒有關系。對賽馬有強大推理能力的專家在其他方面可能一無是處,比如他的退休金或者社會關系方面。上面的引文清楚闡明了游戲中人工智能的本質-領域的專業知識,而不是通用智能。游戲人工智能可以看作是眾多專業子問題的集合,包括路徑搜索、操縱、群聚、部署、戰術、戰略規劃、資源分配、武器使用、目標選擇、協調、模擬感知、場景分析、空間推理、基于環境的動作等等。每個游戲都有自身獨特的“進化環境”,而游戲的人工智能必須在這個環境中進行開發。游戲中最成功的人工智能技術都是建立在開發人員明辨游戲中特有的子問題并且找到針對這些問題的特殊解法的基礎上。這并不意味著那些通用認知技術就不再重要了,只是強調必須避免在充分認識問題之前就匆忙尋求答案。我們必須問自己:一個智能角色(主體)在游戲中究竟要表現出怎樣的行為?這些行為是產生于怎樣的環境下?怎樣的游戲機制能夠最大程度地取悅玩家?而實現這樣的游戲機制需要怎樣的人工智能技術?一旦我們確定了智能角色的行為和相應的場合,我們就能夠決定采用怎樣的人工智能技術來解決問題。為了創造出“語境相關的專業智能”,我們自身必須成為領域專家。如果一個開發人員不擅長于他所開發的游戲,也無法判斷玩家的水平,很難想象他能開發出強大的人工智能技術。當你自己掌握了足夠的游戲技巧后,你就可以模擬出游戲背后的那些認知機制以及在特定場合下的決策方法。如果我們能夠對自身的認知過程進行反向工程,我們就能比較容易地創造出模擬人類決策的智能角色。1.1.7變革本文的題目“游戲人工智能的變革”可以從兩方面理解。首先,本文介紹了游戲中的人工智能從最初的視頻游戲開始的整個發展變革歷程。更為重要的是,它描述了在某個特定游戲的開發過程中人工智能技術(模塊)的改進發展。游戲中的人工智能技術總是一點一滴地進步,支持更為復雜的智能行為,并且更加適合于游戲的場景。每個游戲都是不同的,而人工智能的設計與游戲本身有莫大的聯系。在很多時候,設計者所做的一個看似微不足道的決定會在很大程度上影響人工智能模塊的運行。這也是為什么在游戲人工智能領域沒有捷徑可走。我們必須找出游戲中所有的人工智能問題并嘗試解決它們。我們的注意力要放在那些智能角色的表現上,而不能陶醉于人工智能技術本身。真正的難度在于開發出即具挑戰性又能取悅玩家的人工智能。1.1.8人工智能也是語境相關的那么,我們何去何從?游戲人工智能未來的方向又在哪里?有些開發者受到成功的“游戲引擎”(比如Quake和Unreal)的影響,試圖開發出可以適用于各種游戲的通用“人工智能引擎”[Soar01][ACE01]。在我看來,這些嘗試成功的可能性很小。正如前面所說的那樣,游戲中的人工智能和游戲本身的設計是密切相關的,因此忽視游戲的特點就是舍本逐末了。如果一個人工智能引擎通用到能夠用于各種游戲,它也必然無法解決特定游戲中的智能難題。相反,我認為游戲人工智能必須分為不同的類型(流派)。也許“類型”這個詞的含義過于狹窄,但是它表明了智能游戲技術是按各自道路發展的,也很有可能按各自道路繼續發展下去。曲棍球游戲、實時戰略游戲、第一人稱射擊游戲、籃球游戲、回合制戰略游戲、以及第一人稱偷竊游戲都有各自獨特的人工智能問題,這使得在不同類型的游戲之間“共享”某項人工智能技術變得十分困難。迄今為止最成功的方法是讓人工智能技術在相應的游戲類別的原有發展道路上繼續發展,并且始終和不斷進步的游戲設計保持緊密聯系。1.1.9高瞻遠矚我們已經看到,學術界對人工智能的廣泛和卓有成效的研究為智能游戲提供了堅實的基礎。隨著時間的推移,這兩者間的距離也在不斷縮短。但是,人工智能技術的種類繁多和正確運用這些技術的困難導致智能游戲還無法充分利用學術界的研究成果,就像MarvinMinsky[Minsky92]描述的那樣:許多學生喜歡問這樣的問題“我應該用神經網絡、邏輯推理、語義網絡、框架、腳本語言、基于規則系統、還是自然語言來表達知識?”而我在教學中則努力改變他們提問的方式。“首先確定在某個特定問題上要進行哪種類型的推理,然后找出最能符合這種需求的知識表達方式(或組合)。”[…]要完成通用的智能系統,我的個人觀點是在同一系統種采用多種知識表達機制的組合。這是因為沒有一種知識表達方式適用于所有的問題;每種方式都只適用于某一些問題。此外,解決不同的需要采用不同的推理方式。隨著游戲人工智能領域的發展,我們無疑會對如何選擇主流人工智能技術來對付游戲中千奇百怪的問題有更深的認識和理解。從另一方面來說,由于游戲人工智能在近年來的長足進步,研究人工智能的學術界也可以從智能游戲中學到很多。為了讓智能游戲領域進一步發展,我們必須沖破人工智能的領域邊界。就我本人而言,盡管我在1994年取得了計算機科學的學位,我在導演和演出舞臺劇方面所獲得的經驗比那些專業知識對游戲設計要有用得多。比如[Laurel93]中記載的那樣,許多研究人員都試過將戲劇技術應用于交互娛樂中。進化心理學是一個對游戲人工智能特別重要的學科。其實,游戲人工智能本身就是進化心理學的一個新嘗試,它涉及到游戲中角色心理的進化問題。每個玩家對與大量缺乏基本戰術素養(比如撤退、閃避、躲藏、偽裝、虛張聲勢、與敵人周旋、協作、接管)的低級對手交手的態度從最初的興奮而逐漸轉為厭惡。造成這種不幸局面的原因并不在于我們無法模擬自然,而是在于我們只是模擬了豐富多彩的行為中最無趣的那部分行為。即便是自然界頭腦最簡單的生物也會盡可能避免戰斗。真實的動物會首先估計對手的實力,并在必要的時候撤退,或者虛張聲勢企圖嚇退對手或使它轉而攻擊較弱的目標。動物常常偷偷接近獵物,并且采用某些手段把它和群體分開,然后采用復雜的小組戰術(比如伏擊、佯攻)來捕獲獵物。我們可以從《探索頻道》中學到很多。1.1.10人工智能和游戲設計人工智能對游戲的主要貢獻都體現在游戲設計和人工智能的共生關系中。為了促進這種關系,人工智能技術的開發人員必須深入理解游戲設計的技術和原則。同時,我們也必須努力讓游戲開發團隊明白人工智能技術在改進游戲方面具有的巨大潛力。不斷進步的人工智能技術創造了游戲設計上的許多新方法,而游戲設計的進步反過來又促進了人工智能的發展。游戲中的人工智能技術被看作是游戲設計的一個自然的外延部分。為了充分發揮人工智能的潛力,游戲設計必須突破那種以設計者為主的線性敘事方式。游戲不等價于故事,游戲就是游戲。以人工智能為中心的游戲,比如TheSims,Black&White,以及TheThief:TheDarkProject指明了未來游戲的雛形:人機交互和人工思維將成為游戲的主線。

1.1.11智能游戲的未來現在是一個應該樂觀的時候。游戲人工智能這一領域擁有了無可比擬的機會,眾多的資源和靈感來源,以及前所未有的公眾注意力。游戲人工智能處于進化心理學、戲劇藝術、主流人工智能、游戲設計與實現等多個領域的交點。隨著游戲工業的發展,我們將處在一個很特殊的位置上,能把上述各領域的成果融合成為全新的理論和技術。我們將致力于把游戲推上21世紀主流藝術形式的地位。本書描述了這個方向上的最初努力。1.1.12參考文獻[Ace01]ACE:theAutonomousCharacterEngine,BioGraphicTechnologies.See.[AI95]Russell,StuartJ.andNorvig,Peter,ArtificialIntelligence:AModernApproach,PrenticeHall,1995.[Blizzard95]WarCraftII:TidesofDarkness,BlizzardEntertainment,1995.See.[Bullforg89]Populous,Bullforg/ElectronicArts,1989.See.[Bullfrog97]DungeonKeeper,Bullfrog/ElectronicArts,1997.See.[CyberLife96]Creatures,CyberLifeTechnologies/MillenniumInteractive/WarnerBrothersInteractiveEntertainment,1996.See.[Descartes1641]Descartes,Rene,MeditationsonFirstPhilosophy,1641.Seehttp://philos.wright.

edu/DesCartes/MedE.html.[Ensemble99]AgeofEmpiresII:TheAgeofKings,EnsembleStudios/Microsoft,1999.See/aoeii/index.shtml.[Gems00]Ed.DeLoura,Mark.GameProgrammingGems,CharlesRiverMedia,2000.[Go01]HomepageofTheIntelligentGoFoundation,.[IBM97]DeepBlue,/deepblue/home/html/b.html[Koza97]Koza,JohnR.;Bennett,ForrestH.III;Keane,Martin;Andre,David.GeneticProgrammingIII:DarwinianInventionandProblemSolving,MorganKaufmann,1999.[Laurel93]Laurel,Brenda,ComputersasTheatre,Addison-Wesley,1993.[Lionhead01]Black&White,LionheadStudios/ElectronicArts,2001.See.[LGS98]Thief:TheDarkProject,LookingGlassStudios/EidosInteractive,1998.See.[Matthews02]Matthews,James,“BasicA*PathfindingMadeSimple,”AIGameProgrammingWisdom,CharlesRiverMedia,2002.[Maxis89]SimCity,Maxis/Broderbund,1989.See.[Maxis00]TheSims,Maxis/ElectronicArts,2000.See.[MicroProse91]SidMeier’sCivilization,MicroProse,1991.[Minsky92]Minksy,Martin,FutureofAITechnology.See/people/minksy/papes/CausalDiversity.html.[PT01]PsychologyToday.SussexPublishersInc.August2001.[Rabin00]Rabin,Steve,“A*AestheticOptimizations,”and“A*SpeedOptimizations,”See[Gems00].[Sierra99]SWAT3:CloseQuartersBattle.SierraStudios,1999.See/games/swat3.[Snowie01]Snowie,OasyaSA.See.[Soar01]Soar,/soar.[SofTool86]Chessmaster2000,SoftwareToolworks,1986.[Stout00]Stout,Bryan,“TheBasicsofA*forPathPlanning,”See[Gems00].[Svarovsky00]Svarovsky,Jan,“GameTress,”See[Gems00].[Tozour02]Tozour,Paul,“AnIntroductiontoBayesianNetworksandReasoningUnderUncertainty,”fromAIGameProgrammingWisdom,CharlesRiverMedia,2002.[Valve98]Half-Life,ValveSoftware,Inc./Sierra,1998.See/games/half-life.[Woodcock01]Woodcock,Steven,“GameAI:TheStateoftheIndustry2000-2001:It’sNotJustArt,It’sEngineering,”GameDevelopermagazine,August2001.

1.2智能的幻覺BobScott–StainlessSteelStudiosbob@由計算機所控制的虛擬游戲角色給單人游戲增加了許多深度和可玩性。事實上,絕大多數的玩家并沒有選擇在網絡上和其他玩家進行對戰。因此,為了增添這些玩家的樂趣,游戲開發者就必須創造出一些逼真的虛擬對手。這方面的成功嘗試將極大促進游戲的受歡迎程度和銷量。就目前而言,我們還無法在游戲中創造出真正的智能;我們所創造的至多不過是“智能的幻覺”。本文中我們將介紹如何做到這一點,并在同時避免產生“愚蠢的幻覺”。1.2.1范圍本文著重介紹在游戲中控制一個虛擬玩家的高層決策。例如實時戰略(RTS)游戲中的虛擬玩家可能決定采用弓箭手和圍攻策略來進行戰斗,而第一人稱射擊(FPS)游戲中的虛擬玩家則可能決定采用火箭筒來增加他的作戰能力。當然,游戲中還有更為復雜的行為,比如那個采用弓箭手或圍攻策略的RTS玩家可能選擇在城鎮的四周筑墻、快速進入到下一個時代、與鄰邦聯盟等具體手段來實現其策略。作為游戲開發人員,我們必須嘗試著模擬這些具體行為。在很多游戲中,我們所做的完全就是在創造一種智能的幻覺。1.2.2人類玩家的特點既然虛擬玩家可以被認為是人類玩家的一種替身,我們首先討論人類玩家是如何動作和決策的。1.可預測性和不可預測性人類玩家總是常常做出出人意料的舉動,比如在RTS游戲中有些玩家會選擇進攻一個強大得多的對手來迷惑敵人。在體育比賽類游戲中,有些玩家可能做出一些毫無意義的舉動,比如在橄欖球比賽的1/2碼線處選擇傳球。在另一方面,許多人類玩家的行為在很多方面都是可以預測的。FPS游戲的玩家在某張特定地圖上有自己喜歡的走法,而RTS游戲的玩家則喜歡按照一定的順序來建造不同的建筑物。橄欖球模擬游戲的玩家則傾向于投擲球。請注意人類玩家行為的可預測性和不可預測性之間的沖突。在有些場合下,它們可能會出現在同一場游戲中。在其他場合中,玩家在某一次游戲中的行為是可以預測的,但是他每一次玩這個游戲的行為又不盡相同。在玩一個RTS游戲的時候,你可能傾向于從開始就采用某一策略,并基于該策略做出所有的相關決定,比如你選擇采用飛機來發動所有的進攻。如果你選擇的策略被對手識破了,那么你就很有可能會輸。用人工智能來模擬人類玩家的上述特點是很困難的。游戲中的智能必須具有足夠的隨機性,使人們每次玩這個游戲都能獲得樂趣。同時,這種智能又必須是可以預測的,這樣人類玩家就能偶爾猜出對手的策略并找到破解的辦法。反過來,這種智能還要能識別出人類玩家所采用的策略并找到有效的對策,從而使游戲本身更具挑戰性。2.支援人類玩家常常會選擇和一個虛擬玩家結盟,共同對付其他的人類或者虛擬玩家。這種合作策略一般不難實現,無非是保護同盟方的城鎮和參加大規模的聯合進攻等。合作中最困難的事情莫過于與同盟之間的交流。采用由按鈕實現的簡單命令來進行交流是一種相對簡單的做法。3.出乎意料當做到了上述的一切之后,我們還可以錦上添花地加入少許“意外”。游戲開發者應該創造出盡可能多的驚喜。游戲玩家通常會留意到那些對游戲本身駕輕就熟的虛擬玩家,但他們對那些帶給他們驚喜和意外的人工智能技術則會留下更深的印象。這些“意外”有許多不同的表現形式,并且和具體游戲的類別也有關系。在RTS游戲中,意外可以來自于夾擊、伏擊、假情報、擾敵,而在FPS游戲中意外包含了伏擊、火力壓制、側翼運動、還有火力支援等。最后,還有一種意外是非常難以模擬的,被人們稱為“可信的愚蠢”。這指的是那些看起來有害,但卻是人類玩家愿意嘗試的行為。比如在角色扮演游戲(PRG)中,玩家可能會采用那些極度強大的魔法,而這些魔法強大到會在無意中傷害到玩家自身。這些行為在游戲中會產生一種喜劇化的調劑作用。但由于這些行為難以準確模擬,而且很容易做得過分,所以還是盡量少用為妙。1.2.3勝負之間關于游戲,很關鍵的一點是認識到人類玩家是在“玩”游戲,而恰恰是這一點經常被游戲開發人員所忽略。想象一下當你坐下來準備玩游戲的時候的心情—你一定想要獲得樂趣,也有可能你想從游戲中體驗一些你在現實生活中無法體驗的角色。在一個有勝負之分的游戲中,你總是想要獲得勝利。讓我們深入討論下去。通常情況下有兩類玩家,第一種玩家希望很容易地取勝,而另一種則希望勝負各半。后一種玩家常常希望在幾乎要輸的情況下實現大翻盤,從而來顯示他們的實力。要開發一個總能贏(或輸)的游戲人工智能模塊是非常容易的。許多游戲有允許調整(虛擬)對手的數量和質量來影響游戲的結局。舉個例子,在RTS游戲中,軍隊的規模可以決定到游戲的勝負。在FPS游戲或體育模擬游戲中,對手的準確性和速度也是可以調節的。真正的問題在于這些虛擬對手的真實性,比如在RTS游戲的初期是不可能出現大規模的軍隊的(除非作弊),而在FPS游戲中出現源源不斷的敵人也不太真實。我們意識到上述所需的效果可以通過調整虛擬對手的行為來達到。在一場戰爭游戲中不斷變化應對策略是一種影響玩家的勝負的手段。在RTS游戲中,差勁的目標選擇和緩慢的裝彈速度可以用來調節游戲的難度。問題的關鍵在于密切注意戰斗和整個游戲的狀態,使虛擬對手的水平和真實玩家保持在相近的水平,從而保證實力上的均衡。游戲中的難度設置決定了人工智能模塊是否給人類玩家取勝設置很多障礙。在某些游戲中,虛擬玩家會根據勝負的比例來決定自己的反應。這些游戲總是力求做到勝負平衡,但常常會偏向某個極端。不管采用那種策略,你必須確保虛擬玩家的行為是真實可信的。可信度可以通過游戲的參數來確定。在RTS游戲中,智能地選取進攻目標的行為是可信的;而在FPS游戲中,極準的槍法和預知對方未來方位的能力則是不可信的。在橄欖球游戲中,100碼開外的觸地得分和傳球則應該完全避免。1.2.4自發行為自發行為只能通過對整個系統加以分析來預測。從定義上說,所謂自發行為就是那些無法被解釋的行為[Dyson97]。我們常常通過自發行為(emergentbehavior,EB)在智能游戲中制造一些智能的幻象。事實上,EB常常給游戲開發人員造成幻覺,使他們以為游戲中真的有智能。在測試EmpireEarth這款游戲中,一個虛擬玩家試圖從敵方城鎮的一側擴張到另外一側。當它的城民試圖突破敵人封鎖線的時候,它的部隊正好也在猛烈進攻敵人的軍隊,這使得自己的城民安全地通過了封鎖。令人驚奇的是,這種策略并不是開發者編制的,它只是兩種戰術(擴張和進攻)同時發生時的巧合。想要人為制造出EB的效果很難,但我們可以構造一種促進EB發生的體系結構。支持高層命令、基于目標的決策、基于定時器的決策等技術的體系結構常常能促使EB的出現[Scott02],而采用基于腳本的智能技術則往往不能產生EB[Tozour02]。一般來說,開發人員可以通過帶有隨機性的決策來促進EB的產生。1.2.5欺騙手段所有的智能技術開發人員在開發中都會面臨使用欺騙技術的問題。有些人堅持人工智能模塊中不能采用欺騙技術-這等于說虛擬玩家的所獲取的信息應該人類玩家是完全相同的。絕大多數的玩家也不希望在游戲中有欺騙的行為,但他們同時又希望游戲中的人工智能具有挑戰性。更有趣的是,許多游戲允許玩家參與調整人工智能,而大部分玩家都會選擇采用欺騙手段,在表面上延長了游戲生命。大多數反對欺騙手段的意見都歸結到這樣一種觀點,即人工智能在與人類玩家的較量中通過欺騙這種不正當手段占據了上風。而事實上,由于無法即興思考(而只能夠預先設定),電腦本身就處于非常不利的局面。最好的可能性是開發人員教給電腦玩家(虛擬玩家)盡可能多的游戲策略。如果人類玩家熟悉所有這些策略,那么電腦玩家就很難給人類玩家制造挑戰了。在未來,我們也許最終能開發出可以像人類一樣思考的人工智能體,但就目前而言,人類玩家總是處于上風。值得注意的是,如果讓玩家在一個死腦筋的人工智能和運用欺騙手段的人工智能之間做出選擇,大部分玩家都會選擇后者,只要這種欺騙并不明顯。許多欺騙手段對于玩家來說都是透明的,甚至不能被稱為欺騙。比如在游戲開始前預先分析地形也可以算作是一種欺騙,但如果這樣能夠提高游戲效率的話,那么大部分玩家還是愿意接受的。開發人員還必須牢記他們所定義的欺騙和玩家定義的欺騙是完全不同的。如果智能角色完成了一些人類該做的行為,而且完成得更快更好,那么人類玩家就會覺得是欺騙。在游戲EmpireEarth的開發過程中,我們規定如果玩家發現了任何一處他們認為是欺騙的地方,他們就要向開發人員匯報。這樣我們就可以深入討論這些問題,并試著解決它們來提高游戲的質量。1.2.6結論游戲人工智能成功的關鍵在于它必須具有趣味性和挑戰性。趣味性可以通過一些突發行為和創造出乎意料的驚喜來做到。你必須時刻牢記你是在開發游戲,而游戲的目的就是取樂。同時,我們必須能夠使盡可能多的玩家感受到挑戰性,無論是新手還是那些常勝將軍。1.2.7參考文獻[Dyson97]Dyson,GeorgeB.,DarwinAmongtheMachines:TheEvolutionofGlobalIntelligence,PerseusBookGroup,p9,1997.[Scott02]Scott,Bob,“ArchitectingaGameAI,”AIGameProgrammingWisdom,CharlesRiverMedia,2002.[Tozour02]Tozour,Paul,“ThePerilsofAIScripting,”AIGameProgrammingWisdom,CharlesRiverMedia,2002.

1.3解決正確的問題NeilKirby–LucentTechnologiesnak@在游戲開發者大會(GDC)上,關于人工智能的討論中最有趣的現象是人們在解決什么問題能顯著提高游戲質量這一話題上意見相左[Kirby00]。本文中詳細描述了這方面的兩個例子。我們討論的重點是開發人員怎么做才能發現“另一個更好的問題”。這些做法中有一部分可能來自于你的編程經歷中(比如一些眾所周知的好的編程技巧),而另一些則可能與編程毫無關系。后者可以看作是對你的頭腦的一種“交叉訓練”,是可以通過不斷學習和練習得到的。1.3.1解決另一個問題也許更有效1.GDC2000上的一個例子人工智能討論組的一個與會者舉了這樣一個例子。他所在的公司想在開發的探險游戲中加入語音識別的功能。如果所有的NPC(非玩家角色,也即由電腦控制的虛擬角色)都能開口和玩家說話,那么玩家也會自然而然與NPC說話。這樣一來,所有NPC就必須能夠理解玩家的話,推測出玩家的意圖,并且做出合適的反應。然而,語音識別是一個非常困難的問題。盡管語音識別是可行的,它要占用大量的資源,并且效果總是不盡人意。在語音識別的背后還隱藏著一個更為艱巨的問題-自然語言處理(NLP)。語音識別可以看作是聽寫,而NLP則是要理解所記錄的內容。兩者都存在大量問題。對于語音識別,我們來看下面這個例子:“LittleRedRidingHood”“LadleRatRottenHut”這是美國的一種類似于繞口令的東西:第一句話的發音聽起來會很像第二句。請注意兩句話使用的都是真實世界中的單詞。由于兩者很相近,一個簡單的語音識別引擎很有可能將兩者混淆。對于NLP問題,我們來比較pissed和plowed這兩個單詞。在美國的俚語中,這兩者的具有相同的含義(“憤怒的”和“醉的”含義),而在英國英語中它們的含義卻不相同(分別是“醉的”和隱含地提到性)。如果是人犯了這樣的錯誤,他會被認為是滑稽的。但如果是電腦犯了這樣的錯誤,則會被認為是愚蠢的。這兩個領域在技術上都取得了很大進展。在PC上運行的語音識別產品已經出現了好幾年了(這些產品的名目和價格可以從這樣的網站上查到[Amazon01])。基于文字的探險類游戲和像AskJeeves這樣的網站則體現了NLP技術的突飛猛進。但是,想要在上述那個游戲中同時解決這兩個問題是非常困難的。即便兩個問題都能得以解決,多語種支持的問題也夠麻煩的了。因此,那個人所在的公司選擇去解決另一個問題。他們發現人類的大幅度動作所代表的含義在不同的文化背景下都是一致的,比如表示“我不知道”的聳肩動作就是一個典型例子。相比之下,小幅度的動作所代表的含義是有差別的。有的時候這種差別是比較小的(但還是可察覺的),比如人們數數時首先用到的手指,但有的時候這種差別是驚人的。盡管小動作的含義在不同文化之間千差萬別,好在大動作的含義是比較一致的。通過賦予NPC大幅度動作的能力,游戲變得更為吸引人了,達到了與用語音識別技術同樣的效果。通過這件事,他們發現采用大幅度動作比采用語音輸入更好地解決了問題。2.另一個例子:TheSims游戲賦予自主對象智能的行為是困擾許多游戲開發人員的一個難題。讓自主對象識別和定位那些有助于達到其目標的物體也是一件困難的事情。請注意這兩個問題是有所區別的,而且第二句話也不是第一句話的擴展和深入。這些問題可以歸結為如何讓這些對象和真實世界進行交互。首先,這些自主對象要確定所要找的目標,然后在內存中搜索它們。“哪里可以找到吃的東西?在哪個位置埋伏最好?”這些問題的答案有助于解決上述的問題。WillWright在設計游戲TheSims中通過解決第二個問題(識別和定位)來解決第一個問題(也即智能行為)。他通過“智能地區”的技術來使那些虛擬角色(也即自主對象)很容易地達成它們的目標。在智能地區上的物體能夠向那些可能經過的虛擬角色“廣播”它們自身的信息[Doornbos01]。因此,這些虛擬角色就無須主動去識別地上的物體,而是被動接受物體所發出的信息。如果某個物體的信息滿足了某個虛擬角色的需要,這個角色就會像那個物體所在的位置運動。比如,“冰箱”可以通過廣播自己能夠解決“饑餓”這一信息,這樣周圍的虛擬角色就會通過冰箱來解決饑餓問題。1.3.2首要原則:哪個是根本問題?最根本的問題在于我們要給那些花了幾十美元來購買游戲的人們帶來樂趣。因此,當面對游戲中的一個人工智能難題的時候,我們就應該考慮是否可以通過解決另一個問題來達到同樣甚至更好的趣味性。在上述的那個語音交流的例子中,這個根本問題就是“我們是否能讓游戲變得更加吸引人?”。開發人員避開了語音識別,而把注意力放在這個根本問題上,并且找到了很好的解決方法。在TheSims游戲中,解決對象智能行為這個問題的方法不是使這些對象更有智能,而是使地形本身更有智能。在邏輯上,讓我們用A來表示使游戲更有趣味性這個問題。很顯然,問題A很寬泛,因此我們會找一個具體問題B并嘗試解決它。這個看似完美的方法的漏洞在于我們從沒想到還有問題C(或者問題D,E…)同樣能解決問題A。這里的關系可以表達為:A (根本問題)B (一個比較容易想到的問題)B->A (通過B解決了A;許多開發人員到這里就停下了)C (另一個比較容易想到的問題)C->A (通過C也可以解決A)1.3.3開發人員其實一直在這樣做人工智能中常提到的“欺騙”從一個側面證明了智能游戲的開發人員總在嘗試變換需要解決的問題。在1996年度游戲開發者大會上,SteveMeretzky舉了探險游戲中的一個例子[Meretzky96]。在游戲環境中由兩個面對面放著的箱子,其中一個箱子里放了打開另一只箱子的鑰匙。在因果世界中,一個玩家先打開錯誤的箱子的概率有五成。但是在游戲世界中,開發人員可以讓玩家首先打開的箱子里總是放著另一只箱子的鑰匙。盡管這聽著不合情理,但卻比常規做法更能給游戲帶來趣味性。1.3.4如何發現一個更好的問題?發現一個更好的問題的前提是你必須愿意去嘗試不同的方法。這當然也要求你有創造力,因為你必須突破常規地思考。這種技巧需要通過花時間練習才能掌握。1.及早開始,始終留意開始得早并不能保證你一定能找到一個更好的問題,但是很遲開始卻幾乎注定你無法找到。你的時間,尤其是花在動手做之前考慮解決方法上的時間,是非常關鍵的。而更為關鍵的是你花在考慮的其他可能的解決方法上的時間。請注意“理想時間”是在“情景觀點問卷”(SituationalOutlookQuestionnaire)和之前的“創造氣氛問卷”(CreativeClimateQuestionnaire)中提出的十個評價手段之一。這兩個問卷給出了有效判別促進或者阻礙創造力和求變能力的一些標準。即便是在設計階段之后,嘗試去發現手頭的小問題的各種不同解法也是有益的。很好地解決這些小問題有助于積累經驗來對付那些大問題[Kirby91]。2.早借東風在GDC上,人工智能討論組談到了一個普遍的問題:開發人員經常由于正處于開發中的游戲引擎還無法提供某些關鍵信息而不能開發出最優的智能模塊。假設智能模塊由于軟件結構上的限制而無法獲得某些關鍵信息,那么很多智能技術都將無法采用。因此,開發人員要在游戲設計的初期階段就預料到這個問題,并且保證這些關鍵信息都是很容易得到的。

3.一題多解正如單個數據無法顯示趨勢一樣,僅僅依靠一種方法是無法很好地解決問題的。如果你肯花時間思考的話,你會發現找到第二種解法比找到第一種更為容易,因為你沒有了至少找到一種解法的壓力。當然,你還有另外一種更重要的壓力:如果你找不到其他方法,你就被迫要用第一種方法,而這種方法可能是非常麻煩的。即便你對每個問題只能找到兩種或三種解法,這種習慣也是非常可貴的。“想快的念頭會使你因為不愿探索而喪失創造力”[Edwards01]。MichaelAbrash在1996年CGDC上的發言中提到,idSoftware公司的開發團隊花了一年的時間才最終確定了游戲QuakeI的圖形引擎所采用的方法[Abrash96]。他還提到編碼實現這種方法的時間大約只有一個月。這也就是說,他們把大部分時間花在尋找一種更好的解法上。盡管上述的時間比例有些夸張(可以作為尋找其他方法所需時間的上限),它告訴我們這樣一個事實:這是一家在業界領先的公司所推崇的做法。Abrash在一年后對此做了更為詳細的解釋:“我為什么要提及這些時間?其中的一個目的是告訴人們有趣的想法不一定能成功。我通常喜歡談論那些獲得成功的想法,但是談論那些不成功的想法也是有益的。當然,這不是說你不應該去嘗試那些有趣的主意了。首先,你必須去嘗試這些想法才能知道它們是否行得通;其次,如果一種方法不適用于某個場合,它可能會適用于另一個場合你嘗試得越多,你掌握的工具也越多,你對下一個項目中出現的問題理解也越深。”[Abrash97]一題多解可以當作是對付疏漏的一種安全措施,但是多種解法其實解決的都是同一個問題。不過這種習慣可以使我們認識到每個問題都有多種方法。這與發現不同的問題既有聯系又有區別。4.跳出思維定勢想要發現一個更好的問題需要你跳出原有的思維定勢。那些沒有固定思路的人會怎么考慮問題?孩子們會怎么考慮問題?年幼的孩子們會嘗試采用現實中一些稀奇古怪的辦法去解決問題。同樣地,一個機智的外行會采用試著用一些看起來不那么可行的方法,因為他的頭腦中沒有固定的規則和限制。這就是思維定勢的形成過程。因為我們開發的是用于娛樂的軟件,而不是為聯邦飛行管理局編寫的空中交通管理軟件,我們可以采用一些稀奇古怪卻行之有效的非常規方法,不必擔心這樣會歪曲現實世界。你也許無法找到一個合適的局外人來幫助你跳出自己的框框。跳出原有框架的一個好辦法是進入到另一個框架中。這樣一來,你的思維就會逐漸拋棄那些原有的條條框框,因為你已經忘記或者沒有必要遵守它們了。主動學習一些和創造性思維有關的事情。在研究生的教學中有一個常見的現象[Brank87]:某個領域的學生常常會被另一個領域中的有趣問題所吸引,他們會嘗試用自己領域的知識技能(包括對新領域的不了解)來解決這些問題。當你在探索其他人的領域時,留意他們所采用的那些超常規的解決辦法。除此之外,還有許多其他的東西需要學習。在《DesignPlunder》一書中,WillWright列舉了一些需要學習的東西:“建筑、椅子的設計、日本式花園、生物學、玩具、心理學、喜劇、社會學、流行病學等等”[Wright01]。可以毫不夸張地說,即使隨便從圖書館中捧一些書出來,其中也會有許多值得學習的東西。無論建筑、椅子、摩托車、甚至中世紀的圍城工具,只要它是新穎而發人深思的,我們都可以從中學到東西。當你開始考慮“怎么做的?如果是我,我會怎么做?還有更好的做法嗎?”這些問題的時候,你的思維就走上了正軌。5.訓練你的創造力跳出思維定勢的能力和創造力就像一對孿生姐妹。一般來說,運動員的訓練要多過比賽,而且兩者之間是有巨大差別的。同樣,發現更好的方法需要創造力,而這種創造力在日常編寫代碼的過程中是很難培養的。這并不是說編程就不需要創造力了,只不過編程中的創造力一般發揮在一個項目漫長的編程過程的開端。你的創造力有多“好”并不是關鍵問題。在開始動手前,你并不需要具有高超的創造力。但是你必須通過實踐來加強在創新方面的能力,這也就是所謂的創造性活動:你必須通過不斷練習來鍛煉你的頭腦。這些創造性的活動最好能夠和你的日常生活有機結合在一起,因為臨時抱佛腳的作用總是有限的,這一點在體育比賽中早已得到證明了。因為你是為了解決問題才去訓練你的創造力,對你來說最好的創造性活動是需要通過創新來克服某些挑戰。如果你選擇的方式不具有挑戰性,或者過于困難,那你的創造力就很難得到鍛煉。假設你是某個訓練方式所在領域中的博士,那么這樣的訓練對你來說也沒有任何的挑戰性。而如果你手頭只有一些殘羹冷菜,那么要做出一桌可口的飯菜就太難了。正如你可以嘗試許多不同的思維方式一樣,你可以嘗試去做許多有創造性的事情:攝影、油畫、素描、譜曲、用冰箱里的剩菜做出可口的飯菜、用火柴編制出圖騰的花樣、把垃圾桶里的廢金屬焊成雕塑、甚至寫一首俳句詩。這些事情都會幫助你養成創新的習慣。在互聯網上有許多和你一樣有著各種創新想法的人。你在G上可以找到6690條關于“焊接雕塑藝術”的鏈接,325,000條關于“俳句詩”的鏈接和2760條關于“編織藝術”的鏈接。你在其中一定可以找到適合你的創新活動。“創新是轉瞬即逝的,但卻是必不可少的”上面所說的俳句詩可以在30秒內(寫俳句詩的經典時間)匆忙完成,快到“連你的筆尖上的墨水還是濕的”。當然,這樣的詩不是完美的,但它也嚴格符合了每行中音節數量的限制(分別是5、7和5個音節)。這個例子說明了即便在極其有限的時間內創造性活動也能有所作為。這些創造的成果也無須偉大,而只要有效就可以了。事實上,如果創造性活動簡單到能夠很好地融于日常生活中,人們就比較容易堅持下來。上述的俳句詩并不是故意不完美的,但是有缺陷的俳句詩卻更能說明問題。我們創造的結果無須具有很高的內在價值,而且我們甚至希望他們沒有很高的價值。我們推薦以上的創造性活動的原因是它們的產物(結果)都是轉瞬即逝的。用火柴拼成的圖騰比制造火柴的木材燃燒起來一樣快;回收金屬制成的雕塑最后還要被回收;你的數碼相機中的那些大膽嘗試也只需要按幾個按鈕就可以抹去;用剩菜做出的精美事物最多不過是美好的回憶罷了;你的硬盤上存放的昨天寫的俳句詩又會被今天寫的詩所取代,這個磁盤操作還用不了10微秒。因為沒有人能看到你的創造成果,你可以隨心所欲地嘗試-過程永遠比結果更重要。通過創造活動鍛煉你的創造力,不但使你能從容面對下個項目中的挑戰,也能夠讓你應付你手頭項目中的問題。只要你時刻牢記創新,你可以完成那些難以置信的任務。1.3.5結論發現更好的問題的能力部分來自于良好的編程和項目管理習慣。這種好習慣包括尋找多種解法,以及在設計階段對問題的充分思考。除此之外還有那些特意用來訓練頭腦的、與編程無關的活動。找到思維定勢之外的方法的能力是可以通過學習和訓練得到的。CorporateAmerica公司要求它的所有職員掌握這一能力,特別是那些培訓人員和顧問[Epstein96]。同樣,純粹的創造性活動也可以通過學習和鍛煉得到,能否創新全在于你自己。要相信一定有一個更好的問題正在等著你去解決。1.3.6參考文獻[Abrash96]Abrash,Michael,“TheQuakeGraphicsEngine,”inlecture,ComputerGameDevelopersConference,1996.[Abrash97]Abrash,Michael,“Quake:APost-MortemandaGlimpseintotheFuture,”1997ComputerGameDevelopersConferenceProceedings,CGDC,1997.[Amazon01],,Software>Categories>Utilities>VoiceRecognition,accessedAugust2001.[Brand87]Brand,Stewart,TheMediaLab:InventingtheFutureatM.I.T.,VikingPenguin,1987.[Doornbos01]Doornbos,Jamie,“ThoseDarnSims:WhatMakesThemTick?”inlecture,GameDevelopersConference,2001.[Edwards01]Edwards,Steven,“TheTechnologyParadox:EfficiencyversusCreativity,”CreativityResearchJournal,Volume:13Number:2,LawrenceErlbaumAssociates,Inc.,2001.[Isaksen99]Isaksen,ScottG.;Lauer,KennethJ.;Ekvall,Goran;“SituationalOutlookQuestionnaire:Ameasureoftheclimateforcreativityandchange.”PsychologicalReports,No.85,1999.[Kirby00]Kirby,Neil,“GDC2000AIRoundTableModeratorsReport,”GameDevelopersConference,,2000.[Kirby91]Kirby,Neil,“IntelligentBehaviorWithoutAI:AnEvolutionaryApproach,”Proceedingsofthe1991ComputerGameDevelopersConference,CGDC,1991.[Meretzky96]Meretzky,Steve,“AStoryWrappedInsideaPuzzleWrappedInsideanEnigma:DesigningAdventureGames,”inlecture,ComputerGameDevelopersConference,1996.[Wright01]Wright,Will,“DesignPlunder,”inlecture,GameDevelopersConference,CMP,2001.

1.4實戰中的12個訣竅JeffOrkin–MonolithProductionsjorkin@以下所述的訣竅都是人工智能的開發人員從實際經驗中總結出來的。也許富有經驗的開發人員對其中大多數訣竅早已是耳熟能詳了,但那些初學者可以從中學到很多。盡管有些訣竅適用于通用的軟件開發,它們特別適用于開發人工智能系統,因為這些精巧的系統在游戲開發中需要不斷加以改進。1.4.1周密計劃首先要明白世界上沒有萬能的人工智能系統。不同的技術適用于不同的場合。我們可以通過考慮以下的因素來選擇合適的解決方法:游戲中人工智能的重點:比如,我們要清楚是路徑搜索重要,還是學習或是表達感情更重要?編寫智能模塊的時間和預算:我們準備為開發人工智能技術花費多少時間和人力資源?開發團隊的組成:開發團隊中有多少程序員和設計員?這些成員是不是都很有經驗?事先確定游戲的需要和開發團隊的能力是必不可少的。然后,以這些信息為準則來決定人工智能技術的重點。一旦重點確定以后,我們可以展開一系列的調研工作,比如確定合適的智能方法,甚至在時間允許的條件下編寫代碼。在調研中,開發人員可以參考包括本書在內的許多資料,比如《GameProgrammingGems》系列叢書,游戲開發者大會,還有類似于計算機協會ACM這樣的學術組織。1.4.2簡單至上游戲中的人工智能開發人員要時刻牢記KISS原則,這就是“簡單至上”(KeepItSimpleStupid)。一般的來說,人工智能系統的程序中有大量參數和大量分支跳轉,它們會使程序變得極為復雜和難以控制。在理想狀態下,一個人工智能系統應該允許設計者和程序員通過編寫一些簡單模塊來完成復雜的任務。由于簡單模塊比較容易理解、重用、調試和維護,它們更能適應游戲改進過程中不斷的代碼變化。此外,簡單模塊也便于由其他人員來維護,或者被用于其他的系統中。假設你要在一個動作游戲中編寫一個有限狀態機來控制智能體(智能體)的動作。這些智能體在玩家還沒進入視野之前處于被動等待狀態,而當玩家靠近之后它們進入戰斗狀態。這可以很容易地通過(在有限狀態機中)加入“等待”和“戰斗”兩個狀態來實現。但如果要使智能體做出更多的動作,那么狀態機中狀態的數量將大大增加,相應的代碼也要復雜得多。這中情況下比較好的辦法是建立許多簡單、通用、并且可重用的狀態。例如,我們可以創建“追逐”、“開火”、“撤退”以及“要求增援”等狀態來代替“戰斗”狀態。這些狀態都十分簡單,便于在出現問題的時候調試診斷。比如盟軍應該采用“追逐”狀態去追隨玩家的軍隊。“追逐”狀態還可以由更為通用的“移動”狀態來實現控制智能體向某一位置的走動或跑動。我們在第六條訣竅中將詳細介紹通過層次化來實現狀態重用。1.4.3紙上談兵在設計好一個人工智能系統后,緊接著要做的事情并不是馬上去實現它!我們應該首先在紙上寫下代碼的框架,數據文件的草案,以及一些智能體所可能遇到的場景的描述,然后把這些東西給游戲設計者來檢查。經過這個檢查過程,許多疏漏就能在編碼之前被發現,使游戲開發階段更為順利,游戲系統更為魯棒。同時,保留所有這些紙稿作為系統文檔,便于在系統改進的時候查閱。設計者也可以通過這些紙稿來更高效地利用人工智能系統。1.4.4預設道路在學術上,編寫一個控制智能體在三維環境中進行漫游的程序是非常困難的。但是由于可以“作弊”,游戲開發人員可以很容易地解決這個問題。盡管從數學角度來說計算幾何空間中的路徑是可行的,這樣計算的復雜性也是驚人的。更好的解決辦法是采用預先計算好的路徑搜索數據(當然,玩家并不知道這些數據),讓智能體沿著預先設定的路徑到它們所要去的地方。在一個物理系統的底層,我們通過檢查線、立方體或者球體與世界中其他幾何體的相交情況來檢測碰撞。要檢測與玩家之間的碰撞也需要大量的計算,此外我們還要計算智能體之間的碰撞情況,并為它們搜索路徑。實際上,我們無需檢測智能體在兩點之間運動時的可能碰撞。一種更好的方法是利用一些玩家所不知道的導航提示信息。這種提示信息可以用一種工具自動產生,也可以由設計人員手工編寫。編寫這些提示信息的技術包括:設計人員可以將地塊隱式地標上不同的顏色和紋理,從而表示死路或者使用該地塊的優先級別。設計人員可以在兩地之間設置短線來表示可供智能體使用的預設路徑。設計人員可以把地形分塊,保證在每一地塊上都可以直接看到另一地塊。設計人員可以定義一些地塊,使該地塊中的智能體無需檢測碰撞情況。有一個工具可以通過分析高度信息和一些其他標準來決定“走”哪個多邊形。這些多邊形可以組成一條路徑[Tozour02a]。毫無疑問,除了上述之外還有許多技術可以用于創造提示信息。這里的關鍵在于要盡可能少地使用路徑搜索算法或者物理系統的計算。關于如何加入導航提示信息的細節,有興趣的讀者可以參考4.5節“有關門、升降機、暗礁、和其他障礙物的導航問題”[Hancock02]。1.4.5智能化的游戲世界很顯然,一個智能系統是難以適用于各種場合的,更何況新的任務總是隨著游戲的開發而不斷出現。比較好的做法是編寫一個簡單的智能系統,它只需要使智能體有能力選擇并且移動到目的地就足夠了。一旦它們到了目的地之后,游戲世界中的其他物體或場所會以消息或者腳本的形式告訴智能體應該如何行動。比如,一個智能體可能知道自己餓了,它可以尋找游戲世界中那些“自稱”可以被食用的物體,然后移動到最近的那個物體邊上。等智能體來到這個物體旁邊的時候,這個物體可以通過運行一段腳本來告訴智能體做出從樹上摘蘋果、打開冰箱、或是使用自動食品機等動作。盡管這個智能體本身知之甚少,它可以通過接受這些指令而做出智能化的動作。創造智能化的游戲環境還有另外一個好處:無限的擴展能力。開發人員無需改變智能系統的底層代碼就可以使智能體掌握一些新的動作或技能。這種技術在游戲TheSims中得以廣泛使用。該游戲提供下載的數百個虛擬角色就是對這種技術的最好證明。1.4.6動作要有時限和退路游戲中最糟糕的事情莫過于智能體不停的重復相同的錯誤。沒有人會注意到一個智能體在應該左轉的時候向右轉,但所有人都會注意到一個不停往墻上撞的智能體。因此,智能系統必須在合理的時限內檢測智能體是否已經成功完成了動作。如果沒有,我們就應該讓智能體嘗試做另外一個動作。至少,我們可以讓智能體在原地做出一個表示迷惑和沮喪的滑稽動作。如有計算資源允許,這個智能體可以重新評估它的狀況并選擇下一步動作。1.4.7層次化的狀態有限狀態機(FSM)是游戲中常用來控制智能體行為的一種機制。如果FSM中的狀態都被設計成簡單、通用的、可重用的狀態,那么每個狀態都

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論