找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

谁能帮忙修改一下基于模拟退火的粒子群算法

function [lbk]xm,fv[rbk]=PSO_immu(fitness,N,c1,c2,lamda,M,D)% 功能:用基于模拟退火的粒子群优化算法求解无约束优化问题% 待优化的目标函数:fitness% 粒子数目:N% 学习因子1:c1% 学习因子2:c2% 退火常数:lamda% 最大迭代次数:M% 自变量的个数:D% 目标函数取最小值时的自变量值:xm% 目标函数的最小值:fvformat long;pg_plus=zeros(N,M);v=zeros(N,M);y=zeros(N,M);x=zeros(N,M);for i=1:N  for j=1:D    x(i,j)=randn; %随机初始化位置    v(i,j)=randn; %随机初始化速度  endendfor i=1:N  p(i)=fitness(x(i,:));  y(i,:)=x(i,:);endpg=x(N,:);   %pg为全局最优for i=1:(N-1)  if fitness(x(i,:))<fitness(pg)    pg=x(i,:);  endendT=fitness(pg)/log(5);   %初始温度for t=1:M  groupFit=fitness(pg);  for i=1:N       %当前温度下各个Pi的适应值    Tfit(i)=exp(-(p(i)-groupFit)/T);  end  SumTfit=sum(Tfit);  Tfit=Tfit/SumTfit;  pBet=rand();  for i=1:N       %用轮盘赌策略确定全局最优的某个替代值    ComFit(i)=sum(Tfit(1:i));    if pBet<=ComFit(i)      pg_plus=x(i,:);      break;    end  end  C=c1+c2;  ksi=2/abs(2-C-sqrt(C^2-4*C));   %速度压缩因子  for i=1:N    v(i,:)=ksi*(v(i,:)+c1*randn*(y(i,:)-x(i,:))+c2*randn*(pg_plus-x(i,:)));    x(i,:)=x(i,:)+v(i,:);    if fitness(x(i,:))<p(i)      p(i)=fitness(x(i,:));      y(i,:)=x(i,:);    end    if p(i)<fitness(pg)      pg=y(i,:);    end  end  T=T*lamda;endxm=pg';fv=fitness(pg);
% [lbk]xm,fv[rbk]=SimuAPSO(@fitness,40,2.05,2.05,0.5,10000,5)
代码第26行“ v(i,:)=ksi*(v(i,:)+c1*randn*(y(i,:)-x(i,:))+c2*randn*(pg_plus-x(i,:)));    x(i,:)=x(i,:)+v(i,:);”无法通过编译,Matlab提示,无法执行赋值,因为左侧的大小为1×10000,右侧的大小为40×10000
有哪位大佬可以改一下?感谢大佬
回复

使用道具 举报

大神点评(1)

tgehqikrjyem 2024-5-20 15:05:03 显示全部楼层
先看置顶的帖子
回复 支持 反对

使用道具 举报

说点什么

您需要登录后才可以回帖 登录 | 立即注册
HOT • 推荐