粒子群优化算法sim函数出错

本文讲述了在MATLAB 2020a中遇到的Simulink运行仿真后,如何从SimulationOutput类型数据转换为double的问题。通过修改DataImport/Export设置,取消SingleSimulationOutput选项,解决了无法直接转换的错误。
摘要由CSDN通过智能技术生成

错误语句:fSwarm(i,:) = feval(ObjFun,Swarm(i,:));*
出现的错误:从 Simulink.SimulationOutput 转换为 double 时出现以下错误: 无法从 Simulink.SimulationOutput转换为 double。
解决办法
一开始想从工作区导出数据,simulink中点击“运行”进行仿真,当仿真结束时在Workspace里会生产一个名字叫 out 的类。它的Value是1x1 SimulationOutput。但发现通过sim()函数仿真时,当仿真结束却不会产生上述的 out 类。
后来发现是数据导出设置有问题,通过在Simmulink中打开设置->Data Import/Export ->Single simmulation output->取消勾选,该错误就消失了,因为我使用MATLAB2020a,改项目是默认勾选的。
在这里插入图片描述

%%清空环境? clear all; clc; %%参数设置? w=0.6;%惯性因子? c1=2;%加速常数 c2=2;%加速常数? Dim=3;%维数 SwarmSize=50;%粒子群规模? ObjFun=@PIDcl;%待优化函数句柄? MaxIter=100;%最大迭代次数? MinFit=-Inf;%最小适应值 Vmax=1; Vmin=-1; Ub=[10 10 10]; Lb=[0 0 0]; %%粒子群初始化? Range=ones(SwarmSize,1)*(Ub-Lb); Swarm=rand(SwarmSize,Dim).*Range+ones(SwarmSize,1)*Lb;%初始化粒子群 VStep=rand(SwarmSize,Dim)*(Vmax-Vmin)+Vmin;%初始化速度 fSwarm=zeros(SwarmSize,1); for i=1:SwarmSize fSwarm(i,:)=feval(ObjFun,Swarm(i,:));%粒子群的适应值计算 end %%个体极值和群体极值 [bestfbestindex]=min(fSwarm); zbest=Swarm(bestindex,:);%全局最佳 gbest=Swarm;%个体最佳 fgbest=fSwarm;%个体最佳适应值 fzbest=bestf;%全局最佳适应值 %%迭代寻优 iter=0; y_fitness=zeros(1,MaxIter);%预先产生4个空矩阵? K_p=zeros(1,MaxIter); K_i=zeros(1,MaxIter); K_d=zeros(1,MaxIter); while ((iter<MaxIter)&&(fzbest>MinFit)) for j=1:SwarmSize %速度更新 VStep(j,:)=w*VStep(j,:)+c1*rand*(gbest(j,:)-Swarm(j,:))+c2*rand*(zbest-Swarm(j,:)); if VStep(j,:)>Vmax,VStep(j,:)=Vmax; end if VStep(j,:)<Vmin,VStep(j,:)=Vmin; end %位置更新? Swarm(j,:)=Swarm(j,:)+VStep(j,:); for k=1:Dim if Swarm(j,k)>Ub(k),Swarm(j,k)=Ub(k); end if Swarm(j,k)<Lb(k),Swarm(j,k)=Lb(k); end end %适应值 fSwarm(j,:)=feval(ObjFun,Swarm(j,:)); %个体最优更新? if fSwarm(j)<fgbest(j) gbest(j,:)=Swarm(j,:); fgbest(j)=fSwarm(j); end %群体最优更新? if fSwarm(j)<fzbest zbest=Swarm(j,:); fzbest=fSwarm(j); end end
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值