導航:首頁 > 源碼編譯 > 遺傳演算法改進

遺傳演算法改進

發布時間:2022-02-09 03:45:37

❶ 遺傳演算法

遺傳演算法是從代表問題可能潛在解集的一個種群開始的,而一個種群則由經過基因編碼的一定數目的個體組成。每個個體實際上是染色體帶有特徵的實體。染色體作為遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因的組合,它決定了個體形狀的外部表現,如黑頭發的特徵是由染色體中控制這一特徵的某種基因組合決定的。因此,在一開始需要實現從表現型到基因型的映射即編碼工作。由於仿照基因編碼的工作很復雜,我們往往進行簡化,如二進制編碼。初始種群產生之後,按照適者生存和優勝劣汰的原理,逐代(generation)演化產生出越來越好的近似解。在每一代,根據問題域中個體的適應度(fitness)大小挑選(selection)個體,並藉助於自然遺傳學的遺傳運算元(genetic operators)進行組合交叉(crossover)和變異(mutation),產生出代表新的解集的種群。這個過程將導致種群自然進化一樣的後生代種群比前代更加適應環境,末代種群中的最優個體經過編碼(decoding),可以作為問題近似最優解。

5.4.1 非線性優化與模型編碼

假定有一組未知參量

xi(i=1,2,…,M)

構成模型向量m,它的非線性目標函數為Φ(m)。根據先驗知識,對每個未知量都有上下界αi及bi,即αi≤x≤bi,同時可用間隔di把它離散化,使

di=(bii)/N (5.4.1)

於是,所有允許的模型m將被限制在集

xii+jdi(j=0,1,…,N) (5.4.2)

之內。

通常目標泛函(如經濟學中的成本函數)表示觀測函數與某種期望模型的失擬,因此非線性優化問題即為在上述限制的模型中求使Φ(m)極小的模型。對少數要求擬合最佳的問題,求目標函數的極大與失擬函數求極小是一致的。對於地球物理問題,通常要進行殺重離散化。首先,地球模型一般用連續函數表示,反演時要離散化為參數集才能用於計算。有時,也將未知函數展開成已知基函數的集,用其系數作為離散化的參數集xi,第二次離散化的需要是因為每一個未知參數在其變化范圍內再次被離散化,以使離散模型空間最終包含著有限個非線性優化可選擇的模型,其個數為

地球物理數據處理教程

其中M為未知參數xi的個數。由此式可見,K決定於每個參數離散化的間隔di及其變化范圍(αi,bi),在大多數情況下它們只能靠先驗知識來選擇。

一般而言,優化問題非線性化的程度越高,逐次線性化的方法越不穩定,而對蒙特卡洛法卻沒有影響,因為此法從有限模型空間中隨機地挑選新模型並計算其目標函數 Φ(m)。遺傳演算法與此不同的是同時計算一組模型(開始時是隨機地選擇的),然後把它進行二進制編碼,並通過繁殖、雜交和變異產生一組新模型進一步有限的模型空間搜索。編碼的方法可有多種,下面舉最簡單的例說明之,對於有符號的地球物理參數反演時的編碼方式一般要更復雜些。

假設地球為有三個水平層的層次模型,含層底界面深度hj(j=1,2,3)及層速度vj(j=1,2,3)這兩組參數。如某個模型的參數值為(十進制):

h1=6,h2=18,h3=28,單位為10m

v1=6,v2=18,v3=28,單位為 hm/s

按正常的二進制編碼法它們可分別用以下字元串表示為:

地球物理數據處理教程

為了減少位元組,這種編碼方式改變了慣用的單位制,只是按精度要求(深度為10m,波速為hm/s)來規定參數的碼值,同時也意味著模型空間離散化間距di都規格化為一個單位(即10m,或hm/s)。當然,在此編碼的基礎上,還可以寫出多種新的編碼字元串。例如,三參數值的對應位元組順序重排,就可組成以下新的二進制碼串:

地球物理數據處理教程

模型參數的二進制編碼是一種數學上的抽象,通過編碼把具體的非線性問題和生物演化過程聯系了起來,因為這時形成的編碼字元串就相當於一組遺傳基因的密碼。不僅是二進制編碼,十進制編碼也可直接用於遺傳演算法。根據生物系統傳代過程的規律,這些基因信息將在繁殖中傳到下一帶,而下一代將按照「適者生存」的原則決定種屬的發展和消亡,而優化准則或目標函數就起到了決定「適者生存」的作用,即保留失擬較小的新模型,而放棄失擬大的模型。在傳帶過程中用編碼表示的基因部分地交合和變異,即字元串中的一些子串被保留,有的改變,以使傳代的過程向優化的目標演化。總的來說,遺傳演算法可分為三步:繁殖、雜交和變異。其具體實現過程見圖5.8。

圖5.8 遺傳演算法實現過程

5.4.2 遺傳演算法在地震反演中的應用

以地震走時反演為例,根據最小二乘准則使合成記錄與實測數據的擬合差取極小,目標函數可取為

地球物理數據處理教程

式中:Ti,0為觀測資料中提取出的地震走時;Ti,s為合成地震或射線追蹤算出的地震走時;ΔT為所有合成地震走時的平均值;NA為合成地震數據的個數,它可以少於實測Ti,0的個數,因為在射線追蹤時有陰影區存在,不一定能算出合成數據Tj,0。利用射線追蹤計算走時的方法很多,參見上一章。對於少數幾個波速為常數的水平層,走時反演的參數編碼方法可參照上一節介紹的分別對深度和速度編碼方法,二進制碼的字元串位數1不會太大。要注意的是由深度定出的字元串符合數值由淺到深增大的規律,這一約束條件不應在雜交和傳代過程中破壞。這種不等式的約束(h1<h2<h3…)在遺傳演算法中是容易實現的。

對於波場反演,較方便的做法是將地球介質作等間距的劃分。例如,將水平層狀介質細分為100個等厚度的水平層。在上地殼可假定波速小於6400 m/s(相當於解空間的硬約束),而波速空間距為100m/s,則可將波速用100m/s為單位,每層用6位二進制字元串表示波速,地層模型總共用600位二進制字元串表示(l=600)。初始模型可隨機地選取24~192個,然後通過繁殖雜交與變異。雜交概率在0.5~1.0之間,變異概率小於0.01。目標函數(即失擬方程)在頻率域可表示為

地球物理數據處理教程

式中:P0(ωk,vj)為實測地震道的頻譜;ωk為角頻率;vj為第j層的波速;Ps(ωk,vj)為相應的合成地震道;A(ωk)為地震儀及檢波器的頻率濾波器,例如,可取

A(ω)=sinC4(ω/ωN) (5.4.6)

式中ωN為Nyquist頻率,即ωN=π/Δt,Δt為時間采樣率。參數C為振幅擬合因子,它起到合成與觀測記錄之間幅度上匹配的作用。C的計算常用地震道的包絡函數的平均比值。例如,設E[]為波動信號的包絡函數,可令

地球物理數據處理教程

式中:tmax為包絡極大值的對應時間;J為總層數。包絡函數可通過復數道的模擬取得。

用遺傳演算法作波速反演時失擬最小的模型將一直保存到迭代停止。什麼時候停止傳代還沒有理論上可計算的好辦法,一般要顯示解空間的搜索范圍及局部密度,以此來判斷是否可以停止傳代。值得指出的是,由(5.4.4)和(5.4.5)式給出的目標函數對於有誤差的數據是有問題的,反演的目標不是追求對有誤差數據的完美擬合,而是要求出准確而且解析度最高的解估計。

遺傳演算法在執行中可能出現兩類問題。其一稱為「早熟」問題,即在傳代之初就隨機地選中了比較好的模型,它在傳代中起主導作用,而使其後的計算因散不開而白白浪費。通常,增加Q值可以改善這種情況。另一類問題正相反,即傳相當多代後仍然找不到一個特別好的解估計,即可能有幾百個算出的目標函數值都大同小異。這時,最好修改目標函數的比例因子(即(5.4.5)式的分母),以使繁殖概率Ps的變化范圍加大。

對於高維地震模型的反演,由於參數太多,相應的模型字元串太長,目前用遺傳演算法作反演的計算成本還嫌太高。實際上,為了加快計算,不僅要改進反演技巧和傳代的控制技術,而且還要大幅度提高正演計算的速度,避免對遺傳演算法大量的計算花費在正演合成上。

❷ 遺傳演算法執行策略的改進的具體方法(詳細)

GA最典型的應用之一是解決行商問題,行商問題是這樣的:
已知n個城市之間的相互距離,現有一個推銷員必須遍訪這n個城市,並且每個城市只能訪問一次,最後又必須返回出發城市。如何安排他對這些城市的訪問次序,可使其旅行路線的總長度最短?

GA的思路是,先隨機排序產生n條路線,這些路線當然長短不一,然後從中選出路徑最短的若干條路線(優勝劣汰),再基於他們產生新的路線(雜交),同時引入一些新的路線(防止最初的基因不好,怎麼遺傳都產生不了精英),當然,還要保留其中最短的那條(那可是目前來說最nb的精英哦),再取其中最短的若干條路線(優勝劣汰)。。。。一直到我們最nb的精英基本上不能更好為止。整個過程符合進化論觀點。

GA是不保證結果最優的,但按照性價比的觀點來說,它通常能在較短的時間內獲得一個較優結果。

http://www.longen.org/e-k/GA.htm
http://www.wikilib.com/wiki/%e9%81%97%e4%bc%a0%e7%ae%97%e6%b3%95 (這個比較詳盡^_^)

很遺憾,這兩天國外網站訪問不了,不然可以幫你分析個常式

❸ 怎樣解決遺傳演算法的局部最優問題

這個看看遺傳演算法的專著吧。
局部收斂,就是所謂的「早熟現象」是遺傳演算法的一個很讓人頭疼的問題。對應的措施,我舉個例子,可以是提高變異運算元的變異概率。變異運算元是跳出局部收斂的重要操作運算元,當然,遺傳演算法有很多的改進類型。這里不多說了,我介紹本書,叫《MATLAB遺傳演算法工具箱及應用》,雷英傑,西安電子科技大學出版社

❹ 關於遺傳演算法的疑惑!請高人指點!非常感謝! 模擬退火遺傳演算法和免疫遺傳演算法哪個改進的效果好

這些演算法的本質都是隨機搜索,帶有隨機性,對參數依賴程度還是比較強的,所以出現結果時好時壞也是正常的。
至於這些演算法的比較,你可以查查相關的論文。特別是首先提出該改進演算法的論文,不過要注意,國內的論文的實驗結果可信程度還是值得懷疑的。作者往往為了「證明」其演算法的優勢,只列舉那些對演算法效果有利的實驗結果,不好的結果經常不列出來。所以你看到別人說什麼演算法好,但你自己用的時候卻沒發現該演算法的優勢也是正常的。

❺ 遺傳演算法的優缺點

優點:

1、遺傳演算法是以決策變數的編碼作為運算對象,可以直接對集合、序列、矩陣、樹、圖等結構對象進行操作。這樣的方式一方面有助於模擬生物的基因、染色體和遺傳進化的過程,方便遺傳操作運算元的運用。

另一方面也使得遺傳演算法具有廣泛的應用領域,如函數優化、生產調度、自動控制、圖像處理、機器學習、數據挖掘等領域。

2、遺傳演算法直接以目標函數值作為搜索信息。它僅僅使用適應度函數值來度量個體的優良程度,不涉及目標函數值求導求微分的過程。因為在現實中很多目標函數是很難求導的,甚至是不存在導數的,所以這一點也使得遺傳演算法顯示出高度的優越性。

3、遺傳演算法具有群體搜索的特性。它的搜索過程是從一個具有多個個體的初始群體P(0)開始的,一方面可以有效地避免搜索一些不必搜索的點。

另一方面由於傳統的單點搜索方法在對多峰分布的搜索空間進行搜索時很容易陷入局部某個單峰的極值點,而遺傳演算法的群體搜索特性卻可以避免這樣的問題,因而可以體現出遺傳演算法的並行化和較好的全局搜索性。

4、遺傳演算法基於概率規則,而不是確定性規則。這使得搜索更為靈活,參數對其搜索效果的影響也盡可能的小。

5、遺傳演算法具有可擴展性,易於與其他技術混合使用。以上幾點便是遺傳演算法作為優化演算法所具備的優點。

缺點:

1、遺傳演算法在進行編碼時容易出現不規范不準確的問題。

2、由於單一的遺傳演算法編碼不能全面將優化問題的約束表示出來,因此需要考慮對不可行解採用閾值,進而增加了工作量和求解時間。

3、遺傳演算法效率通常低於其他傳統的優化方法。

4、遺傳演算法容易出現過早收斂的問題。

(5)遺傳演算法改進擴展閱讀

遺傳演算法的機理相對復雜,在Matlab中已經由封裝好的工具箱命令,通過調用就能夠十分方便的使用遺傳演算法。

函數ga:[x, fval,reason]= ga(@fitnessfun, nvars, options)x是最優解,fval是最優值,@fitnessness是目標函數,nvars是自變數個數,options是其他屬性設置。系統默認求最小值,所以在求最大值時應在寫函數文檔時加負號。

為了設置options,需要用到下面這個函數:options=gaoptimset('PropertyName1', 'PropertyValue1', 'PropertyName2', 'PropertyValue2','PropertyName3', 'PropertyValue3', ...)通過這個函數就能夠實現對部分遺傳演算法的參數的設置。

❻ 染色體個數的多少對遺傳演算法優化的結果是否有影響

自適應遺傳演算法

上迴文說到基於誤差梯度下降的BP網路演算法容易陷入局部極小,通常的改進方法先使用遺傳演算法生成比較好的權重值,再交給神經網路訓練。

遺傳演算法隨著進化的進行,其選擇率、交叉運算元、變異率應該是動態改變的。

編碼方式

在使用BP網路進行文本分類時,大都是採用實數編碼,把權值設為[0,1]上的實數,這是因為要使用權值調整公式要求權值是實數。但是在使用遺傳演算法優化這些權值時,完全可以把它們編碼為整數。比如設為[1,64]上的整數,一個權值只有64種選擇,而[0,1]上的實數有無窮多個,這樣既可以縮小搜尋的范圍,同時也加大了搜尋的步長。畢竟BP網路中很多個極小點,使用遺傳的目的只是在全局找個一個比較優的解,進一步的精確尋優交給BP神經網路來做。

選擇運算元

在進化初期我們應該使用較小的選擇壓力,以鼓勵種群向著多樣化發展;在進化後期個體差異不大,適應度都很高,這時應增大選擇壓力以刺激進化速度。可以使用模擬退火(SA,simulated annealing)來決定選擇率,即我們以一定的概率來接收不好的個體:

這是模擬退火的原始表達式,意思是說在金屬退火的過程中,其能量在降低(<0),我們以的概率接收本次變化,顯然當溫度T越低時,接收概率越大,溫度T越高時,接收概率越小,k是常數。對應到遺傳演算法,就是當種群平均適應值越低時,接收劣等個體的概率越高,當種群平均適應值越高時,接收劣等個體的概率越小。

另外M.Srinivas提出當群體適應度比較集中時,使交叉概率增大;當群體適應度比較分散時,使交叉概率減小。種群適應度分散與否通過最大、最小和平均適應度來衡量。

選擇運算元是保證遺傳演算法能找到近優解的唯一手段,當染色體唯度很高時,遺傳演算法很難找到較好的解。這是因為最開始生成的初始種群適應度都極其的低,個體之間(適應度)差異不大,如果使用錦標賽選擇法則跟隨機選擇無異,即使使用賭輪法選擇到最優個體的概率會大增加,但是最優個體也不比最劣個體好到哪兒去,最優個體也不含有優良的基因片段。所以對於高維數據,在進化初期主要靠交叉進行全局搜索來搜尋較優的個體。

交叉運算元

交叉實際上就是在進行全局搜索,所以遺傳演算法不過是窮舉演算法的一個變種。在進化初期,種群多樣性高,採用單點交叉就可以獲得較廣的搜索空間;在進化後期,個體差異不大,需要採用多點交叉,或者有人採用變異交叉點的方法。

當發現種群的適應度操持不變時,可能已經進入了局部最優,應該變異交叉點,大步跨出當前的小山峰。

由於要保留精英個體,所以交叉要以一定的概率進行。隨著進化的進行,交叉率應逐漸降低趨於某個值,以避免演算法不收斂。

變異運算元

直觀上對好的個體應施以較小的變異率,對劣等個體應施以較大的變異率。

當發現種群的適應度在降低時應增大變異率。

另外M.Srinivas提出當群體適應度比較集中時,使變異概率增大;當群體適應度比較分散時,使變異概率減小。種群適應度分散與否通過最大、最小和平均適應度來衡量。

下面的代碼是用遺傳演算法來為BP網路尋找比較好的初始解。但是遺傳演算法根本就沒有起到作用,因為我的神經網路輸入層1000個節點,隱藏層20個節點,這就2萬個權值了,也就是說染色體的長度在2萬維以上,用遺傳演算法根本就找不到較優解,它始終是在隨機地遍歷,一點兒沒有想「進化」的意思。

❼ matlab遺傳演算法改進bp神經網路

你提供的代碼是一個基本的BP神經網路訓練過程。一般都是用GA訓練,之後再用改進動量法繼續訓練,直至最後達到目標。

遺傳演算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。遺傳演算法是從代表問題可能潛在的解集的一個種群(population)開始的,而一個種群則由經過基因(gene)編碼的一定數目的個體(indivial)組成。每個個體實際上是染色體(chromosome)帶有特徵的實體。染色體作為遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭發的特徵是由染色體中控制這一特徵的某種基因組合決定的。

❽ 為什麼我用遺傳演算法改進的BP還不如不改進呢

兩種可能:一是遺傳演算法程序編的有問題(前提是BP網路沒問題);二就是遺傳演算法的評價標准或者停止准則選擇不當。

❾ 對於一個有很多極小值多變數的函數,如何改進簡單遺傳演算法

該程序採用實數編碼的遺傳演算法編寫,附件1(real code ga.m)為matlab代碼。
附件2(實數編碼遺傳演算法參考資料):
http://www.math.zju.e.cn/cagd/resources/thesis/PhDthesis_ZhouMingHUa.pdf
優化結果需要修改mutate_P以及變異量的大小。因為只有一個優化變數因此編程較為簡單。
提供一個參考鏈接:http://..com/question/583959020.html?oldq=1

❿ 遺傳演算法改進的模糊C-均值聚類MATLAB源碼範例

function [BESTX,BESTY,ALLX,ALLY]=GAFCM(K,N,Pm,LB,UB,D,c,m)
%% 此函數實現遺傳演算法,用於模糊C-均值聚類
%% 輸入參數列表
% K 迭代次數
% N 種群規模,要求是偶數
% Pm 變異概率
% LB 決策變數的下界,M×1的向量
% UB 決策變數的上界,M×1的向量
% D 原始樣本數據,n×p的矩陣
% c 分類個數
% m 模糊C均值聚類數學模型中的指數
%% 輸出參數列表
% BESTX K×1細胞結構,每一個元素是M×1向量,記錄每一代的最優個體
% BESTY K×1矩陣,記錄每一代的最優個體的評價函數值
% ALLX K×1細胞結構,每一個元素是M×N矩陣,記錄全部個體
% ALLY K×N矩陣,記錄全部個體的評價函數值
%% 第一步:
M=length(LB);%決策變數的個數
%種群初始化,每一列是一個樣本
farm=zeros(M,N);
for i=1:M
x=unifrnd(LB(i),UB(i),1,N);
farm(i,:)=x;
end
%輸出變數初始化
ALLX=cell(K,1);%細胞結構,每一個元素是M×N矩陣,記錄每一代的個體
ALLY=zeros(K,N);%K×N矩陣,記錄每一代評價函數值
BESTX=cell(K,1);%細胞結構,每一個元素是M×1向量,記錄每一代的最優個體
BESTY=zeros(K,1);%K×1矩陣,記錄每一代的最優個體的評價函數值
k=1;%迭代計數器初始化
%% 第二步:迭代過程
while k<=K
%% 以下是交叉過程
newfarm=zeros(M,2*N);
Ser=randperm(N);%兩兩隨機配對的配對表
A=farm(:,Ser(1));
B=farm(:,Ser(2));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];%產生子代a
b=[B(1:P0,:);A((P0+1):end,:)];%產生子代b
newfarm(:,2*N-1)=a;%加入子代種群
newfarm(:,2*N)=b;???
for i=1:(N-1)
A=farm(:,Ser(i));
B=farm(:,Ser(i+1));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];
b=[B(1:P0,:);A((P0+1):end,:)];
newfarm(:,2*i-1)=a;
newfarm(:,2*i)=b;
end
FARM=[farm,newfarm];
%% 選擇復制
SER=randperm(3*N);
FITNESS=zeros(1,3*N);
fitness=zeros(1,N);
for i=1:(3*N)
Beta=FARM(:,i);
FITNESS(i)=FIT(Beta,D,c,m);
end
for i=1:N
f1=FITNESS(SER(3*i-2));
f2=FITNESS(SER(3*i-1));
f3=FITNESS(SER(3*i));
if f1<=f2&&f1<=f3
farm(:,i)=FARM(:,SER(3*i-2));
fitness(:,i)=FITNESS(:,SER(3*i-2));
elseif f2<=f1&&f2<=f3
farm(:,i)=FARM(:,SER(3*i-1));
fitness(:,i)=FITNESS(:,SER(3*i-1));
else
farm(:,i)=FARM(:,SER(3*i));
fitness(:,i)=FITNESS(:,SER(3*i));
end
end
%% 記錄最佳個體和收斂曲線
X=farm;
Y=fitness;
ALLX{k}=X;
ALLY(k,:)=Y;
minY=min(Y);
pos=find(Y==minY);
BESTX{k}=X(:,pos(1));
BESTY(k)=minY;???
%% 變異
for i=1:N
if Pm>rand&&pos(1)~=i
AA=farm(:,i);
BB=GaussMutation(AA,LB,UB);
farm(:,i)=BB;
end
end
disp(k);
k=k+1;
end
%% 繪圖
BESTY2=BESTY;
BESTX2=BESTX;
for k=1:K
TempY=BESTY(1:k);
minTempY=min(TempY);
posY=find(TempY==minTempY);
BESTY2(k)=minTempY;
BESTX2{k}=BESTX{posY(1)};
end
BESTY=BESTY2;
BESTX=BESTX2;
plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2)
ylabel('函數值')
xlabel('迭代次數')
grid on

忘記寫了,這個是源代碼!謝謝謝謝!

閱讀全文

與遺傳演算法改進相關的資料

熱點內容
linux桌面虛擬化 瀏覽:84
時間動態加密怎麼解密 瀏覽:271
美女玩聲控解壓 瀏覽:355
編程人員組裝電腦 瀏覽:463
燕窩新版溯源碼 瀏覽:77
程序員吃青春飯的好處 瀏覽:663
浙江戴爾伺服器雲空間 瀏覽:330
網站鎖源碼 瀏覽:823
CAd列印文件命令 瀏覽:501
小米5sp無法復制加密門禁 瀏覽:829
文件夾添加密碼怎麼找回 瀏覽:799
安卓怎麼校色 瀏覽:277
android基本框架 瀏覽:849
解壓包子小了怎麼補救 瀏覽:988
有什麼管理客戶的app 瀏覽:707
博圖如何加密整個項目 瀏覽:673
c類庫pdf 瀏覽:606
查看當前連接命令 瀏覽:425
可以加密視頻嗎 瀏覽:508
心電圖演算法更新 瀏覽:561