先解釋下什么是8皇后問題:在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。在不考慮翻轉(zhuǎn)和旋轉(zhuǎn)等價的情況下,8皇后問題共有96個不同的解。

而n皇后問題就是將8*8的棋盤換為n*n的棋盤,同時擺放n個皇后使之不能相互攻擊。

常用的解法是回溯法,通過不斷遞歸的嘗試來一個一個放置棋子,這種方法其實規(guī)避了很多不成立的情況,所以控制了一些解空間的范圍,但是這種方法試圖在一段程序當(dāng)中將所有解求出來,隨著n的變大,解空間在急速變大,遞歸的巨大空間開銷會讓求解變得很困難,效率會下降很多。

遺傳算法也可以用來解決n皇后問題,但是遺傳算法的本質(zhì)是根據(jù)適應(yīng)值來選擇和制造更多的靠近目標(biāo)情況的解,所以不一定能得到所有的解,同時也不能知道對于確定的n皇后問題的解的個數(shù)。在這種情況下的遺傳算法有一些暴力破解的因素在其中。

下面談一談幾個關(guān)鍵問題的解決(以8皇后問題為例)。

1、編碼問題

我采用的是整數(shù)編碼,染色體長度(基因位的個數(shù))等于8,每一位為一個整數(shù)(該整數(shù)≥0,<8*8),且不能相同,每一個基因位表示的就是一個棋子擺放的位置。

2、適應(yīng)值的計算問題

適應(yīng)值的評價標(biāo)準(zhǔn)為發(fā)生沖突的個數(shù)n的倒數(shù),即沖突越多,適應(yīng)值越低,不發(fā)生沖突時適應(yīng)值為1(1/1),但是這種評價也存在一定的問題,就是隨著沖突的增多,適應(yīng)值的減小會變的沒那么明顯(比如說不沖突適應(yīng)值為1,沖突一個為0.5,沖突2個為0.333,沖突三個為0.25,沖突四個為0.2),所以選擇的力度會相對較弱。可以考慮改為其他的方式進行評價。

3、選擇問題

采用的是線性排名選擇方式,因為上述原因,采用線性排名選擇策略會一定程度上抵消掉適應(yīng)值計算的問題。

4、突變問題

突變采用的是自適應(yīng)性變異,即越收斂搜索范圍越小的方法。

網(wǎng)友評論