遺傳算法是受自然進(jìn)化啟發(fā)的搜索、優(yōu)化和學(xué)習(xí)算法家族中的一員。通過模擬進(jìn)化過程,遺傳算法較傳統(tǒng)搜索算法具有更多優(yōu)勢,可為各式問題提供高質(zhì)量的解決方案。本書基于Python語言將遺傳算法應(yīng)用于各種任務(wù),提供在人工智能和其他很多領(lǐng)域應(yīng)用遺傳算法的實踐經(jīng)驗。同時,本書涵蓋了人工智能領(lǐng)域的新進(jìn)展。
通過本書,讀者可以:
·了解如何使用Python工具創(chuàng)建基于遺傳算法的應(yīng)用程序。
·利用遺傳算法優(yōu)化函數(shù),并解決規(guī)劃和調(diào)度問題。
·提升機(jī)器學(xué)習(xí)模型的性能,優(yōu)化深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)。
·基于工具包Open AI Gym將遺傳算法應(yīng)用于強(qiáng)化學(xué)習(xí)。
·探索其他生物啟發(fā)方法,包括遺傳規(guī)劃和粒子群優(yōu)化等。
受查爾斯·達(dá)爾文的自然進(jìn)化論的啟發(fā),遺傳算法被例證為是解決搜索、優(yōu)化和學(xué)習(xí)問題的最引人關(guān)注的算法之一,特別是當(dāng)傳統(tǒng)算法無法在合理的時間范圍內(nèi)提供足夠好的結(jié)果時。
本書將帶您踏上掌握這一極其強(qiáng)大但簡便的方法的旅程,并將其應(yīng)用到各種各樣的任務(wù)中,最終通向人工智能應(yīng)用。
通過本書可以了解多種遺傳算法的工作原理及應(yīng)用。此外,本書還結(jié)合當(dāng)前流行的Python編程語言,提供遺傳算法在各個領(lǐng)域的應(yīng)用實踐。
本書讀者對象
本書旨在幫助軟件開發(fā)人員、數(shù)據(jù)科學(xué)家和人工智能愛好者利用遺傳算法解決其工程應(yīng)用中相關(guān)學(xué)習(xí)、搜索和優(yōu)化問題,以及提升現(xiàn)有智能應(yīng)用程序的性能和準(zhǔn)確性。
本書同樣適用于每一個承擔(dān)著實際工程任務(wù)的人,用于解決傳統(tǒng)算法難以處理的,或無法在限定時間內(nèi)提供高質(zhì)量結(jié)果的難題。本書展示了遺傳算法如何作為一種強(qiáng)大而簡便的方法來解決各種復(fù)雜問題。
本書包含內(nèi)容
第1章介紹了遺傳算法及其基本理論和基本工作原理,探索遺傳算法與傳統(tǒng)方法之間的差異,并了解一些遺傳算法的最佳應(yīng)用場景。
第2章理解遺傳算法的關(guān)鍵要素,深入研究了遺傳算法的關(guān)鍵組成部分和實現(xiàn)細(xì)節(jié)。在概述了基本的遺傳算法流程之后,您將了解它們的不同要素以及每個要素的各種實現(xiàn)。
第3章介紹強(qiáng)大而靈活的進(jìn)化計算框架DEAP,它能夠用遺傳算法解決現(xiàn)實生活中的問題。通過編寫Python程序解決OneMax問題(即遺傳算法領(lǐng)域的Hello World問題),了解如何使用DEAP框架。
第4章介紹了組合優(yōu)化問題,如背包問題、旅行商問題和車輛路徑問題,以及如何使用遺傳算法和DEAP框架編寫Python程序來解決這些問題。
第5章介紹了約束滿足問題,如N皇后問題、護(hù)士排班問題、圖著色問題。同時闡述如何使用遺傳算法和DEAP框架編寫Python程序解決這些問題。
第6章介紹了連續(xù)優(yōu)化問題以及如何用遺傳算法解決這些問題。本章使用的示例包括Eggholder函數(shù)、Himmelblau函數(shù)和Simionescu函數(shù)的優(yōu)化,同時探討小生境、共享和約束處理的概念。
第7章運(yùn)用特征選擇改善機(jī)器學(xué)習(xí)模型,主要討論有監(jiān)督機(jī)器學(xué)習(xí)模型,并解釋如何使用遺傳算法從所提供的輸入數(shù)據(jù)中選擇最佳特征子集來提高這些模型的性能。
第8章為機(jī)器學(xué)習(xí)模型的超參數(shù)優(yōu)化。解釋了遺傳算法如何通過調(diào)整模型的超參數(shù)來提高有監(jiān)督機(jī)器學(xué)習(xí)模型的性能,可以采用基于遺傳算法的網(wǎng)格搜索方法,也可以直接采用遺傳搜索。
第9章是深度學(xué)習(xí)網(wǎng)絡(luò)的結(jié)構(gòu)優(yōu)化,重點研究人工神經(jīng)網(wǎng)絡(luò),并探索遺傳算法如何通過優(yōu)化神經(jīng)網(wǎng)絡(luò)模型的網(wǎng)絡(luò)架構(gòu)來提高其性能,以及如何將網(wǎng)絡(luò)體系結(jié)構(gòu)優(yōu)化與超參數(shù)調(diào)整結(jié)合起來。
第10章為基于遺傳算法的強(qiáng)化學(xué)習(xí),并解釋了遺傳算法如何應(yīng)用于強(qiáng)化學(xué)習(xí)任務(wù),同時使用OpenAI Gym工具包解決了MountainCar和CartPole兩個基準(zhǔn)環(huán)境。
第11章為遺傳圖像重建。通過遺傳算法,使用一組半透明的多邊形對一幅名畫進(jìn)行重建實驗。在此過程中,可以了解有關(guān)圖像處理和相關(guān)Python庫的實用經(jīng)驗。
第12章為其他進(jìn)化和生物啟發(fā)計算方法。旨在開闊視野,介紹其他啟發(fā)于生物智能的問題解決方法,并基于DEAP的Python程序?qū)ζ渲袃煞N方法(遺傳編程和粒子群優(yōu)化)進(jìn)行演示。
如何充分學(xué)習(xí)本書
為了充分掌握本書,應(yīng)具備一定的Python語言編程基礎(chǔ)以及數(shù)學(xué)和計算機(jī)科學(xué)的基礎(chǔ)知識。因為本書已經(jīng)涵蓋了機(jī)器學(xué)習(xí)必要概念的簡單介紹,對這些基本概念有一定的了解將有助于理解本書。
要運(yùn)行本書附帶的編程示例,建議安裝Python 3.7版本或更高版本。書中提到的一些Python模塊包,推薦使用PyCharm或Visual Studio Code等Python 集成開發(fā)環(huán)境。
資源分享
本書提供了全部示例代碼文件,讀者可以掃描二維碼獲取。
示例代碼
慣例
本書中使用了許多文本慣例。
CodeInText: 表示文本中的代碼段、數(shù)據(jù)庫表名、文件夾名、文件名、文件擴(kuò)展名、路徑名、虛擬URL、用戶輸入的字符和Twitter賬戶等。下面是一個例子: 用類的__init__()方法來創(chuàng)建數(shù)據(jù)集。
代碼設(shè)置如下:
self.X,self.y = datasets.make_friedman1(n_samples=self.numSamples,
n_features=self.numFeatures,
noise=self.NOISE,
random_state=self.randomSeed)
當(dāng)提醒注意代碼塊的特定部分時,相關(guān)行或項目將設(shè)置為粗體:
self.regressor=GradientBoostingRegressor(random_state=
self.randomSeed)
命令行的輸入或輸出寫成如下樣式:
pip install deap
粗體: 表示一個新的術(shù)語、一個重要的單詞或屏幕上顯示的單詞。例如,菜單或?qū)υ捒蛑械膯卧~(從管理面板中選擇系統(tǒng)信息)。
評論
請留下評論,不吝賜教。如果您閱讀和使用了本書,請在購買它的網(wǎng)站上留下評論,以便其他潛在的讀者可以看到并基于您反饋的客觀觀點做出購買決定,同時也幫助我們了解您對產(chǎn)品的看法,本書的作者也可以獲知您的反饋。非常感謝您!
第1部分遺傳算法基礎(chǔ)
第1章遺傳算法簡介
1.1遺傳算法的概念
1.1.1達(dá)爾文進(jìn)化論
1.1.2遺傳算法分析
1.2遺傳算法背后的理論
1.3與傳統(tǒng)算法的區(qū)別
1.3.1種群基礎(chǔ)
1.3.2基因編碼
1.3.3適應(yīng)度函數(shù)
1.3.4概率行為
1.4遺傳算法的優(yōu)點
1.4.1全局優(yōu)化
1.4.2處理復(fù)雜問題
1.4.3處理缺少數(shù)學(xué)模型的問題
1.4.4抗噪聲能力
1.4.5并行處理
1.4.6持續(xù)學(xué)習(xí)
1.5遺傳算法的局限性
1.5.1特殊定義
1.5.2超參數(shù)優(yōu)化
1.5.3計算密集型操作
1.5.4過早收斂
1.5.5無絕對最優(yōu)解
1.6遺傳算法的適用情形
小結(jié)
拓展閱讀
第2章理解遺傳算法的關(guān)鍵要素
2.1遺傳算法的基本流程
2.1.1創(chuàng)建初始種群
2.1.2計算適應(yīng)度值
2.1.3應(yīng)用選擇、交叉和變異算子
2.1.4迭代停止的條件
2.2選擇算子
2.2.1輪盤賭選擇
2.2.2隨機(jī)通用抽樣
2.2.3基于排序的選擇
2.2.4適應(yīng)度縮放
2.2.5錦標(biāo)賽選擇
2.3交叉算子
2.3.1單點交叉
2.3.2兩點交叉和k點交叉
2.3.3均勻交叉法
2.3.4有序列表的交叉
2.3.5順序交叉
2.4變異算子
2.4.1反轉(zhuǎn)變異
2.4.2交換變異
2.4.3逆序變異
2.4.4重組變異
2.5實數(shù)編碼的遺傳算法
2.5.1混合交叉
2.5.2模擬二進(jìn)制交叉
2.5.3實數(shù)變異
2.6理解精英保留策略
2.7小生境和共享
2.8遺傳算法解決問題的應(yīng)用方法
小結(jié)
拓展閱讀
第2部分使用遺傳算法解決問題
第3章DEAP框架的使用
3.1技術(shù)要求
3.2DEAP簡介
3.3使用creator模塊
3.3.1創(chuàng)建Fitness類
3.3.2創(chuàng)建Individual類
3.4使用Toolbox類
3.4.1創(chuàng)建遺傳算子
3.4.2創(chuàng)建種群
3.4.3計算適應(yīng)度
3.5OneMax問題
3.6使用DEAP解決OneMax問題
3.6.1選擇染色體
3.6.2計算適應(yīng)度值
3.6.3選擇遺傳算子
3.6.4設(shè)置停止條件
3.7使用DEAP實現(xiàn)算法
3.7.1準(zhǔn)備工作
3.7.2演化求解
3.7.3運(yùn)行程序
3.8使用內(nèi)置算法
3.8.1Statistics對象
3.8.2算法
3.8.3logbook對象
3.8.4運(yùn)行程序
3.8.5添加名人堂
3.9算法參數(shù)設(shè)置實驗
3.9.1種群規(guī)模與代數(shù)
3.9.2交叉算子
3.9.3變異算子
3.9.4選擇算子
小結(jié)
拓展閱讀
第4章組合優(yōu)化
4.1技術(shù)要求
4.2搜索問題和組合優(yōu)化
4.3求解背包問題
4.3.1Rosetta Code 01背包問題
4.3.2解的表示
4.3.3Python問題表示
4.3.4遺傳算法的解
4.4求解TSP問題
4.4.1TSPLIB基準(zhǔn)文件
4.4.2解的表示
4.4.3Python問題表示
4.4.4遺傳算法的解
4.4.5使用強(qiáng)化探索和精英保留來改進(jìn)結(jié)果
4.5求解VRP問題
4.5.1解的表示
4.5.2Python問題表示
4.5.3遺傳算法的解
小結(jié)
拓展閱讀
第5章約束滿足
5.1技術(shù)要求
5.2搜索問題中的約束滿足
5.3求解N皇后問題
5.3.1解的表示方式
5.3.2Python對問題的表示方式
5.3.3遺傳算法求解N皇后問題
5.4求解護(hù)士排班問題
5.4.1解的表示方式
5.4.2硬約束與軟約束
5.4.3基于Python的問題表示
5.4.4遺傳算法求解護(hù)士排班問題
5.5求解圖著色問題
5.5.1解的表示方式
5.5.2使用硬約束和軟約束解決圖著色問題
5.5.3基于Python的問題表示
5.5.4遺傳算法求解
小結(jié)
拓展閱讀
第6章連續(xù)函數(shù)優(yōu)化
6.1技術(shù)要求
6.2實數(shù)染色體與實數(shù)遺傳算子
6.3連續(xù)函數(shù)下的DEAP應(yīng)用
6.4優(yōu)化Eggholder函數(shù)
6.4.1利用遺傳算法優(yōu)化Eggholder函數(shù)
6.4.2增加變異率來提高速度
6.5優(yōu)化Himmelblau函數(shù)
6.5.1用遺傳算法優(yōu)化Himmelblau函數(shù)
6.5.2利用小生境和共享來尋找多個解
6.6Simionescu函數(shù)與約束優(yōu)化
6.6.1基于遺傳算法的約束優(yōu)化
6.6.2用遺傳算法優(yōu)化Simionescu函數(shù)
6.6.3使用約束尋找多個解
小結(jié)
拓展閱讀
第3部分遺傳算法的人工智能應(yīng)用
第7章使用特征選擇改善機(jī)器學(xué)習(xí)模型
7.1技術(shù)要求
7.2有監(jiān)督機(jī)器學(xué)習(xí)
7.2.1分類
7.2.2回歸
7.2.3有監(jiān)督學(xué)習(xí)算法
7.3有監(jiān)督學(xué)習(xí)中的特征選擇
7.4Friedman1選擇特征問題
7.4.1解的表示
7.4.2Python問題表示
7.4.3遺傳算法求解
7.5分類數(shù)據(jù)集Zoo的特征選擇
7.5.1Python問題表示
7.5.2遺傳算法求解
小結(jié)
拓展閱讀
第8章機(jī)器學(xué)習(xí)模型的超參數(shù)優(yōu)化
8.1技術(shù)要求
8.2機(jī)器學(xué)習(xí)中的超參數(shù)
8.2.1超參數(shù)優(yōu)化
8.2.2Wine數(shù)據(jù)集
8.2.3自適應(yīng)增強(qiáng)分類器
8.3基于遺傳算法的網(wǎng)格搜索來優(yōu)化超參數(shù)
8.3.1測試分類器的默認(rèn)性能
8.3.2運(yùn)行常規(guī)的網(wǎng)格搜索
8.3.3運(yùn)行基于遺傳算法的網(wǎng)格搜索
8.4直接使用遺傳算法優(yōu)化超參數(shù)
8.4.1超參數(shù)表示
8.4.2評估分類器的準(zhǔn)確性
8.4.3使用遺傳算法優(yōu)化超參數(shù)
小結(jié)
拓展閱讀
第9章深度學(xué)習(xí)網(wǎng)絡(luò)的結(jié)構(gòu)優(yōu)化
9.1技術(shù)要求
9.2人工神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)
9.2.1多層感知器
9.2.2深度學(xué)習(xí)和卷積神經(jīng)網(wǎng)絡(luò)
9.3優(yōu)化深度學(xué)習(xí)分類器的架構(gòu)
9.3.1鳶尾花數(shù)據(jù)集
9.3.2表示隱藏層的配置
9.3.3評估分類器的準(zhǔn)確性
9.3.4使用遺傳算法優(yōu)化 MLP 架構(gòu)
9.4將架構(gòu)優(yōu)化與超參數(shù)優(yōu)化相結(jié)合
9.4.1解的表示
9.4.2評估分類器的準(zhǔn)確性
9.4.3使用遺傳算法優(yōu)化 MLP 的組合配置
小結(jié)
拓展閱讀
第10章基于遺傳算法的強(qiáng)化學(xué)習(xí)
10.1技術(shù)要求
10.2強(qiáng)化學(xué)習(xí)
10.3OpenAI Gym
10.4處理MountainCar環(huán)境問題
10.4.1解的表示
10.4.2解的評估
10.4.3基于Python的問題表示
10.4.4遺傳算法求解
10.5處理CartPole環(huán)境問題
10.5.1用神經(jīng)網(wǎng)絡(luò)控制CartPole
10.5.2解的表示和評估
10.5.3基于Python的問題表示
10.5.4遺傳算法求解
小結(jié)
拓展閱讀
第4部分相關(guān)方法
第11章遺傳圖像重建
11.1技術(shù)要求
11.2用多邊形重建圖像
11.3Python中的圖像處理
11.3.1Python圖像處理庫
11.3.2用多邊形繪制圖像
11.3.3測量圖像之間的差異
11.4利用遺傳算法重建圖像
11.4.1解的表示與評價
11.4.2基于Python的問題表示
11.4.3遺傳算法的實現(xiàn)
11.4.4圖像重建結(jié)果
小結(jié)
拓展閱讀
第12章其他進(jìn)化和生物啟發(fā)計算方法
12.1技術(shù)要求
12.2進(jìn)化計算和生物啟發(fā)計算
12.3遺傳編程
12.3.1遺傳編碼示例偶校驗
12.3.2遺傳編程實現(xiàn)
12.3.3簡化的解
12.4粒子群優(yōu)化算法
12.4.1PSO實例函數(shù)優(yōu)化
12.4.2粒子群優(yōu)化實現(xiàn)
12.5其他相關(guān)方法
12.5.1進(jìn)化策略
12.5.2差分進(jìn)化算法
12.5.3蟻群算法
12.5.4人工免疫系統(tǒng)
12.5.5人工生命
小結(jié)
拓展閱讀