遊戲中的AI編程(一) 遺傳算法簡介

本文作爲遊戲中的AI編程的第一篇,主要介紹一下遺傳算法,以及使用遺傳算法進行尋路計算。

一,遺傳算法介紹
在繼續閱讀下文之前,請先確定你是否知道什麼是遺傳,變異,染色體等生物知識。如果你對這些知識不瞭解,建議你看看高中的生物課本。當然你不用精通這方面的知識。好吧,如果你已經準備好了,那麼我們開始吧。
遺傳算法的過程實際上是對於自然界進化的模仿。首先,你需要定義一種表示問題的解決方案的編碼方式,就像染色體一樣(記得染色體有四種,兩兩配對後,組合成雙螺旋結構,這就是染色體的編碼格式)。然後你需要初始化一些染色體,它們每一個代表解的一種候選方案。這些初始化的染色體可以是隨機的。然後讓這些染色體開始進行繁衍進化(中間夾雜這一些變異)。經過進化,最後找到最優解(也可能是較合適的解)。
遺傳算法不能保證找到最優的解,看上去這點不是遺傳算法的優點。但是遺傳算法的計算過程可能效率很高。然而,最重要的是,求解過程中,並不需要知道解的過程,只需要知道如何編碼解,解碼解,以及驗證解的合理性就可以了。

1.染色體 染色體一般使用二進制編碼,如下: 01010010100101001111 重要的是,這個染色體是可以被解碼的,以表示一種解。這個可以是一個很差的解(通常會是剛開始的一些染色體)。但是每個染色體都表示中可能的解。

2.解法步驟
循環以下步驟,直到找到解:
     1.測試每個染色體,標註每個染色體的解的分數。(即解的適合程度)
     2.找出其中的兩個解(使用算法保證分數最高的染色體最優可能被選中),可以使用roulette wheel selection。
     3.交叉兩個染色體
     4.適當的進行變異處理
     5.重複 2 3 4,直到新產生大量的染色體(數量可以自己設定)。

3.什麼是roulette wheel selection 在選擇染色體的時候,需要保證染色體的分數越高,就越容易被選中。 可以想像一個餅圖(pie chart),其中,分數越高的染色體所佔據的面積越大,然後進行隨機選擇。具體算法之後的文章中會提到。

3.交叉 這是通過兩個染色體產生新的染色體的方法,比如我使用一個最簡單的算法,將染色體在10的位置反轉,於是可以產生兩個新的染色體
舊染色體:
A:10001001110010010
B:01010001001000011
新染色體:(注意,我加了空格)
C:100010011 01000011
D:010100010 10010010

4.總結 這樣,基本的遺傳算法介紹完了。接下來將開始具體問題的解決。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章