function [Best_pos, Best_score,curve] = SO(pop,Max_iter,lb,ub,dim,fobj)
%initial
vec_flag=[1,-1];
Threshold=0.25;
Thresold2= 0.6;
C1=0.5;
C2=.05;
C3=2;
% if(max(size(ub)) == 1)
% ub = ub.*ones(1,dim);
% lb = lb.*ones(1,dim);
% end
X=initialization(pop,dim,ub,lb)
%X=lb+rand(pop,dim)*(ub-lb);
for i=1:pop
fitness(i)=feval(fobj,X(i,:));
end
[GYbest, gbest] = min(fitness);
Best_pos = X(gbest,:);
%Diving the swarm into two equal groups males and females
Nm=round(pop/2);%eq.(2&3)
Nf=pop-Nm;
Xm=X(1:Nm,:);
Xf=X(Nm+1:pop,:);
fitness_m=fitness(1:Nm);
fitness_f=fitness(Nm+1:pop);
[fitnessBest_m, gbest1] = min(fitness_m);
Xbest_m = Xm(gbest1,:);
[fitnessBest_f, gbest2] = min(fitness_f);
Xbest_f = Xf(gbest2,:);
for t = 1:Max_iter
Temp=exp(-((t)/Max_iter)); %eq.(4)
Q=C1*exp(((t-Max_iter)/(Max_iter)));%eq.(5)
if Q>1 Q=1; end
% Exploration Phase (no Food)
if Q<Threshold
for i=1:Nm
for j=1:1:dim
rand_leader_index = floor(Nm*rand()+1);
X_randm = Xm(rand_leader_index, :);
flag_index = floor(2*rand()+1);
Flag=vec_flag(flag_index);
Am=exp(-fitness_m(rand_leader_index)/(fitness_m(i)+eps));%eq.(7)
Xnewm(i,:)=X_randm(j)+Flag*C2*Am*((ub-lb)*rand+lb);%eq.(6)
end
end
for i=1:Nf
for j=1:1:dim
rand_leader_index = floor(Nf*rand()+1);
X_randf = Xf(rand_leader_index, :);
flag_index = floor(2*rand()+1);
Flag=vec_flag(flag_index);
Af=exp(-fitness_f(rand_leader_index)/(fitness_f(i)+eps));%eq.(9)
Xnewf(i,:)=X_randf(j)+Flag*C2*Af*((ub-lb)*rand+lb);%eq.(8)
end
end
else %Exploitation Phase (Food Exists)
if Temp>Thresold2 %hot
for i=1:Nm
flag_index = floor(2*rand()+1);
Flag=vec_flag(flag_index);
for j=1:1:dim
Xnewm(i,:)=Best_pos(j)+C3*Flag*Temp*rand*(Best_pos(j)-Xm(i,j));%eq.(10)
end
end
for i=1:Nf
flag_index = floor(2*rand()+1);
Flag=vec_flag(flag_index);
for j=1:1:dim
Xnewf(i,:)=Best_pos(j)+Flag*C3*Temp*rand*(Best_pos(j)-Xf(i,j));%eq.(10)
end
end
else %cold
if rand>0.6 %fight
for i=1:Nm
for j=1:1:dim
FM=exp(-(fitnessBest_f)/(fitness_m(i)+eps));%eq.(13)
Xnewm(i,:)=Xm(i,j) +C3*FM*rand*(Q*Xbest_f(j)-Xm(i,j));%eq.(11)
end
end
for i=1:Nf
for j=1:1:dim
FF=exp(-(fitnessBest_m)/(fitness_f(i)+eps));%eq.(14)
Xnewf(i,:)=Xf(i,j)+C3*FF*rand*(Q*Xbest_m(j)-Xf(i,j));%eq.(12)
end
end
else%mating
for i=1:Nm
for j=1:1:dim
Mm=exp(-fitness_f(i)/(fitness_m(i)+eps));%eq.(17)
Xnewm(i,:)=Xm(i,j) +C3*rand*Mm*(Q*Xf(i,j)-Xm(i,j));%eq.(15
end
end
for i=1:Nf
for j=1:1:dim
Mf=exp(-fitness_m(i)/(fitness_f(i)+eps));%eq.(18)
Xnewf(i,:)=Xf(i,j) +C3*rand*Mf*(Q*Xm(i,j)-Xf(i,j));%eq.(16)
end
end
flag_index = floor(2*rand()+1);
egg=vec_flag(flag_index);
if egg==1;
[GYworst, gworst] = max(fitness_m);
Xnewm(gworst,:)=lb+rand*(ub-lb);%eq.(19)
[GYworst, gworst] = max(fitness_f);
Xnewf(gworst,:)=lb+rand*(ub-lb);%eq.(20)
end
end
end
end
for j=1:Nm
Flag4ub=Xnewm(j,:)>ub;
Flag4lb=Xnewm(j,:)<lb;
Xnewm(j,:)=(Xnewm(j,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
y = feval(fobj,Xnewm(j,:));
if y<fitness_m(j)
fitness_m(j)=y;
Xm(j,:)= Xnewm(j,:);
end
end
[Ybest1,gbest1] = min(fitness_m);
for j=1:Nf
Flag4ub=Xnewf(j,:)>ub;
Flag4lb=Xnewf(j,:)<lb;
Xnewf(j,:)=(Xnewf(j,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
y = feval(fobj,Xnewf(j,:));
if y<fitness_f(j)
fitness_f(j)=y;
Xf(j,:)= Xnewf(j,:);
end
end
[Ybest2,gbest2] = min(fitness_f);
if Ybest1<fitnessBest_m
Xbest_m = Xm(gbest1,:);
fitnessBest_m=Ybest1;
end
if Ybest2<fitnessBest_f
Xbest_f = Xf(gbest2,:);
fitnessBest_f=Ybest2;
end
if Ybest1<Ybest2
curve(t)=min(Ybest1);
else
curve(t)=min(Ybest2);
end
if fitnessBest_m<fitnessBest_f
GYbest=fitnessBest_m;
Best_pos=Xbest_m;
else
GYbest=fitnessBest_f;
Best_pos=Xbest_f;
end
end
Best_score = GYbest;
end
没有合适的资源?快使用搜索试试~ 我知道了~
Matlab实现SO-ELM蛇算法优化极限学习机多输入单输出回归预测(Matlab完整源码和数据)
共11个文件
m:7个
png:3个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 105 浏览量
2023-05-06
17:33:48
上传
评论
收藏 143KB ZIP 举报
温馨提示
Matlab实现SO-ELM蛇算法优化极限学习机多输入单输出回归预测(Matlab完整源码和数据) Matlab实现SO-ELM蛇算法优化极限学习机多输入单输出回归预测(Matlab完整源码和数据) 优化参数为权值和阈值 自带数据为excel数据,多输入,单输出,回归预测。 直接替换数据即可使用,保证程序可正常运行。 MATLAB代码
资源推荐
资源详情
资源评论
收起资源包目录
回归预测:SO-ELM.zip (11个子文件)
SO-ELMR3.png 18KB
SO-ELMR1.png 65KB
SO-ELM(R)
elmtrain.m 594B
initialization.m 487B
elmpredict.m 536B
main.m 3KB
数据集.xlsx 15KB
SO.m 5KB
Chung_Reynolds.m 1KB
fun.m 574B
SO-ELMR2.png 48KB
共 11 条
- 1
资源评论
机器学习之心
- 粉丝: 1w+
- 资源: 663
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功