1. 遺傳演算法為什麼可以優化bp神經網路
遺傳演算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。遺傳演算法是從代表問題可能潛在的解集的一個種群(population)開始的,而一個種群則由經過基因(gene)編碼的一定數目的個體(indivial)組成。每個個體實際上是染色體(chromosome)帶有特徵的實體。染色體作為遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭發的特徵是由染色體中控制這一特徵的某種基因組合決定的。因此,在一開始需要實現從表現型到基因型的映射即編碼工作。由於仿照基因編碼的工作很復雜,我們往往進行簡化,如二進制編碼,初代種群產生之後,按照適者生存和優勝劣汰的原理,逐代(generation)演化產生出越來越好的近似解,在每一代,根據問題域中個體的適應度(fitness)大小選擇(selection)個體,並藉助於自然遺傳學的遺傳運算元(genetic operators)進行組合交叉(crossover)和變異(mutation),產生出代表新的解集的種群。這個過程將導致種群像自然進化一樣的後生代種群比前代更加適應於環境,末代種群中的最優個體經過解碼(decoding),可以作為問題近似最優解。
2. 神經網路和遺傳演算法有什麼關系
神經網路的設計要用到遺傳演算法,遺傳演算法在神經網路中的應用主要反映在3個方面:網路的學習,網路的結構設計,網路的分析。
1.遺傳演算法在網路學習中的應用
在神經網路中,遺傳演算法可用於網路的學習。這時,它在兩個方面起作用
(1)學習規則的優化
用遺傳演算法對神經網路學習規則實現自動優化,從而提高學習速率。
(2)網路權系數的優化
用遺傳演算法的全局優化及隱含並行性的特點提高權系數優化速度。
2.遺傳演算法在網路設計中的應用
用遺傳演算法設計一個優秀的神經網路結構,首先是要解決網路結構的編碼問題;然後才能以選擇、交叉、變異操作得出最優結構。編碼方法主要有下列3種:
(1)直接編碼法
這是把神經網路結構直接用二進制串表示,在遺傳演算法中,「染色體」實質上和神經網路是一種映射關系。通過對「染色體」的優化就實現了對網路的優化。
(2)參數化編碼法
參數化編碼採用的編碼較為抽象,編碼包括網路層數、每層神經元數、各層互連方式等信息。一般對進化後的優化「染色體」進行分析,然後產生網路的結構。
(3)繁衍生長法
這種方法不是在「染色體」中直接編碼神經網路的結構,而是把一些簡單的生長語法規則編碼入「染色體」中;然後,由遺傳演算法對這些生長語法規則不斷進行改變,最後生成適合所解的問題的神經網路。這種方法與自然界生物地生長進化相一致。
3.遺傳演算法在網路分析中的應用
遺傳演算法可用於分析神經網路。神經網路由於有分布存儲等特點,一般難以從其拓撲結構直接理解其功能。遺傳演算法可對神經網路進行功能分析,性質分析,狀態分析。
遺傳演算法雖然可以在多種領域都有實際應用,並且也展示了它潛力和寬廣前景;但是,遺傳演算法還有大量的問題需要研究,目前也還有各種不足。首先,在變數多,取值范圍大或無給定范圍時,收斂速度下降;其次,可找到最優解附近,但無法精確確定最擾解位置;最後,遺傳演算法的參數選擇尚未有定量方法。對遺傳演算法,還需要進一步研究其數學基礎理論;還需要在理論上證明它與其它優化技術的優劣及原因;還需研究硬體化的遺傳演算法;以及遺傳演算法的通用編程和形式等。
3. 如何用神經網路遺傳演算法求極值
===============學習神經網路可以到<神經網路之家>================
可以先用matlab神經網路工具箱訓練網路,當網路訓練好之後,把網路存起來.
然後編寫遺傳演算法,你知道,遺傳演算法是每代不斷迭代的,然後每代會根據適應度決定是否進入下一代,這里的適應度你就用sim(net,x)得到的值的倒數(或者類似的)作為適應度,然後其它就和遺傳演算法沒什麼兩樣了.最後得到的最優解, 就是網路的最優解. 也就是你要的結果了.
不過兄弟,這想法很牛B,很值得鼓勵這樣的想法.但我不得不說兩句,從實際角度來說,這樣的實現沒有太大的意義. 你的目的就是想從數據中找到Y最小的時候,X的什麼值, 但數據上畢竟只是數據,不管你怎麼繞,透露出來的信息還是有限的,不管怎麼繞,其實數據能提供最大限度的信息就是:在Y=10.88時,即X1=25,X2=24....X6=1.5時,Y是最小值的, 這是數據能提供的最大限度的信息,你再怎麼繞, 其實當你懂得神經網路的深層原理時,你會發現,你的方案並沒能挖掘出更優的解(因為數據的信息是有限的),這只是把自己繞暈了
不過能有這樣的想法,兄弟肯定是個學習的好材料,加油.
===============學習神經網路可以到<神經網路之家>================
4. 遺傳演算法中保證和不變的交叉方法
通過選擇。
(2)圖式的階和長度
圖式中0和1的個數稱為圖式的階、遺傳演算法的特點
1.遺傳演算法從問題解的中集開始嫂索。對於圖式H=1x x0x x,以及進一步研究開發;這是一個強烈的濾波過程。對於問題求解角度來講.,網路的分析,最關心的是遺傳演算法在神經網路的應用。神經網路由於有分布存儲等特點,這時只能靠變異產生新的個體;往往也稱為問題的「環境」、遺傳演算法的步驟和意義
1.初始化
選擇一個群體,或者最優個體的適應度和群體適應度不再上升時。
一,變異增加了全局優化的特質。
(2)適應度較小的個體:
1.選擇(Selection)
這是從群體中選擇出較適應環境的個體,利於全局擇優,它通過進化和遺傳機理。
4.變異
根據生物遺傳中基因變異的原理,從中選擇出較適應環境的「染色體」進行復制。
這說明遺傳演算法是採用隨機方法進行最優解搜索.25-0,2;甚至被淘汰,給出一群「染色體」、變異操作得出最優結構,則演算法的迭代過程收斂。
4.遺傳演算法中的選擇。
3.遺傳演算法在網路分析中的應用
遺傳演算法可用於分析神經網路,有f(bi);然後才能以選擇;然後,還需要進一步研究其數學基礎理論,首先是要解決網路結構的編碼問題,i=1。這種方法與自然界生物地生長進化相一致,*}表示。
通常以隨機方法產生串或個體的集合bi。
圖3-7 遺傳演算法原理
1。這個初始的群體也就是問題假設解的集合。
2.選擇
根據適者生存原則選擇下一代的個體,則有
S#39,選擇體現了向最優解迫近,則稱為一個因式,即把1變為0。這時,太大則容易破壞高適應值的結構。在串bi中,最後就會收斂到最適應環境的一個「染色體」上,i=1:網路的學習。
(3)Holland圖式定理
低階,由遺傳演算法對這些生長語法規則不斷進行改變;=001111
單靠變異不能在求解中得到好處,對執行變異的串的對應位求反,遺傳演算法可用於網路的學習,這是問題求解品質的測量函數.,才能對這種演算法深入了解。它的有關內容如下,即群體大小n,變異過程產生更適應環境的新一代「染色體」群。圖式中第1位數字和最後位數字間的距離稱為圖式的長度,然後產生網路的結構,而是把一些簡單的生長語法規則編碼入「染色體」中,收斂速度下降。
這樣,隨機地選擇兩個個體的相同位置,則f(bi)稱為個體bi的適應度。遺傳演算法從串集開始搜索,交叉是無法產生新的個體的.01-0。一般對進化後的優化「染色體」進行分析;或者個體的適應度的變化率為零;還需研究硬體化的遺傳演算法;並且是一個並行濾波機制;其中*可以是0或1,並用0(H)表示。
遺傳演算法的原理可以簡要給出如下,但無法精確確定最擾解位置。否則。
圖3—7中表示了遺傳演算法的執行過程。串長度及編碼形式對演算法收斂影響極大,編碼包括網路層數、遺傳演算法的應用關鍵
遺傳演算法在應用中最關鍵的問題有如下3個
1.串的編碼方式
這本質是問題編碼;有
bi∈{0.75。一般把問題的各種參數用二進制編碼,網路的結構設計。並且,2。例如.n,對群體執行的操作有三種;從神經網路研究的角度上考慮。
這是遺傳演算法與傳統優化演算法的極大區別。也就是說、交叉和變異都是隨機操作。適應度准則體現了適者生存,狀態分析。通過對「染色體」的優化就實現了對網路的優化,1,「染色體」實質上和神經網路是一種映射關系,一代一代地進化。
2.遺傳演算法在網路設計中的應用
用遺傳演算法設計一個優秀的神經網路結構;還需要在理論上證明它與其它優化技術的優劣及原因,從而產生新的個體。在選中的位置實行交換:
(1)適應度較高的個體,i=1.3 遺傳演算法的應用
遺傳演算法在很多領域都得到應用。
(2)參數化編碼法
參數化編碼採用的編碼較為抽象。由於在選擇用於繁殖下一代的個體時。它說明遺傳演算法其內在具有並行處理的特質;但有時需要另行構造,遺傳演算法有很高的容錯能力。編碼方法主要有下列3種。
(3)繁衍生長法
這種方法不是在「染色體」中直接編碼神經網路的結構。以
(3-86)為選中bi為下一代個體的次數。遺傳演算法可對神經網路進行功能分析。
顯然.從式(3—86)可知。因為在所有的個體一樣時。這個過程反映了隨機信息交換;最後,交叉幌宰P,遺傳演算法的參數選擇尚未有定量方法;其次、遺傳演算法在神經網路中的應用
遺傳演算法在神經網路中的應用主要反映在3個方面,…。
一:
(1)直接編碼法
這是把神經網路結構直接用二進制串表示,在變數多,太大使遺傳演算法成了單純的隨機搜索、變異操作能迅速排除與最優解相差極大的串,有0(H)=2。交叉時,:
考慮對於一群長度為L的二進制編碼bi,用經過選擇。
二。變異概率Pm太小時難以產生新的基因結構;f(bi)lt,並按適者生存的原則.,並用δ(H)表示,以適應度為選擇原則,繁殖下一代的數目較少。故有時也稱這一操作為再生(Reproction).2、遺傳演算法的目的
典型的遺傳演算法CGA(Canonical Genetic Algorithm)通常用於解決下面這一類的靜態最優化問題,目前也還有各種不足,把0變為1。
很明顯。
3.遺傳演算法有極強的容錯能力
遺傳演算法的初始串集本身就帶有大量與最優解甚遠的信息,不斷進化產生新的解。
群體大小n太小時難以求出最優解。
3.變異(Mutation)
這是在選中的個體中:
choose an intial population
determine the fitness of each indivial
perform selection
repeat
perform crossover
perform mutation
determine the fitness of each indivial
perform selection
until some stopping criterion applies
這里所指的某種結束准則一般是指個體的適應度達到給定的閥值。然後。首先。一般n=30-160。故而,取值范圍大或無給定范圍時。在變異時.,再通過交叉。在遺傳演算法應用中,如果某位基因為1。一般取Pm=0.01—0.2、變異所得到的新一代群體取代上一代群體;∞
同時
f(bi)≠f(bi+1)
求滿足下式
max{f(bi)bi∈{0。
2.遺傳演算法求解時使用特定問題的信息極少。
3.遺傳演算法自身參數設定
遺傳演算法自身參數有3個。
三,Pm的取值較小,n,4位置的基因進行變異,繁殖下一代的數目較多。
2.適應函數的確定
適應函數(fitness function)也稱對象函數(object function),交叉體現了最優解的產生。
由於遺傳演算法使用適應值這一信息進行搜索,可找到最優解附近,構成子串。對遺傳演算法.n,以變異概率Pm對某些個體的某些位執行變異,在執行遺傳演算法之前。變異概率Pm與生物變異極小的情況一致。取值為0,靈活應用,並不需要問題導數等與問題直接相關的信息、交叉。
5.全局最優收斂(Convergence to the global optimum)
當最優個體的適應度達到給定的閥值,並且
0lt,也即是假設解。遺傳演算法只需適應值和串編碼等通用信息,每代處理的圖式數目為0(n3)。當群體的大小為n時。
5.遺傳演算法具有隱含的並行性
遺傳演算法的基礎理論是圖式定理,也即產生新的個體,變異體現了全局最優解的復蓋,遺傳演算法是一種最優化方法,就產生了對環境適應能力較強的後代。
例如有個體S=101011,短長度的圖式在群體遺傳過程中將會按指數規律增加,而不是確定的精確規則:
(1)圖式(Schema)概念
一個基因串用符號集{0,太大則增長收斂時間、交叉,並且也展示了它潛力和寬廣前景,即選擇一個串或個體的集合bi。一般可以把問題的模型函數作為對象函數,容易形成通用演算法程序,按交叉概率P、演算法結束,從給出的原始解群中,復蓋面大,…。
3.交叉
對於選中用於繁殖下一代的個體。
遺傳演算法這種處理能力稱為隱含並行性(Implicit Parallelism).2 遺傳演算法的原理
遺傳演算法GA把問題的解表示成「染色體」,一般難以從其拓撲結構直接理解其功能。這些選中的個體用於繁殖下一代。
2.交叉(Crossover)
這是在選中用於繁殖下一代的個體中,可實行單點交叉或多點交叉,2,而不是從單個解開始。
遺傳演算法雖然可以在多種領域都有實際應用,並返回到第2步即選擇操作處繼續循環執行、遺傳演算法的基本原理
長度為L的n個二進制串bi(i=1,故幾乎可處理任何問題,每個二進制位就是個體染色體的基因。但是1,最後生成適合所解的問題的神經網路;但是;反亦反之,性質分析。問題的最優解將通過這些初始假設解進化而求出,它在兩個方面起作用
(1)學習規則的優化
用遺傳演算法對神經網路學習規則實現自動優化。在選擇時,也稱為初始群體.75,2。在每個串中、交叉。一般取Pc=0,對兩個不同的個體的相同位置的基因進行交換、各層互連方式等信息,產生變異時就是把它變成0,1}L (3-84)
給定目標函數f;然後把子串拼接構成「染色體」串,就是選擇出和最優解較接近的中間解,所以、每層神經元數。
(2)網路權系數的優化
用遺傳演算法的全局優化及隱含並行性的特點提高權系數優化速度,一般取0;目的在於產生新的基因組合,是根據個體對環境的適應度而決定其繁殖量的,在遺傳演算法中,故而有時也稱為非均勻再生(differential reproction),即求出最優解,從而提高學習速率、交叉概率Pc和變異概率Pm。
對其的第1:H=1x x 0 x x是一個圖式,δ(H)=4,它就是問題的最優解。一般取n=30-160.25—0。
1.遺傳演算法在網路學習中的應用
在神經網路中,最後收斂到一個特定的串bi處。交叉概率Pc太小時難以向前搜索;容易誤入局部最優解。二。
給出目標函數f。
例如有個體
S1=100101
S2=010111
選擇它們的左邊3位進行交叉操作。傳統優化演算法是從單個初始值迭代求最優解的,n)組成了遺傳演算法的初解群,則有
S1=010101
S2=100111
一般而言,應先明確其特點和關鍵問題,它能保證演算法過程不會產生無法進化的單一群體,不適應者淘汰的自然法則。根據進化術語。這樣。
三,,對個體中的某些基因執行異向轉化,1}L} (3-85)
的bi,把這些假設解置於問題的「環境」中,在演算法中也即是以二進制編碼的串,遺傳演算法還有大量的問題需要研究
5. matlab工具箱中的神經網路和遺傳演算法要怎麼調用
都是有兩種調用方法,一種圖形界面的,這個從開始菜單,然後工具,然後從裡面找神經網路 neural network,遺傳演算法工具是 全局優化工具箱裡面的,global optimization。
另外 一種通過命令行調用,這個需要你理解你都要做什麼,我用神經網路舉例。第一步需要先整理出輸入變數和輸出變數,第二步設計並初始化神經網路,第三部訓練,第四部獲得結果。
如果你想結合這兩者,就會更加復雜,詳細的你可以再問。我曾經做過用遺傳演算法優化神經網路的工具。
6. trainbr加遺傳演算法的神經網路!好處,或者行不行!
神經網路的設計要用到遺傳演算法,遺傳演算法在神經網路中的應用主要反映在3個方面:網路的學習,網路的結構設計,網路的分析。 1.遺傳演算法在網路學習中的應用在神經網路中,遺傳演算法可用於網路的學習。這時,它在兩個方面起作用 (1)學習規則的優化用遺傳演算法對神經網路學習規則實現自動優化,從而提高學習速率。 (2)網路權系數的優化用遺傳演算法的全局優化及隱含並行性的特點提高權系數優化速度。 2.遺傳演算法在網路設計中的應用用遺傳演算法設計一個優秀的神經網路結構,首先是要解決網路結構的編碼問題;然後才能以選擇、交叉、變異操作得出最優結構。編碼方法主要有下列3種: (1)直接編碼法這是把神經網路結構直接用二進制串表示,在遺傳演算法中,「染色體」實質上和神經網路是一種映射關系。通過對「染色體」的優化就實現了對網路的優化。 (2)參數化編碼法參數化編碼採用的編碼較為抽象,編碼包括網路層數、每層神經元數、各層互連方式等信息。一般對進化後的優化「染色體」進行分析,然後產生網路的結構。 (3)繁衍生長法這種方法不是在「染色體」中直接編碼神經網路的結構,而是把一些簡單的生長語法規則編碼入「染色體」中;然後,由遺傳演算法對這些生長語法規則不斷進行改變,最後生成適合所解的問題的神經網路。這種方法與自然界生物地生長進化相一致。 3.遺傳演算法在網路分析中的應用遺傳演算法可用於分析神經網路。神經網路由於有分布存儲等特點,一般難以從其拓撲結構直接理解其功能。遺傳演算法可對神經網路進行功能分析,性質分析,狀態分析。遺傳演算法雖然可以在多種領域都有實際應用,並且也展示了它潛力和寬廣前景;但是,遺傳演算法還有大量的問題需要研究,目前也還有各種不足。首先,在變數多,取值范圍大或無給定范圍時,收斂速度下降;其次,可找到最優解附近,但無法精確確定最擾解位置;最後,遺傳演算法的參數選擇尚未有定量方法。對遺傳演算法,還需要進一步研究其數學基礎理論;還需要在理論上證明它與其它優化技術的優劣及原因;還需研究硬體化的遺傳演算法;以及遺傳演算法的通用編程和形式等。
7. 遺傳演算法的核心是什麼!
遺傳操作的交叉運算元。
在自然界生物進化過程中起核心作用的是生物遺傳基因的重組(加上變異)。同樣,遺傳演算法中起核心作用的是遺傳操作的交叉運算元。所謂交叉是指把兩個父代個體的部分結構加以替換重組而生成新個體的操作。通過交叉,遺傳演算法的搜索能力得以飛躍提高。
交叉運算元根據交叉率將種群中的兩個個體隨機地交換某些基因,能夠產生新的基因組合,期望將有益基因組合在一起。
(7)二進神經網路遺傳演算法擴展閱讀
評估編碼策略常採用以下3個規范:
a)完備性(completeness):問題空間中的所有點(候選解)都能作為GA空間中的點(染色體)表現。
b)健全性(soundness): GA空間中的染色體能對應所有問題空間中的候選解。
c)非冗餘性(nonrendancy):染色體和候選解一一對應。
目前的幾種常用的編碼技術有二進制編碼,浮點數編碼,字元編碼,變成編碼等。
而二進制編碼是目前遺傳演算法中最常用的編碼方法。即是由二進制字元集{0,1}產生通常的0,1字元串來表示問題空間的候選解。
8. 如何使用遺傳演算法或神經網路在MATLAB 中求二元函數最小值
% 2008年4月12日修改
%**********************%主函數*****************************************
function main()
global chrom lchrom oldpop newpop varible fitness popsize sumfitness %定義全局變數
global pcross pmutation temp bestfit maxfit gen bestgen length epop efitness val varible2 varible1
global maxgen po pp mp np val1
length=18;
lchrom=30; %染色體長度
popsize=30; %種群大小
pcross=0.6; %交叉概率
pmutation=0.01; %變異概率
maxgen=1000; %最大代數
mp=0.1; %保護概率
%
initpop; % 初始種群
%
for gen=1:maxgen
generation;
end
%
best;
bestfit % 最佳個體適應度值輸出
bestgen % 最佳個體所在代數輸出
x1= val1(bestgen,1)
x2= val1(bestgen,2)
gen=1:maxgen;
figure
plot(gen,maxfit(1,gen)); % 進化曲線
title('精英保留');
%
%********************** 產生初始種群 ************************************
%
function initpop()
global lchrom oldpop popsize
oldpop=round(rand(popsize,lchrom)); %生成的oldpop為30行12列由0,1構成的矩陣
%其中popsize為種群中個體數目lchrom為染色體編碼長度
%
%*************************%產生新一代個體**********************************
%
function generation()
global epop oldpop popsize mp
objfun; %計算適應度值
n=floor(mp*popsize); %需要保留的n個精英個體
for i=1:n
epop(i,:)=oldpop((popsize-n+i),:);
% efitness(1,i)=fitness(1,(popsize-n+i))
end
select; %選擇操作
crossover;
mutation;
elite; %精英保留
%
%************************%計算適應度值************************************
%
function objfun()
global lchrom oldpop fitness popsize chrom varible varible1 varible2 length
global maxfit gen epop mp val1
a1=-3; b1=3;
a2=-2;b2=2;
fitness=0;
for i=1:popsize
%前一未知數X1
if length~=0
chrom=oldpop(i,1:length);% before代表節點位置
c=decimal(chrom);
varible1(1,i)=a1+c*(b1-a1)/(2.^length-1); %對應變數值
%後一未知數
chrom=oldpop(i,length+1:lchrom);% before代表節點位置
c=decimal(chrom);
varible2(1,i)=a2+c*(b2-a2)/(2.^(lchrom-length)-1); %對應變數值
else
chrom=oldpop(i,:);
c=decimal(chrom);
varible(1,i)=a1+c*(b1-a1)/(2.^lchrom-1); %對應變數值
end
%兩個自變數
fitness(1,i)=4*varible1(1,i)^2-2.1*varible1(1,i)^4+1/3*varible1(1,i)^6+varible1(1,i)*varible2(1,i)-4*varible2(1,i)^2+4*varible2(1,i)^4;
%fitness(1,i) = 21.5+varible1(1,i)*sin(4*pi*varible1(1,i))+varible2(1,i) *sin(20*pi*varible2(1,i));
%一個自變數
%fitness(1,i) = 20*cos(0.25*varible(1,i))-12*sin(0.33*varible(1,i))+40 %個體適應度函數值
end
lsort; % 個體排序
maxfit(1,gen)=max(fitness); %求本代中的最大適應度值maxfit
val1(gen,1)=varible1(1,popsize);
val1(gen,2)=varible2(1,popsize);
%************************二進制轉十進制**********************************
%
function c=decimal(chrom)
c=0;
for j=1:size(chrom,2)
c=c+chrom(1,j)*2.^(size(chrom,2)-j);
end
%
%************************* 個體排序 *****************************
% 從小到大順序排列
%
function lsort()
global popsize fitness oldpop epop efitness mp val varible2 varible1
for i=1:popsize
j=i+1;
while j<=popsize
if fitness(1,i)>fitness(1,j)
tf=fitness(1,i); % 適應度值
tc=oldpop(i,:); % 基因代碼
fitness(1,i)=fitness(1,j); % 適應度值互換
oldpop(i,:)=oldpop(j,:); % 基因代碼互換
fitness(1,j)=tf;
oldpop(j,:)=tc;
end
j=j+1;
end
val(1,1)=varible1(1,popsize);
val(1,2)=varible2(1,popsize);
end
%*************************轉輪法選擇操作**********************************
%
function select()
global fitness popsize sumfitness oldpop temp mp np
sumfitness=0; %個體適應度之和
for i=1:popsize % 僅計算(popsize-np-mp)個個體的選擇概率
sumfitness=sumfitness+fitness(1,i);
end
%
for i=1:popsize % 僅計算(popsize-np-mp)個個體的選擇概率
p(1,i)=fitness(1,i)/sumfitness; % 個體染色體的選擇概率
end
%
q=cumsum(p); % 個體染色體的累積概率(內部函數),共(popsize-np-mp)個
%
b=sort(rand(1,popsize)); % 產生(popsize-mp)個隨機數,並按升序排列。mp為保護個體數
j=1;
k=1;
while j<=popsize % 從(popsize-mp-np)中選出(popsize-mp)個個體,並放入temp(j,:)中;
if b(1,j)<q(1,k)
temp(j,:)=oldpop(k,:);
j=j+1;
else
k=k+1;
end
end
%
j=popsize+1; % 從統一挪過來的(popsize-np-mp)以後個體——優秀個體中選擇
for i=(popsize+1):popsize % 將mp個保留個體放入交配池temp(i,:),以保證群體數popsize
temp(i,:)=oldpop(j,:);
j=j+1;
end
%
%**************************%交叉操作***************************************
%
function crossover()
global temp popsize pcross lchrom mp
n=floor(pcross*popsize); %交叉發生的次數(向下取整)
if rem(n,2)~=0 % 求余
n=n+1; % 保證為偶數個個體,便於交叉操作
end
%
j=1;
m=0;
%
% 對(popsize-mp)個個體將進行隨機配對,滿足條件者將進行交叉操作(按順序選擇要交叉的對象)
%
for i=1:popsize
p=rand; % 產生隨機數
if p<pcross % 滿足交叉條件
parent(j,:)=temp(i,:); % 選出1個父本
k(1,j)=i;
j=j+1; % 記錄父本個數
m=m+1 ; % 記錄雜交次數
if (j==3)&(m<=n) % 滿足兩個父本(j==3),未超過交叉次數(m<=n)
pos=round(rand*(lchrom-1))+1; % 確定隨機位數(四捨五入取整)
for i=1:pos
child1(1,i)=parent(1,i);
child2(1,i)=parent(2,i);
end
for i=(pos+1):lchrom
child1(1,i)=parent(2,i);
child2(1,i)=parent(1,i);
end
i=k(1,1);
j=k(1,2);
temp(i,:)=child1(1,:);
temp(j,:)=child2(1,:);
j=1;
end
end
end
%
%****************************%變異操作*************************************
%
function mutation()
global popsize lchrom pmutation temp newpop oldpop mp
m=lchrom*popsize; % 總的基因數
n=round(pmutation*m); % 變異發生的次數
for i=1:n % 執行變異操作循環
k=round(rand*(m-1))+1; %確定變異位置(四捨五入取整)
j=ceil(k/lchrom); % 確定個體編號(取整)
l=rem(k,lchrom); %確定個體中變位基因的位置(求余)
if l==0
temp(j,lchrom)=~temp(j,lchrom); % 取非操作
else
temp(j,l)=~temp(j,l); % 取非操作
end
end
for i=1:popsize
oldpop(i,:)=temp(i,:); %產生新的個體
end
%
%*********************%精英選擇%*******************************************
%
function elite()
global epop oldpop mp popsize
objfun; %計算適應度值
n=floor(mp*popsize); %需要保留的n個精英個體
for i=1:n
oldpop(i,:)=epop(i,:);
% efitness(1,i)=fitness(1,(popsize-n+i))
end;
%
%*********************%最佳個體********************************************
%
function best()
global maxfit bestfit gen maxgen bestgen
bestfit=maxfit(1,1);
gen=2;
while gen<=maxgen
if bestfit<maxfit(1,gen)
bestfit=maxfit(1,gen);
bestgen=gen;
end
gen=gen+1;
end
%**************************************************************************
9. 關於神經網路,蟻群演算法和遺傳演算法
神經網路並行性和自適應性很強,應用領域很廣,在任何非線性問題中都可以應用,如控制、信息、預測等各領域都能應用。
蟻群演算法最開始應用於TSP問題,獲得了成功,後來又廣泛應用於各類組合優化問題。但是該演算法理論基礎較薄弱,演算法收斂性都沒有得到證明,很多參數的設定也僅靠經驗,實際效果也一般,使用中也常常早熟。
遺傳演算法是比較成熟的演算法,它的全局尋優能力很強,能夠很快地趨近較優解。主要應用於解決組合優化的NP問題。
這三種演算法可以相互融合,例如GA可以優化神經網路初始權值,防止神經網路訓練陷入局部極小且加快收斂速度。蟻群演算法也可用於訓練神經網路,但一定要使用優化後的蟻群演算法,如最大-最小蟻群演算法和帶精英策略。
10. BP演算法、BP神經網路、遺傳演算法、神經網路這四者之間的關系
這四個都屬於人工智慧演算法的范疇。其中BP演算法、BP神經網路和神經網路
屬於神經網路這個大類。遺傳演算法為進化演算法這個大類。
神經網路模擬人類大腦神經計算過程,可以實現高度非線性的預測和計算,主要用於非線性擬合,識別,特點是需要「訓練」,給一些輸入,告訴他正確的輸出。若干次後,再給新的輸入,神經網路就能正確的預測對於的輸出。神經網路廣泛的運用在模式識別,故障診斷中。BP演算法和BP神經網路是神經網路的改進版,修正了一些神經網路的缺點。
遺傳演算法屬於進化演算法,模擬大自然生物進化的過程:優勝略汰。個體不斷進化,只有高質量的個體(目標函數最小(大))才能進入下一代的繁殖。如此往復,最終找到全局最優值。遺傳演算法能夠很好的解決常規優化演算法無法解決的高度非線性優化問題,廣泛應用在各行各業中。差分進化,蟻群演算法,粒子群演算法等都屬於進化演算法,只是模擬的生物群體對象不一樣而已。