粒子群算法matlab
❶ 粒子群算法用matlab做,要把粒子初始化为矩阵要怎么做
可以参考一下这段代码
%------给定初始化条件----------------------------------------------
c1=1.8; %学习因子1
c2=1.8; %学习因子2
WMax=1.6; %惯性权重
WMin=0.8; %惯性权重
MaxDT=100; %最大迭代次数
D=3; %搜索空间维数(未知数个数)
N=30; %初始化群体个体数目
XUp=20/(2^0.5); %初始化位移上限
XDown=-20/(2^0.5); %初始化位移下限
VUp=0.5; %初始化速度上限
VDown=0.0; %初始化速度下限
eps=10^(-6); %设置精度(在已知最小值时候用)
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
x=((XUp-XDown).*rand(N,2*D)+XDown); %随机初始化位置
v=((VUp-VDown).*rand(N,2*D)+VDown); %随机初始化速度
❷ MATLAB中粒子群算法定义
你要自己写这个fun_PSOtrain_QNN的算法,神经网络工具箱里没有这个函数
❸ matlab基本粒子群算法
这里,x(i,:)是粒子的位置,是个向量,而且fitness函数的自变量就是一个向量,计算后输出的是个体最优值!!
❹ 求带约束条件的粒子群算法的MATLAB编程
恩
这个比较简单,可以很容易的做出来
Matlab中提供了两种方法,数值和解析
1.数值解法使用filter函数
对于递推公式
a(1)*y(n)+a(2)*y(n-1)
+
...
+
a(na+1)*y(n-na)
=
b(1)*x(n)
+
b(2)*x(n-1)
+
...
+
b(nb+1)*x(n-nb)
我们可以变成如下
filter(b,a,x,zi)其中a和b就是上面的系数,x是需要计算的n,zi是初值
由于使用filter函数需要信号基础
我们这里不详细说明
2.解析解法就是Z变换
%首先我们要改变递推公式如下,否则没法的到正确结果
%y(n+1)=2y(n),y(0)=-2
L=ztrans(sym('y(n+1)'));%等式左边的Z变换
R=ztrans(sym('2*y(n)'));%等式右边的Z变换
S=L-R
%将初值y(0)带入,我们可以根据y(-1)推出y(0)=-2
%令Y=ztrans(y(n),n,z),y0=y(0),求解出S中的y(n)的Z变换结果
y0=-2;
s=subs(S,{'ztrans(y(n),n,z)','y(0)'},{'Y',y0});
%求解出y(n)的Z变换结果
Y=solve(s,'Y')
%对Y进行反Z变化
iztrans(Y)
S
=
z*ztrans(y(n),n,z)-y(0)*z-2*ztrans(y(n),n,z)
Y
=
-2*z/(z-2)
ans
=
-2*2^n
❺ matlab粒子群算法的初始化函数怎么写,适应度函数为另外一个m文件中建立的函数名为Adaptfunc(Q)的函数
初始化函数就是根据你的问题的维数,随机初始化多个0或者1就可以了,比如:
a = rand();
if(a>0.5) GA=1; else GA=0;
适应度函数要根据你自己的实际问题,抽象出一个数学模型得到要优化的表达式。
❻ matlab实现粒子群算法优化LQR法得不到最优解
PSO确实会存在得不到最优解的情况,因为严格意义上它不是全局最优的算法,而且在比较复杂的问题上,得不到最优解的情况很容易发现。
建议你增大种群大小,增加迭代次数。
❼ 粒子群算法MATLAB程序求助!
%% fitness(i)=fitness(pop(i,:)); %染色体的适应度
这个函数是需要你根据你的实际问题来编写的。
图像显示问题自行网络imshow函数。
❽ matlab用粒子群算法求解方程组最优解
这关键是
适应度函数
的问题,你可以编写如下适应度函数:
F=|E(X1y1+X2y2)-0|+|D(X1y1+X2y2)-1|,F值越
小越
好,||指的是绝对值。
而变量你就选取X1和X2里的每个元素。比如X1=[x1,x2,x3];X2=[x4,x5,
x6
];你就可以设置PSO的变量为x1到x6这六个值。
答毕,不懂追问。
❾ matlab用粒子群算法求解方程组最优解
这关键是适应度函数的问题,你可以编写如下适应度函数:
F=|E(X1y1+X2y2)-0|+|D(X1y1+X2y2)-1|,F值越小越好,||指的是绝对值。
而变量你就选取X1和X2里的每个元素。比如X1=[x1,x2,x3];X2=[x4,x5,x6];你就可以设置PSO的变量为x1到x6这六个值。
答毕,不懂追问。
❿ 粒子群(PSO)算法的matlab程序
%不知道你具体的问题是什么,下面是一个最基本的pso算法解决函数极值问题,如果是一些大型的问题,需要对速度、惯性常数、和自适应变异做进一步优化,希望对你有帮助
function y = fun(x)
y=-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289;
%下面是主程序
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=200; % 进化次数
sizepop=20; %种群规模
Vmax=1;%速度限制
Vmin=-1;
popmax=5;%种群限制
popmin=-5;
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=5*rands(1,2); %初始种群
V(i,:)=rands(1,2); %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:)); %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
for j=1:sizepop
%速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;
%种群更新
pop(j,:)=pop(j,:)+0.5*V(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;
%自适应变异(避免粒子群算法陷入局部最优)
if rand>0.8
k=ceil(2*rand);%ceil朝正无穷大方向取整
pop(j,k)=rand;
end
%适应度值
fitness(j)=fun(pop(j,:));
%个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
%群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
yy(i)=fitnesszbest;
end
%% 结果分析
plot(yy)
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
以上回答你满意么?