麦克雷 Mavom.cn

标题: 谁能帮忙修改一下基于模拟退火的粒子群算法 [打印本页]

作者: RichardSr    时间: 2024-5-20 15:04
标题: 谁能帮忙修改一下基于模拟退火的粒子群算法
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
有哪位大佬可以改一下?感谢大佬
作者: tgehqikrjyem    时间: 2024-5-20 15:05
先看置顶的帖子




欢迎光临 麦克雷 Mavom.cn (https://mavom.cn/) Powered by Discuz! X3.5