麦克雷 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