本書講解了搜索算法的相關知識,內容包括算法問題中涉及的基本數據結構和復雜度分析,及狀態(tài)空間、樹、圖等較復雜的數據結構;同時,通過相關實例,講解了各類搜索方法及線性規(guī)劃與非線性規(guī)劃;也重點解讀了組合優(yōu)化問題和群智能算法。全書內容包含了搜索算法所能用到的核心方法和技術,另附三個附錄,分別講解了類與繼承以及博弈基礎等。
本書面向在人工智能方向零基礎的讀者,內容定位于專業(yè)知識入門和普及層面,全面系統(tǒng),通俗易懂,讓讀者真正了解和理解人工智能的相關技術方向,而不僅僅是編程技術。
新一代人工智能的崛起深刻影響著國際競爭格局,人工智能已經成為推動國家與人類社會發(fā)展的重大引擎。2017年,國務院發(fā)布《新一代人工智能發(fā)展規(guī)劃》,其中明確指出:支持開展形式多樣的人工智能科普活動,鼓勵廣大科技工作者投身人工智能知識的普及與推廣,全面提高全社會對人工智能的整體認知和應用水平。實施全民智能教育項目,在中小學階段設置人工智能相關課程,逐步推廣編程教育,鼓勵社會力量參與寓教于樂的編程教學軟件、游戲的開發(fā)和推廣。
為了貫徹落實《新一代人工智能發(fā)展規(guī)劃》,國家有關部委相繼頒布出臺了一系列政策。截至2022年2月,全國共有440所高校設置了人工智能本科專業(yè),387所高等職業(yè)教育(?疲⿲W校設置了人工智能技術服務專業(yè),一些高校甚至已經在積極探索人工智能跨學科的建設。在高中階段,“人工智能初步”已經成為信息技術課程的選擇性必修內容之一。在2022年實現“從0到1”突破的義務教育階段信息科技課程標準中,明確要求在7~9年級需要學習“人工智能與智慧社會”相關內容,實際上,1~6年級階段信息技術課程的不少內容也與人工智能關系密切,是學習人工智能的基礎。
人工智能是一門具有高度交叉屬性的學科,筆者認為其交叉性至少體現在三個方面:行業(yè)交叉、學科交叉、學派交叉。在大數據、算法、算力三駕馬車的推動下,新一代人工智能已經逐步開始賦能各個行業(yè)。人工智能也在助力各學科的研究,近幾年,《自然》等頂級刊物不斷刊發(fā)人工智能賦能學科的文章,如人工智能推動數學、化學、生物、考古、設計、音樂以及美術等的發(fā)展。人工智能內部的學派也在不斷交叉融合,像知名的AlphaGo,就是集三大主流學派優(yōu)勢,并且現在這種不同學派間取長補短的研究開展得如火如荼?傊,未來的學習、工作與生活中,人工智能賦能的身影將無處不在,因此掌握一定的人工智能知識與技能將大有裨益。
從筆者長期從事人工智能教學、研究經驗來看,一些人對人工智能還存在一定的誤區(qū)。比如將編程與人工智能直接畫上了等號,又或是認為人工智能就只有深度學習等。實際上,人工智能的知識體系十分龐大,內容涵蓋相當廣泛,不但有邏輯推理、知識工程、搜索算法等相關內容,還涉及機器學習、深度學習以及強化學習等算法模型。當然,了解人工智能的起源與發(fā)展、人工智能的道德倫理對正確認識人工智能和樹立正確的價值觀也是十分必要的。
通過對人工智能及其相關知識的系統(tǒng)學習,可以培養(yǎng)數學思維(mathematicalthinking)、邏輯思維(reasoningthinking)、計算思維(computationalthinking)、藝術思維(artisticthinking)、創(chuàng)新思維(innovativethinking)與數據思維(datathinking),即MRCAID。然而遺憾的是,目前市場上既能較綜合介紹人工智能相關知識,又能輔以程序代碼解決問題,同時還能迅速入門的圖書并不多見。因此筆者策劃了本系列圖書,以期實現體系內容較全、配合程序操練及上手簡單方便等特點。
本書以搜索算法為主線,按照如下內容進行組織:第1章以棋局為引,介紹了搜索算法與智能、盲目搜索與啟發(fā)式搜索以及優(yōu)化的相關概念;第2章主要介紹算法問題中涉及的基本數據結構與復雜度分析等內容;第3章介紹了狀態(tài)空間、樹和圖的一些基本知識;第4章圍繞具體問題,分別介紹了廣度優(yōu)先搜索算法、深度優(yōu)先搜索算法、啟發(fā)式算法以及對抗搜索算法等內容;第5章著重介紹線性規(guī)劃與非線性規(guī)劃的內容,這些內容是學習人工智能,尤其是機器學習的重要基礎之一;第6章引入模擬退火與禁忌搜索算法求解組合優(yōu)化問題;第7章介紹了遺傳算法、蟻群算法和粒子群算法是如何解決實際問題的案例,也讓讀者了解到群智能中的競爭、競合與合作是如何演變成算法的過程。值得注意的是,第6章與第7章中大部分內容體現了人工智能跨學科的思想,讀者可以從這兩章的內容中感受到交叉學科解決問題的強大力量。本書的附錄部分回顧了類、繼承等相關概念,介紹了人工智能博弈基礎的相關內容,同時還介紹了Python實驗室JupyterLab的使用。
本書的出版要感謝曾提供熱情指導與幫助的院士、教授、中小學教師等專家學者,也要感謝與筆者一起并肩參與寫作的其他作者,同時還要感謝化學工業(yè)出版社編輯老師們的熱情支持與一絲不茍的工作態(tài)度。
在本書的出版過程中,未來基因(北京)人工智能研究院、騰訊教育、阿里云、科大訊飛等機構給予了大力支持,在此一并表示感謝。
由于筆者水平有限,書中內容不可避免會存在疏漏,歡迎廣大讀者批評指正并提出寶貴的意見。
龔超
于清華大學
第1章 搜索的世界 001
1.1 出“棋”不易 002
1.1.1 棋技,智力的象征? 002
1.1.2 搜索+評估=智能? 006
1.1.3 AlphaGo是怎樣煉成的? 008
1.2 給盲目一些信息 011
1.2.1 盲目搜索 011
1.2.2 啟發(fā)式搜索 013
1.2.3 博弈中前行 015
1.3 一切皆可優(yōu)化 017
1.3.1 目標與約束 017
1.3.2 蒙特卡洛樹搜索 021
1.3.3 群智能 024
第2章 基本數據結構與復雜度分析 030
2.1 數據關系與數據結構 031
2.1.1 數據關系 031
2.1.2 數據結構 032
2.2 棧與隊列 033
2.2.1 棧 033
2.2.2 隊列 038
2.2.3 雙端隊列 040
2.3 復雜度 042
2.3.1 衡量算法的效率 042
2.3.2 復雜度的分析 044
第3章 狀態(tài)空間、樹與圖 050
3.1 狀態(tài)空間 051
3.1.1 狀態(tài)的表示 051
3.1.2 迷宮、漢諾塔與八數碼 053
3.1.3 農夫過河 054
3.2 樹 057
3.2.1 樹的基本概念 057
3.2.2 二叉樹 059
3.3 圖 062
3.3.1 圖的基本概念 062
3.3.2 圖的存儲方式 065
第4章 搜索技術 072
4.1 盲目搜索 073
4.1.1 廣度優(yōu)先搜索算法 073
4.1.2 深度優(yōu)先搜索算法 080
4.2 啟發(fā)式搜索 086
4.2.1 貪婪算法 086
4.2.2 A*算法 089
4.3 對抗搜索 093
4.3.1 博弈下的極小極大搜索 094
4.3.2 alpha–beta剪枝算法 102
第5章 線性與非線性規(guī)劃中的搜索 105
5.1 優(yōu)化問題 106
5.1.1 無處不在的優(yōu)化 106
5.1.2 優(yōu)化問題的描述 106
5.2 線性規(guī)劃 108
5.2.1 圖解線性規(guī)劃 110
5.2.2 搜頂點 113
5.2.3 程序求解 114
5.3 非線性規(guī)劃 117
5.3.1 從導數中獲得搜索信息 117
5.3.2 非線性規(guī)劃難在哪 124
5.3.3 程序求解 126
第6章 組合優(yōu)化與求解 132
6.1 組合優(yōu)化問題 133
6.1.1 旅行商問題 134
6.1.2 背包問題 138
6.2 模擬退火 140
6.2.1 基本原理 140
6.2.2 參數與流程 142
6.2.3 程序代碼 144
6.3 禁忌搜索 149
6.3.1 基本原理 149
6.3.2 參數與流程 152
6.3.3 程序代碼 155
第7章 群智能算法 160
7.1 遺傳算法 161
7.1.1 基本原理 161
7.1.2 參數與流程 166
7.1.3 程序代碼 171
7.2 蟻群算法 176
7.2.1 基本原理 176
7.2.2 參數與流程 180
7.2.3 程序代碼 184
7.3 粒子群算法 189
7.3.1 基本原理 189
7.3.2 參數與流程 191
7.3.3 程序代碼 196
附錄 199
附錄一 類與繼承 200
附錄二 人工智能的博弈基礎 208
附錄三 騰訊扣叮Python實驗室:JupyterLab使用說明 214