马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
哪位高手帮我看看,我自己编了一个粒子群算法解非线性方程组的,可是运行起来不好使,
c1=input('输入学习因子C1:2.8');
c2=input('输入学习因子C2:1.3');
w=input('输入惯性因子w:1');
N=input('初始化群体数目N(行数):');
D=input('搜索空间维数(自变量个数,列数)D:');
MaxCir=input('最大迭代次数MaxCir:');
Minx=input('输入变量下限:');
Maxx=input('输入变量上限:');
jzss=input('输入接种新粒子中元素占Pg元素个数大于1小于D:');
eps=10^(-6); %精度
for i=1:N
for j=1:D
x(i,j)=Minx+rand()*(Maxx-Minx); %位置初始化
v(i,j)=rand; %速度初始化
end
end
%-----------------------------------------------------
%计算适应度,并初始化Pi(个体最优),Pg(群体最优)---------
for i=1:N
P(i,:)=x(i,:);
y(i,:)=x(i,:); %y()为最优个体群
end
Pg=x(1,:);
for i=2:N
if fitness(x(i,:),D)<fitness(Pg,D)
Pg=x(i,:); %Pg为群体最优
end
end
%------------------------------------------------------
%进入主循环,按PSO迭代公式迭代,直至超出循环次数或满足精度-
for t=1:MaxCir
for i=1:N
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(Pg-x(i,:)); %速度更新
x(i,:)=x(i,:)+v(i,:); %位置更新
for j=1:D
if x(i,j)<Minx || x(i,j)>Maxx
x(i,j)=Minx+rand()*(Maxx-Minx) %超出范围重新初始化
end
end
if fitness(x(i,:),D)<fitness(P(i,:),D)
P(i,:)=fitness(x(i,:),D); %个体选优
y(i,:)=x(i,:);
end
if P(i,:)<fitness(Pg,D) %群体选优
Pg=y(i,:);
end
end
Pg=inoculation(x,Pg,D,N,jzss);
x=immunity(x,D,N,Maxx,Minx);
Pbest(t)=fitness(Pg,D);
end
%-------------------------------------------------------
%显示最终结果--------------------------------------------
disp('函数最优解为:')
Pg
disp('最优极值为:')
fitness(Pg,D)
%-------------------------------------------------------
function G=fitne(a)
FA1=@(x)x.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
FA2=@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
f1=quad(FA1,-0.1,0.1)/quad(FA2,-0.1,0.1)-0.0003344;
FB1=@(x)x.^2.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
FB2=@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
f2=quad(FB1,-0.1,0.1)/quad(FB2,-0.1,0.1)-0.0011;
FC1=@(x)x.^3.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
FC2=@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
f3=quad(FC1,-0.1,0.1)/quad(FC2,-0.1,0.1)+0.0000144;
g=[f1,f2,f3];
%%%%%%%%%%%%%%%%%%%%%%%%%%~~~~~~~~~~~~~~~~~
function result=fitness(a,D)
options = optimset('Display','off');
[a,fval] = fsolve(@fitne(a),a,options);
a=a;
result=fval;
程序运行总是出现如下错误:
输入学习因子C1:2.8
输入学习因子C2:1.3
输入惯性因子w:1
初始化群体数目N(行数):40
搜索空间维数(自变量个数,列数)D:3
最大迭代次数MaxCir:200
输入变量下限:-1
输入变量上限:1
输入接种新粒子中元素占Pg元素个数大于1小于D:2
??? Error: File: D:\work\fitness.m Line: 4 Column: 25
Unbalanced or misused parentheses or brackets.
Error in ==> pso at 30
if fitness(x(i,:),D)<fitness(Pg,D)
|