遺傳演算法matlab實現方法 多引數辨識

2021-10-16 11:53:47 字數 2387 閱讀 4875

matlab自帶遺傳演算法工具箱效能太差,因此採用外部工具箱來實現,具體安裝方法請參考其他答案。

%% matlab_gatbx_test.m

%遺傳演算法求f(x)=x*sin(10*pi*x)+2.0,在[-1,2]上的最大值

figure(1);

fplot(@(variable)variable.*sin(10*pi*variable)+2.0,[-1,2]); %畫出函式曲線

%定義遺傳演算法引數

nind=40; %個體數目(number of individuals)

maxgen=25; %最大遺傳代數(maximum number of generations)

preci=20; %變數的二進位制位數(precision of variables)

ggap=0.9; %代溝(generation gap)說明子代與父代的重複率為0.1

trace=zeros(maxgen,2); %尋優結果的初始值

fieldd=[20;-1;2;1;0;1;1]; %區域描述器(build field descriptor),第2、3行為自變數的下界和上界

chrom=crtbp(nind, preci); %定義初始種群 % 此時為2進製

gen=0; %代計數器

variable=bs2rv(chrom, fieldd); %計算初始種群的十進位制轉換 轉為10進製

objv=shang(variable); %計算目標函式值

while gen其中目標函式需要另存乙個m檔案

function z=shang(x) % 目標函式的核心部分(即預設了優化目標的純函式)

z=x(:,2).*sin(2*pi*x(:,1))+x(:,1).*cos(2*pi*x(:,2));

end

多引數辨識方法如下

%% matlab_gatbx_test.m

figure(1);

%畫出函式曲線

lbx1=-2;ubx1=2; %函式自變數x1範圍

lbx2=-2;ubx2=2;%函式自變數x2範圍

ezmesh('x2*sin(2*pi*x1)+x1*cos(2*pi*x2)',[lbx1,ubx1,lbx2,ubx2],50); %畫出函式曲線

hold on;

%定義遺傳演算法引數

nind=40; %個體數目(number of individuals)

maxgen=50; %最大遺傳代數(maximum number of generations)

preci=20; %變數的二進位制位數(precision of variables)

ggap=0.9; %代溝(generation gap)說明子代與父代的重複率為0.1

px=0.7; %交叉概率

pm=0.01; %變異概率

trace=zeros(maxgen,2); %尋優結果的初始值

fieldd=[20 20; %% 子串長度

lbx1 lbx2; %% 下界

ubx1 ubx2 ; %% 上界

1 1; %% 編碼方式 1 二進位制 0 格雷編碼

0 0; %% 0 算數刻度 1 對數刻度

1 1; %% 是否包含下邊界 0 不包含 1 包含

1 1]; %% 是否包含上邊界 0 不包含 1 包含

%區域描述器(build field descriptor),第2、3行為自變數的下界和上界

chrom=crtbp(nind, preci*2); %定義初始種群 % 此時為2進製

gen=0; %代計數器

variable=bs2rv(chrom, fieldd); %計算初始種群的十進位制轉換 轉為10進製

objv=shang(variable); %計算目標函式值

while gen如果要進行應用,需要將上述中所有 shang() 改為你自己的函式

遺傳演算法的matlab實現

遺傳演算法是一種全域性最優化演算法,是運用了演化論優勝劣汰原理的隨機化搜尋方法。前些日子,在進行畢業設計的相關研究中,我接觸到了遺傳演算法,用其對乙個五元非線性函式進行最優化搜尋。平台使用的是matlab,主要使用的是謝菲爾德大學的matlab遺傳演算法工具箱。具體程式如下 clc clear al...

遺傳演算法(GA)的matlab實現

一 task 二 實現過程 1.編碼與解碼 編碼 在編碼之前需要確定求解的精度,設定求解的精度為小數點後六位,即10 6。這樣可以將每個自變數x的解空間劃分為 1 0 10 6 1000000個等分。使n滿足 1 0 10 6 2 n 1,這裡n表示使上式成立的最小整數,即表示自變數x的基因串的長度...

遺傳演算法及matlab簡單實現

遺傳演算法的實現 遺傳演算法的一次迭代稱為一代,每一代都有一組解。新的一組解不但可以有選擇的保留一些適度值高的舊的解,而且可以包括一些由其它解結合得到的新解。最初的一組解 初始群體 是隨機生成的,之後的每組解由遺傳操作生成。每個解都通過乙個與目標函式相關的適應度函式給予評價,通過遺傳過程不斷重複,達...