資源簡介
差分進化算法在尋優的過程中,首先,從父代個體間選擇兩個個體進行向量做差生成差分矢量;其次,選擇另外一個個體與差分矢量求和生成實驗個體;然后,對父代個體與相應的實驗個體進行交叉操作,生成新的子代個體;最后在父代個體和子代個體之間進行選擇操作,將符合要求的個體保存到下一代群體中去。
代碼片段和文件信息
function?trace=DE(fGenmax_FESNPDenx_minx_maxi_info)
%輸入:
%f-目標函數
%Gen-迭代次數
%max_FES-目標函數最大訪問次數
%NP-種群規模
%x_min-自變量最小值
%x_max-自變量最大值
%初始化
t0=cputime;
G=1;%初始化代數
F=0.5;%縮放因子
CR=0.8;%交叉概率
FES=0;%目標函數的訪問次數
Gmin=zeros(1Gen);%各代最優值
Best_X=zeros(GenDen);%各代最優解
Value=zeros(1NP);%當前代下每個個體的最優值
X_0=x_min+(x_max-x_min)*rand(NPDen);%初始化NP個Den維向量
X_Mutation=zeros(NPDen);%變異后的向量
X_CrossOver=zeros(NPDen);%交叉后的向量
X_Selection=zeros(NPDen);%選擇后的向量
%找出初代最優值
for?i=1:NP
????Value(i)=f(X_0(i:)i_info);
end
[value_minpos_min]?=?min(Value);
FES=FES+NP;
while(FES<=max_FES)????
????%變異操作
????for?i=1:NP
????????%隨機產生三個不相同的向量
????????r=randperm(NP);
????????q=r(1);
????????k=r(2);
????????p=r(3);
????????if?q==i
????????????q=r(4);
????????else?if?k==i
????????????????k=r(4);
????????????else?if?p==i
????????????????????p=r(4);
????????????????end
????????????end
????????end
???????????
????????mutation=X_0(q:)+F*(X_0(k:)-X_0(p:));
????????for?j=1:Den
????????????%變異后不能超出邊界
????????????if?mutation(1j)>x_min?&?mutation(1j) ????????????????X_Mutation(ij)=mutation(1j);
????????????else
????????????????X_Mutation(ij)=x_min+(x_max-x_min)*rand(1);
????????????end
????????end
- 上一篇:Simuli
nk仿真_模糊PID控制 - 下一篇:FFT的C代碼
評論
共有 條評論