1. 程式人生 > >AI與遊戲——吃豆人(5)樹搜尋演算法(上)

AI與遊戲——吃豆人(5)樹搜尋演算法(上)

查詢搜尋類演算法可以說是被提及最多的人工智慧方法,絕大多數AI問題都可以被看成一個搜尋查詢問題,也就是找到最好的方案,路徑,模型等。搜尋演算法因此也最常在一些AI演算法的核心部分看到,很多AI的書籍也都是從搜尋演算法開始的。

下面講的查詢演算法是樹搜尋演算法,或者說去建立一個搜尋樹,根節點表示開始搜尋的狀態,分支代表動作,結點代表狀態。因為對於一個狀態往往可以執行多種動作,而每個動作又可以進入一個新的狀態。另外搜尋樹跟之前的行為樹是大不一樣的,搜尋樹的各個分支是沒有先後順序的,行為樹則是事先安排好順序,屬於硬編碼範圍。樹搜尋演算法主要有以下幾種。

盲目搜尋(Uninformed Search)


所謂的盲目搜尋就是沒有目標資訊的最單純的搜尋,這在資料結構中也都學過,有深度優先搜尋,廣度優先搜尋,這都並不屬於AI的範疇。這種搜尋方法在遊戲中一般效率很低,但是在很多先進的演算法中,盲目搜尋也是組成演算法的一部分。盲目搜尋用於吃豆人這種遊戲都會太大也太複雜了,這裡也就不再細說了。

最優優先搜尋(Best-first Search)
在BFS中,結點的擴充套件則依據一些關於目標的先驗知識。通常,距離目標比較近的結點會優先展開。最知名的BFS演算法是A* 演算法。A* 演算法最常用於遊戲中的尋路(星際爭霸,魔獸爭霸,起源等遊戲都使用了A* 演算法),之前也有一篇將A* 演算法用於吃豆人尋路的。A* 演算法如何尋路這裡不說了,網上有很多帖子大家可以自行查閱。

這裡要說的是A* 演算法其實還可以用來搜尋遊戲狀態,也就是說,BFS可以用於擬定計劃而不只是尋路。不同之處在於這裡考慮的是全域性狀態的變化(而不是隻考慮其中一個單位的狀態改變)。有事運用A* 可以有驚人的效果,如2009年馬里奧智慧競賽上的冠軍就是使用的A* 演算法來使馬里奧到達最右方的終點。如下圖所示。

A*演算法應用在馬里奧遊戲上

感興趣大家可以搜尋一下相關的論文,這裡先討論一下BFS如何用在吃豆人上。首先,我們要先有個表示全域性情況優劣的方法,然後使用A* 演算法判斷那種操作會使全域性的情況對pacman最有利(也就是最優),也就是每一步都考慮最優的情況。這種思想也有點類似貪心演算法,問題在於如何評價全域性優劣呢。最直接也最費時的方法,就是用吃豆人與魔鬼和豆子之間的距離來度量。除了對全域性狀態的表達,A* 還需要一個代價函式

來驅動搜尋。例如,一個代價函式往往是獎勵那些可以靠近豆子的移動,同時懲罰那些靠近魔鬼的移動。詳細一點說就是,如果向上可以靠近2個豆子,向左靠近1個豆子,向右靠近魔鬼,那麼可以給定f(up)=2, f(left)=1, f(down)=-1,這樣在查詢時,只用搜尋f(x)最大的分支就行。

A* 演算法的效果如何呢,等用程式碼實現之後再來討論吧。

相關推薦

AI遊戲——5搜尋演算法

查詢搜尋類演算法可以說是被提及最多的人工智慧方法,絕大多數AI問題都可以被看成一個搜尋查詢問題,也就是找到最好的方案,路徑,模型等。搜尋演算法因此也最常在一些AI演算法的核心部分看到,很多AI的書籍也都是從搜尋演算法開始的。 下面講的查詢演算法是樹搜尋演算法,

AI遊戲——3基本的路徑規劃演算法

這次我們來講一下程式碼中涉及的一些路徑規劃演算法,在這個遊戲中,路徑規劃雖然不屬於人工智慧但是確實實現AI演算法不可或缺的基礎方法,下面就來大致介紹一下有哪些主要的方法以及這些方法的實現。 (1)getApproximateNextMoveTowardsTar

AI遊戲——4方法綜述

這一部分先提一下一些基本的目前廣泛用於遊戲中的AI演算法。這裡最好現有點機器學習相關知識,不然可能會不知所云。後面提到具體演算法我會盡量列出一些參考文獻,例子也繼續在吃豆人上面舉例。 目前主流方法主要有,專門的行為表達方法例如有限狀態機,行為樹,和一些基於單元

[原始碼和文件分享]基於C++的遊戲的設計實現

一 遊戲介紹 遊戲的目的就是控制遊戲的主角小精靈吃掉藏在迷宮內所有的豆子,並且不能被幽靈抓到,總共有三個關卡。 二 系統設計 2.1 系統總體架構 系統總體架構如下表所示: 玩家 地圖 敵軍 方向控

幾乎毀掉谷歌塗鴉遊戲的 bug

【伯樂線上導讀】:2010 年 5 月 21 日吃豆人遊戲 30 週年,Google 首頁在上午 9 點上線了一個可互動的塗鴉遊戲。幾個小時內,這個遊戲就讓全世界都為之瘋狂。不過塗鴉團隊開始陸續收到一個詭異 Bug 的報告。作者在本文中分享了這個 Bug 背後的有趣

簡單的遺傳演算法Genetic algorithms-

遺傳演算法簡介: 一直都在收聽卓老闆聊科技這個節目,最近播出了一起人工智慧的節目,主要講的是由霍蘭提出的遺傳演算法,在目中詳細闡述了一個有趣的小實驗:吃豆人。 首先簡單介紹下遺傳演算法: 1:為了解決某個具體的問題,先隨機生成若干個解決問題的實體,每個實體

部分程式碼分析

吃豆人的專案下載地址,某位大神做的,亮點是參考地圖生成的部分 http://game.ceeger.com/forum/read.php?tid=160 地圖用一個txt檔案,如下圖的檔案,x表示牆的部分,.表示可吃的豆豆,  O表示一些特殊種類的豆豆 O........

記憶化BFS..

               題意:                         吃豆人是一款非常經典的遊戲,遊戲中玩家控制吃豆人在地圖上吃光所有豆子,並且避免被怪物抓住。                        這道題沒有怪物,將遊戲的畫面分成n*m的格子,每

pacman》原始碼

使用Unity 2D製作經典遊戲《吃豆人》  http://forum.china.unity3d.com/thread-13546-1-1.html 原帖,我就是對著學了,開始學習Unity3D啦,第一個遊戲,完整複製。 步驟1: 首先建立一個2D遊戲介面,取名叫pac

【活動報名】2050 大會 - 博客園程序員聚會5.25 杭州·雲棲小鎮

yun 相關鏈接 width ima index 博文 AR www .cn 2050 科技公益大會將於 2018.5.25 - 5.27 號在杭州·雲棲小鎮舉行(詳見大會官網),我們將在大會團聚活動中按照技術方向組織程序員的聚會,讓來自五湖四海的程序員朋

Linux學習筆記十三周二次課5月3日、4日

LNMP 復習 十三周二次課(5月3日、4日)復習LNMP擴展nginx中的root和alias區別 http://blog.csdn.net/21aspnet/article/details/6583335 nginx的alias和root配置 http://www.ttlsa.com/nginx/

CodeForces 1045G AI robotsCDQ分治 + 狀陣列 + 單調佇列

大致題意:有很多個機器人,他們要相互交流有一些限制條件。首先是,兩個人要相互能夠能夠看到;其次,兩個人的智商的差不超過K。現在給出每個機器人的視力範圍和他們的智商,現在問你總共有多少對機器人能夠相互交流。 首先來看下總共有多少個限制條件。由於是要求雙方都能夠看到

使用js實現5種加密解密演算法凱撒密碼、字母倒排序、單表置換、維基利亞、轉換加密演算法

在學習作業系統的時候,我們會學到系統安全的章節,而在這一塊會有關於加密解密演算法的學習。 一共有5種常見的加密解密演算法:凱撒密碼、字母倒排序、單表置換、維基利亞、轉換加密演算法。  我使用了js實現了這5種演算法,而且做了視覺化處理、輸入輸出格式化處理,使得操作起來非常

演算法5 —— B

1970年,魯道夫·貝爾(R.Bayer)的先於紅黑樹提出了B樹。這種適用於外查詢的樹,是一種平衡的多叉樹,又稱B-樹。 B樹與紅黑樹最大的不同在於,B樹的結點可以有許多子女,從幾個到幾千個。那為什麼又說B樹與紅黑樹很相似呢?因為與紅黑樹一樣,一棵含n個結點的B樹的高度也

五款實用免費的Python機器學習整合開發環境5 free Python IDE for Machine Learning圖文詳解

前言   整合開發環境(IDE)是提供給程式設計師和開發者的一種基本應用,用來編寫和測試軟體。一般而言,IDE 由一個編輯器,一個編譯器(或稱之為直譯器),和一個偵錯程式組成,通常能夠通過 GUI(圖形介面)來操作。   根據維基百科的描述:“Python 是一種廣泛使用的高階的、通用的、

LeetCode 145 Binary Tree Postorder Traversal二叉的興許遍歷+二叉、叠代

int truct fin for data- right class span popu 翻譯 給定一個二叉樹。返回其興許遍歷的節點的值。 比如: 給定二叉樹為 {1。 #, 2, 3} 1 2 / 3 返回

表達式求值二叉方法/C++語言描述

urn sse 二叉 返回 新的 求值 calc ken node   二叉樹方法求值對運算數處理的方法與棧方法求值不太相同,除了將字符串中的運算數轉換為浮點類型外,還需要生成新的節點: 1 void Calculator::dealWithNumber(char *&

ACM-ICPC 2018 瀋陽賽區網路預賽 J. Ka Chang 分塊+狀陣列+dfs序

題意 給你一顆樹,由兩種操作: 1.把這棵樹深度為 D D D的點全部都加上一個值。 2.求以p為根節點的子樹的權值和是多少? 思路 對於樹上的東西,我們可以把他求一下DFS序,之後就可以把樹上的結構變成

【轉載】黃金比例搜尋演算法Golden Section Search的實現

出處: https://www.codelast.com/%E5%8E%9F%E5%88%9B-%E9%BB%84%E9%87%91%E6%AF%94%E4%BE%8B%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95%EF%BC%88gold   黃金比

資料結構——圖3——深度優先搜尋演算法DFS思想

圖的遍歷 圖由頂點及其邊組成,圖的遍歷主要分為兩種: 遍歷所有頂點 遍歷所有邊 我們只討論第一種情況,即不重複的列出所有的頂點,主要有兩種策略:深度優先搜尋(DFS),廣度優先搜尋(BFS) 為了使深度和廣度優先搜尋的實現演算法的機制更容易理解,假設提