⑴ 遺傳演算法工具箱的具體使用
matlab遺傳演算法工具箱函數及實例講解 核心函數:
(1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始種群的生成函數
【輸出參數】
pop--生成的初始種群
【輸入參數】
num--種群中的個體數目
bounds--代表變數的上下界的矩陣
eevalFN--適應度函數
eevalOps--傳遞給適應度函數的參數
options--選擇編碼形式(浮點編碼或是二進制編碼)[precision F_or_B],如
precision--變數進行二進制編碼時指定的精度
F_or_B--為1時選擇浮點編碼,否則為二進制編碼,由precision指定精度)
(2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,...
termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遺傳演算法函數
【輸出參數】
x--求得的最優解
endPop--最終得到的種群
bPop--最優種群的一個搜索軌跡
【輸入參數】
bounds--代表變數上下界的矩陣
evalFN--適應度函數
evalOps--傳遞給適應度函數的參數
startPop-初始種群
opts[epsilon prob_ops display]--opts(1:2)等同於initializega的options參數,第三個參數控制是否輸出,一般為0。如[1e-6 1 0]
termFN--終止函數的名稱,如['maxGenTerm']
termOps--傳遞個終止函數的參數,如[100]
selectFN--選擇函數的名稱,如['normGeomSelect']
selectOps--傳遞個選擇函數的參數,如[0.08]
xOverFNs--交叉函數名稱表,以空格分開,如['arithXover heuristicXover simpleXover']
xOverOps--傳遞給交叉函數的參數表,如[2 0;2 3;2 0]
mutFNs--變異函數表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation']
mutOps--傳遞給交叉函數的參數表,如[4 0 0;6 100 3;4 100 3;4 0 0]
【問題】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9
【分析】選擇二進制編碼,種群中的個體數目為10,二進制編碼長度為20,交叉概率為0.95,變異概率為0.08
【程序清單】
%編寫目標函數
function[sol,eval]=fitness(sol,options)
x=sol(1);
eval=x+10*sin(5*x)+7*cos(4*x);
%把上述函數存儲為fitness.m文件並放在工作目錄下
initPop=initializega(10,[0 9],'fitness');%生成初始種群,大小為10
[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,'normGeomSelect',...
[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %25次遺傳迭代
運算借過為:x =
7.8562 24.8553(當x為7.8562時,f(x)取最大值24.8553)
註:遺傳演算法一般用來取得近似最優解,而不是最優解。
遺傳演算法實例2
【問題】在-5<=Xi<=5,i=1,2區間內,求解
f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。
【分析】種群大小10,最大代數1000,變異率0.1,交叉率0.3
【程序清單】
%源函數的matlab代碼
function [eval]=f(sol)
numv=size(sol,2);
x=sol(1:numv);
eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;
%適應度函數的matlab代碼
function [sol,eval]=fitness(sol,options)
numv=size(sol,2)-1;
x=sol(1:numv);
eval=f(x);
eval=-eval;
%遺傳演算法的matlab代碼
bounds=ones(2,1)*[-5 5];
[p,endPop,bestSols,trace]=ga(bounds,'fitness')
註:前兩個文件存儲為m文件並放在工作目錄下,運行結果為
p =
0.0000 -0.0000 0.0055
大家可以直接繪出f(x)的圖形來大概看看f(x)的最值是多少,也可是使用優化函數來驗證。matlab命令行執行命令:
fplot('x+10*sin(5*x)+7*cos(4*x)',[0,9])
⑵ 為什麼我應用matlab自帶的遺傳演算法工具箱求函數最小值,,每次運行結果都不一樣
一樣才怪!遺傳演算法是一種帶有隨機性的搜索型的求解全局最優解的方法。隨機性就是在優化過程中變數的取值是隨機變化的,但是這種變化是朝向全局最優的方向隨機變化。但是當種群數量足夠大,而且進化代數足夠多的時候,最優解是具有穩定性的,雖然每次都不一樣,但是最優解的變化一般不會很大。
myfun沒有給出,這個是ga函數求解的部分設置,通過改變populationsize和generations可以達到獲得穩定最優解的目的。變異概率和雜交概率也有一定的影響,在局部收斂的情況下可以增大變異概率等來避免局部最優。
⑶ 用VB 6.0做一個工具箱的步驟
遺傳演算法(Genetic Algorithm)是一類借鑒生物界的進化規律(適者生存,優勝劣汰遺傳機制)演化而來的隨機化搜索方法。它是由美國的J.Holland教授1975年首先提出,其主要特點是直接對結構對象進行操作,不存在求導和函數連續性的限定;具有內在的隱並行性和更好的全局尋優能力;採用概率化的尋優方法,能自動獲取和指導優化的搜索空間,自適應地調整搜索方向,不需要確定的規則。遺傳演算法的這些性質,已被人們廣泛地應用於組合優化、機器學習、信號處理、自適應控制和人工生命等領域。它是現代有關智能計算中的關鍵技術之一。
1.遺傳演算法與自然選擇
達爾文的自然選擇學說是一種被人們廣泛接受的生物進化學說。這種學說認為,生物要生存下去,就必須進行生存斗爭。生存斗爭包括種內斗爭、種間斗爭以及生物跟無機環境之間的斗爭三個方面。在生存斗爭中,具有有利變異的個體容易存活下來,並且有更多的機會將有利變異傳給後代;具有不利變異的個體就容易被淘汰,產生後代的機會也少的多。因此,凡是在生存斗爭中獲勝的個體都是對環境適應性比較強的。達爾文把這種在生存斗爭中適者生存,不適者淘汰的過程叫做自然選擇。它表明,遺傳和變異是決定生物進化的內在因素。自然界中的多種生物之所以能夠適應環境而得以生存進化,是和遺傳和變異生命現象分不開的。正是生物的這種遺傳特性,使生物界的物種能夠保持相對的穩定;而生物的變異特性,使生物個體產生新的性狀,以致於形成新的物種,推動了生物的進化和發展。
遺傳演算法是模擬達爾文的遺傳選擇和自然淘汰的生物進化過程的計算模型。它的思想源於生物遺傳學和適者生存的自然規律,是具有「生存+檢測」的迭代過程的搜索演算法。遺傳演算法以一種群體中的所有個體為對象,並利用隨機化技術指導對一個被編碼的參數空間進行高效搜索。其中,選擇、交叉和變異構成了遺傳演算法的遺傳操作;參數編碼、初始群體的設定、適應度函數的設計、遺傳操作設計、控制參數設定五個要素組成了遺傳演算法的核心內容。 作為一種新的全局優化搜索演算法,遺傳演算法以其簡單通用、魯棒性強、適於並行處理以及高效、實用等顯著特點,在各個領域得到了廣泛應用,取得了良好效果,並逐漸成為重要的智能演算法之一。
2.遺傳演算法的基本步驟
我們習慣上把Holland1975年提出的GA稱為傳統的GA。它的主要步驟如下:
編碼:GA在進行搜索之前先將解空間的解數據表示成遺傳空間的基因型串結構數據,這些串結構數據的不同組合便構成了不同的點。
初始群體的生成:隨機產生N個初始串結構數據,每個串結構數據稱為一個個體, N個個體構成了一個群體。GA以這N個串結構數據作為初始點開始迭代。
適應性值評估檢測:適應性函數表明個體或解的優劣性。不同的問題,適應性函數的定義方式也不同。
選擇:選擇的目的是為了從當前群體中選出優良的個體,使它們有機會作為父代為下一代繁殖子孫。遺傳演算法通過選擇過程體現這一思想,進行選擇的原則是適應性強的個體為下一代貢獻一個或多個後代的概率大。選擇實現了達爾文的適者生存原則。
交換:交換操作是遺傳演算法中最主要的遺傳操作。通過交換操作可以得到新一代個體,新個體組合了其父輩個體的特性。交換體現了信息交換的思想。
變異:變異首先在群體中隨機選擇一個個體,對於選中的個體以一定的概率隨機地改變串結構數據中某個串的值。同生物界一樣,GA中變異發生的概率很低,通常取值在0.001~0.01之間。變異為新個體的產生提供了機會。
GA的計算過程為:
選擇編碼方式
產生初始群體
計算初始群體的適應性值
如果不滿足條件 {
選擇
交換
變異
計算新一代群體的適應性值
}
3.遺傳演算法的特點
遺傳演算法作為一種快捷、簡便、容錯性強的演算法,在各類結構對象的優化過程中顯示
出明顯的優勢。與傳統的搜索方法相比,遺傳演算法具有如下特點:
搜索過程不直接作用在變數上,而是在參數集進行了編碼的個體。此編碼操作,
使得遺傳演算法可直接對結構對象(集合、序列、矩陣、樹、圖、鏈和表)進行操作。
搜索過程是從一組解迭代到另一組解,採用同時處理群體中多個個體的方法,降
低了陷入局部最優解的可能性,並易於並行化。
採用概率的變遷規則來指導搜索方向,而不採用確定性搜索規則。
對搜索空間沒有任何特殊要求(如連通性、凸性等),只利用適應性信息,不需要
導數等其它輔助信息,適應范圍更廣。
4.遺傳演算法的研究歷史與現狀
遺傳演算法研究的興起是在80年代末和90年代初期,但它的歷史起源可追溯至60年代
初期。早期的研究大多以對自然系統的計算機模擬為主。如Fraser的模擬研究,他提出了和現在的遺傳演算法十分相似的概念和思想。Holland和DeJong的創造性研究成果改變了早期遺傳演算法研究的無目標性和理論指導的缺乏。其中,Holland於1975年出版的著名著作<<自然系統和人工系統的適配>>系統地闡述了遺傳演算法的基本理論和方法,並提出了對遺傳演算法的理論研究和發展極為重要的模式理論。這一理論首次確認了結構重組遺傳操作對於獲得隱並行性的重要性。
同年,DeJong的重要論文<<遺傳自適應系統到的行為分析>>將Holland的模式理論與他的計算實驗結合起來,並提出了諸如代溝等新的遺傳操作技術。可以認為,DeJong所作的研究工作是遺傳演算法發展過程中的一個里程碑。
進入80年代,遺傳演算法迎來了興盛發展時期,無論是理論研究還是應用研究都成了十分熱門的課題。尤其是遺傳演算法的應用領域也不斷擴大。目前遺傳演算法所涉及的主要領域有自動控制、規劃設計、組合優化、圖象處理、信號處理、人工生命等。可見,遺傳演算法的應用研究已從初期的組合優化求解拓展到了許多更新。更工程化的應用方面。
⑷ 如何在matlab中添加遺傳演算法工具箱
將遺傳演算法文件夾到matlab下的toolbox中,運行matlab,在file中更新工具箱
⑸ 怎樣將模擬退火演算法工具箱添加到matlab中
其實原理很簡單,就是一種概率性的搜索演算法,只是一個小程序回,所以可以自己編答寫,我目前就是用自己編寫的。目前我認為幾個關鍵點就是退火溫降一定要緩慢,也就是迭代次數盡量多,所以在溫度變化函數裡面的參數要設置可能。另外,同溫條件下可以多尋找一些新生個體。最後,發揮matlab的並行運算功能,也就是對退火演算法進行群體優化,這樣,相對於單一個體來講,具有更強大的全局搜索能力。你可以看下陳華根發表的《模擬退火演算法機理研究》,希望對你有所幫助。純屬個人經驗,不足之處歡迎指正
⑹ 請教遺傳演算法工具箱中設定搜索范圍
每次提問都沒人回復呢 不過還好 過幾天自己就解決了 查看原帖>>
⑺ 遺傳演算法工具箱的使用方法
去GOOGLE,BAIDU上去搜索、
⑻ matlab遺傳演算法工具箱在哪
直接在命令窗口裡邊輸入gatool就行了,用遺傳演算法還可以使用ga函數,具體使用格式可以在help系統里看ga,你還可以按照如下步驟打開遺傳演算法工具箱:1,打開MATLAB,2點擊左下方的START按鈕 3,點toolboxes,打開後選擇Genetic Algorithm and Direct Search 然後就可以進入gatool了,然後就會彈出ga工具箱(註:我的版本是7.7的,不同版本可能不同)
⑼ 怎麼調用matlab遺傳演算法工具箱啊
工具箱要安裝到指定的路徑,好久沒有用了,具體我也記不住了,你可以
網路搜索專
一下。屬路徑安裝不對就會出問題。如果安裝對了,你用help命令顯示一下函數.
函數的m文件不用運行,直接調用就可以。eval=-eval;
以後eval變為負的了,而ga函數要求參數必須是正的。
⑽ 求雷英傑《Matlab遺傳演算法工具箱及應用》電子書,清晰版的(付電子版源碼),萬分感謝
《MATLAB遺傳演算法工來具箱及應用》
作者:雷英自傑等編著 頁數:261 出版日期:2005
簡介:全書共分9章,系統介紹了MATLAB遺傳演算法和直接搜索工具箱的功能特點、編程原理及使用方法。包括遺傳演算法的基礎知識、MATLAB遺傳演算法工具箱及其使用方法等內容。