function [bestX,Convergence_curve,result]=ssaforgru(P_train,T_train,P_test,T_test)
%% 参数设置
pop=5; % 种群数
M=10; % 最大迭代次数
dim=4;%一共有4个参数需要优化
lb=[1 1 1 0.001];%分别对两个lstm隐含层节点 训练次数与学习率寻优
ub=[100 100 50 0.01];%这个分别代表4个参数的上下界,比如第一个参数的范围就是1-100
P_percent = 0.2; %producers 在全部种群的占比
pNum = round( pop * P_percent ); % producers的数量
%初始化种群
for i = 1 : pop
for j=1:dim
if j==4%除了学习率 其他的都是整数
x( i, j ) = (ub(j)-lb(j))*rand+lb(j);
else
x( i, j ) = round((ub(j)-lb(j))*rand+lb(j));
end
end
fit( i )=fitness(x(i,:),P_train,T_train,P_test,T_test);
end
pFit = fit;
pX = x;
fMin=fit(1);
bestX = x( i, : );
for t = 1 : M
[ ~, sortIndex ] = sort( pFit );% Sort.从小到大
[fmax,B]=max( pFit );
worse= x(B,:);
r2=rand(1);
%%%%%%%%%%%%%5%%%%%%这一部位为发现者(探索者)的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%
if(r2<0.8)%预警值较小,说明没有捕食者出现
for i = 1 : pNum %r2小于0.8的发现者的改变(1-20) % Equation (3)
r1=rand(1);
x( sortIndex( i ), : ) = pX( sortIndex( i ), : )*exp(-(i)/(r1*M));%对自变量做一个随机变换
x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );%对超过边界的变量进行去除
fit( sortIndex( i ) )=fitness(x(sortIndex( i ),:),P_train,T_train,P_test,T_test);
end
else %预警值较大,说明有捕食者出现威胁到了种群的安全,需要去其它地方觅食
for i = 1 : pNum %r2大于0.8的发现者的改变
x( sortIndex( i ), : ) = pX( sortIndex( i ), : )+randn(1)*ones(1,dim);
x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );
fit( sortIndex( i ) )=fitness(x(sortIndex( i ),:),P_train,T_train,P_test,T_test);
end
end
[ ~, bestII ] = min( fit );
bestXX = x( bestII, : );
%%%%%%%%%%%%%5%%%%%%这一部位为加入者(追随者)的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%
for i = ( pNum + 1 ) : pop %剩下的个体的变换 % Equation (4)
% i
% sortIndex( i )
A=floor(rand(1,dim)*2)*2-1;
if( i>(pop/2))%这个代表这部分麻雀处于十分饥饿的状态(因为它们的能量很低,也是是适应度值很差),需要到其它地方觅食
x( sortIndex(i ), : )=randn(1,dim).*exp((worse-pX( sortIndex( i ), : ))/(i)^2);
else%这一部分追随者是围绕最好的发现者周围进行觅食,其间也有可能发生食物的争夺,使其自己变成生产者
x( sortIndex( i ), : )=bestXX+(abs(( pX( sortIndex( i ), : )-bestXX)))*(A'*(A*A')^(-1))*ones(1,dim);
end
x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );%判断边界是否超出
fit( sortIndex( i ) )=fitness(x(sortIndex( i ),:),P_train,T_train,P_test,T_test);
end
%%%%%%%%%%%%%5%%%%%%这一部位为意识到危险(注意这里只是意识到了危险,不代表出现了真正的捕食者)的麻雀的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%
c=randperm(numel(sortIndex));%%%%%%%%%这个的作用是在种群中随机产生其位置(也就是这部分的麻雀位置一开始是随机的,意识到危险了要进行位置移动,
%处于种群外围的麻雀向安全区域靠拢,处在种群中心的麻雀则随机行走以靠近别的麻雀)
b=sortIndex(c(1:3));
for j = 1 : length(b) % Equation (5)
if( pFit( sortIndex( b(j) ) )>(fMin) ) %处于种群外围的麻雀的位置改变
x( sortIndex( b(j) ), : )=bestX+(randn(1,dim)).*(abs(( pX( sortIndex( b(j) ), : ) -bestX)));
else
%处于种群中心的麻雀的位置改变
x( sortIndex( b(j) ), : ) =pX( sortIndex( b(j) ), : )+(2*rand(1)-1)*(abs(pX( sortIndex( b(j) ), : )-worse))/ ( pFit( sortIndex( b(j) ) )-fmax+1e-50);
end
x( sortIndex(b(j) ), : ) = Bounds( x( sortIndex(b(j) ), : ), lb, ub );
fit( sortIndex( b(j) ) )=fitness(x(sortIndex( b(j) ),:),P_train,T_train,P_test,T_test);
end
for i = 1 : pop
if ( fit( i ) < pFit( i ) )
pFit( i ) = fit( i );
pX( i, : ) = x( i, : );
end
if( pFit( i ) < fMin )
fMin= pFit( i );
bestX = pX( i, : );
end
end
t,fMin,bestX
Convergence_curve(t)=fMin;
result(t,:)=bestX;
end
前程算法屋
- 粉丝: 5914
- 资源: 835
最新资源
- 高频方波电压注入零低速IPMSM无感控制算法仿真模型(复现) 复现一篇硕士lunwen参数与结构都一样去复现 实现功能:在估计的d轴注入高频方波电压来估计转子位置,具有较高的稳态精度和动态性能 该仿
- 双馈风电机组四机两区域 三机九节点 惯量 转子动能控制 桨距角控制 减载控制调频 结合储能调频〔目前为直流电容〕也可加入电池化学储能 风机混合储能一次二次调频时域模型〔电容+电池调频,由于电容容量较
- 车辆纵向分层跟踪控制 carsim 与 simulink联合仿真实现车辆速度跟踪控制 上层:双PID 控制器 下层:逆驱动模型、逆制动模型,驱动制动切模型 上层包括位置 pid 与速度 pid 两个控
- 图书借阅管理系统源码python
- FOC矢量控制永磁同步电机全速域无位置传感器控制 1. 零低速域,采用无数字滤波器高频方波注入法, 2. 中高速域采用改进的滑膜观测器,采用的是sigmoid函数,pll锁相环 3. 转速切区域采用的
- 考虑不同充电需求的电动汽车有序充电调度方法matlab 复现A coordinated charging scheduling method for electric vehicles consid
- 该教程为永磁无刷直流电机控制外电路参数详细说明,举例子详细介绍了永磁无刷电机控制电路参数和计算方法 永磁无刷电机工作原理是两相导通三相六状态,且由方波驱动,在一个电周期范围内导通电角度
- 一、第一~第二堂课:python基础
- VSCode Cache Cleaner这是一个用于清理 VSCode 缓存文件的实用脚本 该脚本可以帮助你清理 VSCode 的各种缓存文件,释放磁盘空间,有时也可以解决一些 VSCode
- 四轮转向控制 包括: 驾驶员模型(采用单点预瞄)控制前轮转角 理想值计算:质心侧偏角,横摆角速度 后轮转向控制被设计:滑模控制 路径跟随,理想值跟随效果很好
- Oracle Sqldeveloper
- 目前主流跨端技术浅谈卷一
- 带隙基准电路 包含非常详细的的视频讲解(和本电路结构99%一样),以及0.18bcd工艺,电路文件,仿真测试文档 输入电压5V,基准电压1.2V(基础结构,无高阶温度补偿) 适合初学者学习使用,能实
- 机械设计自动PCM胶折弯整形机sw18非常好的设计图纸100%好用.zip
- anaconda配置pytorch环境
- 人工势场法道主动避撞加mpc模型预测控制,carsim和simulink联合仿真,有规划和控制轨迹对比图 跟踪误差良好,可以作为学习人工势场方法在自动驾驶汽车轨迹规划上的应用资料
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈