导航:首页 > 源码编译 > matlab粒子群算法工具箱

matlab粒子群算法工具箱

发布时间:2022-12-13 08:15:06

‘壹’ matlab 粒子群优化问题

我这里有一个粒子群的完整范例:<群鸟觅食的优化问题>
function main()
clc;clear all;close all;
tic; %程序运行计时
E0=0.001; %允许误差
MaxNum=100; %粒子最大迭代次数
narvs=1; %目标函数的自变量个数
particlesize=30; %粒子群规模
c1=2; %每个粒子的个体学习因子,也称为加速常数
c2=2; %每个粒子的社会学习因子,也称为加速常数
w=0.6; %惯性因子
vmax=0.8; %粒子的最大飞翔速度
x=-5+10*rand(particlesize,narvs); %粒子所在的位置
v=2*rand(particlesize,narvs); %粒子的飞翔速度
%用inline定义适应度函数以便将子函数文件与主程序文件放在一起,
%目标函数是:y=1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2))
%inline命令定义适应度函数如下:
fitness=inline('1/(1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2)))','x');
%inline定义的适应度函数会使程序运行速度大大降低
for i=1:particlesize
for j=1:narvs
f(i)=fitness(x(i,j));
end
end
personalbest_x=x;
personalbest_faval=f;
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
k=1;
while k<=MaxNum
for i=1:particlesize
for j=1:narvs
f(i)=fitness(x(i,j));
end
if f(i)<personalbest_faval(i) %判断当前位置是否是历史上最佳位置
personalbest_faval(i)=f(i);
personalbest_x(i,:)=x(i,:);
end
end
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
for i=1:particlesize %更新粒子群里每个个体的最新位置
v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))...
+c2*rand*(globalbest_x-x(i,:));
for j=1:narvs %判断粒子的飞翔速度是否超过了最大飞翔速度
if v(i,j)>vmax;
v(i,j)=vmax;
elseif v(i,j)<-vmax;
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
if abs(globalbest_faval)<E0,break,end
k=k+1;
end
Value1=1/globalbest_faval-1; Value1=num2str(Value1);
% strcat指令可以实现字符的组合输出
disp(strcat('the maximum value','=',Value1));
%输出最大值所在的横坐标位置
Value2=globalbest_x; Value2=num2str(Value2);
disp(strcat('the corresponding coordinate','=',Value2));
x=-5:0.01:5;
y=2.1*(1-x+2*x.^2).*exp(-x.^2/2);
plot(x,y,'m-','linewidth',3);
hold on;
plot(globalbest_x,1/globalbest_faval-1,'kp','linewidth',4);
legend('目标函数','搜索到的最大值');xlabel('x');ylabel('y');grid on;toc;
请采纳答案,支持我一下。

‘贰’ 粒子群算法 matlab 工具箱 在哪调用 还是没有现成的需要自己下载

http://www.mathworks.com/matlabcentral/fileexchange/7506

这个基本上快算是官方的了。粒子群算法工具。注册以后就可以下载了。

‘叁’ 粒子群(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编程


这个比较简单,可以很容易的做出来
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中的粒子群算法求解多目标优化问题

不知道你所说的多目标是指什么,据我的理解,既然有个目标函数,那么多目标可以在目标函数那里表示,我最近也在做这个粒子群算法, 下面是我的vc++6.0代码,改造了一下基本粒子群,求路径的.. #include #include #include using namespace std; d

‘陆’ MATLAB中粒子群算法定义

你要自己写这个fun_PSOtrain_QNN的算法,神经网络工具箱里没有这个函数

‘柒’ 求粒子群算法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建模方法有哪些

建模覆盖的内容很广,可以分为两大块:优化和统计,因此建模方法也可以由这两大块划分。

一.优化:

  1. 智能算法: 遗传算法,粒子群算法,模拟退火算法,蚁群算法...

  2. 基础优化算法: 目标规划,整数规划...

  3. 排队论

二.统计:

  1. 分类/聚类算法: k-means...

  2. 预测: 时间序列算法,灰色预测算法,指数平滑算法,

  3. 评价: 模糊综合评价,信息熵评价,粗糙集,数据包络分析,层次分析,

  4. 智能算法:神经网络,svm...

  5. 回归/拟合:多元线性拟合,最小二乘法

  6. 数据处理:小波变换


阅读全文

与matlab粒子群算法工具箱相关的资料

热点内容
juniper命令行 浏览:68
程序员咨询销售工作怎么样 浏览:780
苹果文件服务器是什么 浏览:180
企业透明加密软件有监视功能吗 浏览:494
桌面的运行命令 浏览:9
主流厂商服务器维护流程是什么 浏览:807
压缩棉的被子先洗洗在用 浏览:242
批处理bat代码和文件夹 浏览:297
怎么交叉编译tslib14 浏览:494
致程序员生产力飙升 浏览:760
程序员害怕下班吗 浏览:107
铁路汉宜线加密网实景效果图 浏览:929
php工作难找 浏览:440
微信拼手气红包源码 浏览:380
javaexcel公式计算 浏览:629
mastercam二维编程 浏览:384
加密协议aes和tkip 浏览:707
数据结构与算法彭军 浏览:770
二类app是什么意思 浏览:499
可示教编程的plc 浏览:405