A. 我用VB做遺傳演算法字元串學習,每個基因的適應度應該越來越大,可是卻一直變小,不知道為什麼
沒有全部代碼,無法測試,無法解析。所以,不知道在什麼地方補充什麼方面的代碼
B. 基因遺傳演算法中,利用適應度函數表示參數值的大小,個體是否應該被淘汰
適應度用於評價個體的優劣程度,適應度越大個體越好,反之適應度越小則個體越差;根據適應度的大小對個體進行選擇,以保證適應性能好的個體有更多的機會繁殖後代,使優良特性得以遺傳。因此,遺傳演算法要求適應度函數值必須是非負數,而在許多實際問題中,求解的目標通常是費用最小,而不是效益最大,因此需要將求最小的目標根據適應度函數非負原則轉換為求最大目標的形式。
C. 基本的遺傳演算法
在許多實際應用領域,無論是工程技術科學還是社會經濟科學中,都會遇到全局最優化問題[53,56~59,61],這一類問題大多數可以形式化為一個對(S,f)的尋優問題,其中 S⊂R n 是 R n 中的有界集,f∶S→R是 n 維實值函數。所要求解的問題就是要找到一點 x best∈S,使得 f(xbest)是 S 上的全局最優解,可以是極大值或極小值。以極小值為例,即求一點 x min∈S,滿足
含水層參數識別方法
盡管人們對這類問題進行了大量的研究,但得到的成績仍不能令人滿意,目前只能解決一些簡單的問題。對於更復雜的全局最優化問題,通常是利用數值解法,但許多數值解法都不能找到最優解,只是返回一個接近於全局最優的值。
全局最優化數值方法可以分為兩大類:確定性演算法和隨機演算法。在隨機演算法中,最優化步驟在一定程度上依賴於概率事件,它排除了確定性演算法中的一個最大障礙——預先詳細說明一個問題的全部特徵並針對問題的特徵決定演算法應採用的對策。與常規的優化演算法相比,遺傳演算法有可能在更大的范圍內探尋問題潛在的解。確定性演算法沒有用到概率信息。只有當對S上進行窮舉搜索及對f規定附加的假設條件下,演算法才能找到全局最優解。實行窮舉搜索在很多情況下(如實數解)是不可能的,因此多採用對f規定附加的假設條件,這必然影響到最終解的可靠性。在這些演算法中,搜索速度越快的演算法往往意味著需要對f做更多的假設,或者不能保證搜索成功。與此相對照,許多隨機演算法都可以證明在概率意義下漸近收斂到全局最優解,即這些演算法保證以概率1漸近收斂,而且隨機演算法的計算結果一般要優於那些確定性演算法的結果。遺傳演算法就是其中具有代表性的隨機演算法。
常用的遺傳演算法操作有選擇(Selection)、交叉(Crossover)、變異(Mutation)。復制是直接將個體的代碼進行拷貝形成新個體。下面就選擇、交叉與變異操作做一介紹。
7.3.1 選擇過程
選擇過程是以旋轉賭輪Pop-Size次(種群規模,即群體中個體的總個數)為基礎,每次旋轉都為新的種群選擇一個染色體。首先計算出個體i被選擇的概率Pi,優秀的染色體其選擇概率大,然後根據選擇概率的大小將一個圓盤分為Pop-Size個扇形,每個扇形的中心角的大小為2πPi。
每次進行選擇時,先選擇賭輪邊界旁一個不動的參考點,賭輪隨機地轉動,若不動點停留在扇形j內,則選擇個體j。個體的適應值越大,被選擇的概率越大,從而其染色體被遺傳到下一代的概率越大。
賭輪式選擇的特點是對於種群內的所有個體,無論其適應值大小,都有被選擇的機會。適應值大的個體被選擇的概率大,適應值小的個體被選擇的概率小。經過選擇後適應值大的個體在種群中的數目會增加。這正體現了適者生存的原則。
7.3.2 交叉操作
交叉操作是個有組織的、隨機的字元串間的信息交換過程。假設群體G(t)是模式庫。歷史信息以每個模式實例數目的形式存儲於G(t)中。交叉作用產生模式庫中已有模式的新的實例,同時也產生新的模式。簡單的交叉操作分為三步:
(1)從當前群體G(t)中選擇兩個個體結構:A=a1a2…an,B=b1b2…bn;
(2)以交叉概率 Pc 隨機選擇一個整數 x∈{1,2,…,n};
(3)交換A和B中位置x右邊的元素,產生兩個新的個體結構:a1a2…axbx+1…bn和b1b2…bxax+1…an。
7.3.3 變異操作
對於群體G(t)中的每個個體A=a1a2…an,簡單的變異操作過程如下:
1)每個位置的字元變數都有一個變異概率Pm,各位置互相獨立,通過隨機過程選擇發生變異的位置x1,x2,…,xn。
2)產生一個新個體結構 B=a1 a2……an ,其中是從對應位置x 1 的字元變數的值域中隨機選擇的一個取值。類似地,,…,可以同樣得到。
如果每個位置的變異概率等於Pm,那麼模式H(階為o(H))發生一次或多次變異的概率是
含水層參數識別方法
遺傳操作除了有選擇、交叉、變異等運算元外,還有染色體內部復制(Intrachromo-somal plication)、刪除、易位(Translocation)、分異(Segregation)等。
D. 遺傳演算法
遺傳演算法是從代表問題可能潛在解集的一個種群開始的,而一個種群則由經過基因編碼的一定數目的個體組成。每個個體實際上是染色體帶有特徵的實體。染色體作為遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因的組合,它決定了個體形狀的外部表現,如黑頭發的特徵是由染色體中控制這一特徵的某種基因組合決定的。因此,在一開始需要實現從表現型到基因型的映射即編碼工作。由於仿照基因編碼的工作很復雜,我們往往進行簡化,如二進制編碼。初始種群產生之後,按照適者生存和優勝劣汰的原理,逐代(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=(bi-αi)/N (5.4.1)
於是,所有允許的模型m將被限制在集
xi=αi+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的變化范圍加大。
對於高維地震模型的反演,由於參數太多,相應的模型字元串太長,目前用遺傳演算法作反演的計算成本還嫌太高。實際上,為了加快計算,不僅要改進反演技巧和傳代的控制技術,而且還要大幅度提高正演計算的速度,避免對遺傳演算法大量的計算花費在正演合成上。
E. 遺傳演算法的優缺點
優點:
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', ...)通過這個函數就能夠實現對部分遺傳演算法的參數的設置。
F. 遺傳演算法是不是種群規模選取越大,全局最優解越好!
種群規模是指任意一代中的個體總數,這個是人為設定的,種群規模越大越可能找到全局解,但運行時間也相對較長,一般在40-100之間取值,像我就習慣選60.
至於你所處理的問題,可以對比不同的種群規模下最優解和運行時間,然後折衷取。
G. 遺傳演算法中種群規模和個體個數的區別
種群規模就是個體總數,沒有區別。
H. 遺傳演算法迭代次數比較小比如10,是不是比較不會陷入局部
在優化問題本身是凸優化問題的情況下,局部最優等於全局最優。在非凸優化的情況下,理論上是無法保證找到全局最優解的,但是可以通過例如改變初始值等方法找到盡量接近全局最優解的局部最優解。
I. 神經網路,隱含層節點數越多,遺傳演算法適應函數越小!這是怎麼回事
1.為什麼神經網路還要用遺傳演算法啊?為什麼不是反向傳播?隱含層節點的數目理論上是超參數,針對不同問題,不同數目的隱含層效果都不一樣,一般還是得試錯法。
2.如果最後一定要用遺傳演算法,那隱含層節點就組成你用來進行各種交叉、變異操作的權重(基因)向量。那這個向量的長度取決於你的目標函數,目標函數中你挑選出來的帶權重的特徵(已知的輸入)的數目,就是權重向量的多少,這東西不能自己隨便變。
3.寫到這我突然明白了,你是找不到目標函數中的特徵,想用神經網路提高維特徵,然後再用遺傳演算法找這些特徵的權重嗎?既然特徵的多少(即隱含層節點的數目)你是未知的,那同1,和普通的神經網路一樣,對於不同的問題節點的數目是超參數,你只能通過實驗法確定了。既然你試出來節點很高時適應度函數低,那就減少節點數目吧。
節點多,按照我的理解,最後可能可以更精確,但在一開始並不容易找到最優解的方向(也許永遠找不到)。問題並不復雜就減少節點數目吧,節點太多也會過擬合。