% Cal_Obj_Problem3: 维数为 30;变量上下界:[-30 30];最优解:0
%---------------------------
objfun='Cal_Obj_Problem1'; %目标函数
D = 2; %目标函数维数
Lower=-5; Upper=5; %搜索空间的上下界
Max_iter=3000; % 迭代次数
Runtime=30;%独立运行次数
%% -------------------------------------------------------
for i = 1:Runtime
g(i) = GA_Algorithm(popsize,D,pc,pm,i,objfun,Lower,Upper,Max_iter);
end
mean_g = mean(g) % 计算平均值
[min_g,k1] = min(g) % 计算最好目标函数值
[max_g,k2] = max(g) % 计算最差目标函数值
std_g = std(g) % 计算标准方差
%%-------------------------------------------------------
2 主函数 GA_Algorithm.m
%% 遗传算法求解无约束优化问题(实数编码)
function gy = GA_Algorithm(popsize,D,pc,pm,ii,objfun,Lower,Upper,Max_iter)
pop=Lower+(Upper-Lower).*rand(popsize,D); %种群初始化
%迭代开始
for t = 1:Max_iter
objvalue = feval(objfun,pop); %计算所有个体目标函数值
fit_val = Cal_fitness(objvalue); %计算所有个体的适应度值
[best_one,~] = best(pop,fit_val); %计算最佳个体
x(t,:) = best_one; %保留最佳个体
y(t)=feval(objfun,x(t,:)); %计算最佳个体的值
newpop1 = Select(pop,fit_val); %选择操作
newpop2 = Cross(newpop1,pc); %交叉操作
newpop3 = Mutate(newpop2,pm,Lower,Upper); %变异操作
objvalue1 = feval(objfun,newpop3(1,:)); %计算新个体的目标值
if objvalue1 > y(t)
newpop3(1,:) = best_one; %保留最佳个体
end
pop = newpop3; %产生新种群
t = t+1;
end
[gy,k]=min(y) ; %gy:全局最优;k:全局最优对应的进化代数
%% ---结果输出----
ii
fprintf('每代最优函数值: gy = %0.5f\n',gy);
fprintf('每代最优值对应的最优解:');
x = x(k,:)