%-----------------------------------------
% Approaching-based Extremal Optimization
% 没有最优解引导的随机单向变异
% name: M_AEO.m
% by zhuming Dec 2, 2008
%-----------------------------------------
function [fit_aver,SR,time_aver,best_fit,best_aver,generation_aver,fitness_best] = EO(er,Label_function);
clear fit_aver SR time_aver best_fit best_aver generation_aver fitness_best
% 不同的函数设置不同的参数区间
if Label_function == 2
min_v = -5.12;
max_v = 5.12;
range_mut = 0.05;
end
pop_size = 60; % 种群大小
indi_length = 2; % 个体长度,组元(基因)数
len_v_r = max_v - min_v; % 参数区间长度
generation_max = 1000; % 最大进化代数
fail_time = 0;
run_max = 10; % 运行次数
run_gen = zeros(1,run_max); % 每次运行的收敛代数
run_time = zeros(1,run_max); % 每次运行的时间
fit_run = zeros(run_max,generation_max); % 每次运行的时间
best_run = zeros(1,run_max);
bool_break = 0;
for r = 1:run_max
time = clock;
S = len_v_r*(rand(pop_size,indi_length)-0.5); % 初始化种群
S_best = zeros(1,indi_length); % 当前最优解
fit = zeros(1,pop_size); % 适应度函数值
fit_best = 0; % 最优适应度值
fitness = zeros(1,generation_max);
obj = zeros(1,pop_size);
for i = 1:pop_size % 计算个体的适应度函数值
x1 = S(i,1);
x2 = S(i,2);
obj(i) = fitness_value(x1,x2,Label_function);
fit(i) = obj(i);
end
indx_best = 0;
fit_best = 0;
for i = 1:pop_size
if fit_best < fit(i)
indx_best = i;
fit_best = fit(i);
end
end
S_best = S(indx_best,:); % 随机选择一个个体作为最优个体,此处选择第一个体
fitness(1) = fit_best;
best_run(r) = fit_best;
for g = 1:generation_max % 进化过程
S_temp = zeros(indi_length+2,indi_length); % 该个体可能的下一代个体
obj_temp = zeros(1,indi_length+2);
fit_temp = zeros(1,indi_length+2);
for i = 1:pop_size % 对每个个体进化操作
for j = 1:indi_length+2
S_temp(j,:) = S(i,:);
end
for j = 1:indi_length % 对个体的每个基因单独变异,并计算其适应度函数值
% Uniform Mutation
if rand > 0.5
temp = S_temp(j,j) + range_mut*rand*abs(max_v - S_temp(j,j));
while temp < min_v || temp > max_v
temp = S_temp(j,j) + range_mut*rand*abs(max_v - S_temp(j,j));
end
S_temp(j,j) = temp;
else
temp = S_temp(j,j) - range_mut*rand*abs(S_temp(j,j) - min_v);
while temp < min_v || temp > max_v
temp = S_temp(j,j) - range_mut*rand*abs(S_temp(j,j) - min_v);
end
S_temp(j,j) = temp;
end
end
for j = 1:indi_length+2
x1 = S_temp(j,1);
x2 = S_temp(j,2);
obj_temp(j) = fitness_value(x1,x2,Label_function);
fit_temp(j) = obj_temp(j);
end
% 对可能解的适应度值进行排序,找出最差组元并将其对应的解代替当前解
for j = 1:indi_length+2 % 取多个最差中的最优者
if fit(i) < fit_temp(j) % 将最差组元Xiw对应的个体Siw替换Si
fit(i) = fit_temp(j);
S(i,:) = S_temp(j,:);
end
end
if fit(i) > fit_best % 更新最优解
S_best = S(i,:);
fit_best = fit(i);
end
fitness(g) = fit_best;
best_run(r) = fit_best;
end
if (1-fit_best) < er
run_gen(r) = g;
bool_break = 1;
break;
end
end
if bool_break == 1
bool_break = 0;
else
run_gen(r) = g;
fail_time = fail_time + 1;
end
run_time(r) = etime(clock,time);
fit_run(r,:) = fitness(:);
end
% 结果输出
best_fit = max(best_run); % 最佳值
temp_A = fit_run; % 适应度为0者设为最大
for i = 1:run_max
for j = 1:generation_max
if temp_A(i,j) == 0
temp_A(i,j) = best_fit;
end
end
end
fit_aver = mean(temp_A,1); % 平均适应值
best_aver = mean(best_run); % 平均最优适应度值
time_aver = mean(run_time); % 平均运行时间
SR = run_max - fail_time; % 成功率
generation_aver = mean(run_gen); % 平均代数
best_indx = generation_max;
for i = 1:run_max
for j = 1:generation_max
if fit_run(i,j) == best_fit & best_indx > i
best_indx = i;
break;
end
end
end
fitness_best = fit_run(best_indx,:); % 最优值的适应度过程
for i = 1:generation_max
if fitness_best(i) == 0
fitness_best(i) = best_fit;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if Label_function == 2
for i = 1:run_max
best_run(i) = 1/best_run(i) - 1;
end
for i = 1:run_max
for j = 1:generation_max
temp_A(i,j) = 1/temp_A(i,j) - 1;
end
end
end
best_aver = mean(best_run); % 平均最优适应度值
best_fit = min(best_run); % 最佳值
fit_aver = mean(temp_A,1); % 平均适应值
fitness_best = temp_A(best_indx,:); % 最优值的适应度过程
实现了极值动力学寻优的特点_有效的解决了关于函数寻优_matlab
版权申诉
193 浏览量
2022-03-31
14:13:27
上传
评论
收藏 3KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/2588731bac124b388c4a87fce0b1493c_m0_53407570.jpg!1)
![avatar-vip](https://csdnimg.cn/release/downloadcmsfe/public/img/user-vip.1c89f3c5.png)
阿里matlab建模师
- 粉丝: 3379
- 资源: 2786
最新资源
- 使用ASP.NET Core和Entity Framework Core来构建一个基本的进销存系统.rar
- 深度学习经典数据集+FER2013面部表情识别+附带使用方法的python代码
- Python中,要实现连接多个相机并识别多个二维码.rar
- 使用FFT算法对一个信号进行分析.rar
- 171cms游戏应用下载系统源码.zip
- 基于jsp+servlet+mysql蛋糕甜品店购物网站源码+数据库(期末大作业).zip
- Java项目:在线蛋糕商城系统(java+jsp+mysql)源码+数据库+期末大作业.zip
- ZapyaClient10_7-1.apk
- 织梦cms站长导航网站源码.zip
- 基于SSM+MySQL的网络投票调查问卷系统源码+数据库(java期末大作业).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
评论0