matlab粒子群算法代码
⑴ matlab 粒子群算法代码
目前混合整数规划是一个可研究的问题,这方面的论文也较多,有的是用四舍五入的方法取整,在matlab中用round函数可实现。也有用三角函数进行转化的,具体情况我不太清楚。另外你的问题有约束条件,在编程时需要加约束处理。
⑵ 求带约束条件的粒子群算法的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粒子群算法求解以下函数,求主程序
这关键是适应度函数的问题,你可以编写如下适应度函数: F=|E(X1y1+X2y2)-0|+|D(X1y1+X2y2)-1|,F值越小越好,||指的是绝对值。 而变量你就选取X1和X2里的每个元素。比如X1=[x1,x2,x3];X2=[x4,x5,x6];你就可以设置PSO的变量为x1到x6这六个值...
⑷ 我QQ是534193499,想向你请教matlab的粒子群算法
粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。 PSO同遗传算法类似,是一种基于迭代的优化算法。系统初始化为一组随机解,通过迭代搜寻最优值。但是它没有遗传算法用的交叉(crossover)以及变异(mutation),而是粒子在解空间追随最优的粒子进行搜索。同遗传算法比较,PSO的优势在于简单容易实现并且没有许多参数需要调整。目前已广泛应用于函数优化,神经网络训练,模糊系统控制以及其他遗传算法的应用领域。
⑸ 粒子群算法MATLAB代码,怎么运行不行,高手们给我修改一下,本人是菜鸟!谢谢!
混合整数规划是一个研究报告,在这方面也更加圆润,一些圆润,在MATLAB中采用了圆形功能可以实现的。也很有用三角函数变换,我不知道具体情况。另一个问题,的约束需要添加的规划,约束处理。
⑹ 急急急!!!求解粒子群算法matlab程序
%------------------------------------------------------------------
%------Initial Format--------------------------------------------------
clear all;
clc;
format long;
%------Given initial conditions----------------------------------------------
c1=1.4962; %learning factor1
c2=1.4962; %learning factor2
w=0.9872; %inertia weight
MaxDT=200; %Maximum number of iterations
D=2; %Search space dimensions (number of variables )
N=40; %Initialize the number of groups of indivials
eps=10^(-6); %Setting accuracy
%------Initialized indivials of population (can limit the position and velocity)------------
for i=1:N
for j=1:D
x(i,j)=randn; %position initialization using random
v(i,j)=randn; %velocity initialization using random
end
end
%------First calculate the fitness of each particle, and initialize Pi and Pg----------------------
for i=1:N
p(i)=fitness(x(i,:),D);
y(i,:)=x(i,:);
end
pg=x(1,:); %Pg is global extreme
for i=2:N
if fitness(x(i,:),D)<fitness(pg,D)
pg=x(i,:);
end
end
%------the main loop,iterate according to the formula followed , until meet the accuracy------------
for t=1:MaxDT
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,:);
if fitness(x(i,:),D)<p(i)
p(i)=fitness(x(i,:),D);
y(i,:)=x(i,:);
end
if p(i)<fitness(pg,D)
pg=y(i,:);
end
end
Pbest(t)=fitness(pg,D);
end
%------, the final results
disp('*************************************************************')
disp('Global best position:')
Solution=pg'
disp('Extreme optimization result:')
Result=fitness(pg,D)
disp('*************************************************************')
⑺ 求粒子群算法MATLAB完整代码
%% 清空环境
clear
clc
tic
%% 参数初始化
% 粒子群算法中的两个参数
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);
pop(j,k) = rand;
end
% 适应度值
fitness(j) = fun(pop(j,:));
end
% 个体最优更新
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
yy(i) = fitnesszbest;
end
toc
%% 结果分析
plot(yy);
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');
ylabel('适应度');
fun函数如下
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;
⑻ 求实现基于粒子群算法的函数极值寻优算法MATLAB程序
for i=1:sizepop
% 随机产生一个种群
pop(i,:)=2*rands(1,2); % 初始化粒子
V(i,:)=0.5*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;
%新粒子适应度值
fitness(j)=fun(pop(j,:));
end
% 个体极值和种群极值更新
for j=1:sizepop
% 个体极值更新
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数组中
result(i)=fitnesszbest;
end
% 画出每代最优个体适应度值
plot(result)
title('最优个体适应度值','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度值','fontsize',12);
⑼ 粒子群(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('适应度');
以上回答你满意么?
⑽ 粒子群算法用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); %随机初始化速度