資源簡介
優化算法,MATLAB煙花算法源代碼,所有計算過程整合到一個m文件中,直接編輯適應度函數,即可實現求解計算
代碼片段和文件信息
%煙花算法進行函數優化
%fitness適應度函數,N煙花數,D變量維數,M變異火花數,Er爆炸半徑,En爆炸數目
%LBUB分別為變量上下界,T為迭代次數,ab為爆炸數目限制因子
clear;clc
N=100;???%?N煙花數
D=2;?????%?D變量維數
M=5;?????%?M變異火花數
En=6;????%?En爆炸數目
Er=5;????%?Er爆炸半徑
a=0.3;???%?ab為爆炸數目限制因子
b=0.6;
T=500;???%?T為迭代次數
%求最大值變量上下界
LB=[-5.12-5.12];
UB=[5.125.12];
%隨機在解空間初始化N個煙花位置
x?=?zeros(ND);
for?i=1:N
????x(i:)=LB+rand(1D).*(UB-LB);
end
%循環迭代
E_Spark=zeros(TDN);
Fit?=?zeros(1N);
F?=?zeros(1T);
for?t=1:T
????%計算每個煙花適應度值
????for?i=1:N
????????Fit(i)=fitness(x(i:));
????end
????[F(t)~]=min(Fit);
????Fmin=min(Fit);
????Fmax=max(Fit);
????%計算每個煙花的爆炸半徑E_R和爆炸數目E_N以及產生的爆炸火花
????E_R?=?zeros(1N);
????E_N?=?zeros(1N);
????for?i=1:N
????????E_R(i)=Er*((Fit(i)-Fmin+eps)/(sum(Fit)-N*Fmin+eps));??%爆炸半徑
????????E_N(i)=En*((Fmax-Fit(i)+eps)/(N*Fmax-sum(Fit)+eps));??%爆炸數目
????????if?E_N(i)????????????E_N(i)=round(a*En);
????????elseif?E_N(i)>b*En
????????????E_N(i)=round(b*En);
????????else
????????????E_N(i)=round(E_N(i));
????????end
????????%產生爆炸火花?E_Spark
????????for?j=2:(E_N(i)+1)??????????????%?第i個煙花共產生E_N(i)個火花
????????????E_Spark(1:i)=x(i:);??????%?將第i個煙花保存為第i個火花序列中的第一個,爆炸產生的火花從序列中的第二個開始存儲(即煙花為三維數組每一頁的第一行)
????????????h=E_R(i)*(-1+2*rand(1D));??%?位置偏移
????????????E_Spark(j:i)=x(i:)+h;????%?第i個煙花(三維數組的i頁)產生的第j(三維數組的j行)個火花
????????????for?k=1:D???%越界檢測
????????????????if?E_Spark(jki)>UB(k)||E_Spark(jki)
????????????????????E_Spark(jki)=LB(k)+rand*(UB(k)-LB(k));???%映射規則
????????????????end
????????????end
????????end
????end
????%產生高斯變異火花Mut_Spark隨機選擇M個煙花進行變異
????
- 上一篇:OFDM通信系統matlab實現
- 下一篇:光學4F系統仿真代碼
評論
共有 條評論