『壹』 C++演算法的書籍(適合初學的)
一般來說,清華大學出版社的計算機書是最好的,主要有
1.《C++語言基礎教程(第2版)》
出版社:清華大學出版社
作者:呂鳳翥
書中全面、系統地講述了 C++語言的基本概念、基本語法和編程方法,較詳盡地講述了 C++語言面向對象的重要特徵: 類和對象、繼承和派生類、多態性、虛函數、函數模塊和類模板等內容。本書具有豐富的例題,每章後面均備有相當數量的練習題和作業題。 全書通俗易懂,由淺入深,突出重點,偏重應用。本書不僅可作為高等學校 C++語言課程的教材,還可作為 C++語言的自學教材
2.《面向對象程序設計與C++語言(第二版)》
出版社:人民郵電出版社
作者:楊庚/王汝傳/葉曉國
本書系統地介紹了面向對象技術及C++語言的相關知識。內容包括面向對象技術的概念和特徵、C++語言基礎、類和對象、派生與繼承、虛函數與多態性、模板、運算符重載、輸入/輸出流庫、異常處理等。 本書注重基本概念,從實際應用出發,突出重點,敘述清楚,深入淺出,論述詳盡,使讀者既能深刻領會面向對象程序設計的思想,了解面向對象程序設計的特徵,又能掌握C++語言的...
3.《C++語言程序設計教程》
出版社:清華大學出版社
作者:楊進才/沈顯君/劉蓉
C++語言是目前最為流行的程序設計語言,它既支持面向過程的結構化程序設計,也支持基於對象的面向對象程序設計。本書依據ANSI C++標准,從面向過程的編程到面向對象的編程方法展開,形成一條自然流暢的主線,同時兩個部分又自成體系,以滿足不同基礎與需求的學習者。內容包括:C++編程簡介、數據類型與表達式、控制結構、函數、構造數據類型、C++程序的結構、類與對象、繼承
4.《C/C++程序設計教程》
出版社:機械工業出版社
作者:秦維佳/傘宏力/侯春光/孟艷紅
本書是《C/C++程序設計教程》的配套學習輔導用書。. 全書共分12章,內容包括C/C++語言程序設計初步,C語言的數據類型及表達式,結構化程序設計,數組、函數與指針的概念和實例,結構體與共用體,位運算與文件的概念,面向對象程序設計,類的繼承與多態,C++的I/O流。每章包括知識體系、學習要點、上機實訓、習題和參考答案。.. 本書可供初學者學習C語言,也可供...
5.《C++程序設計基礎導學》
出版社:科學出版社
作者:趙海廷/嚴運國
本書為是實踐訓練環節必不可少的輔助教材。本書按照《C++程序設計基礎》的順序組織編撰,由基本要求、內容小結、典型例題分析、習題、實驗及習題參考答案組成。本書的目的是通過典型例題剖析、習題和實驗環節來鞏固所學的理論知識,提高學生的實踐操作水平。 本書適用高職高專的理工科學生,也適合於C++語言的初學者,還可供普通高校理...
『貳』 進化演算法入門讀書筆記(一)
這里我參考學習的書籍是:
《進化計算的理論和方法》,王宇平,科學出版社
《進化優化演算法:基於仿生和種群的計算機智能方法》,[美]丹·西蒙,清華大學出版社。
進化演算法是 求解優化問題 的一種演算法,它是 模仿生物進化與遺傳原理 而設計的一類隨機搜索的優化演算法。
不同的作者稱進化演算法有不同的術語,以下。註:這里僅列舉出了我自己比較容易混淆的一些,並未全部列出。
進化計算: 這樣能強調演算法需要在 計算機上 實施,但進化計算也可能指不用於優化的演算法(最初的遺傳演算法並不是用於優化本身,而是想用來研究自然選擇的過程)。因此,進化優化演算法比進化計算更具體。
基於種群的優化: 它強調進化演算法一般是讓問題的候選解 種群 隨著時間的進化以得到問題的更好的解。然而許多進化演算法每次迭代只有單個候選解。因此,進化演算法比基於種群的優化更一般化。
計算機智能/計算智能: 這樣做常常是為了區分進化演算法與專家系統,在傳統上專家系統一直被稱為人工智慧。專家系統模仿演繹推理,進化演算法則模仿歸納推理。進化演算法有時候也被看成是人工智慧的一種。計算機智能是比進化演算法更一般的詞,它包括神經計算、模糊系統、人工生命這樣的一些技術,這些技術可應用於優化之外的問題。因此,進化計算可能比計算機智能更一般化或更具體。
由自然啟發的計算/仿生計算: 像差分進化和分布估計演算法這些進化演算法可能並非源於自然,像進化策略和反向學習這些進化演算法與自然過程聯系甚微。因此,進化演算法比由自然啟發的演算法更一般化,因為進化演算法包括非仿生演算法。
機器學習: 機器學習研究由經驗學到的計算機演算法,它還包括很多不是進化計算的演算法,如強化學習、神經網路、分簇、SVM等等。因此,機器學習比進化演算法更廣。
群智能演算法: 一些人認為群智能演算法應與進化演算法區分開,一些人認為群智能演算法是進化演算法的一個子集。因為群智能演算法與進化演算法有相同的執行方式,即,每次迭代都改進問題的候選解的性能從而讓解的種群進化。因此,我們認為群智能演算法是一種進化演算法。
進化演算法的簡單定義可能並不完美。在進化演算法領域術語的不統一會讓人困惑,一個演算法是進化演算法如果它通常被認為是進化演算法,這個戲謔的、循環的定義一開始有些麻煩,但是一段時間後,這個領域工作的人就會習慣了。
優化幾乎適用於生活中的所有領域。除了對如計算器做加法運算這種過於簡單的問題,不必用進化演算法的軟體,因為有更簡單有效的演算法。此外對於每個復雜的問題,至少應該考慮採用進化演算法。
一個優化問題可以寫成最小化問題或最大化問題,這兩個問題在形式上很容易互相轉化:
函數 被稱為目標函數,向量 被稱為獨立變數,或決策變數。我們稱 中元素的個數為問題的維數。
優化問題常常帶有約束。即在最小化某個函數 時,對 可取的值加上約束。不舉例。
實際的優化問題不僅帶有約束,還有多個目標。這意味著我們想要同時最小化不止一個量。
例子:
這里評估這個問題的一種方式是繪制 作為函數 的函數的圖:
如圖,對在實線上的 的值,找不到能同時使 和 減小的 的其他值,此實線被稱為 帕累托前沿 ,而相應的 的值的集合被稱為帕累托集。(此處的帕累托最優問題十分重要,可以參考這個鏈接來學習和理解: 多目標優化之帕累托最優 - 知乎 ,非常清晰易懂。)
該例子是一個非常簡單的多目標優化問題,它只有兩個目標。實際的優化問題通常涉及兩個以上的模目標,因此很難得到它的帕累托前沿,由於它是高維的,我們也無法將它可視化。後面的章節將會仔細討論多目標進化優化。
多峰優化問題是指問題不止一個局部最小值。上例中的 就有兩個局部最小值,處理起來很容易,有些問題有很多局部最小值,找出其中的全局最小值就頗具挑戰性。
對於前面的簡單例子,我們能用圖形的方法或微積分的方法求解,但是許多實際問題除了有更多獨立變數、多目標,以及帶約束之外更像上面的Ackley函數這樣,對於這類問題,基於微積分或圖形的方法就不夠用了,而進化演算法卻能給出更好的結果。
到現在為止我們考慮的都是連續優化問題,也就是說,允許獨立變數連續地變化。但有許多優化問題中的獨立變數智能在一個離散集合上取值。這類問題被稱為組合優化問題。如旅行商問題。
對於有 個城市的旅行商問題,有 個可能的解。對於一些過大的問題,硬算的方法不可行,像旅行商這樣的組合問題沒有連續的獨立變數,因此不能利用導數求解。除非對每個可能的解都試一遍,不然就無法確定所得到的組合問題的解是否就是最好的解。進化演算法對這類大規模、多維的問題,它至少能幫我們找出一個好的解(不一定是最好的)。