威望0
积分7946
贡献0
在线时间763 小时
UID1
注册时间2021-4-14
最后登录2024-11-21
管理员
- UID
- 1
- 威望
- 0
- 积分
- 7946
- 贡献
- 0
- 注册时间
- 2021-4-14
- 最后登录
- 2024-11-21
- 在线时间
- 763 小时
|
[mw_shl_code=applescript,true]%根据文章《Differential Evolution Algorithm With Strategy Adaptation for Global Numerical Optimization》的算法
clc;clear;close all
%clear
maxGen=500;%最大迭代次数
Gen=1;%进化代数,或者当前迭代代数
Xmax=30;%搜索上界,可以根据需要改为向量形式
Xmin=-30;%搜索下界
Dim=20;%个体维数
NP=100;%population size,种群规模
F=0.5;%scaling factor 缩放因子
CR=0.3;%crossover rate 交叉概率
index=3;%测试方程索引,不同值对应不同的测试函数
mutationStrategy=3;%变异策略
crossStrategy=1;%交叉策略
%% 初始化
X=(Xmax-Xmin)*rand(NP,Dim)+Xmin; %X行代表个体i,列代表个体i的维度j
%% 迭代循环
for Gen=1:maxGen
for i=1:NP
fitnessX(i)=testFun(X(i,,index);%测试函数求值,fitnessX表示X的适应值
end
[fitnessbestX,indexbestX]=min(fitnessX);
bestX=X(indexbestX,;%bestX表示最优值对应的位置
% 变异
V=mutation(X,bestX,F,mutationStrategy);%调用变异函数
% 交叉
U=crossover(X,V,CR,crossStrategy);%调用交叉函数
% 选择
for i=1:NP
fitnessU(i)=testFun(U(i,,index);
if fitnessU(i)<=fitnessX(i)
X(i,=U(i,;
fitnessX(i)=fitnessU(i);
if fitnessU(i)<fitnessbestX
bestX=U(i,;
fitnessbestX=fitnessU(i);
end
end
end
% 最优值记录
fprintf('%d %f\n',Gen,fitnessbestX); %输出当代最优解
bestfitness(Gen)=fitnessbestX;
optValue=num2str(fitnessbestX);
Location=num2str(bestX);
disp(strcat('the optimal value','=',optValue));
disp(strcat('the best location','=',Location));
end
% 绘图
plot(bestfitness);
xlabel('Gen');
ylabel('bestfitness');
[/mw_shl_code] |
|