matlab运行后没反映,matlab运行这个程序没有反应,也不报错,是什么原因?

clc;

clear;

%相关参数的设置

UB=600;%函数的上界

LB=300;%函数的下界

PopSize=40;%种群大小

Dim=10;%微粒的维数

c1=2;%学习因子

c2=2;%学习因子

w_start=0.9;%惯性权重的开始值

w_end=0.4;%惯性权重的结束值

Vmax=100;%微粒的最大速度

Maxiter=1500;%最大迭代次数

iter=0;%初始迭代次数

%Initialize Swarm and Velocity

X=rand(PopSize,Dim)*(UB-LB)+LB;%微粒位置随机初始化:

V=rand(PopSize,Dim);%微粒速度随机初始化:

% 测试函数:Griewank函数

ind=repmat(1:Dim,PopSize,1);

FX=sum(((X.^2)/4000)')'-prod(cos(X./sqrt(ind))')'+1;

%设定当前位置为粒子的最好位置,并记录其最好值

PBest=X;%当前粒子的最好位置

FPBest=FX;%当前粒子的最好值

%找到初始微粒群体的最好微粒

[Fgbest,r]=min(FX);

CF=Fgbest;%记录当前全局最优值

Best=X(r,:);%用于保存最优粒子的位置

FBest=Fgbest;

%循环

while(iter <=Maxiter)

iter=iter+1;

% 更新惯性权重的值

w_now=((w_start-w_end)*(Maxiter-iter)/Maxiter)+w_end;

A=repmat(X(r,:),PopSize,1);

%生成随机数

R1=rand(PopSize,Dim);

R2=rand(PopSize,Dim);

%速度更新

V=w_now*V+c1*R1.*(PBest-X)+c2*R2.*(A-X);

%对进化后速度小于最小速度的微粒进行处理

changeRows=V>Vmax;

V(find(changeRows))=Vmax;

%对进化后速度小于最小速度的微粒进行处理

changeRows=V

V(find(changeRows))=-Vmax;

%微粒位置进行更新

X=X+1.0*V;

%重新计算新位置的适应度值

ind=repmat(1:Dim,PopSize,1);

FX=sum(((X.^2)/4000)')'-prod(cos(X./sqrt(ind))')'+1;

%更新每个微粒的最好位置

P=FX

FPBest(P)=FX(find(P));%适应值更换

PBest(find(P),:)=X(find(P),:);%粒子位置更换

[Fgbest,g]=min(FPBest);%保存最好适应值

if Fgbest

[fBest,b]=min(FPBest);%最好适应值为fBest

Best=PBest(b,:);%最好适应值为Best

end

CF=Fgbest;% To be used to find Best 保留本次适应值准备与下一次比较

end  %循环结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值